0

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

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

首先,这可能吗?其次,这是解决这个问题的好方法吗?如果没有,您有什么建议?

4

1 回答 1

2

1)有可能。

2)在您的情况下,它可能不像您想要的那样理想-您有循环,而不是无环结构-因此,如果您的FK就位,则无法按原样插入任何这些行。一种可能性是,在表 DDL 中的 ReverseID 列中允许 NULL 后,您必须插入所有具有 NULL ReverseID 的行,然后执行 UPDATE 以设置 ReverseID 列,这些列现在将具有要引用的有效行。另一种可能性是禁用外键或在数据处于完全有效状态之前不创建它,然后应用它。

3)您几乎每次都必须执行这样的操作,并且如果每个关系都有反向关系,您将无法在架构中强制执行 NOT NULL,或者您将经常禁用和重新启用约束。

4)兄弟情况相同。

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

于 2013-03-25T21:57:14.547 回答