1

I have these tables:

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

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

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

Can this be achieved from the below code ?

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;

This code returned a "duplicate redid" error.

4

1 回答 1

2

不,那是不可能的。

如果您只想使用单个refId列,如您所示,您将无法声明/定义外键约束来引用多个表。

您可以在三个表上定义 BEFORE INSERT、BEFORE UPDATE 和 BEFORE DELETE 触发器,以执行一些完整性检查,并让触发器抛出异常/错误以防止某些更改。


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

您可以允许两列都为 NULL。

如果您只想强制填充一个或另一列(至少其中一个列必须为 NULL,而另一列必须为 NOT NULL),您可以在BEFORE INSERTBEFORE UPDATE触发器中强制执行该操作。

于 2015-05-29T02:19:28.870 回答