32 lines
1.1 KiB
SQL
32 lines
1.1 KiB
SQL
-- Vertretungen können auch Personen sein.
|
|
-- ====================================================================
|
|
-- Bisher: deputies.deputy_position_id (NOT NULL) — eine Stelle vertritt
|
|
-- eine andere Stelle.
|
|
--
|
|
-- Erweiterung: deputy_employee_id (nullable) — eine Stelle wird von
|
|
-- einer konkreten Person vertreten, ohne dass diese Person eine eigene
|
|
-- Stelle haben muss. Anwendungsfall: Mitarbeiter wie P. Schmid stehen
|
|
-- offiziell auf "Strom-Netz", vertreten aber die Leitung Strom-Netz.
|
|
--
|
|
-- CHECK-Constraint stellt sicher: genau eines von beiden ist gesetzt.
|
|
|
|
alter table public.deputies
|
|
add column if not exists deputy_employee_id uuid
|
|
references public.employees(id) on delete cascade;
|
|
|
|
alter table public.deputies
|
|
alter column deputy_position_id drop not null;
|
|
|
|
alter table public.deputies
|
|
drop constraint if exists deputies_target_check;
|
|
|
|
alter table public.deputies
|
|
add constraint deputies_target_check
|
|
check (
|
|
(deputy_position_id is not null)::int
|
|
+ (deputy_employee_id is not null)::int = 1
|
|
);
|
|
|
|
create index if not exists deputies_deputy_employee_idx
|
|
on public.deputies (deputy_employee_id);
|