指向多个表之一的外键约束

JSB*_*ոգչ 5 sql sqlite foreign-keys polymorphic-associations

我有一个表,其中一列source_id的值应为另一张表的主键,尽管它在哪张表中因记录而异。每个记录必须具有一个用于source_table指定源记录表的值,以及一个用于source_id指定源表中的行的值。

有什么方法可以利用数据库的外键约束和验证来完成此任务?还是我必须将验证逻辑移到应用程序层?或者,是否有另一种设计可以让我避免这个问题?

Dan*_*llo 5

外键约束只能引用一个目标表。SQL中没有基于其他字段引用不同目标表的“条件”外键。就像@OMG Ponies在下面的注释中指出的,同一列上可以有多个外键,引用多个表,但这意味着该列的值必须存在于所有引用的表中。我想这不是你所追求的。

对于一些可能的解决方案,我建议您查看@Bill Karwin对这个问题回答:

我总体上喜欢“超级表”方法。您可能还想查看此帖子的另一个示例: