一组外键,其中除了一个之外都是 NULL

Posted

技术标签:

【中文标题】一组外键,其中除了一个之外都是 NULL【英文标题】:Set of Foreign Keys Where All But One Are NULL 【发布时间】:2010-01-22 13:50:47 【问题描述】:

在表中使用一组外键的技术的名称是什么,除了一个外键对于给定的行都是 NULL?

换句话说,每一行都需要一个外键来指向 n 个不同的可能表中的一个(并且只有一个),因此您实际上拥有所有必需的外键,但除了一个之外,所有外键都是 NULL。

(Django 的用户可能会认为这是使用通用外键的替代方法)

【问题讨论】:

【参考方案1】:

您所描述的设计术语是Exclusive Arc

相反,我更喜欢创建一个外键来引用您的 n 个不同父表的公共超级表。

有关多态关联,请参阅我的其他答案:

Possible to do a mysql foreign key to one of two possible tables? Referencing foreign keys in the same column Why can you not have a foreign key in a polymorphic association? In a *** clone, what relationship should a Comments table have to Questions and Answers? How to handle an “OR” relationship in an ERD (table) design?

【讨论】:

【参考方案2】:

如果有一个例子会更容易,但解决这个问题的一种常见方法是简单地为这些表找到一个通用的超类型。假设我们有表Book, Article, Magazine,现在一个表必须有这些表的外键。使用常见的超类型Publication解决了这个问题。 See here for the model 和类似的问题/答案。

【讨论】:

以上是关于一组外键,其中除了一个之外都是 NULL的主要内容,如果未能解决你的问题,请参考以下文章

外键为啥必须是唯一键?为啥至少唯一键才能作为其他表的外键?不唯一为啥不可以?

带有外键的 MariaDB 表创建错误

主键和外键的作用

在 SQL 中拥有子类的外键的正确方法?

数据库表关系及配置

在集合形式外键始终为空