У мене така таблиця:
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)
додати чи ні?