Mondi su mondi, sistemi di sistemi.

Vincoli di unicità con i NULL

Anche se non amo i NULL, questo “trucco” che ho letto sulla mailing list di PostgreSQL è troppo carino per non citarlo.

Qual è il problema?

Come dice il titolo, vogliamo imporre un vincolo di unicità su più colonne, una delle quali può essere NULL. In PostgreSQL, se abbiamo tre colonne A, B e C — con C che può essere NULL — e creiamo uno UNIQUE INDEX con tutte e tre, posso inserire due record con valori duplicati per A e B.

Salvati dagli indici parziali

La soluzione, una volta tanto, è semplice: basta creare un indice parziale:
CREATE INDEX idx ON table_name(A,B) WHERE (C IS NULL);

Per proseguire

Commenti e trackback sono disabilitati.