Firebird Documentation IndexGuida sull'uso di NULL nel linguaggio SQL di Firebird → Chiavi ed indici univoci
Firebird Home Firebird Home Indietro: Frasi condizionali e ciclicheFirebird Documentation IndexRisali: Guida sull'uso di NULL nel linguaggio SQL di FirebirdAvanti: Vincoli di controllo (CHECK constraints)

Chiavi ed indici univoci

Le chiavi primarie
Chiavi ed indici univoci
Le chiavi esterne

Le chiavi primarie

I NULL non sono mai permessi nelle chiavi primarie. Una colonna che sia (parte di) una chiave primaria (primary key o PK) deve essere definita come NOT NULL o nella colonna stessa o nella definizione del dominio. Notare che un vincolo «CHECK (XXX IS NOT NULL)» non funziona: è proprio necessaria la specifica NOT NULL subito dopo il tipo di dato.

Avvertimento

Firebird 1.5 ha un problema che permette la definizione di chiavi primarie su colonne NOT NULL che possono contenere valori NULL. Come questo possa succedere, e ci possano essere NULL in colonne del genere lo spieghiamo più avanti.

Chiavi ed indici univoci

Firebird 1.0

In Firebird 1.0, le chiavi univoche sono soggette alle stesse restrizioni delle chiavi primarie: la colonna o le colonne che ne fanno parte devono essere definite come NOT NULL. Per gli indici univoci, questo non è necessario. Tuttavia, quando viene creato un indice univoco, la tabella non deve contenere nè NULL o valori duplicati nei campi coinvolti, altrimenti la creazione dell'indice fallisce. Una volta creato, risulta impossibile inserire NULL o valori duplicati.

Firebird 1.5 e successivi

Da Firebird 1.5, lke chiavi univoche e gli indici univoci non solo permettono i NULL, ma perfino permettono NULL molteplici. Con una chiave o un indice di una sola colonna, si possono iserire quanti NULL si vuole in quella colonna, ovviamente ogni valore non NULL si può inserirer solo una volta.

Se la chiave o l'indice risulta definita su più di una colonna in Firebird 1.5 e successivi:

  • Si possono inserire più righe dove tutte le colonne della chiave o indice sono NULL;

  • Non appena uno o più colonne della chiave non sono NULL, ogni combinazioni di valori diversi da NULL deve essere univoca nella tabella. Ovviamente va compreso che (1, NULL) non è la stessa cosa di (NULL, 1).

Le chiavi esterne

Le chiavi esterne in quanto tali non impongono restrizioni ai NULL. Le colonne delle chiavi esterne devono sempre riferirsi a colonne (o insiemi di colonne) che sono chiavi primarie o univoche. Un indice univoco con la colonna o le colonne riferite non è sufficiente.

Nota

Nelle versioni fino alla 2.0 inclusa, cercando di creare una chiave esterna su una destinazione che non è chiave primaria nè una chiave univoca, Firebird lamenta il fatto che non ci riesce a trovare nessun indice univoco anche se un tale indice esiste. In Firebird 2.1, il messaggio correttamente informa che non vi esiste nessuna chiave univoca o primaria.

Ad ogni modo, anche se i NULL sono assolutamente proibiti nella chiave di destinazione (per esempio quando sono verso chiavi primarie), una qualsiasi colonna appartenente ad una chiave esterna può acora contenere NULL, a meno che non sia impedito da vincoli addizionali.

Indietro: Frasi condizionali e ciclicheFirebird Documentation IndexRisali: Guida sull'uso di NULL nel linguaggio SQL di FirebirdAvanti: Vincoli di controllo (CHECK constraints)
Firebird Documentation IndexGuida sull'uso di NULL nel linguaggio SQL di Firebird → Chiavi ed indici univoci