我们可以为一个外键引用两个不同的表吗?

Can we refer to two different tables for one foreign key?

我有这些表:

table1
-----------------------
tb1_id
name
other stuff

table2
-------------------------------
tb2_Id
other stuff

table 3
--------------------------------
id
ref Id    ->either tb2_id or tb1_id

可以通过下面的代码实现吗?

CREATE TABLE `eloan`.`table3` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `refId` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`),
  CONSTRAINT `refId` FOREIGN KEY `refId` (`refId`, `refId`)
    REFERENCES `table2` (`tb2_id`, `tb1_id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT
)
ENGINE = InnoDB;

此代码返回 "duplicate redid" 错误。

没有。这不可能。

如果您只想使用一个 refId 列,如您所示,您将无法 declare/define 外键约束来引用多个 table.

您可以在三个 table 上定义 BEFORE INSERT、BEFORE UPDATE 和 BEFORE DELETE 触发器,以执行一些完整性检查,并让触发器抛出一个 exception/error 以防止一些变化。


显然,您可以在 table3 中定义 两个 单独的列,一个可以是对 table1 的外键引用,另一个可以引用 [=13] =].您可以定义外键约束。

您可以允许两列都为 NULL。

如果您只想强制填充一列或另一列(至少一列必须为 NULL,另一列必须为 NOT NULL),您可以在 BEFORE INSERTBEFORE UPDATE 触发器。