我正在考虑向数据库添加关系表,并且我希望通过使用指向同一表中的PK的FK来包含一种反向关系功能。例如,假设我有表RELATIONSHIP与以下内容:
ID (PK) Relation ReverseID (FK)
1 Parent 2
2 Child 1
3 Grandparent 4
4 Grandchild 3
5 Sibling 5
首先,这甚至可能吗?其次,这是一个很好的方法吗?如果没有,你的建议是什么?
答案 0 :(得分:2)
1)有可能。
2)在您的情况下可能不如您所希望的那样 - 您有周期,而不是非循环结构 - 因为如果您的FK到位,您不能按原样插入任何行。一种可能性是,在表DDL中的ReverseID列中允许NULL之后,您必须使用NULL ReverseID INSERT所有行,然后执行UPDATE以设置ReverseID列,这些列现在将具有要引用的有效行。另一种可能性是禁用foregin密钥,或者在数据处于完全有效状态之前不创建它,然后应用它。
3)你几乎每次都必须做这样的操作,如果每个关系都有反转,你或者不能在模式中强制执行NOT NULL,或者你会经常禁用和重新启用约束
4)兄弟姐妹的情况是一样的。
如果以某种方式对其进行控制并了解其含义,我会很好地使用该设计。