Un insieme di attributi o un singolo attributo di una relazione è una chiave in (lo schema) se soddisfa le seguenti condizioni:

  1. Per ogni istanza di , non esistono due tuple distinte e che hanno gli stessi valori per tutti gli attributi di (); cioè , determina tutto .
  2. Nessun sottoinsieme proprio di soddisfa la condizione (ovviamente è verificata se l’attributo è un singleton).

Una superchiave è un insieme di attributi che contiene anche 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).

  • 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.