Informatik

Relationale Datenbank: Aufbau und Normalisierung

Relationale Datenbank: Aufbau und Normalisierung
Relationale Datenbank: Aufbau und Normalisierung
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Eine relationale Datenbank speichert zusammengehörige Daten in Tabellen. Primärschlüssel identifizieren Zeilen eindeutig, Fremdschlüssel verbinden Tabellen. Ein gutes Schema vermeidet unnötige Wiederholungen und hält Beziehungen widerspruchsfrei.

Auf dieser Seite entwickelst du aus einem Bestellbeispiel ein relationales Schema und prüfst es bis zur dritten Normalform.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Wie ist eine relationale Datenbank aufgebaut?

Stell dir einen Onlinehandel vor. Kundendaten, Bestellungen und Produkte werden nicht in einer einzigen langen Liste gesammelt. Sie liegen in mehreren Tabellen, die über passende Schlüsselwerte verbunden sind.

Definition

Relation

Eine Relation ist im praktischen Datenbankmodell eine Tabelle. Eine Zeile ist ein Datensatz, auch Tupel genannt. Eine Spalte beschreibt ein Merkmal und heißt Attribut. Eine einzelne Zelle enthält einen Attributwert.

Beispiel für eine Tabelle kunden:

kunden_nrfirmaort
27Firence GmbHStuttgart
31Henning GmbHHeidelberg

kunden_nr, firma und ort sind Attribute. Die Zeile mit der Nummer 31 ist ein Datensatz. Heidelberg ist ein Attributwert.

Das Schema ist der Bauplan: Es legt Tabellen, Attribute, Datentypen, Schlüssel, Beziehungen und Bedingungen fest. Der aktuelle Tabelleninhalt sind dagegen die gespeicherten Daten.

Merke

Tabelle = Menge gleichartig aufgebauter Datensätze; Zeile = Datensatz; Spalte = Attribut.

Teste dich
Frage 1 von 1LeichtWas ist in der Tabelle kunden das Attribut?
Lösung: firma — Ein Attribut beschreibt eine Spalte. Heidelberg ist nur ein Wert in der Spalte ort.
Wie verbinden Schlüssel die Tabellen?

Eine Kundennummer soll nicht zwei verschiedene Kunden bezeichnen. Deshalb braucht jede Tabelle eine zuverlässige Identifikation.

Definition

Primärschlüssel

Ein Primärschlüssel ist ein Attribut oder eine minimale Attributkombination, deren Wert jede Zeile einer Tabelle eindeutig identifiziert. Ein künstlicher Schlüssel wie kunden_nr ist sinnvoll, wenn Namen nicht dauerhaft eindeutig sind.

Definition

Fremdschlüssel

Ein Fremdschlüssel ist ein Attribut, das auf den Primärschlüssel einer anderen Tabelle verweist. Er stellt eine Beziehung zwischen Datensätzen her.

text kunden(kunden_nr PK, firma, ort) bestellungen(bestell_nr PK, datum, kunden_nr FK)

In bestellungen identifiziert bestell_nr jede Bestellung. kunden_nr verweist auf kunden. So kann das System zu einer Bestellung den richtigen Kunden finden, ohne Firma und Ort in jeder Bestellung erneut zu speichern.

Ein Schlüssel muss nicht immer aus genau einem Attribut bestehen. In einer Bestellposition kann etwa die Kombination (bestell_nr, produkt_nr) eindeutig sein. Das heißt zusammengesetzter Primärschlüssel.

Beispiel

Bestellung 501 gehört Kunde 31. In bestellungen steht deshalb kunden_nr = 31. Die Kundendaten selbst bleiben in kunden. Ändert sich die Anschrift, wird sie nur dort geändert.

Teste dich
Frage 1 von 1MittelWarum steht kunden_nr als Fremdschlüssel in bestellungen?
Lösung: Damit jede Bestellung auf genau den zugehörigen Kunden verweisen kann. — Der Primärschlüssel identifiziert die Bestellung. Der Fremdschlüssel verbindet sie mit einem vorhandenen Kunden.
Wo liegt der Fremdschlüssel bei Beziehungen?

Die Kardinalität beschreibt, wie viele Datensätze auf beiden Seiten einer Beziehung zusammengehören können.

  • 1:1: Zu einem Datensatz gehört höchstens ein Datensatz der Gegenseite.
  • 1:N: Ein Datensatz der 1-Seite kann mit mehreren Datensätzen der N-Seite verbunden sein.
  • N:M: Auf beiden Seiten können jeweils mehrere Datensätze zusammengehören.

Bei Kunde 1:N Bestellung kann ein Kunde mehrere Bestellungen aufgeben. Jede Bestellung gehört in diesem Modell zu genau einem Kunden. Daher steht der Primärschlüssel der 1-Seite als Fremdschlüssel auf der N-Seite:

text kunden(kunden_nr PK, firma) bestellungen(bestell_nr PK, datum, kunden_nr FK)

Bei Bestellung N:M Produkt reicht ein einzelner Fremdschlüssel nicht. Eine Bestellung kann mehrere Produkte enthalten, und ein Produkt kann in mehreren Bestellungen vorkommen. Deshalb entsteht eine Verbindungstabelle:

text produkte(produkt_nr PK, bezeichnung) bestellungen(bestell_nr PK, datum, kunden_nr FK) bestellpositionen(bestell_nr PK/FK, produkt_nr PK/FK, menge)

menge gehört zur Verbindung: Sie sagt, wie oft ein bestimmtes Produkt in einer bestimmten Bestellung vorkommt.

Merke

Bei 1:N wandert der Schlüssel der 1-Seite als Fremdschlüssel auf die N-Seite. Bei N:M brauchst du eine Verbindungstabelle mit Fremdschlüsseln auf beide Seiten.

Teste dich
Frage 1 von 1MittelEin Kurs hat viele Teilnehmende, und eine Person kann viele Kurse belegen. Wie wird das umgesetzt?
Lösung: Mit einer Verbindungstabelle belegungen, die auf Person und Kurs verweist. — Die Beziehung ist N:M. Die Verbindungstabelle enthält beide Fremdschlüssel und kann zusätzlich Beziehungsattribute wie bezahlt aufnehmen.
Wie entsteht aus der Wirklichkeit ein Schema?

Beginne nicht sofort mit Tabellen. Kläre zuerst, welche Dinge, Ereignisse und Beziehungen im betrachteten Ausschnitt wichtig sind.

  1. Entitäten finden: Das sind eindeutig bestimmbare Objekte oder Ereignisse, etwa Kunde, Produkt und Bestellung.
  2. Entitätstypen bilden: Gleichartig aufgebaute Entitäten erhalten einen gemeinsamen Bauplan.
  3. Attribute und Wertebereiche festlegen: Zum Produkt gehören etwa Bezeichnung und Lagerbestand. Eine Postleitzahl wird als Zeichenkette gespeichert, weil sie keine Rechengröße ist und mit null beginnen kann.
  4. Primärschlüssel wählen: Namen eignen sich oft nicht, weil sie doppelt vorkommen oder sich ändern können.
  5. Beziehungen und Kardinalitäten bestimmen: Formuliere dazu Regeln wie „Ein Kunde kann mehrere Bestellungen aufgeben“.
  6. In Tabellen überführen: Jeder Entitätstyp wird eine Tabelle; 1:N und N:M werden nach den Schlüsselregeln umgesetzt.
Beispiel

Für den Satz „Eine Bestellung enthält mehrere Produkte; die bestellte Menge gehört zur jeweiligen Position“ erkennst du:

  • Entitätstypen: Bestellung und Produkt
  • Beziehung: N:M
  • Verbindungstabelle: Bestellposition
  • Beziehungsattribut: menge

Das vollständige Teilschema lautet:

text bestellungen(bestell_nr PK, datum) produkte(produkt_nr PK, bezeichnung) bestellpositionen(bestell_nr PK/FK, produkt_nr PK/FK, menge)

Teste dich
Frage 1 von 1SchwerIn einem Orchester kann eine Person mehrere Instrumente spielen, und ein Instrument wird von mehreren Personen gespielt. Zusätzlich soll erfasst werden, seit wann die Zuordnung gilt. Welches Modell passt?
Lösung: Eine Verbindungstabelle zwischen Personen und Instrumenten mit dem Attribut seit. — Die N:M-Beziehung braucht eine eigene Tabelle. Das Datum seit beschreibt die einzelne Zuordnung und gehört deshalb in diese Tabelle.
Wie bleiben Beziehungen widerspruchsfrei?
Definition

Referentielle Integrität

Referentielle Integrität bedeutet: Jeder gespeicherte Fremdschlüssel verweist auf einen tatsächlich vorhandenen Primärschlüsselwert der anderen Tabelle oder ist bei einer erlaubten optionalen Beziehung leer.

Ein Auftrag mit kunden_nr = 99 ist ungültig, wenn es keinen Kunden 99 gibt. Ebenso darf ein Kunde nicht einfach gelöscht werden, solange Bestellungen auf ihn verweisen, sofern keine andere Löschregel festgelegt ist.

Auch Transaktionen schützen den Datenbestand. Eine Transaktion fasst zusammengehörige Änderungen zu einer Einheit zusammen. Die ACID-Eigenschaften verlangen:

  • Atomarität: ganz oder gar nicht;
  • Konsistenz: festgelegte Regeln bleiben erfüllt;
  • Isolation: gleichzeitig laufende Transaktionen stören einander nicht unkontrolliert;
  • Dauerhaftigkeit: bestätigte Änderungen bleiben gespeichert.

SQL ist die typische Sprache, um relationale Daten zu definieren, abzufragen und zu verändern. Das Datenbankmanagementsystem, kurz RDBMS, führt solche Anweisungen aus und überwacht unter anderem Schlüsselregeln und gleichzeitige Zugriffe.

Teste dich
Frage 1 von 1MittelWarum muss eine Überweisung als zusammengehörige Transaktion behandelt werden?
Lösung: Damit Abbuchung und Gutschrift gemeinsam vollständig ausgeführt oder gemeinsam verworfen werden. — Atomarität schützt zusammengehörige Schritte: Entweder gelingen alle oder keiner wird übernommen.
Wie beseitigt Normalisierung Datenprobleme?

Redundanz bedeutet, dass dieselbe Information unnötig mehrfach gespeichert wird. Das kann zu Anomalien führen: Eine Anschrift wird nur in einigen Zeilen geändert, ein neuer Kunde lässt sich ohne Bestellung nicht einfügen oder die letzte Bestellung löscht unbeabsichtigt auch die einzige gespeicherte Kundeninformation.

Normalisierung zerlegt Tabellen anhand funktionaler Abhängigkeiten. A → B bedeutet: Ein Wert von A bestimmt genau einen Wert von B.

Erste Normalform: einzelne Werte

Eine Tabelle ist in der ersten Normalform (1NF), wenn jedes Attribut pro Zeile genau einen atomaren Wert enthält. Eine Zelle wie Produkt = Tisch, Regal wird daher in einzelne Bestellpositionen aufgeteilt.

Zweite Normalform: vom ganzen Schlüssel abhängig

Eine Tabelle ist in der zweiten Normalform (2NF), wenn sie in 1NF ist und jedes Nichtschlüsselattribut vom gesamten zusammengesetzten Primärschlüssel abhängt.

Betrachte:

text positionen(bestell_nr PK, produkt_nr PK, datum, produktname, menge)

Der Schlüssel ist (bestell_nr, produkt_nr). Aber datum hängt nur von bestell_nr ab und produktname nur von produkt_nr. Deshalb werden die Daten getrennt:

text bestellungen(bestell_nr PK, datum) produkte(produkt_nr PK, produktname) positionen(bestell_nr PK/FK, produkt_nr PK/FK, menge)

menge bleibt in positionen, weil sie erst durch die Kombination aus Bestellung und Produkt bestimmt wird.

Dritte Normalform: keine Abhängigkeit über Umwege

Eine Tabelle ist in der dritten Normalform (3NF), wenn sie in 2NF ist und kein Nichtschlüsselattribut von einem anderen Nichtschlüsselattribut abhängt.

Nimm diese Tabelle:

text bestellungen(bestell_nr PK, datum, kunden_nr, kundenname)

Es gilt: bestell_nr → kunden_nr und kunden_nr → kundenname. Der Kundenname hängt also nur über einen Umweg von der Bestellnummer ab. Zerlege deshalb:

text kunden(kunden_nr PK, kundenname) bestellungen(bestell_nr PK, datum, kunden_nr FK)

Merke

1NF: ein Wert pro Feld. 2NF: jedes Nichtschlüsselattribut hängt vom ganzen zusammengesetzten Schlüssel ab. 3NF: kein Nichtschlüsselattribut hängt über ein anderes Nichtschlüsselattribut vom Schlüssel ab.

Teste dich
Frage 1 von 3LeichtWelche Zelle verletzt die erste Normalform?
Lösung: instrumente = Geige, Bratsche — Eine Liste mehrerer Instrumente in einer Zelle muss in einzelne Zuordnungen zerlegt werden.
Frage 2 von 3MittelIn positionen(bestell_nr, produkt_nr, datum, menge) ist der Schlüssel zusammengesetzt. Warum gehört datum in bestellungen?
Lösung: Weil das Datum nur von bestell_nr, nicht vom gesamten Positionsschlüssel abhängt. — Die 2NF beseitigt partielle Abhängigkeiten. Das Bestelldatum beschreibt die Bestellung, nicht die Kombination aus Bestellung und Produkt.
Frage 3 von 3Schwerschueler(schueler_nr, name, schul_nr, schulname) ist bereits in 2NF. Welche Zerlegung führt zur 3NF?
Lösung: schueler(schueler_nr PK, name, schul_nr FK) und schulen(schul_nr PK, schulname)schueler_nr bestimmt schul_nr, und schul_nr bestimmt schulname. Die eigene Schultabelle entfernt diese transitive Abhängigkeit.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Relationale Datenbank
    • Aufbau: Tabellen, Zeilen und Attribute
    • Identifikation: Primärschlüssel
    • Verbindung: Fremdschlüssel
    • Beziehungen: 1:1, 1:N und N:M
    • Schutz: referentielle Integrität und Transaktionen
    • Qualität: Normalisierung bis 3NF
  • Modellierungsweg
    • Realitätsausschnitt untersuchen
    • Entitäten und Attribute bestimmen
    • Kardinalitäten festlegen
    • Tabellen und Schlüssel bilden
    • Abhängigkeiten prüfen
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Aussage beschreibt einen Fremdschlüssel richtig?
Lösung: Er verweist auf einen Primärschlüsselwert einer anderen Tabelle. — Ein Fremdschlüssel verbindet Tabellen. Mehrere Zeilen dürfen denselben Fremdschlüsselwert tragen, etwa mehrere Bestellungen desselben Kunden.
Frage 2 von 3MittelEin Kunde kann mehrere Aufträge erteilen; jeder Auftrag gehört genau einem Kunden. Wo steht der Fremdschlüssel?
Lösung: In auftraege als Verweis auf kunden — Es ist eine 1:N-Beziehung. Der Schlüssel der 1-Seite kunden wird auf der N-Seite auftraege gespeichert.
Frage 3 von 3SchwerEine Tabelle lautet belegung(teilnehmer_nr, kurs_nr, teilnehmername, kursname, bezahlt); der Primärschlüssel ist (teilnehmer_nr, kurs_nr). Welche Zerlegung beseitigt die partiellen Abhängigkeiten?
Lösung: teilnehmer(teilnehmer_nr, teilnehmername), kurse(kurs_nr, kursname) und belegungen(teilnehmer_nr, kurs_nr, bezahlt)teilnehmername hängt nur von teilnehmer_nr, kursname nur von kurs_nr ab. bezahlt beschreibt dagegen die konkrete Belegung und bleibt in belegungen.

Du bist fertig, wenn du bei einem neuen Fall erst die fachlichen Beziehungen formulierst, dann Schlüssel setzt und anschließend jede Abhängigkeit begründen kannst.

Passend dazu