题库 题库

【简答题】

试题二(20分)
    阅读下列说明,回答问题1至问题5,将解答填入答题纸的对应栏内。
【说明】
    某工厂的仓库管理数据库的部分关系模式如下所示:
    仓库(仓库号,面积,负责人,电话)
    原材料(编号,名称,数量,储备量,仓库号)
    要求一种原材料只能存放在同一仓库中。“仓库”和“原材料”的关系实例分别如表2-1和表2-2所示。
 
【问题1】根据上述说明,用SQL定义“原材料”和“仓库”的关系模式如下,请在空缺处填入正确的内容。(4分)
    CREATE  TABLE  仓库( 仓库号  CHAR(4),
                            面积  INT,     
                            负责人  CHAR(8),
                            电话  CHAR(8),
                            (a)        ) ;    //主键定义
    CREATE  TABLE  原材料( 编号  CHAR(4)    (b)    ,  //主键定义
                            名称  CHAR(16),
                            数量  INT,
                            储备量  INT,
                            仓库号    (c)  ,
                            (d)            ) ;    //外键定义
【问题2】将下面的SQL语句补充完整,完成“查询存放原材料数量最多的仓库号” 的功能。(3分)
    SELECT  仓库号
    FROM  (e)
    (f)          ;
【问题3】将下面的SQL语句补充完整,完成“01号仓库所存储的原材料信息只能由管理员李劲松来维护,而采购员李强能够查询所有原材料的库存信息”的功能。(5分)
    CREATE  VIEW  raws_in_wh01  AS
          SELECT  (g)
          FROM  原材料
          WHERE  仓库号 = “01” ;
    GRANT  (h)  ON  (i)  TO 李劲松;
    GRANT  (j)  ON  (k)  TO 李强;
【问题4】仓库管理数据库的订购计划关系模式为:订购计划(原材料编号,订购数量)。采用下面的触发器程序可以实现“当仓库中的任一原材料的数量小于其储备量时,向订购计划表中插入该原材料的订购记录,其订购数量为储备量的三倍”的功能。请将该程序的空缺部分补充完整。(3分)
    CREATE TRIGGER ins_order_trigger AFTER  (l)  ON 原材料
          REFERENCING NEW ROW AS nrow
          FOR EACH ROW
          WHEN nrow.数量< nrow.储备量
          INSERT INTO 订购计划 VALUES
          (  (m)  ,  (n)  );
【问题5】 如果一种原材料可以在多个仓库中存放,则问题4中的触发器程序存在什么问题,如何修改?(5分)

参考答案

[问题1]
    (a) PRIMARY KEY 仓库号
    (b) PRIMARY KEY 或 NOT NULL UNIQUE
    (c) CHAR(4)
    (d) FOREIGN KEY 仓库号 PEFERENCES 仓库(仓库号)
[问题2]
    (e) 原材料
    (f) GROUP BY 仓库号
    HAVING SUM(数量)>=ANY(SELECT SUM(数量)
                          FROM 原材料
                          GROUP BY 仓库号)
[问题3]
  (g) *或编号,名称,数量,储备量,仓库号
  (h) INSERT,DELETE,UPDATE
  (i) raws_in_wh01
  (j) SELECT
  (k) 原材料
[问题4]
    (l) UPDATE,INSERT
    (m) nrow.编号
    (n) nrow.存储量*3
[问题5]
    存在问题:触发器程序判定某一原材料"数量"是否小于其存储量时,是按照当前记录的"数量"来判定的,当一种原材料存储在多个仓库时,这样判定是错误的,应根据该原材料在各仓库的存储总量来判定。
    应将触发器程序的WHEN子句条件修改为:
    WHEN nrow.储备量>(SELECT SUM(数量)
            FROM 原材料
            WHERE 编号 =(SELECT 编号
                            FROM nrow)
            GROUP BY 编号)

相关试题