1.3 Realisierung

In der Realisierungsphase wird auf Grundlage des relationalen Datenmodells mit Hilfe einer Data Definition Language (DDL) die relationale Datenbank erstellt. Wir nutzen hierzu die Datenbanksprache SQL, die unter anderem über Befehle zur Definition der Datenbank­struktur (Datenbank­schema) verfügt und von fast allen gängigen relationalen Datenbanksystemen unterstützt wird. Viele Hersteller von Datenbanksystemen halten sich jedoch nicht vollständig an den SQL-Standard und bieten eigene Erweiterungen und Besonderheiten an.

Datenbanksystem

Ein Datenbanksystem besteht aus einer Verwaltungssoftware, dem so genannten Datenbankmanagementsystem (DBMS), und den eigentlichen Datenbanken, die die zu verwaltenden Daten enthalten. Das DBMS ist unter anderem dafür zuständig, SQL-Befehle, zum Beispiel von Anwendungsprogrammen, entgegenzunehmen und auszuführen.

img/Abb_1_27_Datenbanksystem.svg
Abb. 1-27: Datenbanksystem

Anlegen einer Datenbank

Beispiel

Wir teilen dem DBMS mit, dass es eine neue Datenbank namens Fahrradvermietung anlegen soll:

SQL
CREATE DATABASE Fahrradvermietung;
Abb. 1-28: Anlegen der Datenbank Fahrradvermietung

Die SQL Syntax beschreibt die Grundstruktur von SQL-Anweisungen. Platzhalter werden dabei im Folgenden stets klein geschrieben und kursiv dargestellt. Schlüsselworte beziehungsweise reservierte Worte schreiben wir stets komplett in Großbuchstaben. Technisch ist dies zwar nicht notwendig, doch insbesondere komplexere SQL-Anweisungen sind so leichter zu verstehen.

Jede SQL-Anweisung wird durch einen Strichpunkt abgeschlossen.

SQL
CREATE DATABASE datenbank;
Abb. 1-29: SQL Syntax – CREATE DATABASE
Merke: Anlegen der Datenbank

Auswahl einer Datenbank

Beispiel

Wir teilen dem DBMS mit, dass alle folgenden SQL-Anweisungen die Datenbank Fahrradvermietung betreffen:

SQL
USE Fahrradvermietung;
Abb. 1-30: Auswahl der Datenbank Fahrradvermietung

Das USE-Statement wird von vielen Datenbanksystemen unterstützt, gehört jedoch nicht zum SQL-Standard.

SQL
USE datenbank;
Abb. 1-31: SQL Syntax – USE
Merke: Auswahl einer Datenbank

Anlegen einer Tabelle

Beispiel

Das Relationenmodell gibt vor, welche Tabellen benötigt werden, über welche Spalten(überschriften) diese jeweils verfügen sollen und welche Spalten Primär- beziehungsweise Fremdschlüssel aufnehmen.

  • Kunde(ID, Vorname, Nachname)
  • Mietvertrag(ID, Abschlussdatum, Mietbeginn, Mietdauer, ↑Kunde_ID)
  • Fahrrad(ID, Kennung, ↑Fahrradtyp_ID)
  • Fahrradtyp(ID, Bezeichnung)
  • Mietvertrag_vermietet_Fahrrad(↑Mietvertrag_ID, ↑Fahrrad_ID)
Abb. 1-32: Relationen Fahrradvermietung.

Wir teilen dem DBMS mit, dass es eine neue Tabelle namens Kunde anlegen soll. Dabei geben wir deren Spalten(überschriften) an und legen fest, welchem Datentyp die Werte der jeweiligen Spalte angehören. Außerdem geben wie bekannt, welche Spalte als Primärschlüssel dient.

SQL
CREATE TABLE Kunde(
ID INTEGER NOT NULL,
Vorname VARCHAR(30),
Nachname VARCHAR(30),
PRIMARY KEY(ID));
Abb. 1-33: Anlegen der Tabelle Kunde

Als nächstes soll das DBMS die Tabelle Mietvertrag anlegen. Hierbei müssen wir berücksichtigen, dass deren Spalte Kunde_ID Fremdschlüssel aufnimmt, die auf jeweils einen Datensatz der Tabelle Kunde verweisen. Die Tabelle Kunde muss daher in der Datenbank vorhanden sein, bevor die Tabelle Mietvertrag angelegt werden kann.

SQL
CREATE TABLE Mietvertrag(
ID INTEGER NOT NULL,
Abschlussdatum DATE,
Mietbeginn DATE,
Mietdauer INTEGER,
Kunde_ID INTEGER NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(Kunde_ID) REFERENCES Kunde(ID));
Abb. 1-34: Anlegen der Tabelle Mietvertrag

Da die Relation Mietvertrag_vermietet_Fahrrad einen Fremdschlüssel enthält, der auf die Relation Fahrrad verweist, und diese wiederum einen Fremdschlüssel, der der auf die Relation Fahrradtyp verweist, müssen wir zunächst die Tabelle Fahrradtyp, anschließend die Tabelle Fahrrad und dann die Tabelle Mietvertrag_vermietet_Fahrrad erzeugen.

SQL
CREATE TABLE Fahrradtyp(
ID INTEGER NOT NULL,
Bezeichnung VARCHAR(30),
PRIMARY KEY(ID));
Abb. 1-35: Anlegen der Tabelle Fahrradtyp
SQL
CREATE TABLE Fahrrad(
ID INTEGER NOT NULL,
Kennung VARCHAR(10),
Fahrradtyp_ID INTEGER NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(Fahrradtyp_ID) REFERENCES Fahrradtyp(ID));
Abb. 1-36: Anlegen der Tabelle Fahrrad

Beim Erstellen der Tabelle Mietvertrag_vermietet_Fahrrad gibt es zwei Besonderheiten. Zum einen besteht der Primärschlüssel der zugrundeliegenden Relation aus zwei Attributen und zum anderen dienen diese beiden Attribute gleichzeitig als Fremdschlüssel.

SQL
CREATE TABLE Mietvertrag_vermietet_Fahrrad(
Mietvertrag_ID INTEGER NOT NULL,
Fahrrad_ID INTEGER NOT NULL,
PRIMARY KEY(Mietvertrag_ID, Fahrrad_ID),
FOREIGN KEY(Mietvertrag_ID) REFERENCES Mietvertrag(ID),
FOREIGN KEY(Fahrrad_ID) REFERENCES Fahrrad(ID));
Abb. 1-37: Anlegen der Tabelle Mietvertrag_vermietet_Fahrrad
SQL
CREATE TABLE tabelle(
{attribut DATENTYP [NOT NULL]} [, ...],
PRIMARY KEY(attribut [, ...])
[{, FOREIGN KEY(attribut) REFERENCES tabelle2(attribut)} [, ...]]);
Abb. 1-38: SQL Syntax – CREATE TABLE
Merke: Anlegen einer Tabelle

Ein Datentyp beschreibt alle möglichen Datenwerte, die eine Spalte eines Datensatzes annehmen kann.

Datentyp Erläuterung Beispiel
VARCHAR(n) Zeichenkette variabler Länge mit maximal n Zeichen. "Maier"
INTEGER Ganze Zahl 1500
DECIMAL(n,m) Festkommazahl mit maximal n Stellen, davon m nach dem Komma. 99.123
DATE Datum "2007-05-30"
Abb. 1-39: Datentypen (MySQL)
Merke: Datentypen
Aufgabe

Aufgabe 1-3: Fuhrpark

Erstellen Sie für jede der folgenden Relationen die SQL-Anweisungen zur Erzeugung der entsprechenden Tabellen. Geben Sie dabei bei jeder Tabelle an, welche anderen Tabellen gegebenenfalls vorhanden sein müssen, bevor diese erzeugt werden kann.

Informationen
  • Die Personalnummer ist eine ganze Zahl
  • Zahlen werden grundsätzlich ohne Einheit erfasst. Als Datentyp ist INTEGER oder DECIMAL zu wählen.
  • Als Verbrauch soll maximal die Zahl 99,9 erfasst werden.
  • Als Anschaffungskosten soll maximal die Zahl 9.999.999,99 erfasst werden können
Relationenmodell
  • Mitarbeiter(ID, PersNr, Vorname, Nachname) Lösung
    Lösung
    SQL
    CREATE TABLE Mitarbeiter(
    ID INTEGER NOT NULL,
    PersNr VARCHAR(11),
    Vorname VARCHAR(30),
    Nachname VARCHAR(30),
    PRIMARY KEY(ID));
    Abb. 1-40: Tabelle Mitarbeiter
  • Reservierung(ID, Zweck, Beginn, Ende, ↑Mitarbeiter_ID, ↑Fahrzeug_ID) Lösung
    Lösung

    Die Tabellen Mitarbeiter und Fahrzeug müssen vorhanden sein, bevor diese Tabelle erzeugt werden kann.

    SQL
    CREATE TABLE Reservierung(
    ID INTEGER NOT NULL,
    Zweck VARCHAR(30),
    Beginn DATE,
    Ende DATE,
    Mitarbeiter_ID INTEGER NOT NULL,
    Fahrzeug_ID INTEGER NOT NULL,
    PRIMARY KEY(ID),
    FOREIGN KEY(Mitarbeiter_ID) REFERENCES Mitarbeiter(ID),
    FOREIGN KEY(Fahrzeug_ID) REFERENCES Fahrzeug(ID));
    Abb. 1-41: Tabelle Reservierung
  • Fahrzeug(ID, Kennzeichen, Anschaffungsdatum, Anschaffungskosten, ↑Fahrzeugmodell_ID) Lösung
    Lösung

    Die Tabelle Fahrzeugmodell muss vorhanden sein, bevor diese Tabelle erzeugt werden kann.

    SQL
    CREATE TABLE Fahrzeug(
    ID INTEGER NOT NULL,
    Kennzeichen VARCHAR(10),
    Anschaffungsdatum DATE,
    Anschaffungskosten DECIMAL(10,2),
    Fahrzeugmodell_ID INTEGER NOT NULL,
    PRIMARY KEY(ID),
    FOREIGN KEY(Fahrzeugmodell_ID) REFERENCES Fahrzeugmodell(ID));
    Abb. 1-42: Tabelle Fahrzeug
  • Fahrzeugmodell(ID, Bezeichnung, Hersteller, Kraftstoff, Verbrauch) Lösung
    Lösung
    SQL
    CREATE TABLE Fahrzeugmodell(
    ID INTEGER NOT NULL,
    Bezeichnung VARCHAR(30),
    Hersteller VARCHAR(30),
    Kraftstoff VARCHAR(20),
    Verbrauch DECIMAL(3,1),
    PRIMARY KEY(ID));
    Abb. 1-43: Tabelle Fahrzeugmodell
  • Instandhaltung(ID, Datum, KmStand, Kosten, Beschreibung, ↑Fahrzeug_ID) Lösung
    Lösung

    Die Tabelle Fahrzeug muss vorhanden sein, bevor diese Tabelle erzeugt werden kann.

    SQL
    CREATE TABLE Instandhaltung(
    ID INTEGER NOT NULL,
    Datum DATE,
    KmStand INTEGER,
    Kosten DECIMAL(10,2),
    Beschreibung VARCHAR(50),
    Fahrzeug_ID INTEGER NOT NULL,
    PRIMARY KEY(ID),
    FOREIGN KEY(Fahrzeug_ID) REFERENCES Fahrzeug(ID));
    Abb. 1-44: Tabelle Instandhaltung
  • Mitarbeiter_faehrt_mit_Reservierung(↑Mitarbeiter_ID, ↑Reservierung_ID) Lösung
    Lösung

    Die Tabellen Mitarbeiter und Reservierung müssen vorhanden sein, bevor diese Tabelle erzeugt werden kann.

    SQL
    CREATE TABLE Mitarbeiter_faehrt_mit_Reservierung(
    Mitarbeiter_ID INTEGER NOT NULL,
    Reservierung_ID INTEGER NOT NULL,
    PRIMARY KEY(Mitarbeiter_ID, Reservierung_ID),
    FOREIGN KEY(Mitarbeiter_ID) REFERENCES Mitarbeiter(ID),
    FOREIGN KEY(Reservierung_ID) REFERENCES Reservierung(ID));
    Abb. 1-45: Tabelle Mitarbeiter_faehrt_mit_Reservierung