«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Может ли внешний ключ ссылаться на несколько таблиц в SQL?

Может ли внешний ключ ссылаться на несколько таблиц в SQL?

Опубликовано 20 ноября 2024 г.
Просматривать:209

Can a Foreign Key Reference Multiple Tables in SQL?

Ограничения полиморфного внешнего ключа: универсальный подход

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

Возможен ли внешний ключ для нескольких таблиц?

К сожалению, ответ отрицательный. Ограничение внешнего ключа может ссылаться только на одну родительскую таблицу. Это ограничение возникает из-за необходимости обеспечения целостности и согласованности данных в системах баз данных.

Практические соображения

Несмотря на присущие ограничения, существуют практические подходы, которые имитируют поведение внешний ключ для нескольких таблиц:

  1. Таблица объединения: Создайте единую таблицу объединения, включающую столбцы из всех возможных родительских таблиц. столы. Столбец внешнего ключа в дочерней таблице ссылается на таблицу объединения. При вставке или обновлении данных таблица объединения определяет, какую фактическую родительскую таблицу следует вставить или обновить.
  2. Столбец типа: Добавьте столбец типа в дочернюю таблицу, чтобы различать возможные типы родительских таблиц. . Столбец внешнего ключа затем ссылается на родительскую таблицу, соответствующую типу, указанному в столбце типа.

Примеры в MySQL и PostgreSQL

В MySQL следующее оператор создает таблицу объединения:

CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;

Ограничение внешнего ключа в дочерней таблице тогда будет следующим:

ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);

В PostgreSQL используется аналогичный подход:

CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;

Ограничение внешнего ключа становится следующим:

ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);

Заключение

Хотя прямой внешний ключ для нескольких таблиц невозможен, альтернативные стратегии допускают полиморфный внешний ключ ключевые отношения в системах баз данных SQL. Эти стратегии сохраняют целостность данных, обеспечивая при этом гибкость для размещения нескольких родительских таблиц.

Заявление о выпуске Эта статья перепечатана по адресу: 1729692611. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3