Hallo,
ich habe mir ein Beispiel für foreign key constraints bei M:N relationen gemacht:
CREATE TABLE child
(
"name" character varying(32),
id serial NOT NULL
);
CREATE TABLE parent
(
"name" character varying(32),
id serial NOT NULL
);
CREATE TABLE relParentChild
(
id_child bigint,
id_parent bigint
);
Hier sind meine Testdaten:
insert into child (name) values ('hensel');
insert into child (name) values ('gretel');
insert into child (name) values ('waise');
insert into parent (name) values ('Karl');
insert into parent (name) values ('Maria');
insert into parent (name) values ('noKids');
-- karl und maria haben zwei kinder hensel und gretel
insert into relParentChild (id_child, id_parent) values (
(select id from child where name = 'hensel'),
(select id from parent where name = 'Maria'));
insert into relParentChild (id_child, id_parent) values (
(select id from child where name = 'hensel'),
(select id from parent where name = 'Karl'));
insert into relParentChild (id_child, id_parent) values (
(select id from child where name = 'gretel'),
(select id from parent where name = 'Maria'));
insert into relParentChild (id_child, id_parent) values (
(select id from child where name = 'gretel'),
(select id from parent where name = 'Karl'));
Nun möchte ich gerne realisieren, dass wenn ein Elternteil gelöscht wird alle Kinder mit gelöscht werden:
Das geht so:
create rule delchilds as
on delete to parent
do also
(delete from child where id in
(select id_child from relParentChild where id_parent = OLD.id)
);
delete from parent where name = 'Karl';
select name, id from child union ALL select name, id from parent;
Es verbleiben:
Maria, noKids und waise
Soweit funktioniert das Ganze sehr schön, die Integrität bleibt erhalten. Nun möchte ich aber noch etwas kosmetisches machen:
Gibt es eine Möglichkeit auch Maria zu löschen, deren Kinder gelöscht wurden aufgrund dem Löschen von Karl?
Meine andere Frage ist: Geht das ganze auch one rule rewriting, also mit standard SQL?
Vielen Dank,
Tobias