万常选版数据库系统原理与设计第9章课后习题答案.pdf
万常选版数据库系统原理与设计第9章课后习题答案--第1页
USEScoreDB
GO
--9.6在学生成绩管理数据库ScoreDB中完成。
--(1)在班级表Class中,分别使用列级和元组级约束保证班级人数classNum属性的取值在
(0,50)之间。
--为避免误删Class表的数据,另建两表演示,演示后删除
--列级约束
CREATETABLEClass1(
classNochar(6)PRIMARYKEY,/*班级编号*/
classNamevarchar(30)NOTNULL,/*班级名称*/
institutevarchar(30)NOTNULL,/*所属学院*/
gradesmallintNOTNULL/*年级*/
DEFAULT0,
classNumtinyintNULL/*班级人数*/
CHECK(classNumgt;=0ANDclassNumlt;=50)
)
--元组级约束
CREATETABLEClass2(
classNochar(6)PRIMARYKEY,/*班级编号*/
classNamevarchar(30)NOTNULL,/*班级名称*/
institutevarchar(30)NOTNULL,/*所属学院*/
gradesmallintNOTNULL/*年级*/
DEFAULT0,
classNumtinyintNULL,/*班级人数*/
CONSTRAINTCK_Class_classNumCHECK(classNumgt;=0ANDclassNumlt;=50)
)
--删除演示表
DROPTABLEClass1
DROPTABLEClass2
GO
--(2)在学生表Student中,限制籍贯为上海或北京的学生的年龄必须在17岁以上。
--需要使用触发器
CREATETRIGGERStudent_birthday
ONStudent
FORINSERT,UPDATE
AS
IFEXISTS(SELECT*FROMinsertedWHEREYEAR(GETDATE())-YEAR(birthday)lt;17)
ROLLBACK
GO
--(3)对于某门课程,保证如果没有选修其先修课程,则不能选修该课程。
万常选版数据库系统原理与设计第9章课后习题答案--第1页
万常选版数据库系统原理与设计第9章课后习题答案--第2页
CREATETRIGGERScore_courseNo
ONScore
FORINSERT
AS
IFNOTEXISTS(SELECT*FROMScoreWHEREcourseNo=(
SELECTcourseNoFROMCourseWHEREpriorCourse=(SELECTcourseNoFROMinserted)))
ROLLBACK
GO
--(4)如果在学生表中修改了学号,则自动修改成绩表中的学号。
CREATETRIGGERStudent_studentNo
ONStudent