Ø 基于消除关系模式中非主属性对候选码的函数依赖的原则,对1NF关系模式进行合理的投影(属性重组),结果将产生多个2NF关系模式。
Ø 基于消除关系模式中非主属性对候选码的传递函数依赖的原则,对2NF关系模式进行合理的投影,结果将产生多个3NF关系模式。
Ø 基于消除关系模式中主属性对候选码的传递函数依赖的原则,对3NF关系模式进行合理的投影,结果将产生多个BCNF关系模式。
2.6.2 关系模式的分解
• 连接无损分解
定义2.12 假设一个关系模式R(U)被分解成n个子关系模式:R1(U1),R2(U2),…, Rn(Un),其中U = R1(U1)∪R2(U2)∪…∪Rn(Un),并假设r, r1, r2,…, rn分别属于关系模式R(U)及n个子关系模式的关系(二维表),如果这n个子关系的自然连接与原关系r相等,即r = r1 ⋈ r2 ⋈ … ⋈ rn,那么这种分解称为(自然)连接无损分解,其中ri是r在Ui上的投影, i = 1,2,…n。
Ø 分解的基本思想之一是消除对候选码的部分函数依赖和传递函数依赖。我们可以先在待分解的关系模式中找出这些部分函数依赖和传递函数依赖以及完全函数依赖,然后“分解”部分函数依赖和传递函数依赖,使得这些函数依赖最终都变成完全函数依赖,最后将这些完全函数依赖所涉及的属性分别投影成新的关系即可。
【例2.14】对于例2.6中的关系模式SSC(学号, 姓名, 系别, 导师工号, 导师姓名, 导师职称, 课程名称, 课程成绩),请运用模式分解方法将其转化为若干个属于BC范式的关系模式。
Ø 关系模式SSC中唯一的候选码为{学号, 课程名称}。我们先找出对候选码的所有完全函数依赖、部分函数依赖和传递函数依赖:
• {学号, 课程名称} 课程成绩
• {学号, 课程名称} {姓名, 系别}
• {学号, 课程名称} 导师工号
• 导师工号 {导师姓名, 导师职称}
• {学号, 课程名称} {导师姓名, 导师职称}
u 以下找出部分函数依赖中的完全函数依赖:
由“{学号, 课程名称} {姓名, 系别}”得到“学号 {姓名, 系别}”
由“{学号, 课程名称} 导师工号 ”得到“学号 导师工号”
u 我们根据以上所有的完全函数依赖初步设定分解成的各关系模式(原则是“一个完全函数依即为一个关系模式”):
Ø T1(学号, 课程名称, 课程成绩)
Ø T2(导师工号, 导师姓名, 导师职称)
Ø T3(学号, 姓名, 系别)
Ø T4(学号, 导师工号)
u 为了减少数据冗余和减少数据维护的复杂性,可以将关系模式T4(学号, 导师工号)并到T3(学号, 姓名, 系别)中,从而形成新的关系模式——T3′(学号, 姓名, 系别, 导师工号)。这样,就得到如下的分解结果:
Ø T1(学号, 课程名称, 课程成绩)
Ø T2(导师工号, 导师姓名, 导师职称)
Ø T3′(学号, 姓名, 系别, 导师工号)
u 由定理2.3稍加分析可以知道,以上三个关系模式均属于BC范式,而且上述的分解是连接无损分解。
定理2.4 假设S和T为关系模式R分解后所得到的两个关系模式,则该分解为连接无损分解的充分必要条件是:(S∩T) → (S-T)或(S∩T) → (T-S)
2. 保持函数依赖的分解