考虑R(A,B,C,D,E,F,G)与以下类型属性的关系: -
密钥总数= 1 = {A}
一组简单(或)原子(或)单值属性= {B,C}
多值属性集= {D,E}
复合属性集= {F,G}
将关系R分解为1NF后,存在的最小表数是多少?
(A)3(B)2(C)4(D)5
我的尝试:
我们需要使用给定键(A),total = 2
的每个多值属性使用不同的表同样,我们需要为每个复合属性使用不同的表,total = 2。
总共有4个这样的属性。我给出了每个(4)表中给定键(A)的4个表。我被允许将原子属性(B,C)插入给定的4个表中的任何一个。所以,我得出结论,4个表足以代表第一范式的关系。
你能用正式的方式解释一下吗?
答案 0 :(得分:2)
对于您认为“复合”的每个属性(具有异构部分,如元组):
对于可能缺少的每个复合属性组件:添加与某个候选键的属性和该组件的属性的关系。对于具有该组件的原始关系的每一行在新关系中具有行,其新属性值是组件的值并且其候选键属性值是原始行的。然后放下组件。这为每个组件添加了一个可能缺失的关系。
对于每个剩余的组件:向原始关系添加属性,其中每行的值是组件的值。然后删除复合属性。这没有任何关系。
对于您认为“多值”的属性(具有同质部分,如关系):
对于可以具有零元素的类型的属性:添加具有某个候选键和该属性的属性的关系。对于原始关系的每一行,在新关系中都有一组行,其新属性值是多值属性的元素,其候选键属性值是原始行。然后删除多值属性。这为每个多值属性添加了一个关系。
对于始终具有元素的类型的属性:将原始关系的每一行替换为一组行,这些行的多值属性值是多值属性的元素,其他属性值是原始行的元素。这没有任何关系。
所以这里的最终关系是{A,B,C,F1,...,G1,...},{A,D}和{A,E},总共1(对于原创和复合材料) )+ 2(对于多值)。
(如果关系的所有候选键都包含多值属性,那么您必须为至少一个多值属性引入一个代理属性。)
当然,在实践中,您应该规范化新表,这可能会生成新表。但那就是改进设计。在这里,我们希望设计尽可能少添加表。
(没有“分解”关系到1NF的事情。原始的“规范化”意味着摆脱关系价值的属性。后来的规范化理论认为每个关系都在1NF。见this重新1NF和原子性。 我们可以用一个或多个具有部件属性的关系来替换我们认为具有同质部分(多值)或异质部分(复合)的属性的关系。我们可以将非关系设计转换为关系设计。但是这种非关系设计不会有候选/主键,因为这只是为关系定义的。)