Mam tabelę podobną do następującej:
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)
);
I chcę (id_A, id_B, id_C)
się wyróżniać w każdej sytuacji. Tak więc następujące dwie wstawki muszą powodować błąd:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Ale nie zachowuje się zgodnie z oczekiwaniami, ponieważ zgodnie z dokumentacją dwie NULL
wartości nie są ze sobą porównywane, więc obie wstawki przebiegają bezbłędnie.
Jak mogę zagwarantować moje wyjątkowe ograniczenie, nawet jeśli tak id_C
jest NULL
w tym przypadku? Właściwie prawdziwe pytanie brzmi: czy mogę zagwarantować tego rodzaju wyjątkowość w „czystym sql”, czy też muszę go wdrożyć na wyższym poziomie (w moim przypadku java)?
(1,2,1)
i(1,2,2)
w(A,B,C)
kolumnach. Czy(1,2,NULL)
należy zezwolić na dodanie, czy nie?