现要为学校建立一个数据库,学校院系机构设置如下:一个系有若干个专业,每个专业一年只招一个班,每个班有若干个学生.
要求建立一个关于系,学生,班级的数据库,关系模式为:
学生STUDENT(学号,姓名,年龄,班号)
班CLASS(班号,专业名,系名,入学年份)
系DEPARTMENT(系号,系名)
请用SQL语言完成以下功能:
1:使用查询分析器建表,要求声明:
(1):每个表的主外码.
(2):每个班级的人数不能超过20人.
(3):学生的年龄介于16到30岁之间.
(4):学生姓名不能为空.
(5)只有班里没有学生的时候,才能删除该班级.

解决方案 »

  1.   

    做题,你可以用sqlserver的企业管理起 建好表、关系、约束。
    然后执行生成脚本的语句就OK了
      

  2.   

    create table DEPARTMENT
    (
    系号 nvarchar(20),
    系名 nvarchar(20) primary key
    )
    gocreate table CLASS
    (
    班号 nvarchar(20) primary key,
    专业名 nvarchar(30),
    系名 nvarchar(30) references DEPARTMENT(系名),入学年份 int
    )
    gocreate table STUDENT
    (
    学号 nvarchar(20) primary key,
    姓名 nvarchar(10) not null,
    年龄 int check(年龄 between 16 and 30),
    班号 nvarchar(20) references CLASS(班号)
    )
    go
    create trigger tr_control_student on STUDENT
    for insert
    as
    if exists(
    select 1 from inserted t 
    where exists(
    select 1 from student
    where 班号=t.班号
    group by 班号
    having count(1)>20
    )
    )
    begin
    rollback 
    raiserror('该班号编制已达上限(20人),不允许超编!',16,1)
    end
    go
      

  3.   

    IF OBJECT_ID('DEPARTMENT') IS NOT NULL
    DROP TABLE DEPARTMENT
    GOCREATE TABLE DEPARTMENT
    (
    系号 NVARCHAR(20),
    系名 NVARCHAR(20) PRIMARY KEY
    )
    GOIF OBJECT_ID('CLASS') IS NOT NULL
    DROP TABLE CLASS
    GOCREATE TABLE CLASS
    (
    班号 NVARCHAR(20) PRIMARY KEY,
    专业名 NVARCHAR(30),
    系名 NVARCHAR(20) REFERENCES DEPARTMENT(系名),入学年份 INT
    )
    GOIF OBJECT_ID('STUDENT') IS NOT NULL
    DROP TABLE STUDENT
    GOCREATE TABLE STUDENT
    (
    学号 NVARCHAR(20) PRIMARY KEY,
    姓名 NVARCHAR(10) NOT NULL,
    年龄 INT CHECK(年龄 BETWEEN 16 AND 30),
    班号 NVARCHAR(20) REFERENCES CLASS(班号)
    )
    GOIF OBJECT_ID('TR_CONTROL_STUDENT') IS NOT NULL
    DROP TRIGGER TR_CONTROL_STUDENT
    GOCREATE TRIGGER TR_CONTROL_STUDENT ON STUDENT
    FOR INSERT
    AS
    IF EXISTS(
    SELECT 1 FROM INSERTED T 
    WHERE EXISTS(
    SELECT 1 FROM STUDENT
    WHERE 班号=T.班号
    GROUP BY 班号
    HAVING COUNT(1)>20
    )
    )
    BEGIN
    ROLLBACK 
    RAISERROR('该班号编制已达上限(20人),不允许超编!',16,1)
    END
    GO