问答题
阅读以下说明,回答问题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
[考点分析] 完整性约束。
提交答案
关闭