数据库系统原理练习题3

① 已知F={B→C,C→A},

而πAB(F)=φ,πAC(F)={C→A} 显然,这个分解丢失了FD B→C

② 用测试过程可以知道,ρ相对于F是损失分解。

3.21 设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C,A→D,D→C},

ρ={AB,AC,BD}是R的一个分解。

① 相对于F,ρ是无损分解吗?为什么? ② 试求F在ρ的每个模式上的投影。 ③ ρ保持F吗?为什么? 答:

① 用测试过程可以知道,ρ相对于F是损失分解。

② πAB(F)={A→B},πAC(F)={A→C},πBD(F)=φ。

③ 显然,分解ρ不保持FD集F,丢失了B→C、A→D和D→C等三个FD。

3.22 设关系模式R(ABCD),F是R上成立的FD集。F={A→B,B→C,A→D,D→C},ρ={AB,AC,AD}是R的一个分解。 (1) 相对于F,ρ是无损分解吗? 为什么? (2) 试求F在ρ的每个模式上的投影。 (3) ρ保持依赖吗? 为什么? 解:

(1)

AB AC AD

A a1 a1 a1 B a2 b22 b32 C b13 a3 b33 D b14 b24 a4 AB BC CD A a1 a1 a1 B a2 a2 a2 C a3 a3 a3 D a4 a4 a4 (1) 构造表 (2)根据A→B,B→C,A→D,D→C进行处理 每一行都是a,ρ相对于F是无损联接分解。

(2) πAB(F)={A→B,及按自反律所推导出的一些平凡函数依赖} (3)

πAB(F)∪πAC(F)∪πAD(F)={A→B,A→C,A→D},没有满足B→C,D→C函数依赖,因此ρ相对于F的这个分解不保持函数依赖。

πAC(F)={A→C,及按自反律所推导出的一些平凡函数依赖} πAD(F)={A→D,及按自反律所推导出的一些平凡函数依赖}

3.23设关系模式R(ABCD),R上的FD集F={A→C,D→C,BD→A}, 试说明ρ={AB,ACD,BCD}相对于F是损失分解的理由。 解: 根据算法3.3

3.24设关系模式R=ABCD上的FD集为F,并且F={A→B,B→C,D→B},把R分解成BCNF模式集。

(1)R分解成?={ACD,BD},试求F在ACD和BD这两个模式上的投影。 (2)ACD和BD是BCNF吗?如果不是,试分解成BCNF。 解: (1) π

ACD(F)={A→C}

AB ACD BCD

没有一行都是a,所以,ρ相对于F是损失分解。

A a1 a1 B a2 b22 C b13 a3 D b14 a4 AB BC A a1 a1 B a2 b22 C a3 a3 D b14 a4 CD b31 a2 b31 a2 a3 a4 a3 a4 (1) 构造表 (2)根据A→C,D→C,BD→A进行处理

πBD(F)={D→B}

(2) 因为根据BCNF的定义,要求关系模式是第一范式,且每个属性都不传递依赖于R

的侯选键。 BCD中(A,D)为候选键,可是(A,D)→A, A→C,所以它不是BCNF模

式。

它可进一步分解为:{AC,DC},此时AC,DC均为BCNF模式。

BD是BCNF,因为R2(BD)是第一范式,且每个属性都不传递依赖于D(候选键),所

以它是BCNF模式。

3.25设关系模式R(ABCD),ρ={AB,BC,CD}是R的一个分解。F1={A→B,B→C};F2={B→C,C→D}。

(1)如果F1是R上的函数依赖集,此时ρ是否无损分解 ? 若不是,试举出反例。 (2)如果F2是R上的函数依赖集呢 ? 解: (1) 不是无损联接。可由算法4.2判断或由定理4.8判断。

AB BC CD A a1 b21 b31 B a2 a2 b32 C b13 a3 a3 D b14 b24 a4 AB BC CD A a1 b21 b31 B a2 a2 b32 C a3 a3 a3 D b14 b24 a4

根据算法4.2

(1) 构造表 (2)根据A→B,B→C进行处理 结果没有出现一行全a的情况,所以它不是无损联接。举例如下: 设模式R的一关系r为{(a1b1c1d1),(a2b2c1d2)} 则有:r1=π r2=π r3=π

AB(r)={(a1b1),(a2b2)}

BC(r)={(b1c1),(b2c1)} CD(r)={(c1d1),(c1d2)}

令a=r1r2r3={ (a1b1c1d1),(a1b1c1d2),(a2b2c1d1),(a2b2c1d2)} r≠a,所以ρ不是无损联接。

(2)如果F2是R上的函数依赖,则可以判断,ρ是无损联接。判断过程同上。

3.26 设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。

① 试说明R不是2NF模式的理由。 ② 试把R分解成2NF模式集。 答:

① 从已知FD集F,可知R的候选键是AB。

另外,AB→D是一个局部依赖,因此R不是2NF模式。 ② 此时R应分解成ρ={AD,ABC},ρ是2NF模式集。

3.27 设关系模式R(ABC),F是R上成立的FD集,F={C→B,B→A}。

① 试说明R不是3NF模式的理由。

② 试把R分解成3NF模式集。

答: ① 从已知FD集F,可知R的候选键是C。

从C→B和B→A,可知C→A是一个传递依赖,因此R不是3NF模式。

② 此时R应分解成ρ={CB,BA},ρ是3NF模式集。

3.28 设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商

店里每个职工的日营业额,以及职工所在的部门和经理信息。

如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。

试回答下列问题:

(1)根据上述规定,写出模式R的基本FD和关键码;

(2)说明R不是2NF的理由,并把R分解成2NF模式集; (3)进而分解成3NF模式集。 解:

(1)基本的FD有三个: (职工编号,日期)→ 日营业额

职工编号 → 部门名 部门名 → 部门经理

R的关键码为(职工编号,日期)。 (2)R中有两个这样的FD:

(职工编号,日期)→(部门名,部门经理) 职工编号 → (部门名,部门经理)

可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(职工编号,部门名,部门经理) R2(职工编号,日期,日营业额)

此处,R1和R2都是2NF模式。 (3)R2已是3NF模式。

在R1中,存在两个FD:职工编号 → 部门名

部门名 → 部门经理

因此,“职工编号 → 部门经理”是一个传递依赖,R1不是3NF模式。 R1应分解成R11(职工编号,部门名) R12(部门名,部门经理) 这样,ρ= {R11,R12,R2}是一个3NF模式集。

3.29 设有关系模式R(运动员编号,比赛项目,成绩,比赛类别,比赛主管),存储运动

员 比赛成绩及比赛类别、主管等信息。

如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。

试回答下列问题:

(1)根据上述规定,写出模式R的基本FD和关键码; (2)说明R不是2NF的理由,并把R分解成2NF模式集; (3)进而分解成3NF模式集。 解: (1)基本的FD有三个:

(运动员编号,比赛项目)→ 成绩 比赛项目 → 比赛类别 比赛类别 → 比赛主管

R的关键码为(运动员编号,比赛项目)。

(2)R中有两个这样的FD:

(运动员编号,比赛项目)→(比赛类别,比赛主管) 比赛项目 → (比赛类别,比赛主管) 可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(比赛项目,比赛类别,比赛主管) R2(运动员编号,比赛项目,成绩) 这里,R1和R2都是2NF模式。

(3)R2已是3NF模式。

在R1中,存在两个FD:比赛项目 → 比赛类别

比赛类别 → 比赛主管

因此,“比赛项目 → 比赛主管”是一个传递依赖,R1不是3NF模式。

R1应分解成R11(比赛项目,比赛类别)

R12(比赛类别,比赛主管)

这样,ρ= { R11,R12,R2 }是一个3NF模式集。

3.30 设关系模式R(ABCD),在R上有五个相应的FD集及分解:

(1)F={B→C,D→A },ρ={BC,AD} (2)F={AB→C,C→A,C→D},ρ={ACD,BC}

(3)F={A→BC,C→AD},ρ={ABC,AD} (4)F={A→B,B→C,C→D},ρ={AB,ACD} (5)F={A→B,B→C,C→D},ρ={AB,AD,CD} 试对上述五种情况分别回答下列问题: ① 确定R的关键码。 ② 是否无损分解?

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4