将1:M关系转换为1:1关系

时间:2010-05-12 11:34:19

标签: sql-server

我们遇到这样一种情况:表'A'是父表,并且可能有十几个表是'A'的子表。在每种情况下,'A'和子表之间都存在1:M的关系。

昨天决定将这十几个1:M的关系转换成1:1的关系。因此,对于十几个子表中的每一个,开发人员在FK列上放置一个唯一索引,将该表链接回“A”。这是他执行1:1关系的方式。

我向他建议他应该做的是删除每个子表中的FK列,并在表'A'中创建一个引用每个子表的FK列。他质疑这种方法,因为对于'A'中的每一行,许多这些FK列将为空,因为它们并不总是必需的。

在这种情况下,最理想的方法是什么?

谢谢 - 兰迪

2 个答案:

答案 0 :(得分:2)

如果我正确理解你,每个子节点中只能有一行链接到父表中的特定行。

如果是这种情况,他的方法似乎更好,因为他提到的确切原因。最后,它很大程度上取决于您对数据的计划,但从数据库建模角度来看,最佳解决方案是在每个子表中将FK列链接到父表中的PK。

答案 1 :(得分:2)

在我看来,您的同事/开发人员提出了最合适的解决方案。

从数据库设计的角度来看,通常的做法是在给定表的每个外键列上创建非聚集索引。假设您在Parent表上有12个外键,如您所建议的那样。您将显着增加插入操作的性能开销。

通过在引用Parent表的12个子表中的每一个中放置一个外键,您将更有效地分配I / O负载。