Zum Hauptinhalt springen

Datenbankschema

Ein Datenbankschema beschreibt die Struktur einer relationalen Datenbank: ihre Tabellen, deren Spalten mit Datentypen, die Schlüssel und die Verweise zwischen den Tabellen. Anders als das ER-Modell ist es an das Relationenmodell gebunden. Beziehungen existieren nicht mehr als eigene Elemente und werden stattdessen über Fremdschlüssel und Verbindungstabellen ausgedrückt. Das Schema entsteht in der semantischen Phase der Datenbankentwicklung und wird in der physischen Phase mit CREATE TABLE-Anweisungen umgesetzt.

Begriffe​

Relationaler BegriffGängiger BegriffBedeutung
RelationTabelleMenge von Zeilen mit denselben Attributen
TupelZeile, DatensatzEin Eintrag einer Tabelle
AttributSpalteEine Eigenschaft, die jede Zeile der Tabelle besitzt
DomäneDatentypMenge der Werte, die ein Attribut annehmen darf
RelationenschemaTabellendefinitionName der Tabelle und ihre Attribute
DatenbankschemaDatenbankstrukturAlle Relationenschemata einer Datenbank und ihre Bedingungen

Schlüssel​

  • Schlüsselkandidat: Eine minimale Menge von Attributen, die jede Zeile eindeutig identifiziert. Eine Tabelle kann mehrere besitzen, z.B. CustomerID und Email.
  • Primärschlüssel (PK): Der zur Identifikation der Zeilen gewählte Schlüsselkandidat. Er muss eindeutig sein und darf nicht NULL sein.
  • Zusammengesetzter Schlüssel: Ein Schlüssel aus mehreren Attributen, z.B. (OrderID, LineNumber).
  • Fremdschlüssel (FK): Ein oder mehrere Attribute, die auf den Primärschlüssel einer anderen Tabelle oder derselben Tabelle verweisen. Er kann zugleich Teil des Primärschlüssels sein, etwa in einer Verbindungstabelle oder in der Tabelle einer schwachen Entität.
  • Natürlicher Schlüssel: Ein Schlüssel, der aus den Daten selbst stammt, z.B. eine ISBN.
  • Surrogatschlüssel: Ein künstlicher Schlüssel ohne Bedeutung außerhalb der Datenbank, meist eine automatisch hochgezählte Nummer oder eine UUID.

Notation​

Textuelle Notation​

Jede Tabelle wird als ihr Name mit den Attributen in Klammern geschrieben:

KennzeichnungBedeutung
UnterstrichenPrimärschlüssel; bei einem zusammengesetzten Schlüssel wird jeder Teil unterstrichen
Vorangestelltes # oder ↑, teils gestrichelt unterstrichenFremdschlüssel
Zusatz PK oder FKErsatz in reinem Text, wo keine Unterstreichung möglich ist

Ein Attribut, das zugleich Primärschlüssel und Fremdschlüssel ist, wird unterstrichen und mit # gekennzeichnet.

Tabellendiagramm​

  • Kasten: Eine Tabelle, mit dem Tabellennamen als Kopfzeile und den Spalten unterhalb der Linie
  • PK und FK: Kennzeichnung vor einer Spalte; PK FK kennzeichnet eine Spalte, die beides ist
  • Linie: Fremdschlüsselverweis zwischen zwei Tabellen
  • Linienenden: Kardinalität, entweder 1 oder N

Überführung aus einem ER-Modell​

ER-ElementDatenbankschema
EntitätstypTabelle
AttributSpalte
SchlüsselattributPrimärschlüssel
Zusammengesetztes AttributEine Spalte je Unterattribut, z.B. Street, City, ZIP
Mehrwertiges AttributEigene Tabelle mit einem Fremdschlüssel auf den Eigentümer, z.B. PhoneNumbers (#CustomerID, Number)
Abgeleitetes AttributMeist nicht gespeichert, sondern in der Abfrage berechnet
1:1-BeziehungFremdschlüssel mit UNIQUE-Constraint in einer der beiden Tabellen
1:N-BeziehungFremdschlüssel in der Tabelle auf der N-Seite
N:M-BeziehungVerbindungstabelle, deren Primärschlüssel aus den Fremdschlüsseln auf beide Tabellen besteht
BeziehungsattributSpalte in der Tabelle mit dem Fremdschlüssel, bei N:M in der Verbindungstabelle
Schwache EntitätTabelle, deren Primärschlüssel den Primärschlüssel des Eigentümers (zugleich Fremdschlüssel) und den Teilschlüssel kombiniert
Totale Teilnahme auf der N-SeiteFremdschlüssel mit NOT NULL

Eine N:M-Beziehung zwischen Studenten und Kursen mit dem Beziehungsattribut EnrolledOn:

Students (StudentID, Name)
─────────
Courses (CourseID, Title)
────────
Enrollments (#StudentID, #CourseID, EnrolledOn)
────────── ─────────

Referenzielle Integrität​

Jeder Fremdschlüsselwert muss einem vorhandenen Primärschlüsselwert in der referenzierten Tabelle entsprechen oder NULL sein, sofern die Spalte das zulässt. Das DBMS weist ein Einfügen oder Ändern ab, das diese Regel verletzt. Was beim Löschen einer referenzierten Zeile (ON DELETE) oder beim Ändern ihres Primärschlüssels (ON UPDATE) geschieht, wird je Fremdschlüssel festgelegt:

OptionWirkung beim Löschen der referenzierten Zeile
RESTRICT / NO ACTIONLöschen wird abgewiesen, solange verweisende Zeilen existieren (Standard)
CASCADEVerweisende Zeilen werden mitgelöscht, z.B. die Positionen einer gelöschten Bestellung
SET NULLFremdschlüssel wird auf NULL gesetzt; die Spalte muss NULL zulassen

Beispiel: Bestellverwaltung​

Aus dem Beispiel des ER-Modells werden drei Tabellen. Die 1:N-Beziehung places wird zum Fremdschlüssel CustomerID in Orders. Die identifizierende Beziehung contains macht OrderID zum Teil des Primärschlüssels von OrderItems.

Customers (CustomerID, Name, Email)
──────────
Orders (OrderID, #CustomerID, OrderDate)
───────
OrderItems (#OrderID, LineNumber, Quantity)
──────── ──────────
┌─────────────────────┐ ┌──────────────────────┐
│ Customers │ │ Orders │
├─────────────────────┤ ├──────────────────────┤
│ PK CustomerID │1 N│ PK OrderID │
│ Name ├──────────┤ FK CustomerID │
│ Email │ │ OrderDate │
└─────────────────────┘ └──────────┬───────────┘
│ 1
│
│ N
┌──────────┴───────────┐
│ OrderItems │
├──────────────────────┤
│ PK FK OrderID │
│ PK LineNumber │
│ Quantity │
└──────────────────────┘
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Email VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
OrderDate DATE NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES Customers (CustomerID)
);

CREATE TABLE OrderItems (
OrderID INT NOT NULL,
LineNumber INT NOT NULL,
Quantity INT NOT NULL,
PRIMARY KEY (OrderID, LineNumber),
FOREIGN KEY (OrderID) REFERENCES Orders (OrderID) ON DELETE CASCADE
);

Häufige Fehler​

  1. Linie ohne Fremdschlüsselspalte: Eine Linie zwischen zwei Tabellen erzeugt keinen Verweis, solange die Fremdschlüsselspalte in der Tabelle auf der N-Seite fehlt.
  2. Fremdschlüssel auf der 1-Seite: Eine Spalte OrderID in Customers kann je Kunde nur eine Bestellung aufnehmen.
  3. N:M ohne Verbindungstabelle: Eine Fremdschlüsselspalte enthält je Zeile nur einen Wert, daher beschränkt ein Fremdschlüssel in einer der beiden Tabellen diese Seite auf einen Partner.
  4. Verbindungstabelle nur mit Surrogatschlüssel: Ist das Paar der Fremdschlüssel weder Primärschlüssel noch UNIQUE, kann sich derselbe Student zweimal für denselben Kurs einschreiben.
  5. ER-Notation im Schema: Rauten, Attribut-Ellipsen und Beziehungsnamen gehören ins ER-Diagramm. Das Schema zeigt Tabellen, PK- und FK-Kennzeichnungen und Verweise.
  6. Reservierte Wörter als Tabellennamen: ORDER und GROUP sind in SQL reserviert und müssen als Tabellennamen in jeder Anweisung maskiert oder ersetzt werden.

Siehe auch​