Я разрабатываю маленькую базу данных для персонального проекта и одну из таблиц, называю ее таблицей C
, потребности иметь внешний ключ к одной из двух таблиц, назовите их A
и B
, отличие записью. Что лучший способ состоит в том, чтобы реализовать это?
Идеи до сих пор:
Что такое более изящный способ решить эту проблему?
Вы описываете дизайн, называемый полиморфными ассоциациями. Это часто заставляет людей в беду.
Что я обычно рекомендую:
A --> D <-- B
^
|
C
В этом дизайне вы создаете общий родительский стол D
, что оба A
и B
. Это аналогично общему супертипю в дизайне OO. Теперь ваш детский стол C
может ссылаться на супер-таблицу и оттуда вы можете добраться до соответствующего подплета.
С помощью ограничений и сложных клавиш вы можете убедиться, что данный строк в D
может быть навязчив только A
или B
, но не оба.
Если вы уверены, что C
C
когда-либо будет ссылаться только на одну из двух таблиц (и не одного из N), то ваш первый выбор - это разумный подход (и он использовал до). Но если вы думаете, что количество внешних ключевых столбцов собирается продолжать увеличиваться, это говорит о том, что есть некоторое сходство или перекрытие, которое может быть включено, и вы можете пересмотреть.