Какое значение нельзя вставить в столбец с ограничением FOREIGN KEY?

«Какое значение нельзя вставить в столбец с ограничением FOREIGN KEY?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В столбец с ограничением FOREIGN KEY (внешний ключ) нельзя вставить значение, которое отсутствует в связанном столбце PRIMARY KEY или UNIQUE родительской таблицы.

Исключение: Если столбец с внешним ключом допускает NULL, то в него можно вставить NULL, что означает отсутствие связи.

Пример на SQL:

-- Родительская таблица
CREATE TABLE departments (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- Дочерняя таблица с внешним ключом
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    CONSTRAINT fk_department 
        FOREIGN KEY (department_id) 
        REFERENCES departments(id) -- Ссылается на departments.id
);

-- Допустимые операции:
INSERT INTO departments (id, name) VALUES (10, 'IT');
INSERT INTO employees (id, name, department_id) VALUES (1, 'Alice', 10); -- OK, 10 есть в departments
INSERT INTO employees (id, name, department_id) VALUES (2, 'Bob', NULL); -- OK, если столбец допускает NULL

-- НЕДОПУСТИМАЯ операция вызовет ошибку нарушения внешнего ключа:
INSERT INTO employees (id, name, department_id) VALUES (3, 'Charlie', 99); -- 99 нет в departments.id

Это правило обеспечивает целостность ссылочных данных (referential integrity) в базе.