Нужно ли внешнему ключу, ссылающемуся на первичный ключ, ограничение NOT NULL в базе данных PostgreSQL?
База данных сильно нормирована и будет очень большой. Я не хочу добавлять дополнительные ограничения, которые замедляют запросы еще больше, если запросы не требуются.
Требуется ли для внешнего ключа, связанного с ПК, ограничение NOT NULL?
Ответ 1
Если вы хотите иметь возможность представлять неизвестные в столбце FK этой таблицы, сделайте его nullable, если оно должно иметь значение, сделайте его Not Null.
В таблице ссылок вы можете иметь столько записей, сколько хотите, с нулевыми значениями FK. Единственное ограничение относится к строкам в ссылочной таблице (где PK), а не к строкам таблицы ссылок (где FK).
Ответ 2
Первичный ключ должен быть уникальным, и в идеале он должен быть выбран базой данных, чтобы ограничить проблемы с помощью concurrency, поэтому, хотя он может быть уникальным, для 1 записи каждая другая запись должна иметь значение.
В противном случае, как вы узнаете, к какой строке относится этот внешний ключ, если существует более одного соответствия?
Итак, как указано в New в названном городе, NULL должен быть действительным, но для одной записи, поскольку уникальность будет большей проблемой.
РЕДАКТОР: oops, непонятый вопрос.
Я поместил null на внешние ключи раньше, но если у вас есть каскадное удаление, например, то null не будет работать, если только у вас нет ключа в первичной таблице с нулевым значением.