Какое минимальное ограничение нужно установить для колонки customer_id в таблице customer, чтобы её можно было использовать как внешний ключ, если в этой колонке разрешены пустые значения и уникальность не требуется?
Подробное объяснение
Для использования колонки в качестве внешнего ключа она должна быть кандидатным ключом, то есть иметь ограничение PRIMARY KEY или UNIQUE. Поскольку customer_id может содержать NULL-значения, PRIMARY KEY не подходит, так как он требует NOT NULL. Минимальным подходящим ограничением является UNIQUE, которое в PostgreSQL допускает несколько NULL-значений, обеспечивая необходимую уникальность для ссылок.
Часто задаваемые вопросы (FAQ)
1
Можно ли использовать колонку с NULL-значениями в качестве внешнего ключа?
Да, если на неё наложено ограничение UNIQUE, которое в PostgreSQL допускает несколько NULL-значений, обеспечивая уникальность для ненулевых значений.
2
В чем разница между PRIMARY KEY и UNIQUE для внешних ключей?
PRIMARY KEY всегда подразумевает NOT NULL и уникальность, а UNIQUE допускает NULL-значения (в PostgreSQL — несколько NULL), но оба ограничения позволяют использовать колонку как внешний ключ.
3
Почему для внешнего ключа нужна уникальность в родительской таблице?
Уникальность обеспечивает однозначную ссылку из дочерней таблицы на конкретную строку в родительской, предотвращая неоднозначные связи.
Типичные ошибки
1
Использование PRIMARY KEY для колонки с NULL-значениями
PRIMARY KEY требует NOT NULL, поэтому он не подходит, если в колонке разрешены пустые значения.
2
Отсутствие ограничений на колонку customer_id
Без ограничения UNIQUE или PRIMARY KEY колонка не может быть кандидатным ключом, что делает невозможным её использование в качестве внешнего ключа.
3
Предположение, что UNIQUE запрещает NULL-значения
В PostgreSQL UNIQUE допускает несколько NULL-значений, что делает его подходящим для случаев, когда уникальность не требуется, но NULL разрешены.