SQL Server FK同一个表

时间:2013-03-25 21:46:28

标签: sql sql-server database-design foreign-keys

我正在考虑向数据库添加关系表,并且我希望通过使用指向同一表中的PK的FK来包含一种反向关系功能。例如,假设我有表RELATIONSHIP与以下内容:

ID (PK)    Relation      ReverseID (FK)
1          Parent        2
2          Child         1
3          Grandparent   4
4          Grandchild    3
5          Sibling       5

首先,这甚至可能吗?其次,这是一个很好的方法吗?如果没有,你的建议是什么?

1 个答案:

答案 0 :(得分:2)

1)有可能。

2)在您的情况下可能不如您所希望的那样 - 您有周期,而不是非循环结构 - 因为如果您的FK到位,您不能按原样插入任何行。一种可能性是,在表DDL中的ReverseID列中允许NULL之后,您必须使用NULL ReverseID INSERT所有行,然后执行UPDATE以设置ReverseID列,这些列现在将具有要引用的有效行。另一种可能性是禁用foregin密钥,或者在数据处于完全有效状态之前不创建它,然后应用它。

3)你几乎每次都必须做这样的操作,如果每个关系都有反转,你或者不能在模式中强制执行NOT NULL,或者你会经常禁用和重新启用约束

4)兄弟姐妹的情况是一样的。

如果以某种方式对其进行控制并了解其含义,我会很好地使用该设计。