J'ai une table comme celle-ci:
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)
);
Et je veux (id_A, id_B, id_C)être distinct dans n'importe quelle situation. Donc, les deux insertions suivantes doivent entraîner une erreur:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Mais il ne se comporte pas comme prévu car, selon la documentation, deux NULLvaleurs ne sont pas comparées, de sorte que les deux insertions passent sans erreur.
Comment puis-je garantir ma contrainte unique même si cela id_Cpeut être le NULLcas? En réalité, la vraie question est la suivante: puis-je garantir ce type d'unicité dans "pure sql" ou dois-je l'implémenter à un niveau supérieur (java dans mon cas)?
(1,2,1)et(1,2,2)dans les(A,B,C)colonnes. Faut-(1,2,NULL)il permettre l'ajout ou non d'un?