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 Datenbankstruktur (Datenbankschema) 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.
Anlegen einer Datenbank
Beispiel
Wir teilen dem DBMS mit, dass es eine neue Datenbank namens Fahrradvermietung anlegen soll:
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.
Auswahl einer Datenbank
Beispiel
Wir teilen dem DBMS mit, dass alle folgenden SQL-Anweisungen die Datenbank Fahrradvermietung betreffen:
Das USE-Statement wird von vielen Datenbanksystemen unterstützt, gehört jedoch nicht zum SQL-Standard.
USE
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)
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.
ID INTEGER NOT NULL,
Vorname VARCHAR(30),
Nachname VARCHAR(30),
PRIMARY KEY(ID));
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.
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));
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.
ID INTEGER NOT NULL,
Bezeichnung VARCHAR(30),
PRIMARY KEY(ID));
ID INTEGER NOT NULL,
Kennung VARCHAR(10),
Fahrradtyp_ID INTEGER NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(Fahrradtyp_ID) REFERENCES Fahrradtyp(ID));
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.
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));
{attribut DATENTYP [NOT NULL]} [, ...],
PRIMARY KEY(attribut [, ...])
[{, FOREIGN KEY(attribut) REFERENCES tabelle2(attribut)} [, ...]]);
CREATE TABLE
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" |
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
oderDECIMAL
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ösungLösung
SQLCREATE 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ösungLösung
Die Tabellen Mitarbeiter und Fahrzeug müssen vorhanden sein, bevor diese Tabelle erzeugt werden kann.
SQLCREATE 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ösungLösung
Die Tabelle Fahrzeugmodell muss vorhanden sein, bevor diese Tabelle erzeugt werden kann.
SQLCREATE 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ösungLösung
SQLCREATE 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ösungLösung
Die Tabelle Fahrzeug muss vorhanden sein, bevor diese Tabelle erzeugt werden kann.
SQLCREATE 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ösungLösung
Die Tabellen Mitarbeiter und Reservierung müssen vorhanden sein, bevor diese Tabelle erzeugt werden kann.
SQLCREATE 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