Buchgenerator (deaktivieren)

Einführung in SQL: DDL - Struktur der Datenbank

Aus Wikibooks

Wechseln zu: Navigation, Suche


Mit den Befehlen der Data Definition Language (DDL) wird die Struktur der Datenbank gesteuert.

Dabei handelt es sich um Aufgaben, die über eine Einführung in SQL hinausgehen, aber nicht am Anfang stehen. Ich beschränke mich deshalb hier auf einige grundlegende Informationen und Beispiele, für welche Objekte einer Datenbank diese Befehle verwendet werden.

Einige Erweiterungen werden unter Erweiterungen behandelt:

Bitte beachten Sie, dass ein Benutzer vor allem bei DDL-Befehlen über die entsprechenden Rechte verfügen muss, siehe DCL – Zugriffsrechte.

Inhaltsverzeichnis

[Bearbeiten] Allgemeine Syntax

Die DDL-Befehle sind grundsätzlich so aufgebaut:

 BEFEHL OBJEKTTYP <Objektname> [<weitere Angaben>]

[Bearbeiten] CREATE

CREATE erzeugt ein Datenobjekt, zum Beispiel eine Datentabelle oder gar eine Datenbank.

[Bearbeiten] ALTER

Mit ALTER kann das Objekt, z.B. die Tabelle, auch wieder geändert werden:

In neueren Versionen gibt es auch den gemeinsamen Aufruf (unterschiedlich je nach DBMS):

  • CREATE OR ALTER
  • CREATE OR REPLACE
  • RECREATE

Das DBMS entscheidet dann selbst: Wenn das Objekt schon existiert, wird es geändert, andernfalls erzeugt.

[Bearbeiten] DROP

Mit DROP kann das Objekt, z.B. eine Tabelle wieder gelöscht werden:


[Bearbeiten] Hauptteile der Datenbank

[Bearbeiten] DATABASE – die Datenbank selbst

Der Befehl zum Erstellen einer Datenbank lautet:

CREATE DATABASE <Dateiname> [ <Optionen> ] ;

Der <Dateiname> ist meistens ein vollständiger Name einschließlich Pfad; in einer solchen Datei werden alle Teile der Datenbank zusammengefasst. Zu den <Optionen> gehören z.B. der Benutzername des Eigentümers der Datenbank mit seinem Passwort, der Zeichensatz mit Angaben zur Standardsortierung, die Aufteilung in eine oder mehrere Dateien usw.

Jedes DBMS bietet sehr verschiedene Optionen; ich kann hier keine Gemeinsamkeiten vorstellen und muss deshalb ganz auf Beispiele verzichten.

Wegen der vielen Möglichkeiten ist zu empfehlen, dass eine Datenbank nicht per SQL-Befehl, sondern innerhalb einer Benutzeroberfläche erstellt wird.

Mit ALTER DATABASE werden die Optionen geändert, mit DROP DATABASE wird die Datenbank gelöscht. Diese Befehle kennt nicht jedes DBMS.


[Bearbeiten] TABLE – eine einzelne Tabelle

[Bearbeiten] CREATE TABLE

Um eine Tabelle zu erzeugen, sind wesentlich konkretere umfangreiche Angaben nötig.

CREATE TABLE <Tabellenname>
   (     <Spaltenliste>
     [ , <Zusatzangaben> ]
   );

Zum Erzeugen einer Tabelle werden folgende Angaben benutzt:

  • der Name der Tabelle, mit dem die Daten über die DML-Befehle gespeichert und abgerufen werden
  • die Liste der Spalten (Felder), und zwar vor allem mit dem jeweiligen Datentyp
  • Angaben wie der Primärschlüssel (PRIMARY KEY, PK) oder weitere Indizes

Jede Spalte und Zusatzangabe wird mit einem Komma abgeschlossen; dieses entfällt vor der schließenden Klammer. Die Zusatzangaben werden häufig nicht sofort festgelegt, sondern durch anschließende ALTER TABLE-Befehle; ich bespreche sie deshalb weiter unten.

Aufgabe

In der Beispieldatenbank wird eine Tabelle so erzeugt:

MySql-Version
Crystal Clear app terminal.png SQL-Quelltext:

CREATE TABLE Dienstwagen
      ( ID              integer     NOT NULL AUTO_INCREMENT PRIMARY KEY,
        Kennzeichen     varchar(30) NOT NULL,
        Farbe           varchar(30),
        Fahrzeugtyp_ID  integer     NOT NULL,
        Mitarbeiter_ID  integer
      );

Die einzelnen Spalten berücksichtigen mit ihren Festlegungen unterschiedliche Anforderungen:

  • ID ist eine ganze Zahl, darf nicht NULL sein, wird automatisch hochgezählt und dient dadurch gleichzeitig als Primärschlüssel.
  • Das Kennzeichen ist eine Zeichenkette von variabler Länge (maximal 30 Zeichen), die unbedingt erforderlich ist.
  • Die Farbe ist ebenfalls eine Zeichenkette, deren Angabe entfallen kann.
  • Für den Fahrzeugtyp wird dessen ID benötigt, wie er in der Tabelle Fahrzeugtyp gespeichert ist; diese Angabe muss sein – ein "unbekannter" Fahrzeugtyp macht bei einem Dienstwagen keinen Sinn.
  • Für den Mitarbeiter, dem ein Dienstwagen zugeordnet ist, wird dessen ID aus der Tabelle Mitarbeiter benötigt. Dieser Wert kann entfallen, wenn es sich nicht um einen "persönlichen" Dienstwagen handelt.


[Bearbeiten] ALTER TABLE

Die Struktur einer Tabelle wird wie folgt geändert:

ALTER TABLE <Aufgabe> <Zusatzangaben>

Mit der Aufgabe ADD CONSTRAINT wird eine interne Einschränkung – Constraint genannt – hinzugefügt:

Aufgabe

Ein Primärschlüssel kann auch nachträglich festgelegt werden, z.B. so:

Firebird-Version
Crystal Clear app terminal.png SQL-Quelltext:

ALTER TABLE Dienstwagen 
  ADD CONSTRAINT Dienstwagen_PK PRIMARY KEY (ID);

Die Einschränkung bekommt den Namen Dienstwagen_PK und legt fest, dass es sich dabei um den PRIMARY KEY unter Verwendung der Spalte ID handelt.

Aufgabe

In der Tabelle Mitarbeiter muss auch die Personalnummer eindeutig sein (zusätzlich zur ID, die als PK sowieso eindeutig ist):

Crystal Clear app terminal.png SQL-Quelltext:

ALTER TABLE Mitarbeiter
  ADD CONSTRAINT Mitarbeiter_PersNr UNIQUE (Personalnummer);
Aufgabe

In der Tabelle Zuordnung_SF_FZ – Verknüpfung zwischen den Schadensfällen und den Fahrzeugen – wird ein Feld für sehr lange Texte eingefügt:

Crystal Clear app terminal.png SQL-Quelltext:

ALTER TABLE Zuordnung_SF_FZ
  ADD Beschreibung blob;

Mit ALTER ... DROP Beschreibung kann dieses Feld auch wieder gelöscht werden.

[Bearbeiten] DROP TABLE

Aufgabe

Damit wird eine Tabelle mit allen Daten gelöscht (diese gab es in einer früheren Version der Beispieldatenbank und wird jetzt nicht mehr benutzt):

Crystal Clear app terminal.png SQL-Quelltext:

DROP TABLE ZUORD_VNE_SCF;

Warnung: Dies löscht die Tabelle einschließlich aller Daten unwiderruflich!


[Bearbeiten] USER – Benutzer

Aufgabe

Auf diese Weise wird ein neuer Benutzer für die Arbeit mit der aktuellen Datenbank registriert.

MySql-Version
Crystal Clear app terminal.png SQL-Quelltext:

CREATE USER Hans_Dampf IDENTIFIED BY 'cH4y37X1P';

Dieser Befehl richtet einen neuen Benutzer mit dem Namen Hans_Dampf ein, der sich mit dem Passwort 'cH4y37X1P' anmelden muss. – Jedes DBMS kennt für die Zuordnung des Passworts, weitere Optionen und die Verwendung von Anführungszeichen eigene Regeln.


[Bearbeiten] Ergänzungen zu Tabellen

Weitere Objekte in der Datenbank erleichtern die Arbeit mit Tabellen.

[Bearbeiten] VIEW – besondere Ansichten

Eine VIEW ist eine spezielle Sicht auf eine oder mehrere Tabellen. Für den Anwender sieht es wie eine eigene Tabelle aus; es handelt sich aber "nur" um eine fest gespeicherte Abfrage, die immer wieder in der gleichen Form benutzt und ausgeführt wird. Bitte beachten Sie: Nur die Abfrage wird fest gespeichert, nicht das Ergebnis; dieses muss bei jedem neuen Aufruf nach den aktuellen Daten neu erstellt werden.

Einzelheiten werden unter Erstellen von Views behandelt.


[Bearbeiten] INDEX – Datenzugriff beschleunigen

Ein Index beschleunigt die Suche nach bestimmten Datensätzen. Um beispielsweise in der Tabelle Versicherungsnehmer nach dem Namen "Schulze" zu suchen, würde es zu lange dauern, wenn das DBMS alle Zeilen durchgehen müsste, bis es auf diesen Namen träfe. Stattdessen wird ein Index angelegt (ähnlich wie in einem Telefon- oder Wörterbuch), sodass schnell alle passenden Datensätze gefunden werden.

So wird ein Index mit der Bezeichnung Versicherungsnehmer_Name für die Kombination "Name, Vorname" angelegt:

Crystal Clear app terminal.png SQL-Quelltext:

CREATE INDEX Versicherungsnehmer_Name
    ON Versicherungsnehmer (Name, Vorname);

Es ist dringend zu empfehlen, dass Indizes für alle Spalten bzw. Kombinationen von Spalten angelegt werden, die immer wieder zum Suchen benutzt werden.

Weitere Einzelheiten werden unter DDL – Einzelheiten behandelt.


[Bearbeiten] SEQUENCE – Ersatz für automatischen Zähler

Wenn das DBMS für Spalten nicht die Festlegung AUTO_INCREMENT kennt (Firebird, Oracle), steht dies als Ersatz zur Verfügung.

Firebird-Version
Crystal Clear app terminal.png SQL-Quelltext:

/* zuerst die Folge definieren */
CREATE SEQUENCE Versicherungsnehmer_ID;
/* dann den Startwert festlegen */
ALTER  SEQUENCE Versicherungsnehmer_ID RESTART WITH 1;
/* und im Trigger (s.u.) ähnlich wie eine Funktion benutzen */
NEXT VALUE FOR Versicherungsnehmer_ID

Oracle arbeitet (natürlich) mit anderer Syntax (mit mehr Möglichkeiten) und benutzt dann NEXTVAL.


[Bearbeiten] Programmieren mit SQL

Die Funktionalität einer SQL-Datenbank kann erweitert werden, und zwar auch mit Bestandteilen einer "vollwertigen" Programmiersprachen, z.B. Schleifen und IF-Abfragen.

Dies wird unter Programmierung behandelt; dabei gibt es relativ wenig Gemeinsamkeiten zwischen den DBMS.

[Bearbeiten] FUNCTION – Benutzerdefinierte Funktionen

Eigene Funktionen ergänzen die (internen) Skalarfunktionen des DBMS, die unter Funktionen und Funktionen (2) behandelt werden.

[Bearbeiten] PROCEDURE – Gespeicherte Prozeduren

Eine Prozedur – gespeicherte Prozedur, engl. StoredProcedure (SP) – ist vorgesehen für Arbeitsabläufe, die "immer wiederkehrende" Arbeiten ausführen sollen. Es gibt sie mit und ohne Argumente und Rückgabewerte.

[Bearbeiten] TRIGGER – Ereignisse beim Speichern

Ein Trigger ist ein Arbeitsablauf, der automatisch beim Speichern in einer Tabelle ausgeführt wird. Dies dient für Eingabeprüfungen oder zusätzliche Maßnahmen; beispielsweise holt sich Firebird durch einen Trigger den NEXT VALUE einer SEQUENCE (siehe oben).

TRIGGER werden unterschieden nach INSERT-, UPDATE- oder DELETE-Befehlen und können vor oder nach dem Speichern sowie in einer bestimmten Reihenfolge ausgeführt werden.


[Bearbeiten] Zusammenfassung

In diesem Kapitel lernten wir die Grundbegriffe einer Datenbankstruktur kennen:

  • Die DATABASE selbst sowie TABLE sind die wichtigsten Objekte, ein USER arbeitet damit.
  • Eine VIEW ist eine fest gespeicherte Abfrage, die wie eine Tabelle abgerufen wird.
  • Ein INDEX beschleunigt den Datenzugriff.

Darüber hinaus wurde auf weitere Möglichkeiten wie SEQUENCE, Funktionen, Prozeduren und Trigger hingewiesen.


[Bearbeiten] Übungen


Persönliche Werkzeuge