Вот как я создал таблицы:
CREATE TABLE TABLE_A(
id uuid NOT NULL, UNIQUE
name text
);
CREATE TABLE TABLE_B(
id uuid NOT NULL, UNIQUE
name text
);
-- custom realization of many-to-many association
CREATE TABLE TABLE_A_B(
id uuid NOT NULL, UNIQUE
a_id uuid REFERENCES TABLE_A(id) ON UPDATE CASCADE,
B_id uuid REFERENCES TABLE_B(id) ON UPDATE CASCADE
);
Я уже создал таблицы и теперь не могу обновить их, добавив ON DELETE CASCADE. И теперь мне нужно добавить ON DELETE CASCADE в промежуточную таблицу TABLE_A_B. Как это сделать ?(
Вы используете ON DELETE CASCADE
:
CREATE TABLE TABLE_A_B(
id uuid NOT NULL UNIQUE,
a_id uuid REFERENCES TABLE_A(id) ON UPDATE CASCADE ON DELETE CASCADE,
B_id uuid REFERENCES TABLE_B(id) ON UPDATE CASCADE ON DELETE CASCADE
);
Вот скрипт db<>, исправляющий некоторые опечатки в вашем коде.
В частности, ссылка внешнего ключа должна быть на первичный ключ. Хотя первичные ключи разрешены для уникального ключа, на самом деле они предназначены для идентификации отдельных строк, и одно из основных применений — ссылки на внешние ключи.
Обновлено:
Если ограничения уже существуют, выполните следующие действия.
Во-первых, получить их имена:
select *
from information_schema.table_constraints
where constraint_type = 'FOREIGN KEY' and table_name = 'table_a_b';
Примечание. Вы можете назначить имена, чтобы пропустить этот шаг.
Затем удалите существующее ограничение внешнего ключа:
alter table table_a_b
drop constraint table_a_b_a_id_fkey;
Наконец, добавьте новый:
alter table table_a_b
add constraint fk_table_a_b_a
foreign key (a_id) references table_a(id)
on update cascade
on delete cascade;
@Д.Нурсултан . . . Отбросьте существующее ограничение и добавьте новое.
можешь, пожалуйста, проиллюстрировать это
Я уже создал его. Теперь я не могу обновить его, добавив каскад удаления