Ich habe eine Tabelle wie die folgende:
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)
);
Und ich möchte (id_A, id_B, id_C)
in jeder Situation anders sein. Die folgenden zwei Einfügungen müssen also zu einem Fehler führen:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Es verhält sich jedoch nicht wie erwartet, da laut Dokumentation zwei NULL
Werte nicht miteinander verglichen werden, sodass beide Einfügungen fehlerfrei verlaufen.
Wie kann ich meine eindeutige Einschränkung garantieren, auch wenn id_C
dies NULL
in diesem Fall der Fall sein kann? Eigentlich lautet die eigentliche Frage: Kann ich diese Art von Einzigartigkeit in "pure sql" garantieren oder muss ich sie auf einer höheren Ebene implementieren (in meinem Fall Java)?
(1,2,1)
und(1,2,2)
in den(A,B,C)
Spalten. Soll ein(1,2,NULL)
hinzugefügt werden dürfen oder nicht?