Ограничения полиморфного внешнего ключа: универсальный подход
Обычное ограничение внешнего ключа устанавливает прямую связь между двумя указанными таблицами. Однако что, если вам нужна полиморфная связь, в которой столбец ссылается на одну из нескольких возможных родительских таблиц?
Возможен ли внешний ключ для нескольких таблиц?
К сожалению, ответ отрицательный. Ограничение внешнего ключа может ссылаться только на одну родительскую таблицу. Это ограничение возникает из-за необходимости обеспечения целостности и согласованности данных в системах баз данных.
Практические соображения
Несмотря на присущие ограничения, существуют практические подходы, которые имитируют поведение внешний ключ для нескольких таблиц:
Примеры в 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. Эти стратегии сохраняют целостность данных, обеспечивая при этом гибкость для размещения нескольких родительских таблиц.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3