In der Datenbank des Onlineshops werden die Rechnungsdaten den Attributen Rechnungsnummer (R.-Nr.), Datum, Kunde, Kundennummer (K.-Nr.), Adresse, Rechnungspositionsnummer (P.-Nr.), Artikel, Artikelnummer (Art.-Nr.), Anzahl (Anz.) und Preis zugeordnet. Jede Zeile der Tabelle steht für einen Datensatz. Ein solcher Datensatz wird als Tupel bezeichnet.
Der oben dargestellte Datenbankausschnitt fungiert als Beispiel für einschlechtes Datenbankdesign. Bereits auf den ersten Blick fällt auf, dass die Tabelle zahlreiche Redundanzen aufweist. Hinzu kommt, dass die Wertebereiche in den Spalten Kunde und Adresse mehrwertige Daten enthalten. Man spricht von einer nicht normalisierten Datenbank.
Der größte Nachteil nichtnormalisierter Datenbanken ist der erhöhte Speicherbedarf infolge redundanter Werte. Außerdem lassen sich Attribute, die mehrwertige Daten enthalten, schlecht auslesen und miteinander in Beziehung setzen.
Beispiel: Beide Kunden im oben aufgeführten Datenbankausschnitt sind in Musterhausen ansässig. Doch da diese Information nicht separat erhoben wurde, lässt sich die Datenbank nicht ohne Weiteres nach Kunden aus demselben Ort filtern.
Um doppelte und mehrwertige Wertebereiche zu vermeiden, sind im Rahmen relationaler Datenbankmodelle drei aufeinander aufbauende Normalformen entwickelt worden.
Bei einer Normalform handelt es sich um einen definierten Zielzustand. Für jede Normalform wurden spezielle Anforderungen festgelegt, die erfüllt sein müssen, wenn dieser Zielzustand eintreten soll. Eine Datenbank entspricht also genau dann der 1., 2. oder 3. Normalform, wenn alle Voraussetzungen für die jeweilige Normalform erfüllt sind.