阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某单位公用车辆后勤服务部门数据库的部分关系模式如下: 驾驶员:EMP(Eno,Ename,Age,Sex,telephone),各属性分别表示驾驶员工号、姓名、年龄、

admin2017-09-14  27

问题 阅读下列说明,回答问题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)创建所有‘奥迪’品牌汽车的调度信息的视图AudiSCHEDULE,属性有Eno、Ename、Cno、Brand、StartTime和EndTime,请将下面SQL语句的空缺部分补充完整。
    CREATE ______(e)
    AS
    SELECT  EMP,Eno,Ename,CAR.Cno,Brand,StartTime,EndTime
    FROM  EMP,CAR,SCHEDULE
    WHERE ____(f);
    (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

选项

答案(1)(e)VIEW AudiSCHEDULE(Eno,Ename,Cno,Brand,StartTime,EndTime) (f)EMP.Eno=SCHEDULE.Eno AND CAR.Cno=SCHEDULE.Cno AND Brand=’奥迪’ (2)(g)TRIGGER (h)UPDATE (i)Bonus=Bonus+Bonus_value(nrow.StartTime,nrow.EndTime) (j)BONUS.Eno=nrow.Eno

解析 (1)创建视图需要通过CREATE VIEW语句来实现,由题目可知视图的属性有(Eno,Ename,Cno,Brand,StartTime,EndTime);通过公共属性列Eno和Cno对使用的三个基本表进行连接;由于只创建奥迪汽车的视图,所以还要在WHERE后加入Brand=’奥迪’的约束条件。从上分析可见,完整的SQL语句如下:
    CREATE VIEW AudiSCHEDULE(Eno,Ename,Cno,Brand,StartTime,EndTime)
    AS
    SELECT  EMP.Eno,Ename,CAR.Cno,Brand,StartTime,EndTime
    FROM  EMP,CAR,SCHEDULE
    WHERE EMP.Eno=SCHEDULE.Eno AND CAR.Cno=SCHEDULE.Cno AND Brand=’奥迪’;
    (2)创建触发器通过CREATE TRIGGER语句实现,要求考生掌握触发器的基本语法结构。按照问题要求,在SCHEDULE关系中更新调度信息时触发器应自动执行,故需要创建基于UPDATE类型的触发器;最后添加表连接条件。完整的触发器实现的方案如下:
    CREATE  TRIGGER Bonus_TRG AFTER UPDATE ON SCHEDULE
    REFERENCING new row AS nrow
    FOR EACH ROW
    BEGIN
    UPDATE BONUS
    SET Bonus=Bonus+Bonus value(nrow.StartTime,nrow.EndTime)
    WHERE BONUS.Eno=nrow. Eno AND Year=Get_Year(nrow.StartTime)
    AND Month=Get_Month(nrow.StartTime);
    END
转载请注明原文地址:https://jikaoti.com/ti/MwN7FFFM
0

相关试题推荐
最新回复(0)