Mondi su mondi, sistemi di sistemi.

Vincoli di unicità con i NULL

Anche se non amo i NULL, que­sto “trucco” che ho letto sulla mai­ling list di PostgreSQL è troppo carino per non citarlo.

Qual è il problema?

Come dice il titolo, vogliamo imporre un vin­colo di uni­cità 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 inse­rire due record con valori dupli­cati per A e B.

Salvati dagli indici parziali

La solu­zione, una volta tanto, è sem­plice: basta creare un indice par­ziale:
CREATE INDEX idx ON table_name(A,B) WHERE (C IS NULL);

Per proseguire

Commenti e trackback sono disabilitati.