У меня есть база данных с тремя таблицами, назовите их foo
, bar
и baz
. Каждый экземпляр bar
ссылается на экземпляр baz
, хотя могут быть экземпляры baz
, на которые нет ссылок в таблице bar
. В большинстве случаев экземпляр foo
будет ссылаться на экземпляр bar
(и, следовательно, может отображаться на экземпляр baz
.) Однако в некоторых случаях экземпляр foo
будет ссылаться на таблицу baz
непосредственно.
В упрощенной версии, где отношения foo
- baz
не существуют, я легко могу сделать barid
частьюпервичный ключ для таблицы foo
, что я и хотел бы здесь сделать, за исключением того, что barid
иногда будет нулевым.
Поэтому пример из таблицы foo
может выглядеть следующим образом:
fooid barid bazid
1 1 NULL
2 2 NULL
3 NULL 9
4 17 NULL
Проблема заключается в том, как обрабатывать создание первичного ключа для таблицы foo
. Должен ли я использовать уникальные индексы вместо ограничения? Я мог бы также создать фиктивные экземпляры bar
для соединения таблиц foo и baz
. В этом случае я мог бы добавить поле isreal
, чтобы знать, когда это так. Я уверен, что кто-то может сказать мне, почему это плохая идея.