Warum sind in PostgreSQL-Aufzählungstypen Array-Nullwerte zulässig?
Ich arbeite mit einer PostgreSQL-Datenbank und verwende ein Array eines Aufzählungstyps als eine der Spalten.
CREATE TYPE my_type_enum AS ENUM ('value1', 'value2', 'value3');
ALTER TABLE "my_table" ADD COLUMN IF NOT EXISTS "my_column" my_type_enum ARRAY;
Das enumgibt mir die Möglichkeit, nur gültige Werte hinzuzufügen, die es enthält, aber ich kann auch nullElemente hinzufügen .
Um das Speichern von nullElementen in der Datenbank zu verhindern , habe ich der App einen Filter hinzugefügt. Ich frage mich jedoch, ob es in PostgreSQL eine Definition gibt, die das Hinzufügen von nullElementen nicht zulässt array.
PS Ich habe hier den Vorschlag gesehen, eine Funktion als Teil der Spaltendefinition hinzuzufügen, aber das habe ich nicht gefragt.
Antworten
Sie können eine Prüfbedingung hinzufügen, um Elemente mit NULL-Werten zu verhindern.
alter table my_table
add constraint no_null_element
check (cardinality(my_column) = cardinality(array_remove(my_column, null)));
Eine sauberere Lösung wäre eine normalisierte Eins-zu-Viele-Beziehung zu einer Fremdschlüsselspalte, definiert als not null