将关系 R 分解为 1NF 后存在的最小表数?

Minimum no of tables that exists after decomposing relation R into 1NF?

考虑具有以下类型属性的关系 R(A, B, C, D, E, F, G):-

总键数 = 1 = {A}

一组简单(或)原子(或)单值属性 = {B, C}

多值属性集 = {D, E}

复合属性集 = { F, G}

将关系R分解为1NF后,最小的table个数是多少?

(A) 3 (B) 2 (C) 4 (D) 5


我的尝试:

对于具有给定键 (A) 的每个多值属性,我们需要不同的 table,总计 = 2

同样,我们需要为每个复合属性设置不同的table,总计=2。

共有4个这样的属性。我在每个 (4) table 中给出 4 table 和给定的键 (A)。我被允许将原子属性(B,C)插入给定的 4 table 中的任何一个。所以,我得出结论,4 tables 足以表示第一范式的关系。

Can you explain in formal way, please?

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

  • 对于您认为 "composite" 的每个属性(具有异构组件,如元组):

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

    • 对于每个剩余的组件:
      向原始关系添加一个属性,其每行中的值是组件的值。然后删除复合属性。这没有添加关系。

  • 对于您认为 "multivalued" 的每个属性(具有同类元素,如关系):

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

    • 对于始终具有元素的类型的每个属性:
      用一组行替换原始关系的每一行,这些行的多值属性值是多值属性的元素,而其他属性值是原始行的。这没有添加关系。

所以这里最后的关系是{A,B,C,F1,...,G1,...},{A,D}和{A,E},一共1个(原&复合材料)+ 2(对于多值)。

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

(没有"decomposing"关系到1NF。"normalize"的原始意义意味着摆脱关系值属性。后来的归一化理论认为每个关系都在1NF中。请参阅 this re 1NF 和原子性。 我们可以用一个或多个具有部分属性的关系替换我们认为具有同质部分(多值)或异质部分(复合)的属性的关系。我们可以将非关系设计转换为关系设计。但是那个非关系设计不会有 candidate/primary 键,因为它只为关系定义。)