Tengo una tabla como la siguiente:
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)
);
Y quiero (id_A, id_B, id_C)
ser distinto en cualquier situación. Por lo tanto, las siguientes dos inserciones deben provocar un error:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
Pero no se comporta como se esperaba porque, según la documentación, dos NULL
valores no se comparan entre sí, por lo que ambas inserciones pasan sin error.
¿Cómo puedo garantizar mi restricción única, incluso si id_C
puede ser NULL
en este caso? En realidad, la verdadera pregunta es: ¿puedo garantizar este tipo de singularidad en "sql puro" o tengo que implementarlo en un nivel superior (Java en mi caso)?
(1,2,1)
y(1,2,2)
en las(A,B,C)
columnas. ¿Debería(1,2,NULL)
permitirse que se agregue o no?