Software-Engineering und Datenbanken BNF Prof. Dr. Bernhard Schiefer 7-1
Syntaxbeschreibung Formalismus zur Beschreibung der Syntax von Sprachen erforderlich. Im Programmiersprachenbereich üblicher Formalismus: BNF = Backus-Naur-Form Im folgenden: Verwendung einer erweiterten BNF. Prof. Dr. Bernhard Schiefer 7-2
BNF Nicht-Terminalsymbole: <wochentag> <datum> <tag> <monat> <jahr> Terminalsymbole: Montag Dienstag Mittwoch Ausdrücke: <datum> := <wochentag>, den <tag>.<monat>.<jahr> Prof. Dr. Bernhard Schiefer 7-3
BNF - Metazeichen Auswahl <wochentag> := { Montag Dienstag Mittwoch } Optionale Teile <datum> := <tag>.<monat>. [<jahr>] Optionale Auswahl <datum> := <tag>.<monat>. [ 96 97 ] Ohne Meta-Bedeutung: <klammer> := { { } } Prof. Dr. Bernhard Schiefer 7-4
BNF - Wiederholungszeichen Wiederholung <datum-liste> := <datum>* Wiederholung - mind. 1 mal <datum-liste> := <datum>+ Wiederholung - getrennt durch Zeichen <datum-liste> := { <datum> //, }+ Prof. Dr. Bernhard Schiefer 7-5
BNF - Beispiele Zeichen und Ziffern: <zeichen> := { A B... Z a... z _ - } <ziffer> := { 1 2 3 4 5 6 7 8 9 0 } Zahlen: <zahl> := <ziffer>+ Namen: <name> := <zeichen>{< zeichen> <ziffer>}* Prof. Dr. Bernhard Schiefer 7-6
BNF - Konventionen Folgendermaßen aufgebaute Bezeichner für Nichtterminale sind Synonyme : <<name>-name> <<name>-zahl> := <name> := <zahl> Beispiele: <typ-name> <positions-zahl> ist gleichwertig zu <name> ist gleichwertig zu <zahl> Prof. Dr. Bernhard Schiefer 7-7
BNF - Übung Beschreiben Sie das Konstrukt "Wiederholung - getrennt durch Zeichen" mit Hilfe der übrigen Mittel. Geben Sie BNF-Ausdrücke für Fließkommazahlen mit optionalem Exponent an. Beispiele: 4E1-4711E-2 0.00032E1 +.1234E2 Prof. Dr. Bernhard Schiefer 7-8
Software-Engineering und Datenbanken SQL Prof. Dr. Bernhard Schiefer 7-9
Die Anfragesprache SQL basiert auf der relationalen Algebra (Codd 1970) mehre Standards von der ISO DBTG: SQL1 (1989), SQL2 (1992), SQL3 (1999), SQL:2003 Aufteilung der Anforderungen im Standard: Entry Level, Intermediate Level, Full Level zahlreiche Produkte: DB2, INFORMIX, MaxDB, MS SQL Server, ORACLE, Sybase, Teradata,... Prof. Dr. Bernhard Schiefer 7-10
Bestandteile: ISO Standard SQL:2003 ISO/IEC 9075-1 Framework (SQL/Framework) ISO/IEC 9075-2 Foundation (SQL/Foundation) ISO/IEC 9075-3 Call Level Interface (SQL/CLI) ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM) ISO/IEC 9075-9 Management of External Data (SQL/MED) ISO/IEC 9075-10 Object Language Bindings (SQL/OLB) ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata) ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT) ISO/IEC 9075-14 XML-related specifications (SQL/XML) Prof. Dr. Bernhard Schiefer 7-11
Zeichenketten SQL Datentypen (I) CHARACTER (n), CHARACTER VARYING(n) Synonyme: CHAR, VARCHAR Binärdaten BIT (n), BIT VARYING (n) Datetime DATE, TIME, TIMESTAMP, (INTERVAL) Prof. Dr. Bernhard Schiefer 7-12
SQL Datentypen (II) Exact numeric: DECIMAL (p, q) - Genauigkeit mind. p davon q Nachkommastellen NUMERIC (p,q) - Genauigkeit genau p INTEGER SMALLINT Synonyme: DECIMAL (p), DEC, INT Approximate numeric: FLOAT (p) Synonyme: REAL, DOUBLE PRECISION Prof. Dr. Bernhard Schiefer 7-13
Literale Zeichenketten Dies ist Text! Was n das? Binärdaten B 0101 X 5 X A3 X e3 Exact Numeric 4-47.11 0.0032 +12.34 Approximate Numeric 4E1-4711E-2 0.00032E1 +.1234E2 Prof. Dr. Bernhard Schiefer 7-14
SQL DDL-Operationen DDL = Data Definition Language Sprache zur Veränderung des Schemas Schema = Menge zusammengehöriger Daten(typ)definitionen Schemaübergreifende Beziehungen sind (idr) nicht möglich! Operationen: Tabelle anlegen Tabelle ändern Tabelle löschen... Prof. Dr. Bernhard Schiefer 7-15
Domänen Zentralisierung von Datentypdefinitionen Gewährleistung der Konsistenz von Definitionen Einfachere Änderbarkeit Dokumentation Trotz Standardisierung in einigen DBMS noch nicht implementiert SQL92 - Intermediate Level Prof. Dr. Bernhard Schiefer 7-16
Domänendefinition Syntax: <domain-definition> := CREATE DOMAIN <domain-name> [ AS ] <data-type> [<default-def>] <domain-constraint-def>* Beispiele: CREATE DOMAIN Nachname VARCHAR(50); CREATE DOMAIN Postleitzahl AS DEC(5); Prof. Dr. Bernhard Schiefer 7-17
Default Definition Falls kein Wert für eine Spalte beim Einfügen angegeben wird, kann ein Default-Wert festgelegt werden: <default-def> := DEFAULT { <literal> <niladic-function> NULL } < niladic-function> := { USER CURRENT_DATE CURRENT_TIME... } Prof. Dr. Bernhard Schiefer 7-18
Der Wert NULL NULL ist verschieden von allen Werten des Wertebereiches. Bedeutung: Wert noch nicht vorhanden Wert unbekannt Wert nicht relevant NOT true unknown false false unknown true AND true unknown false true true unknown false unknown unknown unknown false false false false false OR true unknown false true true true true unknown true unknown unknown false true unknown false Prof. Dr. Bernhard Schiefer 7-19
Domänen Constraints Einschränkung auf bestimmte Werte <domain-constraint-def> := [ CONSTRAINT <constraint-name> ] CHECK ( <conditional-expr> ) Beispiel: CREATE DOMAIN Wochentag CHAR(10) CONSTRAINT Tage CHECK ( VALUE IN ( 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag' ) ) CHECK ( VALUE IS NOT NULL ) Prof. Dr. Bernhard Schiefer 7-20
Namen von Constraints Für einen Domänen Constraint muss kein Name vergeben werden Wird keiner angegeben, so wird jedoch einer generiert Wichtig für: Ausgabe bei Fehlermeldungen Prof. Dr. Bernhard Schiefer 7-21
Ändern von Domänen Default-Werte und Constraints können nachträglich geändert werden Kommandosyntax: <domain-alter> := ALTER DOMAIN <domain-name> { <domain-def-alter> <domain-constraint-alter> } <domain-def-alter> := { SET <default-definition> DROP DEFAULT } <domain-constraint-alter> := { ADD <domain-constraint-def> DROP CONSTRAINT <constraint-name> } Prof. Dr. Bernhard Schiefer 7-22
Löschen von Domänen DROP DOMAIN DROP DOMAIN <domain-name> { RESTRICT CASCADE } Bedeutung: RESTRICT: Falls abhängige Objekte existieren -> Fehler CASCADE: Falls abhängige Objekte existieren werden diese auch gelöscht. Auswirkungen: Die Spalten haben nun den zugrundeliegenden Basistyp. Die Default-Definitionen der Domäne werden zur Default-Definition der Spalte, falls kein eigener Default definiert. Das gleiche gilt auch für Integritätsbedingungen (Constraints). Prof. Dr. Bernhard Schiefer 7-23
Erzeugen von Tabellen CREATE TABLE Statement <base-table-def> := CREATE TABLE <table-name> ( {<table-element-def> //, }+ ) <table-element-def> := { <column-def> <table-constraint-def> } <column-def> := <column-name> { <data-type> <domain-name> } [<default-def>] [<column-constraint-def>] Prof. Dr. Bernhard Schiefer 7-24
Vorrangregelung für Default-Definition Sind keinerlei Definitionen angegeben, so entspricht dies: DEFAULT NULL Default-Definition bei Spaltendefinition hat Vorrang vor Domain-Definition. Es kann eine Rolle spielen, ob DEFAULT NULL bei Spaltendefinition angegeben wird, oder nicht! Prof. Dr. Bernhard Schiefer 7-25
Integritätsbedingungen für Tabellen Diese Integritätsbedingungen können sich auf mehrere Felder einer Tabelle beziehen. Constraint Definition: <table-constraint-def> := [ CONSTRAINT <constraint-name> ] { PRIMARY KEY ( {<column-name>//,}+ ) UNIQUE ( {<column-name>//,}+ ) FOREIGN KEY ( {<column-name>//,}+ ) <reference-def> CHECK ( <conditional-expr> ) } Prof. Dr. Bernhard Schiefer 7-26
Integritätsbedingungen für Spalten Kurzform für Tabellen-Constraint, der sich nur auf genau eine Spalte bezieht. Constraint Definition (vereinfacht): <column-constraint-def> := [ CONSTRAINT <constraint-name> ] { NOT NULL PRIMARY KEY UNIQUE <reference-def> CHECK ( <conditional-expr> ) } Prof. Dr. Bernhard Schiefer 7-27
Beispiel Ausführlich: CREATE TABLE Lieferanten ( LNr DEC(5), Name CHAR(20) NOT NULL, ) PRIMARY KEY (LNr), CONSTRAINT Name_Eindeutig UNIQUE (Name) Kurzform: CREATE TABLE Lieferanten ( LNr DEC(5) PRIMARY KEY, Name CHAR(20) NOT NULL UNIQUE ) Prof. Dr. Bernhard Schiefer 7-28
Referenzdefinition Syntax: <reference-def> := REFERENCES <table-name> [ ( {<column-name>//,}+ ) ] [ MATCH { FULL PARTIAL } ] [ ON DELETE { NO ACTION CASCADE SET DEFAULT SET NULL } ] [ ON UPDATE { NO ACTION CASCADE SET DEFAULT SET NULL } ] Terminologie: Tabelle mit Fremdschlüssel => referenzierende Tabelle Tabelle mit zugeh. Primärschlüssel => Referenztabelle Prof. Dr. Bernhard Schiefer 7-29
MATCH Referenzdefinition - Erläuterungen später! NO ACTION CASCADE Unzulässige Änderungen an Referenzen führen zu Fehlern. Die Änderungsoperation auf der Referenztabelle schlägt auf die referenzierende Tabelle durch. SET DEFAULT SET NULL Infolge einer Änderung auf der Referenztabelle wird der Default- Wert anstelle der Referenz gesetzt. Infolge einer Änderung auf der Referenztabelle wird der Wert NULL anstelle der Referenz gesetzt. Prof. Dr. Bernhard Schiefer 7-30
Tabellen anlegen - Beispiel CREATE TABLE Ort ( PLZ Postleitzahl NOT NULL, Name CHAR(20), ) PRIMARY KEY (PLZ) CREATE TABLE Kunde ( KndNr DECIMAL(6), Name CHAR(20) NOT NULL, Strasse CHAR(20), PLZ Postleitzahl DEFAULT 66482 NOT NULL, PRIMARY KEY (KndNr), FOREIGN KEY (PLZ) REFERENCES Ort ON DELETE CASCADE ) Prof. Dr. Bernhard Schiefer 7-31
Tabellen anlegen - Übung Geben Sie Definitionen für folgende Relationen an: Personal ( PersNr, VName, NName, ProjNr, TelefonNr, Gehalt ) Akte ( PersNr, Datum, Position, Gehalt ) Abteilung ( AbtNr, AbtName, Budget, PersNr ) Projekt ( ProjNr, Budget, AbtNr ) Denken Sie insbesondere an die Integritätsbedingungen für die Fremdschlüssel. Abteilungsleiter Prof. Dr. Bernhard Schiefer 7-32
Ändern von Tabellen ALTER TABLE Statement: <table-alter> := ALTER TABLE <table-name> {<column-alter> <table-constraint-alter>} <column-alter> := { ADD [COLUMN] <column-def> ALTER [COLUMN] <column- name> { SET <default-def> DROP DEFAULT } } DROP [COLUMN] <column-name> { RESTRICT CASCADE } Prof. Dr. Bernhard Schiefer 7-33
Ändern von Integritätsbedingungen Integritätsbedingungen können hinzugefügt oder gelöscht werden. Syntax: <table-constraint-alter> := { ADD < table-constraint-def> DROP CONSTRAINT <table-constraint-name> { RESTRICT CASCADE } } Bei neuen Integritätsbedingungen erfolgt eine Überprüfung der vorhandenen Daten auf Einhaltung. Prof. Dr. Bernhard Schiefer 7-34
Modifikation von Spalten Keine Operationen: zum Umbenennen von Spalten zum Ändern des Spaltentyps DEC(5) -> CHAR(5) zum Erweitern/Verkleinern von Spalten CHAR(10) -> CHAR(12) DB-Hersteller bieten oft eigene Lösungen: z.b. ORACLE und INFORMIX: ALTER TABLE <table-name> MODIFY <column- name> [ <data-type>] [<default-def>] [<column-constraint-def>] Oft sind Modifikationen aber nur bei NULL-Spalten möglich! Prof. Dr. Bernhard Schiefer 7-35
Bedeutung von Änderungsoperationen In welcher Weise und auf welche Daten sich Änderungen auswirken hängt stark vom jew. DBS ab. Beispiel: Änderung des DEFAULT-Wertes Bei vielen Systemen wirkt sich dies nur auf zukünftige Sätze aus. Bei einigen werden bestehende Sätze mit dem alten Default geändert! Das Verhalten von nichtstandardisierten Erweiterungen (z.b. MODIFY COLUMN) ist teilweise höchst unterschiedlich! Prof. Dr. Bernhard Schiefer 7-36
Löschen von Tabellen DROP TABLE Statement <table-drop> := DROP TABLE <table-name> { RESTRICT CASCADE } Prof. Dr. Bernhard Schiefer 7-37
Probleme beim Ändern Zeit Sehr unterschiedlich je nach DB-Implementierung: Bei einigen ist die Umspeicherung aller Daten in der Tabelle erforderlich. Bei anderen wird lediglich Metainformation geändert. Kriterien - wie "selbstbeschreibend" sind die Daten? Sperren Enthalten die Sätze Versionsnummern? Enthalten sie Längeninformationen? Enthalten sie Info über die vorhandenen Felder? Bei vielen Systemen kann während der Durchführung einer Tabellenänderung nicht mit dieser Tabelle gearbeitet werden. Prof. Dr. Bernhard Schiefer 7-38
Probleme beim Ändern (II) Konsequenzen / Ansätze Bei Tabellen, bei denen mit einem großen Datenvolumen zu rechnen ist, müssen spätere Änderungen beim Entwurf schon berücksichtigt werden. Löschen vermeiden, wenn dieses teuer ist und die Möglichkeit einer Wiederverwendung existiert. Evtl.: Eine neue Tabelle anlegen und eine eigene "schleichende" Umsetzung realisieren. Prof. Dr. Bernhard Schiefer 7-39
Software-Engineering und Datenbanken Der Datenbankkatalog Prof. Dr. Bernhard Schiefer 7-40
Datenbankkatalog Enthält Informationen über die vorhandenen Datenbeschreibungen (Tabellen, Spalten,...) Beispiele: Welche Tabellen verfügen über eine Spalte "KndNr"? Welche Spalten verwenden die Domäne "Postleitzahl" und wie heißen diese? Welche Spalten können den Wert NULL annehmen? Wieviele Spalten haben unsere Tabellen im Durchschnitt? Prof. Dr. Bernhard Schiefer 7-41
Weitere Kataloginformation Der Katalog enthält darüber hinaus Verwaltungsinformation: Wer hat wann welche Tabellen angelegt? Wer hat die Tabellendefinition zuletzt geändert? Gelegentlich auch (aggregierte) Informationen über die Daten selbst: Wieviele Sätze sind momentan in der Tabelle "Kunden" abgespeichert? Wieviel verschiedene Nachnamen haben die gespeicherten Kunden? Prof. Dr. Bernhard Schiefer 7-42
Technische Kataloginformation Im Katalog findet sich häufig auch Information über: Platzverbrauch durchschnittliche Blockfüllung durchschnittliche Satzlänge Dateinamen... Prof. Dr. Bernhard Schiefer 7-43
Datenbankkatalog - Bezeichnungen Andere Bezeichnungen Data Dictionary Metadaten Katalog Datenwörterbuch Information Schema Repository oft umfassender: Entwurfsdokumente,... Prof. Dr. Bernhard Schiefer 7-44
Realisierung des Katalogs Wünschenswert integriertes Data Dictionaryû d.h. die Schemainformation liegt auch in relationaler Form vor die üblichen DB-Eigenschaften (Persistenz, synchronisierter Mehrbenutzerzugriff,...) werden garantiert die bekannten Operationen zum Finden von Informationen lassen sich dann auch auf den Katalog anwenden. Prof. Dr. Bernhard Schiefer 7-45
Katalogtabellen Tabellen zur Beschreibung von: Tabellen Spalten Domänen... Auch diese Tabellen müssen im Katalog beschrieben sein! Änderungen immer implizit durch die speziellen DDL- Operationen. Nie DML-Operationen darauf anwenden! Prof. Dr. Bernhard Schiefer 7-46
Normierung Die Tabellen zur Katalogverwaltung sind nur lückenhaft normiert. Bezeichnung des Katalogs im Standard: "Information Schema" Verbesserungen mit SQL3. Heute: herstellerspezifische Katalogtabellen starke Unterschiede zwischen den einzelnen DB-Herstellern Prof. Dr. Bernhard Schiefer 7-47
Katalogtabellen Beispielhaft: Schemata ( schema_name, owner, creation_date ) Domains ( dom_name, definition ) Columns ( column_name, table_name, position, data_type, length, dec, default, keypos ) Tables ( table_name, owner, creation_date )... Häufig: Virtuelle Katalogtabellen Connected ( user, logon_time, cpu, memory ) Processes ( process_id, owner, status, cpu )... Prof. Dr. Bernhard Schiefer 7-48