Ho una tabella come la seguente:
create table my_table (
id int8 not null,
id_A int8 not null,
id_B int8 not null,
id_C int8 null,
constraint pk_my_table primary key (id),
constraint u_constrainte unique (id_A, id_B, id_C)
);
E voglio (id_A, id_B, id_C)
essere distinto in ogni situazione. Pertanto i seguenti due inserti devono causare un errore:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Ma non si comporta come previsto perché, secondo la documentazione, due NULL
valori non vengono confrontati tra loro, quindi entrambi gli inserti passano senza errori.
Come posso garantire il mio vincolo unico anche se id_C
può esserlo NULL
in questo caso? In realtà, la vera domanda è: posso garantire questo tipo di unicità in "sql puro" o devo implementarlo a un livello superiore (java nel mio caso)?
(1,2,1)
e(1,2,2)
nelle(A,B,C)
colonne. Dovrebbe(1,2,NULL)
essere permesso di aggiungere o no?