问答题
阅读以下说明,回答问题1-4。
[说明]
设学校教学数据库的模式如下:
S(SNUM,SNAME,AGE)
SC(SNUM,CNUM,CREDIT,SCORE)
C(CNUM,CNAME,TEACHER)
T(TNUM,TEHCHER,POS,SAL)
SNUM表示学生的学号,SNAME表示学生的姓名,AGE表示学生的年龄,CNUM表示选修课程的编号,CREDIT表示该课程的学分,SCORE表示课程的成绩,CNAME表示课程名,TEACHER表示任课的教师,TNUM表示老师的工作证号,POS表示教师的职称,SM,表示教师的收入。
试定义下列完整性约束和规则:
问答题
[问题1]
在关系S中插入的学生年龄值应在18~21岁之间。
【正确答案】
【答案解析】定义s时采用检查子句:
CREATTABLE S( SNUM CHAR(5),
SNAME char(10) NOT NULL,
AGE SMALLINT,
PRIMARY KEY(SNUM)
CHECK ;18 and AGE<=21)
问答题
[问题2]
在关系SC中插入的元组时,其SNUM和CNUM的值必须分别在S和C中出现过。
【正确答案】
【答案解析】采用外键子句约束: CREAT TABLE SC( SNUM CHAR(4), CNUM CHAR(5), CREDIT SMALLINT, SCORE SMALLINT, FOREIGN KEY (SNUM) REFERENCE S(SNUM) FOREIGN KEY (CNUM) REFERENCE C(CNUM) )
问答题
[问题3]
在关系C中把某个CNUM的值改为新的值的时候,必须同时要把关系SC中那些同样的CNUM的值也修改为新值。
【正确答案】
【答案解析】采用外键约束: CREATE TABLE SC( SNUM CHAR(4), CNUM CHAR(5), CREDIT SMALLINT, SCORE SMALLINT, FOREIGN KEY (CNUM) REFERENCE C(CNUM) ON UPDATE CASCADE, FOREIGN KEY(SNUM) REFERENCE S(SNUM))
问答题
[问题4]
为T定义完整性规则,“教授的工资不得低于2000元,如果低于2000元,自动改为2000元”。
【正确答案】
【答案解析】用数据库的触发器来实现: CREATE TRIGGER UPDATE SAL BEFORE INSERT OR UPDATE OF SAL,POS ON T FOR EACH ROW WHEN(:new.POS='教授') BEGIN IP:new.SAL<2000 THEN :new.SAL=2000; END IF; END [考点分析] 完整性约束。