将关系 R 分解为 1NF 后最少存在多少张表?

2024-04-24

考虑具有以下属性类型的关系 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)的每个多值属性,我们需要不同的表,总计 = 2

同样,我们需要为每个复合属性使用不同的表,总计 = 2。

这样的属性一共有4个。我给出了 4 个表,每个(4)个表中都有给定的键(A)。我可以将原子属性(B,C)插入给定的 4 个表中的任何一个。因此,我得出的结论是,4 个表足以表示第一范式的关系。

您能用正式的方式解释一下吗?


  • 如果关系的所有候选键都包含多值属性:
    为至少一个多值属性引入代理属性。

  • 对于您认为“复合”的每​​个属性(具有异构组件,如元组):

    • 对于每个可能缺失的属性组件:
      添加与某些无多值候选键的属性和该组件的属性的关系。对于具有该组件的原始关系的每一行,新关系中都有一行,其候选键属性值是原始行的属性值,其新属性值是该组件的值。然后从复合属性值中删除该组件。这会为每个组件添加一个可能缺失的关系。

    • 对于每个剩余组件:
      向原始关系添加一个属性,该属性在每一行中的值都是组件的值。然后删除复合属性。这不会增加任何关系。

  • 对于您认为“多值”的每个属性(具有同质元素,如关系):

    • 对于可以有零个元素的类型的属性:
      添加与某些无多值候选键的属性和该属性的关系。对于原始关系的每一行,新关系中都有一组行,其候选键属性值是原始行的属性值,其新属性值是多值属性的元素。然后删除多值属性。这会为每个多值属性添加一个关系。

    • 对于始终具有元素的类型的每个属性:
      将原始关系的每一行替换为一组行,这些行的多值属性值是多值属性的元素,其其他属性值是原始行的属性值。这不会增加任何关系。

所以这里的最终关系是 {A,B,C,F1,...,G1,...}, {A,D} 和 {A,E},总共 1 (对于原始和合成) + 2 (对于多值)。

当然,在实践中你应该规范化新表,这可能会生成新表。但那是为了改进设计。在这里,我们想要一个添加表格尽可能少的设计。

(不存在将关系“分解”为 1NF 的情况。“规范化”的原始含义意味着摆脱关系值属性。后来的规范化理论认为每个关系都在 1NF 中。参见this https://stackoverflow.com/a/24038895/3404097关于 1NF 和原子性。 我们可以用一个或多个具有部分属性的关系来替换我们认为具有同质部分(多值)或异质部分(复合)的属性的关系。我们可以将非关系设计转换为关系设计。但这种非关系设计不会有候选键/主键,因为它仅为关系定义。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将关系 R 分解为 1NF 后最少存在多少张表? 的相关文章