【发布时间】:2015-09-16 15:53:09
【问题描述】:
我正在在线学习 Web 开发文凭,并且刚刚进入数据库设计和开发领域。我以为我理解了范式,但我刚刚遇到了一个让我停下脚步的问题。
查看以下客户实体的属性列表:
Customer(cus_ID, name, address, mobile_phone)为什么这个实体不在 3NF 中?
据我所知,它是在 3NF 中。如果没有客户,所有属性都不会存在,名称、地址和移动数据集都需要客户存在。
我是不是把 3NF 的整个概念都弄错了?
【问题讨论】:
-
我怀疑
address可能会被规范化,因为不同的客户可能共享相同的地址。 -
一个客户可以有多个电话(以及多个客户有一个地址)。如果客户 ID 标识了一个家庭,那么每个 ID 也可以有多个名称。您需要更多信息才能得出一个好的答案。功能依赖是什么?属性之间关系的基数是什么?如果这是整个问题,那么这是一个糟糕的问题。你唯一的问题是过多地阅读给出的信息,而没有意识到它是不可回答的——这很难。
-
Re “如果没有客户,所有属性都不会存在,名称、地址和移动数据集都需要客户存在。”规范化与“必须存在”的实体或属性无关。它是关于(将关系拆分为投影)(消除某些)功能依赖和连接依赖。 (实体-关系信息建模有一个“弱实体”的概念,但这与规范化无关。)所以看起来你“把 3NF 的整个概念弄错了”。
-
@Dai:分解,因为“不同的客户可能共享相同的地址”不是规范化。规范化不能添加新的属性(例如,如果你是这个意思,addressid)。也不需要删除 CK(候选键)上的 FD(功能依赖)(例如,删除地址并添加包含客户和地址的表,如果您是这个意思)。即移除一个CK 隐含的JD(连接依赖)。标准化为 5NF 被定义为没有 JD除了那些。如果共享一个地址的所有客户都必须共享一个 set 的所有地址(即一个 MVD,即 2-way JD),那么这违反了 4NF(但不是 3NF)。
标签: database normalization database-normalization