Должны ли столбцы внешнего ключа в дочерней таблице быть НЕ ПУСТЫМИ?

#postgresql #foreign-keys #constraints

Вопрос:

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

Например, предположим, что header имеет первичный ключ с хэш-функцией столбцов A, B и C, а line таблица имеет внешний ключ с хэш-функцией столбцов A, B и C. Необходимо ли тогда, чтобы столбцы A, B и C в дочерней таблице НЕ были ПУСТЫМИ?

Ответ №1:

Вам следует ознакомиться с документацией:

Обычно ссылочная строка не должна удовлетворять ограничению внешнего ключа, если какой-либо из ее ссылочных столбцов равен нулю. Если в объявление внешнего ключа добавляется ПОЛНОЕ СОВПАДЕНИЕ, ссылочная строка не удовлетворяет ограничению, только если все ее ссылочные столбцы равны нулю (поэтому сочетание нулевых и ненулевых значений гарантированно приведет к нарушению ограничения ПОЛНОГО совпадения). Если вы не хотите, чтобы ссылочные строки могли не удовлетворять ограничению внешнего ключа, объявите ссылочные столбцы НЕ ПУСТЫМИ.

То есть это выбор, который вы можете сделать, в зависимости от того, что вы делаете или не хотите позволять.