【问题标题】:3NF normalized database3NF规范化数据库
【发布时间】:2016-12-03 00:16:44
【问题描述】:

我在创建 3NF 规范化数据库时遇到问题。有人可以帮忙吗?我看不到任何依赖项。这是一个房地产网站。表格字段如下:

ID - 类型 - 位置 - 村庄 - 用途 - 价格范围 - 图片 1 - 图片 2 - 图片 3 - 状态 - 属性 - 描述

感谢任何帮助。

【问题讨论】:

  • 你可以指定每个属性代表什么?
  • "图片 1 - 图片 2 - 图片 3" 你还没有进入 1NF。您可能想为每一列添加一个说明,说明它将保存什么类型的数据,这样我们就会看到什么去哪里了。
  • 对 BCNF 的规范化取决于了解函数依赖关系。 FD 不是由列名决定的,即使它们的描述性足以告诉我们它们的含义。 FD 由值及其含义决定。您(OP)是唯一知道 FD 的人。你会发现很多人都乐于猜测,但我想你会发现猜测的规模并不大。

标签: mysql database 3nf


【解决方案1】:

如果 type 是对另一个表的引用,没关系,否则你必须将类型放在另一个表中。您也可以为图片创建一个表格。如果您想了解更多关于村庄的信息,村庄可以进入另一张桌子。

【讨论】:

  • 类型代表公寓、土地、建筑物等。村庄用于指定村庄,因此可以缩小查询范围。现在他们都在一张桌子里。我应该如何去改变它?感谢您的回复
  • 不正确。只要类型由 ID 唯一确定,而它又不唯一标识其他任何内容,您的建议与 3NF 无关。
  • @Thomas 是的,你是对的,在这种情况下,它可以保留在表格中,但这是一个真正的工作,而不是家庭作业,所以在我看来,最好有类型和村庄未来系统扩展的另一个表。
  • @Renato:很公平,但是如果用不相关的设计原则来回答关于范式的问题,读者可能会感到困惑。
  • @Thomas 你是对的,我的回答是基于我认为对系统更好且与 3NF 无关的内容。
【解决方案2】:

通常你会有这样的表格:

            PropertyType
            Village
            Purpose
            Status
            Property

在一个特定的村庄里可能有很多房产。目的和 PropertyType 可能是相关的——例如,您不能将小屋用作大量观众的聚会场所,尽管您可以将小屋用作“单户住宅”或“床和早餐”。要表示这种依赖关系,您需要这个中间表:

           PropertyTypePurposes
           propertytypeid
           purposeid

对于每种属性类型,您将有一个或多个潜在用途。然后,在您的 Properties 表中,您不会直接引用 Purposes,而是会引用 PropertyTypePurposes:

           alter table properties
           add constraint FK_PROPERTIES_PROPERTYTYPEPURPOSES
           foreign key (propertytypeid, purposeid) references PropertyTypePurposes(propertypeid, purposeid)

【讨论】:

  • 那些仍然可能不是功能依赖,如果您可以将小屋用于不止一件事,并且可以使用几座建筑物来满足一个目的。顺便说一句,您的多重建议完全不重要。
【解决方案3】:

要在 3NF 中,您需要确保没有任何传递函数依赖(并且您没有任何非完全依赖)。如果 ID 确定了一个元组,并且没有其他属性可以用来确定某个其他属性的值必须是什么,那么您不仅在 3NF 中,而且在 BCNF 中。

【讨论】:

  • 传递依赖并不是确定关系是否在 3NF 中的唯一标准。它也必须在 2NF 中。 OP 的关系不太可能在 2NF 中。
  • 好点。话虽如此,假设 ID 是关键,不可能有任何非完全依赖。
  • “图片 1 - 图片 2 - 图片 3” 向我暗示了一个重复组。如果是,那么原件甚至不在 1NF 中。
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 2016-08-17
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多