Una chiave di una relazione è uno o più attributi che permettono di identificare univocamente una tupla nella tabella. Se ci sono più chiavi, una è la chiave primaria e le altre sono le chiavi alternative.
Un insieme di attributi o un singolo attributo di una relazione è una chiave in (lo schema) se soddisfa le seguenti condizioni:
- Per ogni istanza di , non esistono due tuple distinte e che hanno gli stessi valori per tutti gli attributi di (). Ciò implica che (chiusura di un insieme di attributi), cioè determina tutto .
- Nessun sottoinsieme proprio di soddisfa la condizione (ovviamente è verificata se l’attributo è un singleton).
Una superchiave è un insieme di attributi che può contenere una o più chiavi.
N.B.: Una chiave può essere anche un insieme di attributi di cui nessuno è una chiave.
Un attributo si dice primo se appartiene a una chiave (NON a una superchiave).
Esempio:
- In un database di persone, nome + codice fiscale è la superchiave, mentre solo il codice fiscale è la vera chiave, quindi per definizione la superchiave può essere ridotta.
- Lo schema stesso è una superchiave.
Il valore di default
nullè polimorfico (tutti i tipi degli attributi sono nullable) e non viola l’unicità delle chiavi e la foreign key.