一列上有两个外键

Posted

技术标签:

【中文标题】一列上有两个外键【英文标题】:Two Foreign Keys on one column 【发布时间】:2015-10-17 09:38:05 【问题描述】:

我在 mysql 中有两个表,分别名为 manualslibrary。两者都可以上传文件,所以我制作了第三个表,名为files。在文件中,我有一列 parent_id。我可以从手册和库中将 parent_id 作为外键吗?

我正在使用 Laravel (4.2) 并尝试过,但它不起作用:

$table->integer('parent_id')->unsigned();
$table->foreign('parent_id')->references('id')->on('library');
$table->foreign('parent_id')->references('id')->on('manuals');

【问题讨论】:

可能重复? ***.com/questions/15547276/… 您不能这样做,但是您可以通过将parent_id 列拆分为两列来解决此问题。例如library_idmanual_id。然后用它们各自的 id 填充其中一个,另一个用 null 填充。 @Victor 谢谢,我会使用你的解决方案 :) 【参考方案1】:

没有。同一列上不能有多个外键。来自 MySQL 文档:

MySQL 支持表中一列和另一列之间的外键引用。 (列不能有对其自身的外键引用。)在这些情况下,“子表记录”实际上是指同一个表中的依赖记录。

这样做的原因是 MySQL 无法区分父母。 Laravel(或任何其他框架)不提供解决此问题的方法。

这个问题之前以略有不同的形式提出。示例:it is possible to reference one column as multiple foreign keys

【讨论】:

我没有看到那个问题,但是谢谢。我将使用维克多的解决方案。两列,一列名为 library_id,另一列名为 manual_id。

以上是关于一列上有两个外键的主要内容,如果未能解决你的问题,请参考以下文章

HQL 无法在公共外键列上连接两个表

同时使用外键和主键

在其他两个表的列上连接一列的最佳方法

将 html 表导出到一列上有 tinymce 的单词

内连接恰好在一列上,而在另一列上模糊

一列用于 Entity Framework Core 中两个不同表的外键