У меня есть таблица, подобная следующей:
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)
);
И я хочу (id_A, id_B, id_C)
быть отличным в любой ситуации. Поэтому следующие две вставки должны привести к ошибке:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Но он не работает должным образом, потому что согласно документации два NULL
значения не сравниваются друг с другом, поэтому обе вставки проходят без ошибок.
Как я могу гарантировать свое уникальное ограничение, даже если id_C
может быть NULL
в этом случае? На самом деле, реальный вопрос заключается в следующем: могу ли я гарантировать такую уникальность в «чистом sql» или мне нужно реализовать ее на более высоком уровне (в моем случае java)?
(1,2,1)
и(1,2,2)
в(A,B,C)
столбцах. Должно ли(1,2,NULL)
быть разрешено добавить или нет?