Perché in PostgreSQL sono consentiti valori null di array di tipo enum?
Sto lavorando con un database PostgreSQL e utilizzo un array di un tipo enum come una delle colonne.
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;
Il enumdà me aggiungere solo valori validi che essa contiene, ma ho anche possibile aggiungere un nullelementi ad esso.
Quindi, per evitare di salvare nullelementi nel DB, ho aggiunto un filtro nell'app, ma mi chiedo se in PostgreSQL esiste una definizione per non consentire l'aggiunta di nullelementi array?
PS Ho visto qui il suggerimento di aggiungere la funzione come parte della definizione della colonna, ma non è quello che ho chiesto.
Risposte
È possibile aggiungere un vincolo di controllo per evitare elementi con valori NULL.
alter table my_table
add constraint no_null_element
check (cardinality(my_column) = cardinality(array_remove(my_column, null)));
Una soluzione più pulita sarebbe una relazione uno-a-molti normalizzata con una colonna di chiave esterna definita come not null