Wenn ein Pflichtenheft gelöscht wird, so müssen seine Bestandteile ( =
Einträge in anderen 1:n-Tabellen) mit gelöscht werden. Hier betraf es
die »Zusätzlichen Artikel«, Tabelle requirement_spec_parts. Die anderen
abhängigen Tabellen nutzen bereits FOREIGN KEY … ON DELETE CASCADE, also
das auch für requirement_spec_parts nutzen.
Ansonsten klappt das Löschen schlicht nicht. Entsprechende
Fehlermeldungen:
2015-08-24 17:27:48.632 9734 [26783] : DBD::Pg::st execute failed:
ERROR: update or delete on table "requirement_specs" violates foreign
key constraint "requirement_spec_parts_requirement_spec_id_fkey" on
table "requirement_spec_parts"
DETAIL: Key (id)=(4) is still referenced from table
"requirement_spec_parts". at
/usr/share/perl5/vendor_perl/Rose/DB/Object.pm line 1576.
--- /dev/null
+-- @tag: requirement_spec_parts_foreign_key_cascade
+-- @description: Automatisches Löschen in requirement_spec_parts wenn zugehöriges Pflichtenheft gelöscht wird
+-- @depends: requirement_spec_parts
+ALTER TABLE requirement_spec_parts
+DROP CONSTRAINT requirement_spec_parts_requirement_spec_id_fkey;
+
+ALTER TABLE requirement_spec_parts
+ADD FOREIGN KEY (requirement_spec_id) REFERENCES requirement_specs (id)
+ON DELETE CASCADE;