Zum Inhalt springen

„Data Definition Language“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Ergänzen von code tags im Text.
Keine Bearbeitungszusammenfassung
 
(30 dazwischenliegende Versionen von 23 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Die '''Data Definition Language''' (''DDL'') ist eine [[Computersprache]], die verwendet wird, um Datenstrukturen und verwandte Elemente zu beschreiben, zu ändern oder zu entfernen. Ursprünglich bezog sich DDL auf [[Datenbanksystem]]e, der Begriff wird aber heute auch in anderen Zusammenhängen verwendet. Als [[Datenbanksprache]] ist DDL die ''Datenbeschreibungssprache'' einer Datenbank.
Die '''Data Definition Language''' ('''DDL'''; {{deS|Datendefinitionssprache}}<ref>[http://www.geoinformatik.uni-rostock.de/einzel.asp?ID=434 Datendefinitionssprache], Geoinformatik Lexikon, Agrar- und Umweltwissenschaftliche Fakultät – Universität Rostock</ref>) ist ein Teil einer [[Datenbanksprache]], der verwendet wird, um Datenstrukturen und verwandte Elemente zu beschreiben, zu ändern oder zu entfernen. Ursprünglich bezog sich DDL auf [[Datenbanksystem]]e, der Begriff wird aber heute auch in anderen Zusammenhängen verwendet. Als Datenbanksprache ist DDL die ''Datenbeschreibungssprache'' einer Datenbank.


Es existieren sehr unterschiedliche Ausprägungen der DDL (abhängig vom Verwendungszweck), Beispiele:
Es existieren sehr unterschiedliche Ausprägungen der DDL (abhängig vom Verwendungszweck), Beispiele:
* In den historischen [[Information Management System|IMS]]-Datenbanken werden die Datenstrukturen und deren logische Sichten in Form einer höheren Assemblersprache definiert (z.&nbsp;B. ... ''SEGM NAME=PROJECT,PARENT=FIRM,BYTES=45 FIELD NAME=(PROJNO,SEQ,U),BYTES=6,START=1'' ...).
* In den historischen [[Information Management System|IMS]]-Datenbanken werden die Datenstrukturen und deren logische Sichten in Form einer höheren Assemblersprache definiert.
*: ''Beispiel:'' …&nbsp;<code style="white-space:nowrap">SEGM NAME=PROJECT,PARENT=FIRM,BYTES=45 FIELD NAME=(PROJNO,SEQ,U),BYTES=6,START=1</code>&nbsp;…
* In [[SQL]] liegt sie (neben [[Data Manipulation Language|DML]] und [[Data Control Language|DCL]]) in Form englischer Befehlsklauseln vor (z.&nbsp;B. ''CREATE TABLE PROJECT ( PROJNO DECIMAL(6,0) NOT NULL PRIMARY KEY,' ...).
* In [[SQL]] liegt sie (neben [[Data Manipulation Language|DML]] und [[Data Control Language|DCL]]) in Form englischer Befehlsklauseln vor.
*: ''Beispiel:'' <syntaxhighlight lang="SQL" style="white-space:nowrap" inline>CREATE TABLE PROJECT ( PROJNO DECIMAL(6,0) NOT NULL PRIMARY KEY,</syntaxhighlight>&nbsp;…
* [[XML-Schema]] ist eine DDL zur Beschreibung der Struktur von XML-Dokumenten.
* [[XML Schema]] ist eine DDL zur Beschreibung der Struktur von XML-Dokumenten.


Einige Software-Hersteller weisen auch Berechtigungselemente (z.B. [[SQL#Rechteverwaltung: GRANT and REVOKE|GRANT]]) dem DDL-Begriff zu, diese gehören allerdings in der Theorie zur [[Data Control Language]].
Einige Software-Hersteller weisen auch Berechtigungselemente (z.&nbsp;B. <code>GRANT</code>) dem DDL-Begriff zu, diese gehören allerdings in der Theorie zur [[Data Control Language]].

Zu ''unterscheiden'' ist eine DDL vom Begriff „[[Deklaration (Programmierung)|Deklaration]]“: Während eine DDL im Allgemeinen zur Festlegung der Struktur von Daten in einem [[Datenbank|DBMS]] dient, wird das Festlegen der Format- und [[Datenstruktur|Strukturangaben]] für hauptspeicher-intern zu verarbeitende Daten –&nbsp;im [[Quelltext]] eines [[Computerprogramm]]s, gemäß der [[Syntax]] einer [[Programmiersprache]]&nbsp;– als „Deklaration“ (zum Teil auch als Definition oder Spezifikation) bezeichnet.


== SQL ==
== SQL ==
In der praktisch wichtigen [[SQL|Structured Query Language]] lautet die Syntax wie folgt:
In der praktisch wichtigen [[SQL|Structured Query Language]] lautet die Syntax wie folgt:
<Syntaxhighlight lang="SQL">
CREATE TABLE Relation ( (Attribut-Definition [PRIMARY KEY])+
[, FOREIGN KEY ( Attribut+ ) REFERENCES Relation ( Attribut+ )] )
DROP TABLE Relation
ALTER TABLE Relation Alter-Definition
CREATE INDEX Index-Name ON Relation ( Attribut+ )
DROP INDEX Index-Name
CREATE VIEW Sicht [( Attribut+ )] AS SFW-Block [WITH CHECK OPTION]
DROP VIEW Sicht
</syntaxhighlight>


<syntaxhighlight lang="SQL">
CREATE TABLE Relation ( (Attribut-Definition [PRIMARY KEY])+
[, FOREIGN KEY ( Attribut+ ) REFERENCES Relation ( Attribut+ )] )
DROP TABLE Relation
ALTER TABLE Relation Alter-Definition
CREATE INDEX Index-Name ON Relation ( Attribut+ )
DROP INDEX Index-Name
CREATE VIEW Sicht [( Attribut+ )] AS SFW-Block [WITH CHECK OPTION]
DROP VIEW Sicht
</syntaxhighlight>


* <code>PRIMARY KEY</code> und <code>FOREIGN KEY</code> sind Teil der SQL-89 IDL bzw. SQL-92 und werden von manchen Datenbanksystemen nicht unterstützt.
* <code>PRIMARY KEY</code> und <code>FOREIGN KEY</code> sind Teil der SQL-89 IDL bzw. SQL-92 und werden von manchen Datenbanksystemen nicht unterstützt.
* Die Attribut-Definition enthält den Namen des Attributes, den Datentyp, sowie optionale Angaben wie <code>NOT NULL</code>. In SQL-92 können benutzerdefinierte Wertebereiche sowie Defaultwerte angegeben werden.
* Die Attribut-Definition enthält den Namen des Attributes, den Datentyp, sowie optionale Angaben wie <code>[[Nullwert|NOT NULL]]</code>. In SQL-92 können benutzerdefinierte Wertebereiche sowie Defaultwerte angegeben werden.
* Bei <code>CREATE TABLE</code> können ab SQL-92 außerdem mittels der <code>CHECK</code>-Klausel noch Integritätsbedingungen bei den Attributen oder für die Tabelle angegeben werden.
* Bei <code>CREATE TABLE</code> können ab SQL-92 außerdem mittels der <code>CHECK</code>-Klausel noch Integritätsbedingungen bei den Attributen oder für die Tabelle angegeben werden.
* Die Alter-Definition ist <code>ADD ''Attribut-Definition''</code>. In SQL-92 gibt es noch <code>ALTER ''Attribut'' ''Default-Wert''</code> oder <code>DROP ''Attribut''</code>. Da SQL-92 sehr restriktiv bezüglich der <code>ALTER</code>-Anweisung ist, ist dies eine der Anweisungen, die von den Herstellern universell erweitert wurde, so dass beliebige Änderungen möglich sind wie durch eine Folge von <code>DROP</code> und <code>ADD</code>-Anweisungen.
* Die Alter-Definition ist <code>ADD ''Attribut-Definition''</code>. In SQL-92 gibt es noch <code>ALTER ''Attribut'' ''Default-Wert''</code> oder <code>DROP ''Attribut''</code>. Da SQL-92 sehr restriktiv bezüglich der <code>ALTER</code>-Anweisung ist, ist dies eine der Anweisungen, die von den Herstellern universell erweitert wurde, so dass beliebige Änderungen möglich sind wie durch eine Folge von <code>DROP</code> und <code>ADD</code>-Anweisungen.
Zeile 30: Zeile 33:
* Die <code>CREATE</code>-Anweisung wird in modernen DBMS dazu benutzt, außer Relationen, Indizes und Sichten alle möglichen anderen Objekte zu kreieren.
* Die <code>CREATE</code>-Anweisung wird in modernen DBMS dazu benutzt, außer Relationen, Indizes und Sichten alle möglichen anderen Objekte zu kreieren.
* Der SQL-Standard definiert Indizes überhaupt nicht, so dass die entsprechenden <code>CREATE INDEX</code> und <code>DROP INDEX</code> Anweisungen immer produktspezifische Erweiterungen sind. Allerdings verwenden die meisten [[DBMS]] die gleiche oder eine sehr ähnliche Syntax.
* Der SQL-Standard definiert Indizes überhaupt nicht, so dass die entsprechenden <code>CREATE INDEX</code> und <code>DROP INDEX</code> Anweisungen immer produktspezifische Erweiterungen sind. Allerdings verwenden die meisten [[DBMS]] die gleiche oder eine sehr ähnliche Syntax.
* Mit <code>WITH CHECK OPTION</code> kann eine [[Sicht (Datenbank)|View]] (virtuelle Tabelle) definiert werden, um somit eine Kontrolle über die Veränderung der Daten zu ermöglichen, welche in einer View dargestellt werden und auch bearbeitet werden können. Durch diese Angabe wird festgelegt, dass Änderungen der View, die den in ihr nicht sichtbaren Teil einer Relation beeinflussen, in einem Test anhand der durch <code>WHERE</code> angegebenen Parameter erkannt und abgewiesen werden.


Beispiele:
''Beispiele:''


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
CREATE TABLE Student (
CREATE TABLE Student (
MatrNr INT NOT NULL PRIMARY KEY,
MatrNr INT NOT NULL PRIMARY KEY,
Name varchar(50) NOT NULL)
Name varchar(50) NOT NULL)
</syntaxhighlight>
</syntaxhighlight>
: Erzeugt die Tabelle namens ''Student'' mit den Spalten ''MatrNr'' und ''Name'', wobei ''MatrNr'' der [[Primärschlüssel]] ist und in keiner der Spalten [[Nullwert|leere Felder]] erlaubt sind.
:
Erzeugt die Tabelle namens ''Student'' mit den Spalten ''MatrNr'' und ''Name'', wobei ''MatrNr'' der [[Primärschlüssel]] ist und in keiner der Spalten [[Nullwert|leere Felder]] erlaubt sind.


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Zeile 54: Zeile 57:
CREATE INDEX idx_Name ON Student (Name)
CREATE INDEX idx_Name ON Student (Name)
</syntaxhighlight>
</syntaxhighlight>
: Legt einen [[Datenbankindex|Index]] auf die Spalte ''Name'' der Tabelle ''Student''. Der Index bekommt die Bezeichnung ''idx_Name'' und beschleunigt die Suche nach Datensätzen in der Tabelle ''Student'', wenn der ''Name'' als Suchkriterium angegeben wird.
:
Legt einen [[Datenbankindex|Index]] auf die Spalte ''Name'' der Tabelle ''Student''. Der Index bekommt die Bezeichnung ''idx_Name'' und beschleunigt die Suche nach Datensätzen in der Tabelle ''Student'', wenn der ''Name'' als Suchkriterium angegeben wird.


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Zeile 61: Zeile 63:
</syntaxhighlight>
</syntaxhighlight>
: Löscht den Index ''idx_Name''.
: Löscht den Index ''idx_Name''.

<syntaxhighlight lang="sql">
CREATE VIEW alte_Freunde
AS SELECT Name, Vorname, Wohnort, Geburtstag
FROM Freunde
WHERE Geburtstag <= '1-JAN-1970'
WITH CHECK OPTION;
</syntaxhighlight>
: Zeigt nur Freunde an, die vor dem 1. Januar 1970 geboren wurden und verhindert die Änderung auf Werte größer als der 1. Januar 1970 sowie das Neuanlegen eines Datensatzes mit einem ungültigen Wert.


== Siehe auch ==
== Siehe auch ==
Zeile 66: Zeile 77:
* [[Data Manipulation Language]]
* [[Data Manipulation Language]]
* [[Transaction Control Language]]
* [[Transaction Control Language]]
* [[Nullwert|NULL]]


== Einzelnachweise ==
[[Kategorie:Datenbanksprache]]
<references />


[[Kategorie:SQL]]
[[ar:لغة تعريف البيانات]]
[[en:Data Definition Language]]
[[es:Lenguaje de definición de datos]]
[[eu:Datuak definitzeko lengoaia]]
[[fr:Langage de définition de données]]
[[it:Data Definition Language]]
[[ja:データ定義言語]]
[[nl:Data Definition Language]]
[[pl:Create (SQL)]]
[[pt:Linguagem de definição de dados]]
[[ru:Data Definition Language]]
[[uk:DDL]]
[[zh:資料定義語言]]

Aktuelle Version vom 4. November 2023, 15:17 Uhr

Die Data Definition Language (DDL; deutsch Datendefinitionssprache[1]) ist ein Teil einer Datenbanksprache, der verwendet wird, um Datenstrukturen und verwandte Elemente zu beschreiben, zu ändern oder zu entfernen. Ursprünglich bezog sich DDL auf Datenbanksysteme, der Begriff wird aber heute auch in anderen Zusammenhängen verwendet. Als Datenbanksprache ist DDL die Datenbeschreibungssprache einer Datenbank.

Es existieren sehr unterschiedliche Ausprägungen der DDL (abhängig vom Verwendungszweck), Beispiele:

  • In den historischen IMS-Datenbanken werden die Datenstrukturen und deren logische Sichten in Form einer höheren Assemblersprache definiert.
    Beispiel: … SEGM NAME=PROJECT,PARENT=FIRM,BYTES=45 FIELD NAME=(PROJNO,SEQ,U),BYTES=6,START=1 …
  • In SQL liegt sie (neben DML und DCL) in Form englischer Befehlsklauseln vor.
    Beispiel: CREATE TABLE PROJECT ( PROJNO DECIMAL(6,0) NOT NULL PRIMARY KEY, …
  • XML Schema ist eine DDL zur Beschreibung der Struktur von XML-Dokumenten.

Einige Software-Hersteller weisen auch Berechtigungselemente (z. B. GRANT) dem DDL-Begriff zu, diese gehören allerdings in der Theorie zur Data Control Language.

Zu unterscheiden ist eine DDL vom Begriff „Deklaration“: Während eine DDL im Allgemeinen zur Festlegung der Struktur von Daten in einem DBMS dient, wird das Festlegen der Format- und Strukturangaben für hauptspeicher-intern zu verarbeitende Daten – im Quelltext eines Computerprogramms, gemäß der Syntax einer Programmiersprache – als „Deklaration“ (zum Teil auch als Definition oder Spezifikation) bezeichnet.

In der praktisch wichtigen Structured Query Language lautet die Syntax wie folgt:

CREATE TABLE Relation ( (Attribut-Definition [PRIMARY KEY])+
    [, FOREIGN KEY ( Attribut+ ) REFERENCES Relation ( Attribut+ )] )
DROP TABLE Relation
ALTER TABLE Relation Alter-Definition
CREATE INDEX Index-Name ON Relation ( Attribut+ )
DROP INDEX Index-Name
CREATE VIEW Sicht [( Attribut+ )] AS SFW-Block [WITH CHECK OPTION]
DROP VIEW Sicht
  • PRIMARY KEY und FOREIGN KEY sind Teil der SQL-89 IDL bzw. SQL-92 und werden von manchen Datenbanksystemen nicht unterstützt.
  • Die Attribut-Definition enthält den Namen des Attributes, den Datentyp, sowie optionale Angaben wie NOT NULL. In SQL-92 können benutzerdefinierte Wertebereiche sowie Defaultwerte angegeben werden.
  • Bei CREATE TABLE können ab SQL-92 außerdem mittels der CHECK-Klausel noch Integritätsbedingungen bei den Attributen oder für die Tabelle angegeben werden.
  • Die Alter-Definition ist ADD Attribut-Definition. In SQL-92 gibt es noch ALTER Attribut Default-Wert oder DROP Attribut. Da SQL-92 sehr restriktiv bezüglich der ALTER-Anweisung ist, ist dies eine der Anweisungen, die von den Herstellern universell erweitert wurde, so dass beliebige Änderungen möglich sind wie durch eine Folge von DROP und ADD-Anweisungen.
  • Bei der Definition einer Sicht können neue Attributnamen vergeben werden. SFW-Block ist eine beliebige SQL-Abfrage, WITH CHECK OPTION gibt an, ob gewisse Änderungsoperationen erlaubt sein sollen (vgl. Sichten). Eine ORDER BY Klausel ist in Sichtdefinitionen nicht zulässig, da Sichten wieder Relationen sind, und Relationen sind (Multi-)Mengen, also per Definition nicht sortiert.
  • Die CREATE-Anweisung wird in modernen DBMS dazu benutzt, außer Relationen, Indizes und Sichten alle möglichen anderen Objekte zu kreieren.
  • Der SQL-Standard definiert Indizes überhaupt nicht, so dass die entsprechenden CREATE INDEX und DROP INDEX Anweisungen immer produktspezifische Erweiterungen sind. Allerdings verwenden die meisten DBMS die gleiche oder eine sehr ähnliche Syntax.
  • Mit WITH CHECK OPTION kann eine View (virtuelle Tabelle) definiert werden, um somit eine Kontrolle über die Veränderung der Daten zu ermöglichen, welche in einer View dargestellt werden und auch bearbeitet werden können. Durch diese Angabe wird festgelegt, dass Änderungen der View, die den in ihr nicht sichtbaren Teil einer Relation beeinflussen, in einem Test anhand der durch WHERE angegebenen Parameter erkannt und abgewiesen werden.

Beispiele:

CREATE TABLE Student (
   MatrNr INT NOT NULL PRIMARY KEY,
   Name varchar(50) NOT NULL)
Erzeugt die Tabelle namens Student mit den Spalten MatrNr und Name, wobei MatrNr der Primärschlüssel ist und in keiner der Spalten leere Felder erlaubt sind.
ALTER TABLE Student ADD Vorname varchar(35)
Definiert eine neue Spalte namens Vorname in der Tabelle Student.
DROP TABLE Student
Löscht die gesamte Tabelle Student.
CREATE INDEX idx_Name ON Student (Name)
Legt einen Index auf die Spalte Name der Tabelle Student. Der Index bekommt die Bezeichnung idx_Name und beschleunigt die Suche nach Datensätzen in der Tabelle Student, wenn der Name als Suchkriterium angegeben wird.
DROP index idx_Name
Löscht den Index idx_Name.
CREATE VIEW alte_Freunde
AS SELECT Name, Vorname, Wohnort, Geburtstag
FROM Freunde
WHERE Geburtstag <= '1-JAN-1970'
WITH CHECK OPTION;
Zeigt nur Freunde an, die vor dem 1. Januar 1970 geboren wurden und verhindert die Änderung auf Werte größer als der 1. Januar 1970 sowie das Neuanlegen eines Datensatzes mit einem ungültigen Wert.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Datendefinitionssprache, Geoinformatik Lexikon, Agrar- und Umweltwissenschaftliche Fakultät – Universität Rostock