一列上有两个外键
Posted
技术标签:
【中文标题】一列上有两个外键【英文标题】:Two Foreign Keys on one column 【发布时间】:2015-10-17 09:38:05 【问题描述】:我在 mysql 中有两个表,分别名为 manuals
和 library
。两者都可以上传文件,所以我制作了第三个表,名为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_id
和manual_id
。然后用它们各自的 id 填充其中一个,另一个用 null
填充。
@Victor 谢谢,我会使用你的解决方案 :)
【参考方案1】:
没有。同一列上不能有多个外键。来自 MySQL 文档:
MySQL 支持表中一列和另一列之间的外键引用。 (列不能有对其自身的外键引用。)在这些情况下,“子表记录”实际上是指同一个表中的依赖记录。
这样做的原因是 MySQL 无法区分父母。 Laravel(或任何其他框架)不提供解决此问题的方法。
这个问题之前以略有不同的形式提出。示例:it is possible to reference one column as multiple foreign keys
【讨论】:
我没有看到那个问题,但是谢谢。我将使用维克多的解决方案。两列,一列名为 library_id,另一列名为 manual_id。以上是关于一列上有两个外键的主要内容,如果未能解决你的问题,请参考以下文章