Работа с внешними ключами к нескольким таблицам
У вас есть три таблицы: регионы, страны и штаты. Страны и штаты могут принадлежать к регионам, образуя иерархическую структуру. Теперь вы хотите создать таблицу «popular_areas» со столбцами «region_id» и «popular_place_id» и установить связь внешнего ключа между «popular_place_id» и странами или штатами на основе столбца «popular_place_type».
Это Сценарий представляет собой проблему, поскольку ограничения внешнего ключа SQL обычно ссылаются на одну целевую таблицу. Однако при проектировании баз данных существует концепция, известная как полиморфные ассоциации, которая пытается решить эту проблему.
Полиморфные ассоциации: объединение нескольких таблиц с общим супертипом
Полиморфные ассоциации позволяют внешний ключ для ссылки на одну из нескольких возможных целевых таблиц. Это достигается за счет использования дополнительного столбца для указания целевой таблицы, на которую ссылаются. Например, в вашем случае вам понадобится столбец «popular_place_type», чтобы определить, ссылается ли «popular_place_id» на страну или штат.
Однако полиморфные ассоциации имеют ограничения в SQL из-за ограничений. SQL не может обеспечить согласованность базы данных с помощью полиморфных ассоциаций. Вместо этого он полагается на приложение или платформу, реализующую эти ассоциации, чтобы гарантировать целостность данных. Ассоциации, рассмотрите следующие альтернативы:
Создание отдельных таблиц:
Создайте такие таблицы как «popular_states» и «popular_countries», каждый из которых относится к штатам и странам соответственно. Это обеспечивает целостность данных посредством ограничений SQL, но может потребоваться несколько запросов для получения всех популярных мест, связанных с пользователем.Подводя итог, полиморфные ассоциации предлагают потенциальное решение для связей внешнего ключа с несколькими таблицами. в SQL. Однако они создают проблемы с целостностью данных и нарушают принципы нормализации базы данных. Рассмотрите альтернативные подходы, упомянутые выше, для надежного управления данными.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3