junior
Может ли значение в столбце с ограничением FOREIGN KEY равняться NULL?
Да, значение в столбце с ограничением FOREIGN KEY может быть NULL, если на данный столбец не наложено дополнительное ограничение NOT NULL. FOREIGN KEY проверяет ссылочную целостность только для не-NULL значений — если значение равно NULL, проверка соответствия в родительской таблице не выполняется.
Это поведение позволяет моделировать необязательные связи. Например, сотрудник может не иметь руководителя (генеральный директор):
Пример
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
manager_id INT REFERENCES employees(id) -- может быть NULL
);
-- Вставка сотрудника без руководителя — допустимо
INSERT INTO employees (name, manager_id) VALUES ('CEO', NULL);
Если связь обязательна (каждый заказ должен принадлежать пользователю), добавьте NOT NULL:
Пример
user_id INT NOT NULL REFERENCES users(id)
На собеседовании: ответ — да, если нет
NOT NULL. Частая ошибка — считать, чтоFOREIGN KEYавтоматически запрещаетNULL.