Референтный референтный SQL

DDL для создания базы данных выглядит так

create table manager
    (employee_name varchar(20) not null,
    manager_name varchar(20) not null,
    primary key (employee_name),
    foreign key (manager_name) references manager on delete cascade);

Если пример отношения менеджера такой

employee_name | manager_name
-----------------------------
A             | B  
-----------------------------
B             | C  
-----------------------------
C             | B  
-----------------------------
D             | B  

В этом случае, если я удаляю кортеж (A, B), в этом отношении другой кортеж не удаляется. Я так и думал.

Однако ответ книги таков: все кортежи удалены. Я не могу понять, почему все кортежи удалены.

1 ответ

У вас есть A, B, C и D в качестве сотрудников. Среди них вы определили B и C как менеджеров. И вы решили использовать ON DELETE CASCADE это означает, что если вы удалите один родительский кортеж в таблице Manager, он автоматически повлияет на дочерний (таблица Employees).

В основном, если вы решите удалить обоих менеджеров (B и C) - B имели A, C и D в качестве сотрудников, а C - B в качестве сотрудников).

В этом случае все кортежи могут быть удалены на каскаде, как вы определили при создании таблицы.

Другие вопросы по тегам