ฉันมีตารางดังนี้:
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ในกรณีนี้หรือไม่? ที่จริงแล้วคำถามจริงคือ: ฉันสามารถรับประกันความเป็นเอกลักษณ์แบบนี้ใน "pure sql" หรือฉันต้องใช้มันในระดับที่สูงขึ้น (java ในกรณีของฉัน)?
(1,2,1)และ(1,2,2)ใน(A,B,C)คอลัมน์ ควร(1,2,NULL)ได้รับอนุญาตให้เพิ่มหรือไม่?