Подтвердить что ты не робот

Требуется ли для внешнего ключа, связанного с ПК, ограничение NOT NULL?

Нужно ли внешнему ключу, ссылающемуся на первичный ключ, ограничение NOT NULL в базе данных PostgreSQL?
База данных сильно нормирована и будет очень большой. Я не хочу добавлять дополнительные ограничения, которые замедляют запросы еще больше, если запросы не требуются.

4b9b3361

Ответ 1

Если вы хотите иметь возможность представлять неизвестные в столбце FK этой таблицы, сделайте его nullable, если оно должно иметь значение, сделайте его Not Null.

В таблице ссылок вы можете иметь столько записей, сколько хотите, с нулевыми значениями FK. Единственное ограничение относится к строкам в ссылочной таблице (где PK), а не к строкам таблицы ссылок (где FK).

Ответ 2

Первичный ключ должен быть уникальным, и в идеале он должен быть выбран базой данных, чтобы ограничить проблемы с помощью concurrency, поэтому, хотя он может быть уникальным, для 1 записи каждая другая запись должна иметь значение.

В противном случае, как вы узнаете, к какой строке относится этот внешний ключ, если существует более одного соответствия?

Итак, как указано в New в названном городе, NULL должен быть действительным, но для одной записи, поскольку уникальность будет большей проблемой.

РЕДАКТОР: oops, непонятый вопрос.

Я поместил null на внешние ключи раньше, но если у вас есть каскадное удаление, например, то null не будет работать, если только у вас нет ключа в первичной таблице с нулевым значением.