【问题标题】:How to normalize composite attribute?如何规范化复合属性?
【发布时间】:2017-05-15 14:21:05
【问题描述】:

我需要对关系进行规范化,使其处于第一范式。我知道如何规范化多值属性,只是复合属性给我带来了问题。例如,复合属性之一是“Employee-Address”,正如预期的那样,它包含“House-Number”、“Street-Name”等子属性。

我该如何标准化?这些复合属性不是多值/复杂的,即单个员工可能只有一个地址。我也相信“employee-id”属性可以用来识别地址的所有子属性。是否像分解复合属性并将每个子属性作为其自己的属性存储在关系中一样简单?这样所有的子属性都会变成简单的、单一的和存储的值?

在任何人抱怨之前;这个问题与大学作业有关,我已经浏览了整个推荐的教科书(和互联网)来寻找答案,但我没有找到。当然,我想要一个解决方案来回答我的问题,但是如果您想举出自己的例子,那就太好了;非常感谢任何建议或指示!

【问题讨论】:

  • 在现实世界中,地址在表格中存储为单行,街道地址存储在字符串中,然后在其他字段中存储其他位置(例如邮政编码)。有时,特征会被提取到其他列(公寓编号)中,但地址行本身并没有填充额外的 id,也许更高级别的地理除外。
  • @Gordon 我同意。我对地址是复合方式的唯一猜测是出于作业评分的目的!我个人不明白删除复合“括号”并将每个“括号”存储在单独的字段中会有什么不同。
  • “标准化”是什么意思?该和相关术语具有不同的含义(并且经常被滥用),并且不清楚您在这里的意思。输入是什么,输出应该是什么?你的教科书是什么?关于“规范化”的混淆请参阅this。还有this.

标签: database database-normalization


【解决方案1】:

1NF 的唯一要求是每个属性只包含一个“原子”值。

如果问题表明地址是一个复合值并且地址的每个部分都是一个单独的子值,那么您应该为每个子值创建一个属性。

无论如何,您可能都希望将地址的每一部分存储在其自己的属性中,这样您就可以为它们编制索引并高效地运行诸如“找到纽约市的每个人”之类的查询。

【讨论】:

  • 谢谢,很有道理。顺便说一句,关系有一个多值属性,我决定为它创建一个单独的关系。为此,我必须将原始关系的主键带过来并将其与多值属性本身结合以创建新关系的主键。原关系的主键是复合的,这样可以吗?谢谢你,新年快乐!
  • 我不确定我明白你在说什么。您正在为地址或类似的东西创建一个单独的关系?这是否有意义取决于原始关系中的内容。是“员工”还是别的什么?
  • 对不起,我会澄清的。我指的多值属性不是地址,它是一个称为“员工资格”的属性。原始关系映射得很差,它包含数据库的所有属性,从客户数据到员工数据,甚至是产品信息。这种关系是由分配设定的,如果我可以在 1NF 之前改变它。在为资格创建单独的关系时,原始关系的复合键基本上会起作用吗?原来的关系PK不包含员工ID,但教科书说你必须使用PK。
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2013-03-02
  • 2015-04-19
相关资源
最近更新 更多