Что делает ограничение FOREIGN KEY с опцией ON DELETE SET NULL?

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

Ответ

ON DELETE SET NULL — это действие, определяемое для ограничения внешнего ключа (FOREIGN KEY). Оно указывает СУБД автоматически установить значение NULL в столбце внешнего ключа дочерней таблицы при удалении связанной записи из родительской таблицы.

Ключевые условия и последствия:

  1. Столбец внешнего ключа должен допускать NULL (NULLABLE).
  2. Дочерние записи не удаляются, а лишь теряют связь с родителем.
  3. Полезно для опциональных связей, где существование дочерней сущности не зависит от родителя.

Пример создания таблиц в SQL:

CREATE TABLE Department (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE Employee (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT, -- Допускает NULL
    FOREIGN KEY (department_id)
        REFERENCES Department(id)
        ON DELETE SET NULL -- Ключевая опция
);

Сценарий: При удалении отдела (DELETE FROM Department WHERE id = 5) у всех сотрудников, чье поле department_id было равно 5, это поле будет установлено в NULL. Сотрудники останутся в базе, но без привязки к отделу.

Альтернативные действия: ON DELETE CASCADE (удалить дочерние записи), ON DELETE RESTRICT/NO ACTION (запретить удаление родителя).