(1)完备性条件:指全局关系中所有数据均应映射到片段中。目的是保证所
有数据均在DB中存储,不会丢失数据。
(2)重构条件:由各个片段可以重建全局关系。目的是可以像无损联接那样
不丢失信息。
(3)不相交条件:数据片段相互之间不应该重叠(主键除外)。目的是为了防止数据冗余。
四.设计题答案
36.解:关系代数表达式:πS#,SNAME(σGNAME='冰箱'(SHOP?SALE?GOODS))
元组表达式:{ t | (?u) (?v) (?w) (SHOP (u)∧SALE (v)∧GOODS (w)
∧u[1]=v[1]∧v[2]=w[1]∧w[2]= '冰箱'∧t[1]=u[1]
∧t[2]=u[2])}
关系逻辑规则:W(u1,u2)?SHOP(u1,u2,u3,u4)∧SALE(u1,v2,v3)∧GOODS(v2, '冰箱',w3)
37.解:SELECT语句如下: SELECT A.S#,SNAME
FROM SHOP A,SALE B,GOODS C
WHERE A.S#=B.S# AND B.G#=C.G# AND GNAME='冰箱';
该查询语句的图示形式如下:
SHOP S# SNAME AREA MGR_NAME P._X P. SALE S# G# QUANTITY GOODS G# GNAME PRICE _X _Y _Y 冰箱 38.解:DELETE FROM SALE WHERE S# IN(SELECT S# FROM SHOP
WHERE SNAME='开开商店') AND G# IN(SELECT G#
FROM GOODS
WHERE PRICE>1000); 39.解:CREATE ASSERTION ASSE8 CHECK (100<=ALL(SELECT PRICE
FROM SHOP A,SALE B,GOODS C
WHERE A.S#=B.S# AND B.G#=C.G# AND AREA='EAST')); 或 CREATE ASSERTION ASSE8 CHECK (NOT EXISTS(SELECT *
FROM SHOP A,SALE B,GOODS C WHERE A.S#=B.S# AND B.G#=C.G#
6
AND AREA='EAST' AND PRICE<100));
40.解:SELECT C.G#,GNAME,SUM(QUANTITY)AS SUM_QUANTITY,
PRICE*SUM(QUANTITY)AS SUM_VALUE
FROM SHOP A,SALE B,GOODS C
WHERE A.S#=B.S# AND B.G#=C.G# AND AREA='EAST' GROUP BY C.G#,GNAME;
(注:SELECT子句中的属性C.G#,GNAME应在分组子句中出现)
五.综合题答案
41.解:(1)根据已知条件,可写出基本的FD有三个:
司机编号 → 车队编号
车队编号 → 车队主管
(司机编号,汽车牌照)→ 行驶公里
从上述三个FD,可知R的关键码为(司机编号,汽车牌照)。 (2)从上述三个FD,可推出下列FD成立:
(司机编号,汽车牌照)→(车队编号,车队主管)
这是一个局部FD。因此R不是2NF模式。
此时在R的关系中,每个司机只属于一个车队及主管人员,但要记载某司机驾驶过10辆汽车的行驶公里数,在R的关系中要出现10个元组。也就是这10个元组的司机相同,其车队编号和车队主管要重复出现10次,这就是数据冗余。
R应分解成 R1(司机编号,汽车牌照,行驶公里)
R2(司机编号,车队编号,车队主管)
这两个模式都是2NF模式。
(3)R1已是3NF模式,但R2不是3NF模式。 因为在R2中的基本FD有两个:
司机编号 → 车队编号, 车队编号 → 车队主管。
显然,存在传递依赖:司机编号 → 车队主管。
此时在R2的关系中,一个车队只有一个主管人员,但这个车队有20名司机,则在关系中就要有20个元组。这20个元组的车队编号相同,而车队主管要重复出现20次,这就是数据冗余。
R2应分解成 R21(司机编号,车队编号) R22(车队编号,车队主管)
这样,ρ={ R1,R21,R22 },其中每个模式均是3NF模式。 42.解:(1)ER图如图1所示。
7
仓库号 仓库名 地址 M 日期 库存 库存量 N 商品 N M 仓库 M 供应 月份 月供应量 图1 销售 P 商店 N (2)据转换规则,图2的ER图可转换成6个关系模式: 仓库(仓库号,仓库名,地址) 商品名 地址 商店号 商店名 单价 商品号 商品(商品号,商品名,单价) 商店(商店号,商店名,地址) 月份 月销售量 库存(仓库号,商品号,日期,库存量) 销售(商店号,商品号,月份,月销售量) 供应(仓库号,商店号,商品号,月份,月供应量) (3)图1的ER图的对象联系图如图2所示。其转换规则基本上与转换成关系模型的规则类似。三个实体类型转换成三个对象类型,两个M:N联系类型和一个M:N:P联系类型也转换成三个对象类型。因此对象联系图中共有六个对象类型,如图2所示。图中未标出基本数据类型属性,具体如下:
仓库(仓库号,仓库名,地址) 商品(商品号,商品名,单价) 商店(商店号,商店名,地址) 库存(日期,库存量) 销售(月份,月销售量) 供应(月份,月供应量)
仓库
库存
供应
商品 销售 商店
图2
(4)图1的ER图的UML类图如图3所示。三个实体类型转换成三个类,三个联
8
系类型转换成三个关联类,如图3所示。
仓库 仓库号 * 仓库名
库存 地址 日期 * 库存量
* 商品 * 商品号 商品名 单价 * 销售 月份
月销售量 图3
供应 月份 月供应量 商店 * 商店号 商店名 * 地址 9