La normalizzazione dei dati può essere vista come un processo che consente di decomporre schemi di relazione non ottimali in schemi più piccoli, tali da garantire la mancanza di update anomalies
Le forme normali forniscono:
1NF, 2NF, 3NF, BCNF → solo vincoli di dipendenza funzionale e di chiave
4NF → dipendenza multivalued
5NF → join dependency
Una superchiave di uno schema di relazione $R = \{A_1, A_2,..,A_n\}$ è un insieme di attributi $S \subseteq R$ con la proprietà che non esistono due tuple $t_1$ e $t_2$ in qualche stato di relazione legale di r di R tali che $t_1[S] = t_2[S]$
Una chiave k è una superchiave con la proprietà aggiuntiva che la rimozione da k di un qualche attributo fa perdere a k la proprietà di superchiave
Tutte le chiavi minimali sono dette chiavi candidate, una tra esse viene scelta arbitrariamente ed è detta chiave primaria
Un attributo $A$ di uno schema di relazione $R$ è primo se e solo se fa parte di almeno una chiave candidata di $R$
<aside> <img src="/icons/exclamation-mark_purple.svg" alt="/icons/exclamation-mark_purple.svg" width="40px" /> La 1NF è stata definita per non consentire attributi multivalore, composti e le loro combinazioni
</aside>
Gli unici valori consentiti da 1NF sono valori atomici (o indivisibili)
Una dipendenza funzionale $X \to Y$è piena se la rimozione di qualche attributo A da X implica che la dipendenza non vale più, cioè: $\forall A \in X, (X \backslash \{A\}) \not \rightarrow Y$
Una dipendenza funzionale $X \to Y$ è parziale se qualche attributo $A \in X$ può essere rimosso e la dipendenza vale ancora, cioè $\exist A \in X, (X\backslash \{A\}) \rightarrow Y$