Eu tenho uma tabela como a seguinte:
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 eu quero (id_A, id_B, id_C)
ser distinto em qualquer situação. Portanto, as duas inserções a seguir devem resultar em um erro:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Mas não se comporta como o esperado, porque, de acordo com a documentação, dois NULL
valores não são comparados entre si, portanto, ambas as inserções passam sem erros.
Como posso garantir a minha restrição exclusiva, mesmo que id_C
pode ser NULL
neste caso? Na verdade, a verdadeira questão é: posso garantir esse tipo de exclusividade no "sql puro" ou preciso implementá-lo em um nível superior (java no meu caso)?
(1,2,1)
e(1,2,2)
nas(A,B,C)
colunas. Deve(1,2,NULL)
ser permitido adicionar ou não?