首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将关系R分解为1NF后存在的表的最小no?

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

Stack Overflow用户
提问于 2016-05-27 10:42:33
回答 1查看 491关注 0票数 1

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

密钥总数=1= {A}

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

多值属性集= {D,E}

组合属性集={ F,G}

将关系R分解成1NF后存在的表的最小no是多少?

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

我的尝试:

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

类似地,对于每个复合属性,我们需要不同的表,总计= 2。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 12:23:35

  • 如果关系的所有候选键都包含多值属性:: 为至少一个多值属性引入代理属性。
  • 对您认为是“复合”的每个属性(具有异构组件,如元组):
代码语言:javascript
复制
- **For each attribute component that can be missing:**

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

-每个剩余组件的:

向原始关系中添加一个属性,其值在每一行中都是组件的值。然后删除复合属性。这没有增加任何关系。

​

  • 对您认为“多值”的每个属性(具有同构元素,如关系):
代码语言:javascript
复制
- **For an attribute of a type that can have zero elements:**

添加一个与多值无关候选键和该属性的属性之间的关系。对于原始关系的每一行,在新关系中都有一组行,其候选键属性值为原始行的属性值,其新属性值为多值属性的元素。然后删除多值属性。这增加了每个多值属性的一个关系。

-对始终具有元素的类型的每个属性:

将原始关系的每一行替换为一组行,其多值属性值是多值属性的元素,其他属性值为原始行的元素。这没有添加任何关系。

​

最后的关系是{A,B,C,F1,…,G1,…},{A,D}和{A,E},总共1(对于原始和复合)+2(对于多值)。

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

(不存在将关系“分解”为1NF的事情。原始意义上的“正常化”意味着摆脱关系价值属性。后来的归一化理论认为所有的关系都在1NF中。参见this re 1NF &原子性。我们可以用一个或多个属性替换具有同质部分(多值)或异质部分(复合)的属性的关系,而这些关系具有部件的属性。我们可以将非关系设计转换为关系设计。但这种非关系设计不会有候选/主键,因为它只为关系定义。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37481380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档