模式分解教程的分解是3NF,并用BCNF分解。

来源:365bet进不去 发布日期:2019-10-05 11:27 浏览:
在模型发生故障之前简要介绍1NF,2NF,3NF和BCNF。
1NF是关系模型的最基本要求。换句话说,它可以满足不可分割的关系数据库。
在2NF中,每个关系方案必须依赖于主键代码。
3NF要求关系模式之间不存在传递和部分依赖关系。
在BCNF中,每个关系模式的左侧部分必须至少包含候选关键字。
将关系方案R分解为3NF的基本步骤是:
1)。
首先,我们获得关系模式R的最小函数依赖集。
2)。
如果获得的函数的最小依赖性集合是左侧的单个属性,则关系模式R的3NF的分解完成并结束。
3)。
消除传输冗余功能的依赖性
3)。
如果您发现F中未包含的属性,并形成关系模式并删除它们,则其余部分将标记为U.
(如例1)
4)。
在左侧对相同的属性进行分组。
当每个组的并集由U连接时,3NF的分解完成。
例1
已知关系模式R具有U ={A,B,C,D,E},F ={A≤B}。
关系方案R被分解为3NF并且维持函数依赖性。
由于关系模型R的最小函数依赖集是Fm ={AB}而U没有{C,D,E},所以(CDE)以关系模式构造并被消除。
剩余的p ={R{A,B},{A≤B}}和关系模式R被分解为3NF(A≤B)。
以下示例是模型分解的完整示例。
将关系方案R划分为BCNF的基本步骤是
1)。
查找候选关键字并查看R的关系模式是否与BCNF匹配。
2)。
确保每个关系模式的左侧不包含任何候选关键字。如果R的关系模式S不符合BCNF,则X-A属于F +,X不是S的候选关键字。
由于XA不包含S的所有属性,因此S分别被分为{S1,S2}。这里,S1 = XA,S2 =(SA)X。替换为S.
例2
关系模式R,U ={A,B,C,D,E,F,G},F ={BG,CE-B,CA,CE-G,BD,CD},
(1)将关系模式分解为3NF并保持功能依赖性
(2)BCNF中关系模型的分解
将关系模式分解为3NF并保持相关函数。
假设B?G冗余,即(B)+ = BD,则没有G,因此没有冗余。
假设冗余CE?B,(CE)+ = CEGDA,没有B,则没有冗余。
假设C?冗余,即(C)+ = CD冗余,它不是多余的。
可以一次获得一组最小函数依赖性Fm ={B≤G,C≤E≤B,C≤A,B≤D,C≤D}。
接下来,将组合组合在相同的左侧((BDG),(CEB),(CAD)。
接下来,将关系模式划分为3NF并维持从属函数的结果是(BDG),(CEB),(CAD)。
用BCNF分解关系模式。
首先,获取关系模型的候选关键字。由于这里不了解的代码,百度如何获得关系模式?
L型:CE
LR类型:B
R型:ADG
因为CE是L形的,所以它需要是代码的一部分。
(CE)+ = ABCDEG
所以CE就是代码。
Fm ={B?G,C?E?B,C?A,B?D,C?D}。
开始在左侧查找不包含CE的关系模型。首先是B-G。
它分为R1 ={(BG),{BG}}和R2 ={(ABCDE),{CE-B,CA,BD,CD}}。
G不能出现在R2中,而是被与G关联的关系模型所取代。
找到R1和R2的最小功能依赖集,并且严格按照先前的算法执行步骤。
R1和R2的最小功能依赖性集合本身。
然后再次拆卸。R1符合BCNF并继续分解R2。
B?D,左边部分不包含代码,并且它被分解为R2 ={(BD),{B?D}},R3 ={(ABCE),{CE?B,C?A}}。
为R2和R3设置的最小功能依赖性本身。
因此,BCNF分解的最终结果是{(BG),(BD),(ABCE)}。