-- Die E-Mail-Adresse ist privat und freiwillig. -- -- Sie war NOT NULL, obwohl es sich um die *private* Adresse handelt — nicht -- um eine Firmenadresse, die mit dem Eintritt entsteht. Wer keine angeben -- will oder keine hat, muss trotzdem angelegt werden können. Bisher zwang -- die Spalte dazu, etwas zu erfinden, und erfundene Daten in einer -- Personalakte sind schlimmer als fehlende. -- -- Die Eindeutigkeit bleibt: sie verhindert weiterhin, dass dieselbe Adresse -- zweimal vorkommt. Mehrere NULL-Werte stören sie nicht — in PostgreSQL -- gelten sie in einem UNIQUE-Index als voneinander verschieden, und genau -- das ist hier gewollt. alter table employees alter column email drop not null; comment on column employees.email is 'Private E-Mail-Adresse. Freiwillig; eindeutig, wenn angegeben.'; comment on column employees.phone is 'Private Telefonnummer. Freiwillig.'; -- ═══ Gegenprobe ══════════════════════════════════════════════════ -- Zwei Personen ohne Adresse müssen nebeneinander bestehen können, zwei mit -- derselben nicht. do $$ begin create temp table probe_mail (email text unique) on commit drop; insert into probe_mail (email) values (null), (null); insert into probe_mail (email) values ('a@example.invalid'); begin insert into probe_mail (email) values ('a@example.invalid'); raise exception 'Doppelte Adressen werden angenommen — die Eindeutigkeit ist verloren.'; exception when unique_violation then null; end; end; $$;