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