-- Verwaiste service_relations entfernen, wenn Bereiche/Stellen -- gelöscht werden. -- ==================================================================== -- service_relations.scope_id ist polymorph (org_unit oder position), -- daher kein direkter FK möglich. Stattdessen Trigger, die nach Delete -- auf den Quell-Tabellen die scope_id aufräumen. -- -- Strategie: NULL-out (statt cascade-delete), damit die service_relation -- als Datensatz erhalten bleibt — der Admin sieht im Audit, dass die -- Verknüpfung früher existierte und die Quelle weg ist. Die App-UI -- zeigt sie als "(Bereich/Stelle gelöscht)". create or replace function public.cleanup_service_relations_org_unit() returns trigger language plpgsql as $$ begin update public.service_relations set scope_id = null where scope_kind = 'org_unit' and scope_id = OLD.id; return OLD; end; $$; create or replace function public.cleanup_service_relations_position() returns trigger language plpgsql as $$ begin update public.service_relations set scope_id = null where scope_kind = 'position' and scope_id = OLD.id; return OLD; end; $$; drop trigger if exists trg_cleanup_service_relations_org_unit on public.org_units; create trigger trg_cleanup_service_relations_org_unit before delete on public.org_units for each row execute function public.cleanup_service_relations_org_unit(); drop trigger if exists trg_cleanup_service_relations_position on public.positions; create trigger trg_cleanup_service_relations_position before delete on public.positions for each row execute function public.cleanup_service_relations_position();