DDL: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen Datenbanken zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankenentwicklungsprozess, bevor Daten eingefügt werden können. | Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen Datenbanken zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankenentwicklungsprozess, bevor Daten eingefügt werden können. | ||
[[Datei:ERM-Softwarentwicklungsprozess.png|mini]] | [[Datei:ERM-Softwarentwicklungsprozess.png|mini]] | ||
[[Datei:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]] | |||
[[Datei:Schlüssel-SchlüsselInTabellen.png|mini]] | |||
== CREATE SCHEMA == | == CREATE SCHEMA == | ||
Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein. | Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein. | ||
Aktuelle Version vom 17. April 2026, 11:31 Uhr
Einstieg
Die Data Definition Language (kurz DDL) ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen Datenbanken zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankenentwicklungsprozess, bevor Daten eingefügt werden können.



CREATE SCHEMA
Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein.
Syntax:
CREATE SCHEMA <Schema-Name>;
Beispiel:
CREATE SCHEMA friseur;
In einem Datenbankmanagementsystem (DBMS) können mehrere Schemata verwaltet werden. Daher ist sicherzustellen, dass sich alle Anweisungen der SQL eindeutig auf ein Schema beziehen lassen, damit das DBMS die angesprochenen Tabellen identifizieren kann. Der Bezug zu einem Schema ergibt sich aus der Punktnotation:
Schemaname.Tabellenname
Das Schema `friseur` verwaltet alle Salons. Eine Tabelle `Salon` lässt sich also über `friseur.salon` ansprechen.
CREATE TABLE
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar.
Syntax:
CREATE TABLE <Tabellen_Name> (
<Spalte 1> <Datentyp_für_Spalte_1>,
<Spalte 2> <Datentyp_für_Spalte_2>,
...
);
Beispiele: Zur Erstellung einer einfachen Mitarbeitertabelle:
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45)
);
Zur Erstellung einer simplen Salontabelle:
CREATE TABLE salon (
idsalon INT,
name VARCHAR(45)
);
CONSTRAINTs (Einschränkungen)
CONSTRAINT heißt übersetzt "Zwang" oder "Einschränkung". Ein CONSTRAINT ist eine Bedingung, der ein Datensatz zwingend entsprechen muss. Wenn eine der aktuell gültigen Bedingungen verletzt wird, wird der betreffende Datensatz nicht gespeichert. Hierdurch wird die Datenkonsistenz gewährleistet.
Die Befehle `PRIMARY KEY`, `FOREIGN KEY`, `NOT NULL` und `UNIQUE` fallen in die Kategorie CONSTRAINT. Nach der Attributliste wird das Schlüsselwort `CONSTRAINT` gesetzt (wobei das Wort `CONSTRAINT` selbst oft optional ist, wenn man die Standardnamen des DBMS akzeptiert).
Primärschlüssel (PRIMARY KEY)
Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines Primärschlüssels zu definieren:
1. Am Ende der Attributliste:
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
PRIMARY KEY (idmitarbeiter)
);
2. Direkt in der Spaltendefinition:
CREATE TABLE mitarbeiter (
idmitarbeiter INT PRIMARY KEY,
nachname VARCHAR(45),
vorname VARCHAR(45)
);
3. Mit explizitem CONSTRAINT-Namen: (Im Beispiel "pk" für primary key)
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT,
CONSTRAINT pk PRIMARY KEY (idmitarbeiter)
);
Fremdschlüssel (FOREIGN KEY)
Mit einem Fremdschlüssel wird eine Spalte der einen Tabelle mit einer gleichartigen Spalte einer anderen Tabelle (meist dem Primärschlüssel) verknüpft, um referenzielle Integrität sicherzustellen. Beide Spalten müssen den exakt gleichen Datentyp besitzen.
> Wichtig: Die referenzierte Tabelle (hier `salon`) muss bereits existieren, bevor der Fremdschlüssel in der referenzierenden Tabelle (`mitarbeiter`) angelegt werden kann.
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT,
CONSTRAINT pk PRIMARY KEY (idmitarbeiter),
CONSTRAINT fk FOREIGN KEY (fksalon) REFERENCES salon(idsalon)
);
FOREIGN KEY Optionen (Referenzielle Aktionen)
Diese Optionen bestimmen das Verhalten der Detailtabelle, wenn in der Primärtabelle Datensätze geändert (`ON UPDATE`) oder gelöscht (`ON DELETE`) werden:
- NO ACTION / RESTRICT: Die Änderung oder Löschung in der Primärtabelle wird verweigert und mit einem Fehler abgebrochen, falls abhängige Datensätze existieren.
- CASCADE: Die Änderung (z. B. eine neue ID) oder die Löschung wird "kaskadierend" an die Detailtabelle weitergegeben. Löscht man den Salon, werden alle Mitarbeiter dieses Salons ebenfalls gelöscht.
- SET NULL: Wird der Primärschlüssel gelöscht oder geändert, wird der Fremdschlüssel in der Detailtabelle auf `NULL` gesetzt (nur möglich, wenn die Spalte nicht als `NOT NULL` definiert ist).
NOT NULL
Die Schlüsselwörter `NULL` bzw. `NOT NULL` legen fest, ob leere Werte in der Spalte zulässig sind. Der Standardwert ist "zulässig" (`NULL`). Primärschlüssel sollten grundsätzlich als `NOT NULL` deklariert werden.
AUTO_INCREMENT / AUTOINCREMENT
Dieses Schlüsselwort legt fest, dass die Werte in der Spalte automatisch vom DBMS hochgezählt werden (z. B. für IDs).
- In MySQL: `idSalon INT AUTO_INCREMENT`
- In MS Access: `idSalon AUTOINCREMENT` (wird hier wie ein eigener Datentyp behandelt).
DEFAULT
Legt einen Standardwert fest, der eingesetzt wird, wenn bei einem neuen Datensatz kein Wert für diese Spalte übergeben wird. (Achtung: Wird in MS Access in reinem DDL oft nicht nativ unterstützt).
fksalon INT NOT NULL DEFAULT 1
UNIQUE
Sorgt dafür, dass innerhalb einer Spalte (oder Spaltenkombination) kein Wert doppelt auftreten darf.
Komplexes Beispiel (Zusammenführung aller Constraints):
CREATE TABLE mitarbeiter (
idmitarbeiter INT NOT NULL AUTO_INCREMENT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT NOT NULL DEFAULT 1,
CONSTRAINT pk_mitarbeiter PRIMARY KEY (idmitarbeiter),
CONSTRAINT fk_salon FOREIGN KEY (fksalon) REFERENCES salon(idsalon),
CONSTRAINT uq_nachname UNIQUE (nachname)
);
ALTER TABLE
`ALTER TABLE` ermöglicht das nachträgliche Ändern der Struktur einer vorhandenen Tabelle.
Mögliche Änderungsoperatoren sind:
- ADD: Spalten/Constraints hinzufügen.
- DROP: Spalten/Constraints entfernen.
- MODIFY / ALTER COLUMN: Datentypen ändern.
- RENAME: Umbenennen.
Beispiele: Tabelle umbenennen:
ALTER TABLE Salon RENAME TO Filiale;
Neue Spalte hinzufügen:
ALTER TABLE Mitarbeiter ADD (istWeiblich BOOLEAN);
DROP TABLE
Löscht eine vollständige Tabelle inklusive aller darin enthaltenen Daten unwiderruflich aus der Datenbank.
DROP TABLE <Tabellen_Name>;
CREATE VIEW
Abfragen (DQL) können als sogenannte Views (Sichten/virtuelle Tabellen) in der Datenbank gespeichert werden. Sie verhalten sich bei Abfragen wie echte Tabellen, speichern aber keine eigenen Daten, sondern führen die hinterlegte `SELECT`-Abfrage bei jedem Aufruf dynamisch aus.
Syntax:
CREATE VIEW <View-Name> AS <Select-Ausdruck>;
Beispiel:
CREATE VIEW weiblicheMitarbeiter AS
SELECT vorname, nachname
FROM mitarbeiter
WHERE istWeiblich = TRUE;