Folgende Kriterien für eine funktionierende Datenbank müssen erfüllt sein:
Datenkonsistenz:  Jeder Datensatz muss eindeutig identifizierbar, also konsistent sein,  z.B. werden Kundennummern nur ein einziges Mal vergeben. Wenn der Kunde  nicht mehr existiert,  wird die Nummer nicht erneut verwendet. Somit  sind konsistente Datensätze eindeutig unterscheidbar.
Beispiel: Selbst bei dem unwahrscheinlichen Fall, dass  zwei Kunden dieselbe Adresse haben, kann mindestens durch die einmalig  vergebene Kundennummer zwischen ihnen unterschieden werden.
Redundanzfreiheit:  Sämtliche Daten werden nur einmal erfasst und gespeichert (=sie sind  redundanzfrei). So treten bei Änderungen keine Probleme auf, da sie  zentral abgelegt sind und nur ein Mal geändert werden müssen. 
Beispiel: Ändert sich bei einem Kunden die Adresse,  muss diese nicht für jede seiner  Bestellungen erfasst und geändert  werden, sondern nur ein Mal zentral in der Kundendatenbank, da den  Bestellungen die eindeutige Kundennummer zugeordnet ist. Somit dient  diese Nummer als Schlüssel.
Normalformen
1. Normalform: Jedes Datenfeld einer Tabelle enthält  genau einen Eintrag, diese sind spaltenweise sortiert, z.B. nach  Nachname, Straße, PLZ, Ort, Produkt und Datum. In der Tabelle der 1. NF  sind alle Informationen gelistet, daher ist sie nicht konsistent und  nicht redundanzfrei.
Beispiel: Der Kunde Winkler hat Visitenkarten und eine  Website in Auftrag gegeben. Da ja jedes Datenfeld nur einen Eintrag  enthält, ist der Kunde zwei Mal in der Auftragstabelle aufgeführt, ein  Mal mit dem Produkt Website mit der Auftragsnummer 1 und ein Mal mit dem  Produkt Visitenkarten mit der Auftragsnummer 5. Diese Nummern verweisen  auf den Kunden und auf das Produkt.
2. Normalform:  Nun wird die Tabelle in mehrere Tabellen zerlegt und zwar so, dass  jeder Eintrag der entstandenen Tabellen einen eigenen Schlüssel erhält.  Dieser Schlüssel wird dann anstatt des Produktes in der Tabelle der 1.  NF aufgeführt. So befindet sich die Auftragstabelle in der 2. NF, da sie  sich zum einen in der 1. NF befindet und zum anderen alle Datenfelder  von einem Schlüssel funktional abhängig sind.
Beispiel: Die Produkte werden in einer eigenen Tabelle  aufgeführt und jedes Produkt erhält eine Produktnummer (Schlüssel). So  wird in der Auftragstabelle nun nicht das Produkt mit Namen angegeben,  sondern der Schlüssel. Somit ist der Kunde Winkler zwar immernoch zwei  Mal in der Auftragstabelle aufgeführt, jedoch ein Mal mit der  Produktnummer 1 für die Website und ein Mal mit der Produktnummer 2 für  Visitenkarten. Die Produktnummer 2 kann in der Tabelle natürlich  ebenfalls für den Kunden Mayer vorkommen, der ebenfalls Visitenkarten in  Auftrag gegeben hat.
3. Normalform:  In dieser letzten Stufe werden die verbliebenen Redundanzen beseitigt.  Die endgültige Tabelle befindet sich dann in der 3. NF, wenn sie sich  zum einen in der 2. NF befindet und zum anderen alle Datenfelder, die  keine Schlüssel sind (im Bsp. das Auftragsdatum), nicht funktional  abhängig sind.
Beispiel: Nun sind die Kundenangaben in der  Auftragstabelle funktional abhängig, also zum Kunden Winkler gehört  genau eine Straße, eine PLZ und ein Ort. Das muss nun behoben werden, da  ein weiterer Kunde namens Winkler hinzukommen kann und sich dadurch die  Adresse anhand des Namens nicht mehr eindeutig ermitteln ließe. Deshalb  wird eine weitere Tabelle mit neuem Schlüssel erstellt. Hier befinden  sich die Daten der Kunden, die spaltenweise nach Name, Straße, PLZ und  Ort aufgeführt sind. Das Wichtigste ist nun, dass jeder Kunde eine  Kundennummer (Schlüssel) erhält, der in der Auftragstabelle angegeben  werden kann. Diese Tabelle wird kann nun in die 3. NF gebracht werden:  Eine Spalte gibt die Auftragsnummer an, eine die zugehörige  Produktnummer, eine Spalte führt die Nummer des zugehörigen Kunden auf  und eine weitere Spalte kann nun das Datum des Auftrags enthalten. 
Nun ist die Normalisierung in die 3. NF abgeschlossen, alle  Daten der 3 Tabellen sind redundanzfrei und konsistent.
