ora*_*nge 3 normalization database-design
我目前正在为我的考试而学习,我遇到的麻烦是如何将具有给定函数依赖关系的关系 R 分解为 2NF 然后是 3NF。
例如对于以下 R 和函数依赖项:
R = {A, B, C, D, E, F, G, H, I, J}
Functional dependencies F = ( {A, B} -> {C}, {A} -> {D, E}, {B} -> {F}, {F}
-> {G, H}, {D} -> {I,J} }
我知道首先你必须找出闭包来找到 R 的键,我已经完成了,键是 {A,B},现在这就是我卡住的地方。除了 2NF 和 3NF 的定义之外,我的教科书没有给出任何关于如何解决这个问题的例子。
关于我如何做到这一点的示例将不胜感激。
2NF:删除部分依赖
R = {A, B, C, D, E, F, G, H, I, J}
包括部分依赖。
D 和 E 仅依赖于 A,F 仅依赖于 B、G、H、I 和 J 根本不依赖于密钥(直接)。
R0 = { A, B , C}
R1 = { A , D, E, I, J}
R2 = { B , F, G, H}
R0、R1 和 R2 不包含部分依赖(或重复组),因此它们是 2NF。然而 R1 和 R2 仍然是一个问题,因为它们包含传递依赖。
3NF:删除传递依赖
I 和 J 取决于 D,而不是 R1 的键。因此,您需要按如下方式进一步规范化 R1:
R1 = { A , D, E, I, J}R1a = { A , D, E}
R1b = { D , I, J}
同样,G 和 H 仅依赖于 F,因此 R2 必须分解如下:
R2 = { B , F, G, H}R2a = { B , F}
R2b = { F , G, H}
现在你剩下的所有关系(R0、R1a、R1b、R2a、R2b)都没有重复组、部分依赖和传递依赖。这意味着您的关系处于 3NF。
当您查看尚未规范化的关系和一系列依赖项时,您通常可以通过检查来规范化,只需识别您的主键将是什么。在功能上决定其他属性的任何属性或属性组合都将作为主键结束。一旦定义了主键,您只需要弄清楚每个键对应哪些非键属性。从你的函数依赖是什么的陈述中可以明显看出这一点。
归档时间: |
|
查看次数: |
24446 次 |
最近记录: |