【问题标题】:Creating a Foreign Key after normalization规范化后创建外键
【发布时间】:2012-09-05 07:32:26
【问题描述】:

我一直在创建一个数据库,并且刚刚完成了规范化步骤。 其中一个关系通过部分依赖违反了 2NF,所以我根据规范化指南将它分成两个关系。我想知道的是,对于我创建的新关系,它是否有一个依赖于原始关系主键的外键?

例如;

标准化前: R{PK1, PK2, attr1, attr2}

标准化后: R1{PK1, PK2, attr1} R2{PK2, attr2}

PK2 应该与 PK1 有外键吗?

感谢您的帮助

【问题讨论】:

    标签: database database-design foreign-keys primary-key normalization


    【解决方案1】:

    没有。

    由于 attr2 在功能上仅依赖于 PK2,因此 attr2 对于具有给定值的 PK2 的所有行具有相同的值。如果您将 PK1 添加到 R2,您将有两个选择,都不好。

    1. 对于 PK2 的每个值,您只能在 R2 中拥有一行,在这种情况下,您只能为 PK1 设置一个值。这会过度限制您的数据。

    2. R2 中可能有很多行,所有行都具有相同的 PK2 值,但每行都具有不同的 PK1 值。现在你不再是 2NF,你又回到了你开始的地方。

    【讨论】:

      【解决方案2】:

      理想情况下,您希望在 R1{PK2} 和 R2{PK2} 之间强制建立连接依赖关系。不幸的是,大多数 DBMS(基于 SQL 的 DBMS)无法强制表之间的连接依赖关系。

      如果你不能强制执行连接依赖,你至少可以让 R1.PK2 成为引用 R2.PK2 的外键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-06
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多