问答题 试题二(共15分) 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某单位公用车辆后勤服务部门数据库的部分关系模式如下: 驾驶员:EMP(Eno,Ename,Age,Sex,telephone),各属性分别表示驾驶员工号、姓名、年龄、性别和电话号码;。 车辆:CAR(Cno,Brand,Capacity),各属性分别表示汽车车牌号、品牌名和排量; 调度:SCHEDULE(Sno,Eno,Cno,StartTime,Endtime),各属性分别表示调度号、驾驶员工号、汽车车牌号、发车时间和收车时间。 奖金:BONUS(Eno,Year,Month,Amount),各属性分别表示驾驶员工号、年、月和当月的奖金数量。 有关车辆调度的相关说明如下: 公车的行驶时间只能在工作时间内,因此规定调度表中每天安排发车的时间在上午07:00:00至下午18:00:00范围内。
问答题 【问题1】(4分) 请将下面创建调度关系的SQL语句的空缺部分补充完整,要求指定关系的主码、外码,以及调度表中每天安排发车的时间在上午07:00:00至下午18:00:00范围内的约束(由函数 Time Get_time(DATETIME StartTime)返回出车的时间)。 CREATE TABLE SCHEDULE( Sno CHAR(10), Eno CHAR(10)(a), Cno CHAR(8)(b), StartTime DATETIME(c), EndTime DATETIME, PRIMARY KEY(d));
【正确答案】(a)REFERENCES Emp(Eno) (b)REFERENCES Car(Cno) (c)CHECK(Get_time(StartTime)>=”07:00:00” AND Get_time(StartTime)<=”18:00:00”) (d)(Sno)
【答案解析】
问答题 (2)驾驶员的奖金在收车时间写入时,由出车时间段自动计算,并用触发器来实现奖金的自动维护,函数float Bonus_value(DATETIME StartTime,DATETIME EndTime)依据发车时间和收车时间来计算本次出车的奖金。系统在每月初自动增加一条该员工的当月奖金记录,初始金额为零。请将下面SQL语句的空缺部分补充完整。 CREATE (g) Bonus_TRG AFTER (h) ON SCHEDULE REFERENCING new row AS nrow FOR EACH ROW BEGIN UPDATE BONUS SET(i) WHERE (j) AND Year=Get_Year(nrow.StartTime) AND Month=Get_Month(nrow.StartTime); END
【正确答案】(e)View AduiSCHEDULE (f)Emp.Eno=SCHEDULE.Eno AND SCHEDULE.Cno=Car.Cno AND Car.Brand=’奥迪’ (g)TRIGGER (h)UPDATE OF EndTime (i)Amount=Amount+Bonus_Value(nrow.StartTime,nrow.EndTime) (j)Eno=nrow.Eno
【答案解析】
问答题 【问题3】(5分) 请将下面SQL语句的空缺郜分补充完整。 (1)查询调度次数最多的汽车车牌号及其品牌。 SELECT CAR.Cno,Brand FROM CAR,SCHEDULE WHERE CAR.Cno=SCHEDULE.Cno GROUP BY(k) HAVING (l) (SELECT COUNT(*) FROM SCHEDULE CROUP BY Cno); (2)查询所有在调度表中没有安排过“大金龙”品牌车辆的驾驶员工员和姓名。 SELECT Eno,Ename FROM EMP WHERE Eno(m)( SELECT Eno FROM(n) WHERE(o) AND brand=‘大金龙');
【正确答案】(k)Car.Cno,Brand (l)COUNT(*)>=ALL (m)NOT IN (n)SCHEDULE,CAR (o)SCHEDULE.Cno=CAR.Cno
【答案解析】