Mengapa di PostgreSQL enum type array nilai null diperbolehkan?
Saya bekerja dengan DB PostgreSQL, dan menggunakan array tipe enum sebagai salah satu kolom.
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;
Itu enummemberi saya untuk menambahkan hanya nilai valid yang dikandungnya, tetapi saya juga dapat menambahkan nullelemen ke dalamnya.
Jadi, untuk mencegah penyimpanan nullelemen ke DB, saya menambahkan filter di aplikasi, tetapi saya ingin tahu apakah ada definisi di PostgreSQL untuk tidak mengizinkan penambahan nullelemen array?
PS Saya melihat di sini saran untuk menambahkan fungsi sebagai bagian dari definisi kolom, tapi ini bukan yang saya minta.
Jawaban
Anda dapat menambahkan batasan pemeriksaan untuk mencegah elemen dengan nilai NULL.
alter table my_table
add constraint no_null_element
check (cardinality(my_column) = cardinality(array_remove(my_column, null)));
Solusi yang lebih bersih adalah hubungan satu-ke-banyak yang dinormalisasi dengan kolom kunci asing yang didefinisikan sebagai not null