Zum Inhalt springen

DDL: Unterschied zwischen den Versionen

Aus FLBK-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Einstieg ==
== 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.
Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von [[SQL]]. Die DDL wird eingesetzt, um das Datenschema in relationalen [[Datenbank]]en zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankentwicklungsprozess, bevor Daten eingefügt werden können.
[[Datei:ERM-Softwarentwicklungsprozess.png|mini]]
[[Datei:ERM-Softwarentwicklungsprozess.png|mini|Einordnung im Softwareentwicklungsprozess]]
[[Datei:Schlüssel-SchlüsselInTabellen.png|mini]]
[[Datei:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]]
[[Datei:Schlüssel-SchlüsselInTabellen.png|mini|Schlüsselbeziehungen in Tabellen]]
 
== 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.


'''Syntax:'''
'''Syntax:'''
Zeile 19: Zeile 21:
<code>Schemaname.Tabellenname</code>
<code>Schemaname.Tabellenname</code>


Das Schema `friseur` verwaltet alle Salons. Eine Tabelle `Salon` lässt sich also über `friseur.salon` ansprechen.
Das Schema <code>friseur</code> verwaltet alle Salons. Eine Tabelle <code>salon</code> lässt sich also über <code>friseur.salon</code> ansprechen.


== CREATE TABLE ==
== CREATE TABLE ==
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar.  
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar.


'''Syntax:'''
'''Syntax:'''
Zeile 52: Zeile 54:


== CONSTRAINTs (Einschränkungen) ==
== 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.  
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).
Die Befehle <code>PRIMARY KEY</code>, <code>FOREIGN KEY</code>, <code>NOT NULL</code> und <code>UNIQUE</code> fallen in die Kategorie CONSTRAINT. Nach der Attributliste wird das Schlüsselwort <code>CONSTRAINT</code> gesetzt (wobei das Wort <code>CONSTRAINT</code> selbst oft optional ist, wenn man die Standardnamen des DBMS akzeptiert).


=== Primärschlüssel (PRIMARY KEY) ===
=== Primärschlüssel (PRIMARY KEY) ===
Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines Primärschlüssels zu definieren:
Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines [[Schlüssel|Primärschlüssels]] zu definieren:


1. '''Am Ende der Attributliste:'''
1. '''Am Ende der Attributliste:'''
Zeile 78: Zeile 80:
</syntaxhighlight>
</syntaxhighlight>


3. '''Mit explizitem CONSTRAINT-Namen:''' (Im Beispiel "pk" für primary key)
3. '''Mit explizitem CONSTRAINT-Namen:''' (Im Beispiel „pk“ für primary key)
<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
CREATE TABLE mitarbeiter (
CREATE TABLE mitarbeiter (
Zeile 90: Zeile 92:


=== Fremdschlüssel (FOREIGN KEY) ===
=== 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.
Mit einem [[Schlüssel|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.
:'''Wichtig:''' Die referenzierte Tabelle (hier <code>salon</code>) muss bereits existieren, bevor der Fremdschlüssel in der referenzierenden Tabelle (<code>mitarbeiter</code>) angelegt werden kann.


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Zeile 106: Zeile 108:


==== FOREIGN KEY Optionen (Referenzielle Aktionen) ====
==== 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:
Diese Optionen bestimmen das Verhalten der Detailtabelle, wenn in der Primärtabelle Datensätze geändert (<code>ON UPDATE</code>) oder gelöscht (<code>ON DELETE</code>) 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.
* '''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.
* '''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).
* '''SET NULL''': Wird der Primärschlüssel gelöscht oder geändert, wird der Fremdschlüssel in der Detailtabelle auf <code>NULL</code> gesetzt (nur möglich, wenn die Spalte nicht als <code>NOT NULL</code> definiert ist).


=== NOT NULL ===
=== 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.
Die Schlüsselwörter <code>NULL</code> bzw. <code>NOT NULL</code> legen fest, ob leere Werte in der Spalte zulässig sind. Der Standardwert ist „zulässig“ (<code>NULL</code>). Primärschlüssel sollten grundsätzlich als <code>NOT NULL</code> deklariert werden.


=== AUTO_INCREMENT / AUTOINCREMENT ===
=== 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).
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 MySQL:''' <code>idSalon INT AUTO_INCREMENT</code>
* '''In MS Access:''' `idSalon AUTOINCREMENT` (wird hier wie ein eigener Datentyp behandelt).
* '''In MS Access:''' <code>idSalon AUTOINCREMENT</code> (wird hier wie ein eigener Datentyp behandelt).


=== DEFAULT ===
=== DEFAULT ===
Zeile 143: Zeile 145:


== ALTER TABLE ==
== ALTER TABLE ==
`ALTER TABLE` ermöglicht das nachträgliche Ändern der Struktur einer vorhandenen Tabelle.  
<code>ALTER TABLE</code> ermöglicht das nachträgliche Ändern der Struktur einer vorhandenen Tabelle.


Mögliche Änderungsoperatoren sind:
Mögliche Änderungsoperatoren sind:
Zeile 169: Zeile 171:


== CREATE VIEW ==
== 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.
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 <code>SELECT</code>-Abfrage bei jedem Aufruf dynamisch aus.


'''Syntax:'''
'''Syntax:'''
Zeile 185: Zeile 187:


[[Kategorie:Datenbanken]]
[[Kategorie:Datenbanken]]
[[Kategorie:AHR_I_Informatik LK]]
[[Kategorie:SQL]]
[[Kategorie:FI_I_SDM]]
[[Kategorie:AHR WuV WI GK]]
[[Kategorie:AHR I Informatik LK]]
[[Kategorie:FI I SDM]]

Aktuelle Version vom 15. Oktober 2026, 08:10 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 Datenbankentwicklungsprozess, bevor Daten eingefügt werden können.

Einordnung im Softwareentwicklungsprozess
Darstellung in der MySQL-Workbench
Schlüsselbeziehungen in Tabellen

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;