1

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

例如;

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

归一化后:R1{PK1, PK2, attr1} R2{PK2, attr2}

PK2 应该与 PK1 有外键吗?

谢谢你的帮助

4

2 回答 2

0

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

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

于 2012-09-12T22:36:56.887 回答
0

不。

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

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

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

于 2012-09-12T18:14:43.267 回答