7.5 Zusammenfassung DDL
Die Lektion 7 hat sich mit der Data Definition Language von SQL befasst. Es wurde im ersten Teil
der Lektion gezeigt, wie man mit der SQL-Anweisung CREATE TABLE
eine Datenbankstruktur
aufbaut. Vertiefend wurde auf die Feinheiten bei der Erzeugung einer Tabelle und deren Attributen
hingewiesen. Speziell beschäftigten wir uns in den Abschnitten mit den Einschränkungen der Tabellen,
den sogenannten Integritätsbedingungen – beispielsweise für die referentielle Integrität, das Festlegen eines
Primär- oder Fremdschlüssels. (Vergessen Sie nicht, dass die referentielle Integrität in MySQL
nur beim Tabellentyp InnoDB wirklich unterstützt wird.)
Am Ende wurde betrachtet, wie die Datenbankobjekte nachträglich verändert bzw. gelöscht werden können.
Eine Datenbank erzeugen
Bisher wurde noch nicht gezeigt, wie man eine Datenbank über einen SQL-Befehl anlegt.
Auch wenn das ANSI SQL keine Anweisung dafür bereit hält, haben die meisten RDBMS-Produkte einige
SQL-Sprachelemente um Datenbanken physikalisch zu erzeugen. In der Regel legt man eine leere Datenbank
über die Schlüsselwörter CREATE DATABASE
an und löscht diese wieder über
DROP DATABASE
. Eine Anweisung könne so aussehen:
CREATE DATABASE Verzeichnis
Hinweise für das Anlegen der Datenbankstruktur
Beim Erzeugen von Tabellen, die auf eine andere Tabelle über einen Fremdschlüssel referenziert werden, gibt es eine bestimmte Reihenfolgen die beachtet werden sollte. Dies wurde auch schon in der Lektion erwähnt. Zuerst muss die Tabelle angelegt werden, auf welche in anderen Tabellen Bezug genommen werden soll!
In einem Beispiel wird in der Tabelle spielstaette auf die Tabelle ort verwiesen, daraus ergibt sich für das Anlegen der Tabellen, dass die ort als erste erzeugt werden muss. Würde eine andere Reihenfolge genommen werden, dann kommt es zwangsläufig zu einer Fehlermeldung vom Datenbanksystem. Die Tabelle spielstaette würde ins Leere verweisen, weil die andere Tabelle noch nicht existiert.
Wie kann dieses Problem umgangen werden?
Man definiert zunächst alle Tabellen ohne Fremdschlüsselbeziehungen. Die Reihenfolge der
Tabellen ist dadurch nicht mehr relevant.
Danach können über ALTER TABLE
die referentiellen Integritätsbedingungen
bestimmt werden.
Das Code-Beispiel zeigt, wie es aussehen sollte (dies kann zur Übung auch getestet werden):
CREATE TABLE spielstaette ( Haus VARCHAR (100) NOT NULL, Strasse VARCHAR (50) NOT NULL, Hausnummer CHAR (6), Plz CHAR(5), Beschreibung VARCHAR (255), CONSTRAINT primaryKey_spielstaette PRIMARY KEY (Haus) ) ENGINE=INNODB; CREATE TABLE ort ( Plz CHAR(5) NOT NULL, Ort VARCHAR (200) NOT NULL, CONSTRAINT primaryKey_ort PRIMARY KEY (Plz) ) ENGINE=INNODB; ALTER TABLE spielstaette ADD CONSTRAINT fk_PlzOrt FOREIGN KEY (Plz) REFERENCES ort (Plz) ON DELETE SET NULL ON UPDATE CASCADE;
Generell kann man sich die folgende Vorgehensweise einprägen:
- Benutzerdefinierte Datentypen und Domains anlegen (hier nicht behandelt)
- Erstellen der Tabellen ohne Berücksichtigung der referentiellen Integritäten
- Mit
ALTER TABLE
die referentiellen Integritäten nachträglich einfügen
Beachten Sie, dass Fremdschlüssel in SQL nicht dazu benutzt werden, um Tabellen zu physisch zu verknüpfen, sondern hauptsächlich, um die referentielle Integrität zu überprüfen (Fremdschlüssel-Restriktionen).