Как обрабатывать обнуляемый первичный ключ, который ссылается на две таблицы - PullRequest
0 голосов
/ 25 октября 2019

У меня есть база данных с тремя таблицами, назовите их foo, bar и baz. Каждый экземпляр bar ссылается на экземпляр baz, хотя могут быть экземпляры baz, на которые нет ссылок в таблице bar. В большинстве случаев экземпляр foo будет ссылаться на экземпляр bar (и, следовательно, может отображаться на экземпляр baz.) Однако в некоторых случаях экземпляр foo будет ссылаться на таблицу bazнепосредственно.

Possible ERD

В упрощенной версии, где отношения 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, чтобы знать, когда это так. Я уверен, что кто-то может сказать мне, почему это плохая идея.

1 Ответ

0 голосов
/ 25 октября 2019

Нет простого ответа на этот вопрос без понимания приложения и реализации. Пожалуйста, смотрите ниже другие перестановки, созданные для отношений между таблицами.

fooid    barid    bazid
    1        1     NULL
    2        2     NULL
    3     NULL        9
    4       17     NULL
    5       18     6
    6       14     6
    6       18     10

Общий ответ на вопрос, пожалуйста, не надосоздайте фиктивные значения, вместо этого первичным ключом идентификатора бара будет только fooid. И добавьте уникальное ограничение, если fooid, barid и bazid всегда будут уникальными.

...