Можем ли мы сослаться на две разные таблицы для одного внешнего ключа?

У меня есть эти таблицы:

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;

Этот код возвратил ошибку "повторный повтор".

1 ответ

Решение

Нет, это невозможно.

Если вы хотите использовать только один refId Как показано в столбце, вы не сможете объявить / определить ограничения внешнего ключа для ссылки на несколько таблиц.

Вы можете определить триггеры BEFORE INSERT, BEFORE UPDATE и BEFORE DELETE для трех таблиц, чтобы выполнить некоторые проверки целостности, и заставить триггер выдать исключение / ошибку, чтобы предотвратить некоторые изменения.


Очевидно, вы можете определить два отдельных столбца в table3можно ссылаться на внешний ключ table1 другой может ссылаться table2, Вы можете определить ограничения внешнего ключа.

Вы можете разрешить оба столбца быть пустыми.

Если вы хотите принудительно заполнить только один или другой столбец (по крайней мере, один из столбцов должен быть NULL, а другой столбец должен быть NOT NULL), вы можете применить это в BEFORE INSERT а также BEFORE UPDATE триггеры.

Другие вопросы по тегам