Референтный референтный 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 в качестве сотрудников).
В этом случае все кортежи могут быть удалены на каскаде, как вы определили при создании таблицы.