Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird 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:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]]
[[Datei:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]]
[[Datei:Schlüssel-SchlüsselInTabellen.png|mini]]
[[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 20: 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 53: 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 79: 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 91: 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 107: 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 144: 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 170: 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 186: 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]]
Abgerufen von „https://wiki.flbk-hamm.de/DDL“