5. SQL Einleitung / Historie / Normierung Datendefinition mit SQL

Werbung
5. SQL
Einleitung / Historie / Normierung
Datendefinition mit SQL (DDL)
Datenänderung/-zugriff mit SQL (DML)
Datenkontrolle mit SQL (DCL)
Ausblick: Transaktionsverwaltung/Fehlerbehandlung
Praktischer Teil
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 143
5.1 Einleitung / Historie / Normierung
SQL = Structured Query Language
- Die Norm-Datenbanksprache (ISO, DIN) für relationale DBMS
- Hoher Anwendungs- und Verbreitungsgrad
- Abdeckung aller 3 Ebenen der ANSI/SPARC...
Architektur (siehe Folie 33):
• Externes Schema (Sichten, Views)
• Konzeptuelles Schema
• Internes Schema (teilweise)
SQL als Sprache für alle Bereiche eines DBMS ("aus einem Guß"), ist in
vorrelationalen DMBS getrennt
- DDL: Data Definition Language (CREATE TABLE, CREATE INDEX, ...)
- DML: Data Manipulation Language (SELECT, UPDATE, INSERT, DELETE)
- DCL: Data Control Language (GRANT)
- TCL: Transaction Control Language (COMMIT, ROLLBACK)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 144
5.1 Einleitung / Historie / Normierung
Historie und Entstehungsgeschichte
- Ursprung im Rahmen des System R Projektes
• IBM Research Lab, San Jose, Anfang 1970er
• Sprache SEQUEL (Structured English QUEry Language) publiziert
durch Don Chamberlin und Raymond F. Boyce
- Ziel war die Entwicklung einer
• Benutzerfreundlichen Datenbanksprache mit
• Großer Mächtigkeit basierend auf den
• Erfahrungen mit Relationenalgebra und Relationenkalkül
- Weiterentwicklung 1975/76 bei IBM zu SEQUEL2
- Umbenennung zu SQL, erste Produkte Ende der 70er:
• Oracle
• System R SQL/DS (SQL Data System) DB2
- In Folge weitere Produkte mit SQL-Schnittstelle oder SQL-Aufsätzen für
vorrelationale DBMS (UDS, ADABAS, Informix, MS Access, ...)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 145
5.1 Einleitung / Historie / Normierung
SQL-Normierungsaktivitäten, seit 1982 etabliert
- ANSI (American National Standards Institute)
- ISO (International Organization for Standardisation)
- DIN (Deutsches Institut für Normung)
- Syntax in BNF-Grammatik: http://savage.net.au/SQL/
Entwicklungsschritte
- SQL0: 1. Norm 1987 (ISO und DIN 9075)
- SQL1: 2. Norm 1989 ("SQL-89")
• IEF (Integrity Enhancement Feature)
- SQL2: 3. Norm 1992 ("SQL-92")
- SQL3: SQL:1999
- SQL4: SQL:2003
• Behandlung von XML in relationen DBMS
- (SQL5: SQL:2008)
- ...
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 146
5.1 Einleitung / Historie / Normierung
Genormte SQL-Sprachumfänge werden immer umfangreicher, SQLn+1
schließt jeweils SQLn ein (Abwärtskompatibilität)
Produkte vs. SQL-Norm
- Weitgehend SQL-89 konform, teils SQL-92 konform, nicht SQL:1999
- Produkte bieten zahlreiche "Spezialitäten" und Eigenheiten, die nicht
normkonform sind bzw. vielleicht später von der Norm erfasst werden
typischer heutiger SQL-Dialekt in Produkten
SQL3 / SQL-99
SQL2 / SQL-92
SQL1 / SQL-89
SQL0 / SQL-87
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 147
5.2 Datendefinition mit SQL (DDL)
Grober Überblick zu Datendefinitionsanweisungen in SQL
Konzeptuelle Ebene
- CREATE TABLE, ALTER TABLE, DROP TABLE
- CREATE DOMAIN, ALTER DOMAIN, DROP DOMAIN
- ...
Interne Ebene
- CREATE INDEX, ALTER INDEX, DROP INDEX
- Nicht Bestandteil der aktuellen SQL-Norm (SQL:2003)
Externe Ebene
- CREATE VIEW, DROP VIEW
- Nicht notwendig: ALTER VIEW ( = DROP + CREATE)
- Erläuterungen im Abschnitt 5.3 Datenänderung/-zugriff mit SQL (DML)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 148
5.2.1 CREATE TABLE
Syntax (in einfachster Form):
CREATE TABLE Basisrelationenname (
Spaltenname_1 Wertebereich_1, [NOT NULL]
...
Spaltenname_k Wertebereich_k [NOT NULL])
Beispiel (siehe Folie 128):
- Definition für Primärschlüssel und Fremdschlüssel fehlen
- Testausführung in MS Access
- Anweisungen:
CREATE TABLE Buch (
InvNr INTEGER NOT NULL,
Titel VARCHAR(30),
ISBN CHAR(5),
Autor VARCHAR(40))
Datenbanksysteme
CREATE TABLE Ausleihe (
InvNr INTEGER NOT NULL,
Name VARCHAR(20))
Friedrich-Schiller-Universität Jena
Seite 149
5.2.1 CREATE TABLE
Bedeutung der Anweisung:
- Erzeugen einer k-spaltigen Tabelle (Relation mit k Attributen) mit über
Spaltenname_i/Wertebereich_i definiertem Relationenschema
- Tabelle ist nach dem CREATE zunächst leer, d.h. enthält keine Tupel
- NOT NULL Klausel verbietet das Auftreten von Nullwerten (NULL) in den
spezifizierten Spalten, ohne Angabe sind Nullwerte erlaubt
- Schemainformation wird im Datenbankkatalog abgelegt (teils auch als
Data Dictionary bezeichnet)
• Datenbankkatalog besteht ebenfalls aus Tabellen; Verzeichnis aller
erzeugten Tabellen, Attribute, benutzerdefinierten Wertebereiche etc.
• Katalogtabellen können mit SQL vom Benutzer gelesen werden wie
"normale" benutzereigene Tabellen
• Datenbankkataloge sind prinzipiell normiert
Wesentlicher Vorteil von relationalen Datenbanksystemen im
Vergleich zu vorrelationalen DBMS mit "kryptischer" interner Ablage
der Kataloginformationen!
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 150
5.2.1 CREATE TABLE
Wertebereiche / Datentypen
- Numerische Typen:
• INTEGER, SMALLINT, BIGINT
• FLOAT(precision), REAL, DECIMAL(precision [, scale])
- Zeichenkettentypen:
• CHARACTER(n), CHAR(n), VARCHAR(n)
- Logische Datentypen:
• BIT(n), BOOLEAN
- Datentypen für Zeit/Datum:
• DATE, TIME[(precision)], TIMESTAMP[(precision)]
- Datentypen für große Objekte
• CHARACTER LARGE OBJECT[(length)], CLOB[(length)]
Datentypen für konkrete relationale Datenbanksystemen (Produkte)
- Grundlage ist immer die Produktliteratur
- Oft existieren zusätzliche Datentypen (nicht in der SQL-Norm)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 151
5.2.1 CREATE TABLE
Bemerkungen zu Schlüsseln
- SQL-Norm erzwingt keine Primärschlüssel-Definition!
- Tabellen dürfen also Duplikate aufweisen
• Mehrfache Tupel, die in allen ihren Attributwerten übereinstimmen
• Multimengeneigenschaft ("bags" statt "sets")
- Duplikatfreiheit muss bei Bedarf explizit festgelegt werden
• PRIMARY KEY Klausel als eine Möglichkeit (implizit NOT NULL)
• Überwachung durch das DBMS
Abweichen von der "reinen (relationalen) Lehre"!
Beispiel (Erweiterung von Folie 149):
CREATE TABLE Buch (
InvNr INTEGER NOT NULL,
Titel VARCHAR(30),
ISBN CHAR(5),
Autor VARCHAR(40),
PRIMARY KEY (InvNr))
Datenbanksysteme
CREATE TABLE Ausleihe (
InvNr INTEGER NOT NULL,
Name VARCHAR(20),
PRIMARY KEY (InvNr),
FOREIGN KEY (InvNr)
REFERENCES Buch(InvNr))
Friedrich-Schiller-Universität Jena
Seite 152
5.2.1 CREATE TABLE
Zusätzliche Anweisungen für CREATE TABLE mit Fokus auf der
Integritätssicherung, war großes Thema der letzten Jahre (ab SQL-92)
- Primär-/Fremdschlüsseldefinition ist im relationalen Fall modellinhärent,
"ohne" sollte eigentlich nicht zulässig sein
- Falls der Primärschlüssel nur aus einem Attribut besteht, kann die
PRIMARY KEY Klausel "in-line" angegeben werden
DEFAULT-Klausel zur expliziten, benutzerseitigen Festlegung eines DefaultWerts für eine Tabellenspalte
- Bsp: CREATE TABLE Buch (
InvNr INTEGER PRIMARY KEY,
Titel VARCHAR(30),
ISBN CHAR(5),
Autor VARCHAR(40) DEFAULT 'Küspert')
- Beim Einfügen eines Datensatzes ohne Autor-Angabe wird vom DBVS der
Werte 'Küspert' eingetragen
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 153
5.2.1 CREATE TABLE
CHECK-Klausel zur Spezifikation von Integritätsbedingungen (nicht nur) für
einzelne Attributwerte
- Ermöglicht die Angabe von Prädikaten, welche den zulässigen
Wertebereich für Tabellenspalten weiter einschränken
- Prüfung erfolgt durch das DBVS
• Bei Tupeleinfügung (INSERT) und Wertänderung (UPDATE)
• Im Fall einer drohenden Konsistenzverletzung wird die verursachende
Anweisung nicht ausgeführt, also zurückgewiesen
- CHECK-Klausel ist auch an einer Tabelle gesamt definierbar
- Bsp:
CREATE TABLE Buch (
InvNr INTEGER PRIMARY KEY CHECK (InvNr BETWEEN 5 AND 9999),
Titel VARCHAR(30),
ISBN CHAR(5),
Autor VARCHAR(40) DEFAULT 'Küspert' CHECK (Autor <> 'Kujau'))
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 154
5.2.2 ALTER TABLE
Syntax:
ALTER TABLE Basisrelationenname <alter_action>
Bedeutung der Anweisung:
- Änderung eines mit CREATE TABLE angelegten Relationsschemata
(Schemaevolution)
- Möglichkeiten der Änderung über <alter_action>
• Hinzufügen neuer Attribute (Spalten) zu einer Tabelle, seit SQL-89
normiert (seit SQL-92 mit DEFAULT- und CHECK-Klausel)
• Löschen von Tabellenspalten, erst seit SQL-92 normiert
• Ändern von Eigenschaften vorhandener Attribute (sehr eingeschänkt!)
• Hinzufügen von Integritätsbedingungen an einer Tabelle
• Löschen von Integritätsbedingungen einer Tabelle
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 155
5.2.2 ALTER TABLE
Hinzufügen von Tabellenspalten
- Neue Spalte wird bei allen in der Tabelle aktuell vorhandenen Tupeln mit
NULL belegt (zumindest "logisch")
- Neue Spalte (Name, Wertebereich, Tabellenzuordnung) wird im Katalog
eingetragen
- Bsp:
• Tabelle "Buch" erhält neue Spalte "Einkaufspreis"
• Testausführung in MS Access
• Syntax: ALTER TABLE Buch
ADD Seitenzahl INTEGER CHECK (Seitenzahl > 0)
Löschen von Tabellenspalten
- Umkehrung der Wirkung gegenüber Hinzufügen
- Zusätzlich Angabe CASCADE bzw. RESTRICT möglich, Erklärung später
- Bsp:
• Löschen der Spalte "Einkaufspreis" in Tabelle "Buch"
• Syntax: ALTER TABLE Buch DROP Seitenzahl
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 156
5.2.2 ALTER TABLE
Ändern von Tabellenspalten
- Ändern/Löschen einer Default-Angabe
- Aktualisierung des Katalogs
- Bsp 1:
• Default-Wert an der Spalte "ISBN" in Tabelle "Buch" setzen
• Syntax: ALTER TABLE Buch ALTER ISBN SET DEFAULT '0-000'
- Bsp 2:
• Default-Wert für Spalte "ISBN" in Tabelle "Buch" löschen
• Syntax: ALTER TABLE Buch ALTER ISBN DROP DEFAULT
Hinzufügen einer Tabellen-Integritätsbedingung
- Aktuelle Daten der Tabelle müssen die Bedingung erfüllen!
- Aktualisierung des Katalogs
- Bsp:
• Spalte "Autor" und "Titel" in Tabelle "Buch" sollen eindeutig sein
• Syntax: ALTER TABLE Buch ADD UNIQUE(Autor, Titel)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 157
5.2.2 ALTER TABLE
Bemerkungen
- Wunsch nach viel mehr Möglichkeiten vorallem beim Verändern einer
bestehenden Tabellenspalte
• Bsp: Ändern des Datentyps
• Keine Unterstützung durch SQL-Norm (warum wohl?!)
- Relationale DBMS-Produkte unterstützen diesbezüglich meist nur kleinen
Teil der SQL-92-Norm: ALTER TABLE ... ADD ...
Schemaänderung generell heikles Thema bei DBMS
- Was geschieht mit den vorhandenen Daten (Tupeln in Tabellen)?
• Sofortige Transformation in neues Format
• Verzögerte Transformation in neues Format
• Was, wenn Transformation scheitert / nicht automatisch durchführbar?
- Auswirkungen auf vorhandene Anwendungen
• Programme, gespeicherte SQL-Anfragen
• Teilweise Abhilfe durch Sichten (Views)
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 158
5.2.3 DROP TABLE
Syntax:
DROP TABLE Basisrelationenname <drop_behavior>
Bedeutung der Anweisung:
- Tabelle "Basisrelationenname" wird gelöscht (Schema und Daten!)
• Einträge zur Schemabeschreibung (Relationsname, Attributnamen,
Wertebereichsangaben, ...) werden aus dem Katalog entfernt
• Üblicherweise nicht zwischen normalen DB-Veränderungen in einer
Transaktion erlaubt
- Definition der Reaktion des DBVS über <drop_behavior>, wenn die
Tabelle noch über Integritätsbedingungen/Sichten referenziert wird:
• CASCADE: bezugnehmende Objekte werden mit gelöscht
• RESTRICT: Löschung der Tabelle wird zurückgewiesen
Beispiel:
DROP TABLE Buch RESTRICT
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 159
5.2.4 CREATE DOMAIN
Syntax:
CREATE DOMAIN Domainname Wertebereich
Bedeutung der Anweisung:
- Möglichkeit zur Vereinbarung benutzerdefinierter Wertebereiche
• Eigene Datentypen (Domänen) im Gegensatz zur Einschränkung des
Wertebereichs von Standarddatentypen mit CHECK-Klausel
• Analog zu Programmiersprachen
- Definition darf mit DEFAULT- und CHECK-Klausel verwendet werden
Beispiel:
- Neues Attribut "Gebiet" in Tabelle
"Buch" mit nutzerdefinierten Typ
CREATE DOMAIN Fachgebiet VARCHAR(20)
DEFAULT 'Informatik'
CHECK (VALUE IN ('Informatik', 'Physik',
'BWL', 'Mathematik'))
Datenbanksysteme
CREATE TABLE Buch (
InvNr INTEGER PRIMARY KEY,
Titel VARCHAR(30),
Gebiet Fachgebiet,
ISBN CHAR(5),
Autor VARCHAR(40))
Friedrich-Schiller-Universität Jena
Seite 160
5.2.4 CREATE DOMAIN
Erläuterungen zum Beispiel:
- Neuer benutzerdefinierter Typ "Fachgebiet", welcher Zeichenketten der
Länge 20 aufnehmen kann
• Standardwert ist 'Informatik'
• Erlaubte Werte sind 'Informatik', 'Physik', 'Mathematik' und 'BWL'
Was wäre, wenn in der Liste der erlaubten Werte 'Informatik' fehlt?
- Einfügen eines Buch-Tupels ohne Gebiet-Angabe scheitert, weil
• DBVS den Default-Wert 'Informatik' generiert,
• CHECK-Klausel aber nicht erfüllt ist
Hinweise:
- Anweisung CREATE DOMAIN sowie DEFAULT- und CHECK-Klausel sind
erst ab SQL-92 normiert
- Realisierung in der gezeigten Form nicht in allen Produkten vorhanden
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 161
5.2.5 ALTER DOMAIN
Syntax:
ALTER DOMAIN Domainname <alter_action>
Bedeutung der Anweisung
- Verändert einen existierenden nutzerdefinierten Datentyp
- Möglichkeiten der Änderung über <alter_action>
• SET DEFAULT: Setzen eines (neuen) Defaultwertes
• DROP DEFAULT: Defaultwert löschen
• ADD CHECK: Check-Klausel hinzufügen/überschreiben
• DROP CHECK: Check-Klausel löschen
Beispiel:
- Setzen des neuen Default-Wertes 'BWL' am Datentyp "Fachgebiet"
ALTER DOMAIN Fachgebiet SET DEFAULT 'BWL'
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 162
5.2.6 DROP DOMAIN
Syntax:
DROP DOMAIN Domainname <drop_behavior>
Bedeutung der Anweisung
- Löscht einen existierenden nutzerdefinierten Datentyp
- Definition der Reaktion des DBVS über <drop_behavior>, wenn der
Datentyp noch verwendet wird:
• CASCADE: Gleichzeitige Löschung der abhängigen Objekte, z.B.
Tabellenspalten
• RESTRICT: Zurückweisen der Löschung
Beispiel:
- Löschen des Datentyps "Fachgebiet"
- Abhängige Objekte (z.B. Tabellenspalte "Buch.Gebiet") sollen auch
gelöscht werden
DROP DOMAIN Fachgebiet CASCADE
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 163
5.2.7 CREATE / DROP INDEX
Syntax:
CREATE [UNIQUE] INDEX Indexname
ON Basisrelationenname (
Spaltenname_1 Ordnung_1,
...
Spaltenname_k Ordnung_k)
Bedeutung der Anweisung
- Erzeugung eines Zugriffspfads (Index), der zum schnellen Zugriff auf
bestimmte Tupel bei gegebenem Attributwert dient
- UNIQUE-Angabe spezifiziert, dass die Werte im Index eindeutig sein
müssen (keine Duplikate)
- Ordnung_i: mögliche Werte ASC (ascending) und DESC (descending)
PRIMARY KEY-Definition bei CREATE TABLE erzeugt implizit einen Unique
Index auf dem Primärschlüssel
- Keine Forderung der (SQL-)Norm, aber Realität in Produkten
- Grund: Effizienz beim Prüfen der Werteeindeutigkeit!
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 164
5.2.7 CREATE / DROP INDEX
Bemerkung zur Indexrealisierung
- Art der Realisierung auf konzeptueller und externe Ebene nicht sichtbar
- Sogar die (Nicht-)Existenz eines Index bleibt verborgen
- Grund Datenunabhängigkeit: Indexe können erzeugt/gelöscht werden,
ohne dass der Anwender etwas davon merkt (außer Performance)!
Beispiel (siehe Folie 128):
- Index-Ausprägung zum Primärschlüssel "InvNr" in Tabelle "Buch"
z.B.
B*-Baum
0007
...Dr. No...
1201
4711
4712
4717
...Datenbanken...
...Datenbanken...
...Objektbanken...
...Pascal...
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 165
5.2.7 CREATE / DROP INDEX
Beispiele:
- CREATE UNIQUE INDEX Titel_Index ON Buch (Titel ASC)
• Ergebnis: kann nicht erfolgreich durchgeführt werden, da keine
Werteeindeutigkeit in Spalte "Titel"
• Lösung: Weglassen der UNIQUE-Angabe
- CREATE INDEX Autoren_Index ON Buch (Autor ASC)
• Ermöglicht schnellen Zugriff auf die zu einem Autor gehörigen Bücher
- CREATE INDEX Autoren_Titel_Index ON Buch (Autor ASC, Titel ASC)
• Index enthält Werte-Paare (Autor, Titel)
• Gut geeignet, wenn Anfragen häufig mit Autoren- und Titelangabe
erfolgen ("Ist das Pascal-Buch von Wirth vorhanden?")
- CREATE INDEX InvNr_Index ON Ausleihe (InvNr ASC)
• Unnötig, da "InvNr" Primärschlüssel in Tabelle "Ausleihe" ist und Index
somit vorhanden (sogar UNIQUE)
- DROP INDEX Autoren_Index
• Index mit global eindeutigem Namen "Autoren_Index" wird gelöscht
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 166
5.2.7 CREATE / DROP INDEX
Gedankenspiel: angenommen, "InvNr" wäre nicht als Primärschlüssel in
"Ausleihe" vereinbart, warum erscheint Index auf "InvNr" trotzdem sinnvoll?
- "InvNr" ist Fremdschlüssel in "Ausleihe" mit Bezug auf den
Primärschlüssel (InvNr) von "Buch"
- DBVS muss deshalb Integritätsüberwachung vornehmen, z.B. dass ein
Buch nicht gelöscht werden darf, wenn noch ausgeliehen
- Erfordert aus Effizienzgründen einen Index (welcher von realen Produkten
nicht erzwungen wird!)
Abschließende Bemerkungen zur Index-Thematik
- Seit SQL-92 gibt es eine UNIQUE-Spezifikation, die genau so eingesetzt
werden darf, wie die PRIMARY KEY-Spezifikation
- Damit adäquates Mittel zur Definition von Schlüsselkandidaten
• Unterstützung nicht in allen Produkten
• Unschöne Alternative: Vereinbarung von Schlüsselkandidaten mit
CREATE UNIQUE INDEX
Datenbanksysteme
Friedrich-Schiller-Universität Jena
Seite 167
Herunterladen