Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...
Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...
Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Gottfried Vossen<br />
<strong>Datenmodelle</strong>,<br />
<strong><strong>Datenbank</strong>sprachen</strong><br />
<strong>und</strong> <strong>Datenbank</strong>managementsysteme<br />
5. Auflage<br />
<strong>Oldenbourg</strong>
<strong>Datenmodelle</strong>,<br />
<strong><strong>Datenbank</strong>sprachen</strong><br />
<strong>und</strong> <strong>Datenbank</strong>managementsysteme<br />
von<br />
Prof. Dr. Gottfried Vossen<br />
5. überarbeitete <strong>und</strong> erweiterte Auflage<br />
<strong>Oldenbourg</strong> Verlag München Wien<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Inhaltsverzeichnis<br />
Auszug ... xiv<br />
... aus dem Vorwort zur ersten Auflage xiv<br />
... aus dem Vorwort zur zweiten Auflage xv<br />
... aus dem Vorwort zur dritten Auflage xvi<br />
Vorwort zur fünften Auflage xix<br />
I Einführung 1<br />
1 Motivationen, Historisches, Abgrenzungen 3<br />
1.1 Daten-intensive Anwendungen <strong>und</strong> deren Anforderungen . . . . . . . . 3<br />
1.2 <strong>Datenbank</strong>en <strong>und</strong> Informationssysteme . . . . . . . . . . . . . . . . . . 6<br />
1.3 Entwicklung von <strong>Datenbank</strong>systemen <strong>und</strong> <strong>Datenmodelle</strong>n . . . . . . . 7<br />
1.3.1 Filesysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.3.2 Generische Sicht eines <strong>Datenbank</strong>systems . . . . . . . . . . . . 10<br />
1.3.3 Netzwerk- <strong>und</strong> hierarchische <strong>Datenbank</strong>en . . . . . . . . . . . . 12<br />
1.3.4 Relationale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . 15<br />
1.3.5 Objektrelationale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . 18<br />
1.3.6 XML-<strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
1.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 22<br />
1.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
2 Aufbau von <strong>Datenbank</strong>en <strong>und</strong> <strong>Datenbank</strong>systemen 25<br />
2.1 Datenunabhängigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
2.2 Die ANSI/SPARC-Schemaebenen . . . . . . . . . . . . . . . . . . . . . 26<br />
2.3 Sprachebenen <strong>und</strong> -klassen . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
2.4 Ein Schichtenmodell für <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . 32<br />
2.5 Bibliographische Hinweise, Ergänzungen, Querbezüge . . . . . . . . . . 39<br />
2.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
vi Inhalt<br />
II Klassische Konzepte:<br />
ER- <strong>und</strong> relationales Datenmodell. SQL 43<br />
3 <strong>Datenbank</strong>-Entwurf mit dem Entity-Relationship-Modell 45<br />
3.1 Der <strong>Datenbank</strong>-Lebenszyklus . . . . . . . . . . . . . . . . . . . . . . . 46<br />
3.2 Aspekte der Qualitätssicherung . . . . . . . . . . . . . . . . . . . . . . 49<br />
3.2.1 Qualitätskriterien für den <strong>Datenbank</strong>entwurf . . . . . . . . . . 49<br />
3.2.2 Die Gr<strong>und</strong>züge ordnungsmäßiger Modellierung . . . . . . . . . 51<br />
3.3 Phasen des Entwurfsprozesses . . . . . . . . . . . . . . . . . . . . . . . 52<br />
3.3.1 Anforderungsanalyse <strong>und</strong> -spezifikation . . . . . . . . . . . . . 54<br />
3.3.2 Konzeptioneller Entwurf . . . . . . . . . . . . . . . . . . . . . . 55<br />
3.3.3 Logischer Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
3.3.4 Physischer Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
3.3.5 Weitere Entwurfsschritte . . . . . . . . . . . . . . . . . . . . . . 58<br />
3.4 Allgemeine Abstraktionskonzepte . . . . . . . . . . . . . . . . . . . . . 59<br />
3.5 Das Entity-Relationship-Modell . . . . . . . . . . . . . . . . . . . . . . 60<br />
3.5.1 Entities <strong>und</strong> Attribute . . . . . . . . . . . . . . . . . . . . . . . 61<br />
3.5.2 Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
3.5.3 IS-A-Beziehungen . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
3.5.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />
3.6 Konzeptioneller Entwurf mit dem ER-Modell . . . . . . . . . . . . . . 81<br />
3.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 88<br />
3.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />
4 Das relationale Datenmodell 95<br />
4.1 Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />
4.2 Datenabhängigkeiten. Relationenschemata . . . . . . . . . . . . . . . . 98<br />
4.3 Transformation eines ER-Diagramms in das Relationenmodell . . . . . 104<br />
4.4 <strong>Datenbank</strong>-Definition mit SQL . . . . . . . . . . . . . . . . . . . . . . 109<br />
4.4.1 <strong>Datenbank</strong>schema-Definition . . . . . . . . . . . . . . . . . . . 110<br />
4.4.2 Tabellen-Definition . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />
4.4.3 Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . . . 112<br />
4.4.4 Weitere Definitionsaspekte . . . . . . . . . . . . . . . . . . . . 114<br />
4.5 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />
4.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 124<br />
4.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />
5 Gr<strong>und</strong>lagen von SQL 127<br />
5.1 SQL von 1980 bis 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />
5.2 <strong>Datenbank</strong>-Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128<br />
5.3 <strong>Datenbank</strong>-Anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />
5.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />
5.3.2 Zur Syntax von SELECT . . . . . . . . . . . . . . . . . . . . . . 131<br />
5.3.3 Exkurs in die Relationenalgebra . . . . . . . . . . . . . . . . . 134<br />
5.3.4 Semantik von SELECT am Beispiel von RA-Ausdrücken . . . . . 135<br />
5.3.5 Verb<strong>und</strong>-Operatoren in SQL . . . . . . . . . . . . . . . . . . . 137<br />
5.4 Beispiele für SQL-Anfragen . . . . . . . . . . . . . . . . . . . . . . . . 140<br />
5.4.1 Selektionen <strong>und</strong> Projektionen . . . . . . . . . . . . . . . . . . . 141<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Inhalt vii<br />
5.4.2 Verb<strong>und</strong>anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />
5.4.3 Aggregatfunktionen <strong>und</strong> Unteranfragen . . . . . . . . . . . . . 144<br />
5.4.4 Abschließende Bemerkungen . . . . . . . . . . . . . . . . . . . 146<br />
5.5 Rekursive Anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />
5.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 149<br />
5.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />
5.8 Anhang: Beispieltabellen der Fallstudie Medienhandel . . . . . . . . . 153<br />
6 Integrität in relationalen <strong>Datenbank</strong>en 161<br />
6.1 Arten von Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . 161<br />
6.2 Funktionale Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . 165<br />
6.2.1 Definition. Implikation . . . . . . . . . . . . . . . . . . . . . . . 166<br />
6.2.2 Ableitung. Das Membership-Problem . . . . . . . . . . . . . . . 169<br />
6.2.3 Anwendungen des Membership-Algorithmus. Schlüssel . . . . . 175<br />
6.2.4 (Abhängigkeits-) Basen . . . . . . . . . . . . . . . . . . . . . . 178<br />
6.2.5 Allgemeine Implikation . . . . . . . . . . . . . . . . . . . . . . 181<br />
6.3 Inklusionsabhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />
6.4 Allgemeine Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />
6.5 Aktive Integritätskontrolle über Trigger . . . . . . . . . . . . . . . . . 188<br />
6.6 Bibliographische Hinweise, Ergänzungen, Querbezüge . . . . . . . . . . 193<br />
6.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />
7 Relationale Sprachen: Relationenalgebra, Kalküle, Datalog 201<br />
7.1 Die Relationenalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />
7.1.1 Relationale Operationen <strong>und</strong> ihre Rechenregeln . . . . . . . . . 202<br />
7.1.2 Ausdrücke der Relationenalgebra . . . . . . . . . . . . . . . . . 208<br />
7.1.3 Eigenschaften der Relationenalgebra . . . . . . . . . . . . . . . 210<br />
7.1.4 Algebraische Optimierung . . . . . . . . . . . . . . . . . . . . . 212<br />
7.2 Relationenkalküle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />
7.2.1 Der Relationen-Tupelkalkül . . . . . . . . . . . . . . . . . . . . 215<br />
7.2.2 Der Relationen-Domainkalkül . . . . . . . . . . . . . . . . . . . 220<br />
7.3 View-Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />
7.4 Gr<strong>und</strong>lagen von Datalog . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />
7.4.1 Motivationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />
7.4.2 Logik als Anfragesprache . . . . . . . . . . . . . . . . . . . . . 228<br />
7.4.3 Intensionale <strong>und</strong> extensionale <strong>Datenbank</strong>en . . . . . . . . . . . 229<br />
7.4.4 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />
7.4.5 Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . . . 232<br />
7.4.6 Datalog-Programme <strong>und</strong> deren Interpretation . . . . . . . . . . 232<br />
7.4.7 Ausdruckskraft von Datalog . . . . . . . . . . . . . . . . . . . . 235<br />
7.5 Konzepte der Theorie von Anfragesprachen . . . . . . . . . . . . . . . 236<br />
7.5.1 Konjunktive Anfragen . . . . . . . . . . . . . . . . . . . . . . . 236<br />
7.5.2 Vollständigkeit von Anfragesprachen . . . . . . . . . . . . . . . 237<br />
7.5.3 Ausdruckskraft <strong>und</strong> Komplexität von Anfragesprachen . . . . . 239<br />
7.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 243<br />
7.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
viii Inhalt<br />
8 Qualitätsorientierter <strong>Datenbank</strong>entwurf 251<br />
8.1 Universalrelationen <strong>und</strong> Update-Anomalien . . . . . . . . . . . . . . . 251<br />
8.2 Zweite, dritte <strong>und</strong> Boyce-Codd-Normalform . . . . . . . . . . . . . . . 253<br />
8.3 Dekomposition <strong>und</strong> Synthese . . . . . . . . . . . . . . . . . . . . . . . 259<br />
8.4 Mehrwertige <strong>und</strong> Verb<strong>und</strong>-Abhängigkeiten . . . . . . . . . . . . . . . . 269<br />
8.5 Vierte <strong>und</strong> fünfte Normalform . . . . . . . . . . . . . . . . . . . . . . . 273<br />
8.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 275<br />
8.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />
III Moderne Konzepte:<br />
Objekt-Basierung <strong>und</strong> XML-Dokumente 279<br />
9 Objekt-relationale <strong>Datenbank</strong>en 281<br />
9.1 Evolution von <strong>Datenmodelle</strong>n . . . . . . . . . . . . . . . . . . . . . . . 282<br />
9.1.1 Grenzen relationaler <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . 282<br />
9.1.2 Höhere <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . . . . . . . . 283<br />
9.1.3 Daten-, Funktions- <strong>und</strong> Prozessentwurf . . . . . . . . . . . . . 285<br />
9.2 Objekt-Orientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />
9.2.1 Das Paradigma . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />
9.2.2 Objekt-Orientierung <strong>und</strong> <strong>Datenbank</strong>en . . . . . . . . . . . . . . 292<br />
9.2.3 Unterscheidung von Typen <strong>und</strong> Klassen . . . . . . . . . . . . . 295<br />
9.2.4 Objekt-Orientierung im relationalen Datenmodell . . . . . . . . 299<br />
9.3 <strong>Datenbank</strong>modellierung mit der UML . . . . . . . . . . . . . . . . . . 301<br />
9.3.1 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />
9.3.2 Assoziationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />
9.3.3 Aggregationen <strong>und</strong> Kompositionen . . . . . . . . . . . . . . . . 305<br />
9.3.4 Generalisierung <strong>und</strong> Spezialisierung . . . . . . . . . . . . . . . 305<br />
9.3.5 Weitere Modellierungsmöglichkeiten . . . . . . . . . . . . . . . 306<br />
9.3.6 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . 307<br />
9.4 Objekt-relationale Definitionskonzepte in SQL . . . . . . . . . . . . . . 310<br />
9.4.1 Basisdatentypen <strong>und</strong> Typkonstruktoren . . . . . . . . . . . . . 310<br />
9.4.2 Benutzerdefinierte Typen <strong>und</strong> Typhierarchien . . . . . . . . . . 312<br />
9.4.3 Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315<br />
9.5 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . . . . . 317<br />
9.6 SQL-Anfragen an objekt-relationale <strong>Datenbank</strong>en . . . . . . . . . . . . 321<br />
9.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 326<br />
9.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327<br />
9.9 Anhang: Beispieltabellen der Fallstudie Medienhandel . . . . . . . . . 330<br />
10 Einführung in XML 337<br />
10.1 Elemente, Tags <strong>und</strong> Attribute . . . . . . . . . . . . . . . . . . . . . . . 338<br />
10.2 Validierung von XML-Dokumenten: DTDs <strong>und</strong> XML Schema . . . . . 345<br />
10.3 Normalisierungsaspekte . . . . . . . . . . . . . . . . . . . . . . . . . . 349<br />
10.4 Verarbeitung von XML-Dokumenten . . . . . . . . . . . . . . . . . . . 351<br />
10.4.1 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352<br />
10.4.2 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355<br />
10.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 363<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Inhalt ix<br />
10.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364<br />
10.7 Anhang: XML-Spezifikationen für die Fallstudie Medienhandel . . . . 365<br />
10.7.1 Document Type Definition . . . . . . . . . . . . . . . . . . . . 365<br />
10.7.2 XML Schema Definition . . . . . . . . . . . . . . . . . . . . . . 367<br />
11 SQL <strong>und</strong> Programmiersprachen 375<br />
11.1 Web-Anbindung von <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . 376<br />
11.1.1 Gr<strong>und</strong>legendes . . . . . . . . . . . . . . . . . . . . . . . . . . . 376<br />
11.1.2 Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378<br />
11.1.3 MySQL-Anbindung per PHP . . . . . . . . . . . . . . . . . . . 380<br />
11.2 Eingebettetes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386<br />
11.2.1 Arten der Einbettung . . . . . . . . . . . . . . . . . . . . . . . 386<br />
11.2.2 JDBC <strong>und</strong> SQLJ . . . . . . . . . . . . . . . . . . . . . . . . . . 388<br />
11.3 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 394<br />
11.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394<br />
12 XQuery <strong>und</strong> SQL/XML 397<br />
12.1 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397<br />
12.1.1 Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398<br />
12.1.2 FLWOR-Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . 400<br />
12.1.3 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407<br />
12.1.4 Update-Operationen . . . . . . . . . . . . . . . . . . . . . . . . 408<br />
12.2 SQL/XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409<br />
12.2.1 XML-Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . 411<br />
12.2.2 Publikations-Funktionen . . . . . . . . . . . . . . . . . . . . . . 413<br />
12.2.3 XQuery-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 416<br />
12.3 SQL/XML-Unterstüzung in IBM DB2 V9 . . . . . . . . . . . . . . . . 418<br />
12.3.1 Speicherung von XML-Dateien . . . . . . . . . . . . . . . . . . 420<br />
12.3.2 Anfragen mit SQL/XML . . . . . . . . . . . . . . . . . . . . . 422<br />
12.3.3 Anfragen mit XQuery . . . . . . . . . . . . . . . . . . . . . . . 424<br />
12.3.4 Generierung von XML- oder HTML-Strukturen . . . . . . . . . 424<br />
12.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 425<br />
12.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426<br />
IV Datenintegration <strong>und</strong> ihre Anwendungen 435<br />
13 Architekturkonzepte für <strong>Datenbank</strong>systeme 437<br />
13.1 Das Client/Server-Konzept . . . . . . . . . . . . . . . . . . . . . . . . 438<br />
13.1.1 Anfrageserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440<br />
13.1.2 Objekt- <strong>und</strong> Seitenserver . . . . . . . . . . . . . . . . . . . . . 442<br />
13.2 Verteilte <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . . . . . . . . . . 444<br />
13.2.1 Vor- <strong>und</strong> Nachteile . . . . . . . . . . . . . . . . . . . . . . . . . 444<br />
13.2.2 Klassifikationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 446<br />
13.2.3 Homogene Verteilung . . . . . . . . . . . . . . . . . . . . . . . 448<br />
13.2.4 Heterogene Verteilung <strong>und</strong> Föderation . . . . . . . . . . . . . . 451<br />
13.3 Parallele <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . . . . . . . . . . 454<br />
13.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 458<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
x Inhalt<br />
13.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459<br />
14 Datenintegration 461<br />
14.1 Einführung. Architekturkonzepte . . . . . . . . . . . . . . . . . . . . . 461<br />
14.2 Übersetzer, Integratoren <strong>und</strong> Koordinatoren . . . . . . . . . . . . . . . 463<br />
14.3 Integration mittels logischer Sichten . . . . . . . . . . . . . . . . . . . 467<br />
14.4 Verteilte Objekte <strong>und</strong> Web Services . . . . . . . . . . . . . . . . . . . 473<br />
14.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 476<br />
14.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478<br />
15 Data Warehouses (Datenlager) <strong>und</strong> OLAP 479<br />
15.1 Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479<br />
15.1.1 Anwendungen <strong>und</strong> Architektur von Datenlagern . . . . . . . . 481<br />
15.1.2 Der ETL-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . 484<br />
15.1.3 Daten-Bereinigung zur Erzielung von Datenqualität . . . . . . 485<br />
15.2 Mehrdimensionale <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . . . . . . 486<br />
15.2.1 Fakten, Maße <strong>und</strong> Dimensionen . . . . . . . . . . . . . . . . . . 486<br />
15.2.2 Sternschemata <strong>und</strong> Varianten . . . . . . . . . . . . . . . . . . . 488<br />
15.2.3 Effiziente Speicherung von Faktentabellen mittels Bitmaps . . . 490<br />
15.3 Qualitätsorientierter Schemaentwurf für Datenlager . . . . . . . . . . . 493<br />
15.3.1 Der Entwurfsprozess . . . . . . . . . . . . . . . . . . . . . . . . 494<br />
15.3.2 Qualitätskriterien . . . . . . . . . . . . . . . . . . . . . . . . . . 497<br />
15.3.3 Summierbarkeit <strong>und</strong> Normalformen . . . . . . . . . . . . . . . 497<br />
15.3.4 Selbstwartbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . 499<br />
15.4 Gr<strong>und</strong>lagen des OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . 502<br />
15.4.1 Datenwürfel <strong>und</strong> OLAP-Operatoren . . . . . . . . . . . . . . . 503<br />
15.4.2 Von Vereinigungs- zu Würfel-Anfragen . . . . . . . . . . . . . . 506<br />
15.4.3 SQL Roll-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510<br />
15.4.4 SQL Cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513<br />
15.4.5 SQL Grouping Sets . . . . . . . . . . . . . . . . . . . . . . . . . 516<br />
15.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 517<br />
15.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />
16 Gr<strong>und</strong>lagen des Data Mining 523<br />
16.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524<br />
16.2 Klassifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527<br />
16.3 Cluster-Bildung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529<br />
16.4 Assoziationsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532<br />
16.4.1 Häufige Mengen <strong>und</strong> Assoziationsregeln . . . . . . . . . . . . . 532<br />
16.4.2 Der Apriori-Algorithmus . . . . . . . . . . . . . . . . . . . . . . 535<br />
16.4.3 Verbesserungspotenziale beim Apriori-Algorithmus . . . . . . . 537<br />
16.4.4 Alternativen zum Apriori-Algorithmus . . . . . . . . . . . . . . 539<br />
16.4.5 Interessantheitsmaße . . . . . . . . . . . . . . . . . . . . . . . . 543<br />
16.5 Sequenzanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544<br />
16.6 Web-Mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548<br />
16.6.1 Web-Struktur-Mining . . . . . . . . . . . . . . . . . . . . . . . 548<br />
16.6.2 Web-Inhalts-Mining . . . . . . . . . . . . . . . . . . . . . . . . 551<br />
16.6.3 Web-Log-Mining . . . . . . . . . . . . . . . . . . . . . . . . . . 551<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Inhalt xi<br />
16.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 552<br />
16.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554<br />
V <strong>Datenbank</strong>systemtechnik 555<br />
17 Interne <strong>Datenbank</strong>- <strong>und</strong> Speicherorganisation 557<br />
17.1 Plattenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557<br />
17.1.1 Blöcke <strong>und</strong> Blockzugriffe . . . . . . . . . . . . . . . . . . . . . . 559<br />
17.1.2 RAID-Architekturen . . . . . . . . . . . . . . . . . . . . . . . . 560<br />
17.2 Pufferverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563<br />
17.3 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564<br />
17.3.1 Sequentielle Files . . . . . . . . . . . . . . . . . . . . . . . . . . 565<br />
17.3.2 Effizienter Filezugriff durch Indexierung . . . . . . . . . . . . . 567<br />
17.4 Spezielle Indexstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . 568<br />
17.4.1 ISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568<br />
17.4.2 Baumstrukturen für eindimensionale Punktdaten . . . . . . . . 569<br />
17.4.3 Baumstrukturen für mehrdimensionale Punktdaten . . . . . . . 575<br />
17.4.4 Hash-Organisationsformen . . . . . . . . . . . . . . . . . . . . . 581<br />
17.5 Beispiel: Speicherorganisation bei DB2 . . . . . . . . . . . . . . . . . . 584<br />
17.6 Speicherung <strong>und</strong> Indexierung von XML-Dokumenten . . . . . . . . . . 587<br />
17.6.1 Speicherungsoptionen . . . . . . . . . . . . . . . . . . . . . . . 587<br />
17.6.2 Indexierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588<br />
17.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 593<br />
17.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595<br />
18 Verarbeitung <strong>und</strong> Optimierung von Anfragen 597<br />
18.1 Anfrageverarbeitung im Überblick . . . . . . . . . . . . . . . . . . . . 598<br />
18.2 Anfrage-Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600<br />
18.2.1 Ziele <strong>und</strong> Ansätze . . . . . . . . . . . . . . . . . . . . . . . . . 600<br />
18.2.2 High-Level-Optimierung . . . . . . . . . . . . . . . . . . . . . . 601<br />
18.2.3 Low-Level-Optimierung . . . . . . . . . . . . . . . . . . . . . . 606<br />
18.3 Implementierungstechniken für den Verb<strong>und</strong> . . . . . . . . . . . . . . . 607<br />
18.3.1 Nested-Loop-Join . . . . . . . . . . . . . . . . . . . . . . . . . . 608<br />
18.3.2 Sort-Merge-Join . . . . . . . . . . . . . . . . . . . . . . . . . . 608<br />
18.3.3 Hash-Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609<br />
18.4 Spezielle QEP-Parameter . . . . . . . . . . . . . . . . . . . . . . . . . 612<br />
18.5 Anfrage-Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615<br />
18.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 617<br />
18.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618<br />
19 Physischer <strong>Datenbank</strong>entwurf <strong>und</strong> Tuning 621<br />
19.1 Gr<strong>und</strong>lagen des physischen <strong>Datenbank</strong>entwurfs . . . . . . . . . . . . . 621<br />
19.2 Fragmentierung <strong>und</strong> Replikation bei Datenverteilung . . . . . . . . . . 624<br />
19.3 <strong>Datenbank</strong>-Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626<br />
19.3.1 Gr<strong>und</strong>legende Prinzipien . . . . . . . . . . . . . . . . . . . . . . 627<br />
19.3.2 Tuning von Indexen . . . . . . . . . . . . . . . . . . . . . . . . 629<br />
19.3.3 Tuning in relationalen Systemen . . . . . . . . . . . . . . . . . 629<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
xii Inhalt<br />
19.4 <strong>Datenbank</strong>-Benchmarks . . . . . . . . . . . . . . . . . . . . . . . . . . 630<br />
19.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 633<br />
19.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634<br />
20 Transaktionen <strong>und</strong> Serialisierbarkeit 637<br />
20.1 Das Transaktionskonzept . . . . . . . . . . . . . . . . . . . . . . . . . 638<br />
20.2 Beispiele für Synchronisationsprobleme . . . . . . . . . . . . . . . . . . 641<br />
20.3 Das ACID-Prinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643<br />
20.4 Das Read-Write-Modell für Transaktionen . . . . . . . . . . . . . . . . 644<br />
20.5 Serialisierbarkeit von Schedules . . . . . . . . . . . . . . . . . . . . . . 647<br />
20.5.1 Schedules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647<br />
20.5.2 View-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . . . 651<br />
20.5.3 Konflikt-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 652<br />
20.5.4 Commit-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 657<br />
20.6 Fehlersicherheit von Schedules . . . . . . . . . . . . . . . . . . . . . . . 659<br />
20.6.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659<br />
20.6.2 Rücksetzbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 660<br />
20.6.3 Vermeidung kaskadierender Aborts . . . . . . . . . . . . . . . . 661<br />
20.6.4 Striktheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662<br />
20.7 Korrektheit von Schedules . . . . . . . . . . . . . . . . . . . . . . . . . 663<br />
20.8 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 663<br />
20.9 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664<br />
21 Concurrency Control 667<br />
21.1 Überlegungen zum Scheduler-Entwurf . . . . . . . . . . . . . . . . . . 667<br />
21.2 Sperrende Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670<br />
21.2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670<br />
21.2.2 Das 2-Phasen-Sperrprotokoll . . . . . . . . . . . . . . . . . . . 672<br />
21.2.3 Varianten des 2-Phasen-Sperrprotokolls . . . . . . . . . . . . . 677<br />
21.2.4 Das MGL-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . 679<br />
21.2.5 Das TL-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . 682<br />
21.2.6 Tuning in Gegenwart sperrender Scheduler . . . . . . . . . . . 684<br />
21.3 Nicht sperrendes Timestamp-Ordering . . . . . . . . . . . . . . . . . . 689<br />
21.4 Concurrency Control auf höherer Abstraktionsebene . . . . . . . . . . 690<br />
21.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 694<br />
21.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695<br />
22 Gr<strong>und</strong>lagen der Crash Recovery 697<br />
22.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697<br />
22.2 Organisation eines Data-Managers . . . . . . . . . . . . . . . . . . . . 699<br />
22.3 Der Recovery-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . 701<br />
22.4 Ein Undo/Redo-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . 705<br />
22.5 Alternativen zum Undo/Redo-Protokoll . . . . . . . . . . . . . . . . . 707<br />
22.6 Recovery-Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708<br />
22.7 Bibliographische Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . 709<br />
22.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Inhalt xiii<br />
23 Verteilte Transaktionsverarbeitung 711<br />
23.1 Homogene Verteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711<br />
23.1.1 Verteilte Transaktionen <strong>und</strong> Schedules . . . . . . . . . . . . . . 711<br />
23.1.2 Verteiltes Concurrency Control . . . . . . . . . . . . . . . . . . 715<br />
23.1.3 Verteilte Recovery-Protokolle . . . . . . . . . . . . . . . . . . . 720<br />
23.1.4 Transaktionen auf replikativen <strong>Datenbank</strong>en . . . . . . . . . . . 728<br />
23.2 Heterogene Verteilung. System-Föderationen . . . . . . . . . . . . . . 733<br />
23.2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734<br />
23.2.2 Ein MDBS-Modell . . . . . . . . . . . . . . . . . . . . . . . . . 734<br />
23.2.3 Transaktionen <strong>und</strong> Schedules in einem MDBS . . . . . . . . . . 736<br />
23.2.4 Globale Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 739<br />
23.2.5 Gewährleistung globaler Serialisierbarkeit . . . . . . . . . . . . 742<br />
23.3 Bibliographische Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . 745<br />
23.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746<br />
VI Neuere Entwicklungen 749<br />
24 Ausblicke 751<br />
24.1 Temporale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . . . . 751<br />
24.2 Probabilistische <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . 755<br />
24.3 Räumliche Daten <strong>und</strong> GIS . . . . . . . . . . . . . . . . . . . . . . . . . 757<br />
24.4 Datenströme (Data Streams) . . . . . . . . . . . . . . . . . . . . . . . 760<br />
24.5 Data Provenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762<br />
24.6 Column Stores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764<br />
24.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 764<br />
Literaturverzeichnis 767<br />
Index 808<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
Kapitel 5<br />
Gr<strong>und</strong>lagen von SQL<br />
In diesem Kapitel behandeln wir einführend <strong>Datenbank</strong>-Updates <strong>und</strong> -Anfragen mit<br />
der relationalen <strong>Datenbank</strong>sprache SQL, auf deren Datendefinitionsmöglichkeiten wir<br />
einführend bereits im vorigen Kapitel eingegangen sind. Im Unterschied zu den später<br />
behandelten formaleren Sprachen für das Relationenmodell (insbesondere Relationenalgebra<br />
<strong>und</strong> Relationenkalküle) handelt es sich bei SQL um eine Sprache, welche von<br />
vielen DBMS-Entwicklern implementiert <strong>und</strong> bereits vor längerer Zeit standardisiert<br />
wurde, so dass sie in kommerziell verfügbaren sowie in Open-Source-DBMS heute<br />
durchgehend verwendet wird. Es sei bereits vorab darauf hingewiesen, dass unsere<br />
Darstellung keinen Anspruch auf Vollständigkeit erhebt, allerdings um eine Auswahl<br />
des Sprachstandards bemüht ist, welche dem Leser einen tieferen Einstieg in dieses<br />
Thema leicht machen sollte.<br />
5.1 SQL von 1980 bis 2003<br />
Die Entwicklung der Sprache SQL wurde zunächst ausschließlich von IBM betrieben<br />
<strong>und</strong> bereits zu Beginn der 70er Jahre (im Rahmen des System/R-Projekts) begonnen,<br />
nachdem die strategische Bedeutung des relationalen Modells für <strong>Datenbank</strong>systeme<br />
erkannt worden war. SQL war zu dieser Zeit ein Akronym für Structured English<br />
Query Language oder kurz SEQUEL. Das ab 1981 kommerziell verfügbare System<br />
SQL/Data System von IBM war das erste System, welches diese Sprache ” öffentlich“<br />
bereitstellte; von IBM wurde SQL in der Folgezeit für alle anderen <strong>Datenbank</strong>systeme<br />
(z.B. DB2 <strong>und</strong> QMF) übernommen.<br />
Zu Beginn der 80er Jahre erkannte zunächst das American National Standards<br />
Institute (ANSI) die Bedeutung von SQL <strong>und</strong> begann mit einer Standardisierung dieser<br />
Sprache. 1986 wurde der erste Standard unter dem Namen SQL1 bzw. SQL86 von<br />
der International Standards Organization (ISO) verabschiedet. Erste Ergänzungen<br />
erschienen 1989 im so genannten Addendum-1; der ab dieser Zeit gültige Standard ist<br />
auch unter der Bezeichnung SQL89 bekannt. Weitere Ergänzungen <strong>und</strong> Modifikationen<br />
wurden 1992 im Rahmen von SQL2 bzw. SQL92 festgeschrieben. 1995 wurde das<br />
Call-Level Interface (SQL/CLI) hinzugefügt; technische Korrekturen am Standard<br />
wurden 1994 <strong>und</strong> 1996 vorgenommen. Weitere Ergänzungen (insbesondere Persistent<br />
Stored Modules, kurz SQL/PSM) erfolgen etwas später.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
128 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
Das Akronym SQL steht heute für Standard Query Language. Ähnlich wie<br />
bei vergleichbaren Entwicklungen im Bereich von Programmiersprachen (etwa Fortran)<br />
ist dieser Sprachstandard weiter gehender Entwicklung unterworfen; derzeit am<br />
häufigsten verwendet werden SQL:1999, welches erstmals objekt-relationale <strong>Datenbank</strong>-Konzepte<br />
enthielt, <strong>und</strong> SQL:2003, mit welchem XML Einzug in die relationale<br />
Welt gehalten hat. Kritisch ist bereits an dieser Stelle anzumerken, dass die Standardisierung<br />
von SQL de facto zu spät begonnen wurde, so dass praktisch kein relationales<br />
System den Standard in ” Reinform“ realisiert. Neben der zeitlichen Differenz zwischen<br />
der Verabschiedung des Standards <strong>und</strong> dem Verfügbarwerden relationaler Produkte<br />
liegt dies z.B. daran, dass SQL2 gegenüber SQL1 nicht nur eine Erweiterung darstellt,<br />
sondern es wurden auch Konzepte (wie z.B. die Möglichkeit des Einrichtens<br />
bzw. Löschens von Indexen) wieder entfernt; in einigen Implementierungen wurden<br />
diese jedoch beibehalten. Die Spezifikation von SQL:1999 wurde ebenfalls mehrfach<br />
geändert. Andererseits sind die im Einzelfall vorliegenden Abweichungen vom Standard<br />
teilweise implementierungsabhängig <strong>und</strong> daher für unsere Betrachtungen unerheblich.<br />
Nachdem wir im letzten Kapitel bereits SQL-Funktionalität im Hinblick auf die<br />
Deklaration relationaler <strong>Datenbank</strong>en betrachtet haben, wollen wir in den folgenden<br />
Abschnitten die zentrale Funktionalität von SQL im Hinblick auf die Manipulation<br />
relationaler <strong>Datenbank</strong>en beschreiben; hierbei stützen wir uns auf den Standard, ohne<br />
dies jeweils gesondert zu erwähnen. Abweichungen gehen im Einzelfall aus den jeweiligen<br />
Herstellerunterlagen hervor. Der SQL-Standard bezieht sich generell auf drei<br />
Ebenen:<br />
• Die Ebene der DDL<br />
(mit Kommandos wie create table oder drop table),<br />
• die Ebene der DML<br />
(mit Kommandos wie select, insert, delete oder update),<br />
• die Ebene der Programmiersprachen-Einbettung <strong>und</strong> -Anbindung<br />
(mit Kommandos wie declare cursor, open, fetch oder close).<br />
Von diesen Ebenen betrachten wir hier die mittlere der DML, wobei wir bei auf<br />
Weiteres eine interaktive Benutzung der Sprache unterstellen. Hinsichtlich der Syntax-<br />
Darstellung gelten die bereits in Kapitel 4 genannten Konventionen.<br />
5.2 <strong>Datenbank</strong>-Updates<br />
Nach Einrichtung von Basistabellen wird man zunächst Daten in diese Tabellen eintragen<br />
wollen; dazu steht das INSERT-Kommando zur Verfügung, welches in der einfachsten<br />
Form folgende Gestalt hat:<br />
INSERT INTO table-name<br />
[ ( list-of-column-names ) ]<br />
VALUES ( data-items )<br />
Über dieses Kommando wird ein (neues) Tupel in eine Basistabelle eingefügt. Die<br />
Werte dieses Tupels werden als ” data-items“ durch Kommata getrennt. Falls nur für<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 129<br />
bestimmte, aber nicht für alle Attribute neue Werte eingetragen werden sollen, so<br />
sind die betreffenden Spalten explizit anzugeben; in den nicht angegebenen Spalten<br />
wird das Tupel vom System mit Null- oder gegebenenfalls Default-Werten aufgefüllt.<br />
Zur Illustration Möglichkeiten von SQL, Anfragen <strong>und</strong> Updates zu formulieren,<br />
verwenden wir auch in diesem Kapitel die aus den Kapiteln 3 <strong>und</strong> 4 bekannte<br />
<strong>Datenbank</strong> des Medienhändlers, wobei wir unterstellen, dass diese über die im letzten<br />
Kapitel angegebenen CREATE TABLE-Kommandos bereits angelegt wurde.<br />
Durch ein CREATE TABLE-Kommando wird eine (noch leere) Tabelle des betreffenden<br />
Namens angelegt, mit welcher man sofort arbeiten kann; SQL-Implementierungen<br />
kennen also keine spezielle ” Definitionsphase“ einer <strong>Datenbank</strong>. DDL- <strong>und</strong> DML-<br />
Kommandos dürfen in beliebiger (sinnvoller) Reihenfolge verwendet werden.<br />
Beispiel 5.1<br />
Die nachfolgend gezeigte Folge von Kommandos trägt in eine leere Tabelle Medienartikel<br />
die ersten fünf Tupel der im letzten Abschnitt dieses Kapitels in Abbildung<br />
5.10 gezeigte Tabelle ein (vgl. Abschnitt 5.8):<br />
insert into Medienartikel<br />
values(’0001-E’, ’LaTeX in 21 Tagen’, 2004);<br />
insert into Medienartikel<br />
values(’0003-E’, ’Harry Potter III’, 1997);<br />
insert into Medienartikel<br />
values(’0005-B’, ’Der Schwarm’, 2004);<br />
insert into Medienartikel<br />
values(’0006-B’, ’LaTeX kurz <strong>und</strong> gut’, 2004);<br />
insert into Medienartikel<br />
values(’0007-B’, ’Simplify your life’, 2004);<br />
In den Beispielen dieses Kapitels beziehen wir uns durchgehend auf die Tabellen,<br />
die im Stil des letzten Beispiels erzeugt wurden <strong>und</strong> im Anhang zu diesem Kapitel<br />
(Abschnitt 5.8) zusammengefasst sind.<br />
Eine andere Form des INSERT-Kommandos ist die der gleichzeitigen Einfügung<br />
mehrerer Tupel durch<br />
INSERT INTO table-name select-expression<br />
Schließlich sind bei Definition entsprechender Domains möglicherweise Default-Werte<br />
(Voreinstellungen) festgelegt, so dass dann auch das Kommando<br />
INSERT INTO table-name DEFAULT VALUES<br />
Werte in eine Tabelle einfügt.<br />
Weitere Formen des Einfügens ergeben sich im Zusammenhang mit dem Einfügen<br />
in Sichten bzw. in typisierte Tabellen. Bei Sichten ist wesentlich, dass diese<br />
änderbar sind; auf typisierte Tabellen <strong>und</strong> deren Behandlung gehen wir in einem<br />
späteren Kapitel ein.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.<br />
✷
130 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
Die folgenden Kommandos zum Löschen bzw. Ändern eines Tupels oder all<br />
solcher Tupel, die einer bestimmten Bedingung genügen, sind im Wesentlichen selbsterklärend;<br />
auf die Form einer möglichen condition gehen wir weiter unten im Zusammenhang<br />
mit Anfragen ein:<br />
DELETE FROM table-name<br />
[ WHERE condition ]<br />
UPDATE table-name<br />
SET column-name-1 = expression-1<br />
[, column-name-2 = expression-2 ] ...<br />
[ WHERE condition ]<br />
5.3 <strong>Datenbank</strong>-Anfragen<br />
In diesem Abschnitt widmen wir uns den Anfragen, die allein unter Verwendung der<br />
klassischen relationalen Ausdrucksmittel von SQL formuliert werden können.<br />
5.3.1 Einführung<br />
SQL kennt nur ein einziges Kommando zur Formulierung von Anfragen an eine <strong>Datenbank</strong>:<br />
das SELECT-Kommando bzw. den select-expression. Wir weisen bereits<br />
an dieser Stelle darauf hin, dass die Bezeichnung SELECT nichts mit der relationalen<br />
Operation der Selektion (vgl. Kapitel 7) zu tun hat, wenngleich über ein SELECT-<br />
Kommando bei geeignetem Aufbau auch selektiert werden kann; das Schlüsselwort<br />
SELECT müsste eigentlich ” PROJECT“ lauten.<br />
Das SELECT-Kommando kennt viele Optionen zum Aufbau einfacher oder komplexer<br />
Anfragen, von denen wir in diesem Abschnitt nur auf einige gr<strong>und</strong>legende eingehen<br />
wollen. Es kommt uns vor allem darauf an, hier <strong>und</strong> im weiteren Verlauf unserer<br />
Betrachtungen die Ausdrucksmöglichkeiten des SELECT-Kommandos mit denen der<br />
Relationenalgebra vergleichen zu können. Dazu sei jedoch bemerkt, dass es sich bei<br />
SQL bzw. bei der Teilsprache von SQL, mit welcher Anfragen formuliert werden, nicht<br />
um eine rein algebraische Sprache handelt, wenngleich eine Reihe von algebraischen<br />
Operatoren in dieser Sprache vorkommen. Ursprünglich war der Anfrageteil von SQL<br />
sogar orientiert an einer Einschränkung des so genannten relationalen Tupelkalküls,<br />
worauf wir später eingehen werden. Außerdem verfügt das SELECT-Kommando z.B.<br />
über arithmetische Funktionen, Funktionen auf Datums- <strong>und</strong> Zeitwerten sowie Funktionen<br />
auf Zeichenketten; mittlerweile ist sogar die Verwendung Benutzer definierter<br />
Funktionen, Prozeduren <strong>und</strong> Methoden möglich.<br />
Das SELECT-Kommando hat zunächst die sehr einfache Gr<strong>und</strong>struktur<br />
SELECT Attribute ( ” Ausgabe“)<br />
FROM Relation(en) ( ” Eingabe“)<br />
WHERE Bedingung<br />
In der Sprache der noch zu behandelnden Relationenalgebra wird damit ein SPJ-<br />
Ausdruck (kurz für Selektion-Projektion-Join) spezifiziert. Die Zuordnung wird wie<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 131<br />
folgt vorgenommen: Die SELECT-Klausel gibt an, auf welche Attribute projiziert werden<br />
soll. Die FROM-Klausel gibt an, aus welchen Relationen diese Attribute zu entnehmen<br />
sind. Ist ein Join zu bilden, so sind an dieser Stelle mindestens zwei Ausdrücke<br />
anzugeben, die zu Relationen ausgewertet werden können; dies können Relationennamen<br />
sein, die sich jedoch nicht notwendig auf verschiedene Tabellen beziehen müssen.<br />
Die (optionale) WHERE-Klausel gibt Selektionsbedingungen an bzw. im Falle eines Joins<br />
außerdem Bedingungen, nach welchen der Verb<strong>und</strong> zu bilden ist.<br />
Die Auswertung eines SELECT-Kommandos der oben angegebenen Form hat<br />
zu berücksichtigen, dass SQL-Tabellen im Unterschied zu Relationen im Relationenmodell<br />
Multimengen ( ” Bags“) sein dürfen, d.h. doppelte Tupel enthalten können; will<br />
man ein mehrfaches Vorkommen von Tupeln in einem Anfrageergebnis ausschließen, so<br />
sind dazu besondere Vorkehrungen erforderlich (wie z.B. die Definition von Schlüsseln<br />
oder die Verwendung von DISTINCT in der SELECT-Klausel einer Anfrage).<br />
Unter diesen ” Nebenbedingungen“ verläuft die Auswertung eines SELECT-Kommandos<br />
gr<strong>und</strong>sätzlich in folgenden drei Schritten:<br />
(1) Es wird ein Kartesisches Produkt der Tabellen gebildet, die sich durch eine<br />
Auswertung der Ausdrücke in der FROM-Klausel ergeben (de facto eine ” Konkatenation“<br />
dieser Operanden, vgl. unten);<br />
(2) auf dem in Schritt (1) erzeugten Zwischenergebnis werden die in der WHERE-<br />
Klausel angegebenen Selektionsbedingungen ausgewertet (sofern unter diesen<br />
Verb<strong>und</strong>-Bedingungen vorkommen, entsteht aus der zunächst erzeugten Konkatenation<br />
jetzt das Ergebnis eines Theta-Verb<strong>und</strong>es);<br />
(3) das Zwischenergebnis aus Schritt (2) wird auf die in der SELECT-Klausel angegebenen<br />
Attribute projiziert.<br />
5.3.2 Zur Syntax von SELECT<br />
Wir beschreiben als Nächstes die Gr<strong>und</strong>züge der SELECT-Syntax genauer, wobei wir<br />
nach wie vor keinen Anspruch auf Vollständigkeit erheben. Wir beschreiben die Syntax<br />
nur geringfügig umfangreicher, als wir sie für nachfolgende Beschreibungen benötigen.<br />
Wir gehen hier anders vor als bei der Beschreibung der Update-Kommandos: Bis auf<br />
wenige Ausnahmen werden in der Syntax verwendete (kleingeschriebene) Abkürzungen<br />
bzw. Bezeichnungen in der Reihenfolge ihres Auftretens (einer ” Depth-First-<br />
Strategie“ folgend) soweit wie nötig detailliert. Wir verwenden unten nicht notwendig<br />
die gleichen Termini wie im offiziellen Standard-Dokument.<br />
select-expression ::=<br />
SELECT [ ALL | DISTINCT ] list-of-select-items<br />
FROM list-of-table-references<br />
[ WHERE condition ]<br />
[ GROUP BY list-of-column-names ]<br />
[ HAVING condition ]<br />
select-item ::=<br />
{ * | expression [ AS ]column-name }<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
132 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
expression ::=<br />
term | expression { + | − } term<br />
term ::=<br />
factor | term { ∗ | / } factor<br />
factor ::=<br />
[ + | − ] primary<br />
primary ::=<br />
column-name | scalar-function | aggregate-function<br />
| ( expression )<br />
aggregate-function ::=<br />
COUNT(∗) | { AVG | MAX | MIN | SUM | COUNT }<br />
( [ ALL | DISTINCT ] expression )<br />
table-reference ::=<br />
table-name [ [ AS ] range-variable<br />
[ ( list-of-column-names ) ] ]<br />
| ( table-expression ) [ AS ] range-variable<br />
[ ( list-of-column-names ) ]<br />
| join-table-expression<br />
table-expression ::=<br />
join-table-expression | nonjoin-table-expression<br />
join-table-expression ::=<br />
table-reference [ NATURAL ] [ join-type ] JOIN table-reference<br />
[ ON condition<br />
| USING ( list-of-column-names ) ]<br />
| table-reference CROSS JOIN table-reference<br />
| ( join-table-expression )<br />
join-type ::=<br />
INNER | { LEFT | RIGHT | FULL } [ OUTER ] | UNION<br />
nonjoin-table-expression ::=<br />
select-expression<br />
| select-expression { UNION | EXCEPT | INTERSECT }<br />
select-expression<br />
condition ::=<br />
condition-term | condition OR condition-term<br />
condition-term ::=<br />
condition-factor | condition-term AND condition-factor<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 133<br />
condition-factor ::=<br />
[ NOT ] condition-test<br />
condition-test ::=<br />
condition-primary [ IS [ NOT ] { TRUE | FALSE | UNKNOWN } ]<br />
condition-primary ::=<br />
simple-condition | ( condition )<br />
simple-condition ::=<br />
compare-cond | between-cond | like-cond | in-cond<br />
| exists-cond | unique-cond<br />
compare-cond ::=<br />
expression IS [ NOT ] NULL<br />
| expression { = | < | | >= | }<br />
{ expression | ( select-expression ) }<br />
between-cond ::=<br />
expression [ NOT ] BETWEEN expression AND expression<br />
like-cond ::=<br />
column-name [ NOT ] LIKE ’ string ’<br />
in-cond ::=<br />
expression [ NOT ] IN<br />
{ ( select-expression | table-expression ) }<br />
exists-cond ::=<br />
EXISTS ( table-expression )<br />
unique-cond ::=<br />
UNIQUE ( table-expression )<br />
Zu dieser Beschreibung ist Verschiedenes anzumerken:<br />
(1) SQL unterscheidet zahlreiche Formen von expressions (Ausdrücke), was aus<br />
der oben angegebenen Syntax nur unvollständig erkennbar ist; insbesondere<br />
werden numerische, character-basierte, Bitstring- sowie Date/Time-Ausdrücke<br />
unterschieden.<br />
(2) Auf die Beschreibung von scalar functions (Skalarfunktionen) haben wir<br />
oben verzichtet; hierunter versteht man z.B. Funktionen auf Zeichenketten (wie<br />
Teilstring-Suche oder Konkatenation) oder auf Datums- bzw. Zeit-Werten (wie<br />
Extraktion der Jahreszahl aus einem Datum).<br />
(3) Auch die Syntax von table-references sowie table-expressions ist de facto<br />
erheblich komplexer; das Gleiche gilt für den Aufbau von conditions.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
134 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
(4) Wie der oben angegebene Ausschnitt der SELECT-Syntax bereits zeigt, kennt<br />
SQL verschiedene Verb<strong>und</strong>-Operatoren.<br />
5.3.3 Exkurs in die Relationenalgebra<br />
Wenngleich wir die Relationenalgebra erst in Kapitel 7 ausführlich behandeln werden,<br />
sei bereits an dieser Stelle ein kurzer Exkurs gestattet. Die Gr<strong>und</strong>lagen der Semantik<br />
von rein relationalem SQL lassen sich nämlich anhand weniger Operationen der<br />
Relationenalgebra präzisieren. Wir gehen daher an dieser Stelle bereits kurz auf Projektion,<br />
Selektion, Umbenennung, Vereinigung, Differenz <strong>und</strong> natürlichen Verb<strong>und</strong><br />
ein. Man beachte, dass wir hier die in Kapitel 4 eingeführten Formalia für Relationen<br />
<strong>und</strong> Relationenschemata verwenden.<br />
Definition 5.1<br />
Sei R = (X, .) ein Relationenschema, r ∈ Rel(X) <strong>und</strong> Y ⊆ X:<br />
(i) πY (r) := {µ[Y ] | µ ∈ r}<br />
heißt Projektion von r auf Y . Dabei bezeichnet µ[Y ] die Einschränkung des<br />
Tupels µ auf Y (µ[Y ] ∈ Tup(Y )).<br />
(ii) Es sei A ∈ X, a ∈ dom(A) <strong>und</strong> Θ ∈ {, ≥, =, �=}:<br />
σAΘa(r) := {µ ∈ r | µ(A)Θa}<br />
heißt Selektion von r bzgl. AΘa.<br />
(Für den Fall Θ ∈ {, ≥} sei dabei unterstellt, dass dom(A) geordnet ist.)<br />
(iii) Es seien A, B ∈ X mit dom(A) = dom(B) <strong>und</strong> Θ ∈ {, ≥, =, �=}:<br />
σAΘB(r) := {µ ∈ r | µ(A)Θµ(B)}<br />
heißt Selektion von r bzgl. AΘB.<br />
(Für den Fall Θ ∈ {, ≥} sei dabei dom(A) bzw. dom(B) ebenfalls geordnet.)<br />
Beispiele für diese Operationen sowie die nachfolgend eingeführten oder beschriebenen<br />
betrachten wir weiter unten direkt in SQL-Notation. Intuitiv entfernt eine Projektion<br />
die angegebenen Attribute aus der Operandenrelation <strong>und</strong> sodann eventuell existierende<br />
doppelte Tupel; eine Projektion liefert also eine Ergebnisrelation mit einem<br />
gegenüber der Ausgangsrelation veränderten Schema. Eine Selektion dagegen lässt<br />
das Schema des Operanden unverändert <strong>und</strong> selektiert lediglich jene Tupel, welche<br />
die Selektionsbedingung(en) erfüllen.<br />
Die Operation der Umbenennung erlaubt ein einfaches Verändern eines Attributnames<br />
im Ergebnis einer Anfrageoperation, was wir hier noch nicht formal definieren;<br />
wir schreiben A/C, wenn A in C umbenannt werden soll. Ebenso verzichten<br />
wir an dieser Stelle noch auf die formale Definition von Vereinigung <strong>und</strong> Differenz als<br />
klassische Mengenoperationen. Beide Operationen verlangen von ihren beiden Operationen<br />
jeweils gleiche Schemata (was gegebenenfalls durch Umbenennung erreichbar<br />
ist) <strong>und</strong> wirken dann, wie aus der Mengenlehre bekannt: Eine Vereinigung der Form<br />
R ∪ S liefert die Menge aller Tupel, die in einem der beiden Operanden (R oder S)<br />
vorkommen; eine Differenz der Form R − S sondert die Tupel aus R aus, die nicht in<br />
S vorkommen.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 135<br />
Von besonderer Bedeutung ist im Zusammenhang mit Anfragen die Operation<br />
des Verb<strong>und</strong>es, die wir als Nächstes einführen:<br />
Definition 5.2<br />
Es seien X1, . . . , Xn Attributmengen <strong>und</strong> ri ∈ Rel(Xi) für 1 ≤ i ≤ n:<br />
⊲⊳ n i=1 ri := {µ ∈ Tup(∪ n i=1Xi) | (∀ i, 1 ≤ i ≤ n) µ[Xi] ∈ ri}<br />
heißt der (natürliche) Verb<strong>und</strong> ( ” natural join“) von r1, . . . , rn.<br />
Für den häufigen Fall n = 2 ergibt sich aus der letzten Definition unmittelbar:<br />
r1 ⊲⊳ r2 = {µ ∈ Tup(X1X2) | µ[X1] ∈ r1 ∧ µ[X2] ∈ r2}<br />
Der natürliche Verb<strong>und</strong> verbindet also zwei oder mehr Relationen zu einer neuen<br />
Relation, welche als Attributmenge die Vereinigung der Attributmengen aller Operanden<br />
besitzt; die Bildung der Verbindung erfolgt jeweils über gemeinsame Attribute<br />
<strong>und</strong> über gleiche Werte für diese. Auf diese beiden letztgenannten Bedingungen kann<br />
man auch verzichten; dann spricht man allgemeiner von einem Theta-Verb<strong>und</strong>. Ein<br />
Theta-Verb<strong>und</strong> sondert nicht notwendig doppelt vorkommende Attribute aus; er kann<br />
ferner unterschiedliche (aber typgleiche) Attribute aus den Operandentabellen über<br />
beliebige Bedingungen verbinden.<br />
Es sei bemerkt, dass für alle diese Operationen eine Reihe von Rechenregeln gelten,<br />
welche Gr<strong>und</strong>lage für eine Optimierung von relationenalgebraischen Ausdrücken<br />
sind. Hierauf werden wir in Kapitel 7 eingehen; für unsere Zwecke in diesem Kapitel<br />
soll es ausreichen, die Existenz dieser Operationen zu kennen.<br />
5.3.4 Semantik von SELECT am Beispiel von RA-Ausdrücken<br />
Bevor wir den Gebrauch des SELECT-Kommandos bei der Formulierung von Anfragen<br />
am Beispiel der <strong>Datenbank</strong> des Medienhändlers erläutern, wollen wir kurz den<br />
Zusammenhang zwischen dem oben eingeführten Ausschnitt der Relationenalgebra<br />
<strong>und</strong> SELECT-Ausdrücken herstellen. Insbesondere geben wir als Nächstes SELECT-<br />
Formulierungen für die gerade vorgestellten algebraischen Operationen an:<br />
(1) Projektion:<br />
Sei R = (X, .) ein Relationenschema mit {A1, . . . , Ak} ⊆ X. Die Projektion<br />
π {A1...Ak}(R) wird ausgedrückt durch<br />
SELECT DISTINCT A1, ... , Ak FROM R<br />
(2) Selektion:<br />
Sei R = (X, .) ein Relationenschema mit A, B ∈ X. Die A = a-Selektion<br />
σA=a(R) wird ausgedrückt durch<br />
SELECT DISTINCT * FROM R WHERE A = a<br />
Analog wird die A = B-Selektion σA=B(R) ausgedrückt durch<br />
SELECT DISTINCT * FROM R WHERE A = B<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
136 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
Anstelle von ” =“ können auch andere (anwendbare) Vergleichsoperatoren verwendet<br />
werden.<br />
(3) Umbenennung:<br />
Sei R = (X, .) ein Relationenschema mit X = {A, B} (eine Verallgemeinerung<br />
auf mehr als zwei Attribute ist leicht möglich). Die Umbenennung von R bzgl.<br />
A/C wird ausgedrückt durch<br />
SELECT A AS C, B FROM R<br />
(4) Vereinigung:<br />
Seien R <strong>und</strong> S Relationenschemata mit gleicher Attributmenge. Dann wird die<br />
Vereinigung R ∪ S ausgedrückt durch<br />
SELECT DISTINCT * FROM R<br />
UNION SELECT DISTINCT * FROM S<br />
(5) Differenz:<br />
Seien R <strong>und</strong> S Relationenschemata mit gleicher Attributmenge. Dann wird die<br />
Differenz R − S ausgedrückt durch<br />
SELECT DISTINCT * FROM R<br />
EXCEPT SELECT DISTINCT * FROM S<br />
(6) Natürlicher Verb<strong>und</strong>:<br />
Sei R ein Relationenschema mit den Attributen A1, . . . , An, B1, . . . , Bm <strong>und</strong> S<br />
ein solches mit den Attributen B1, . . . , Bm, C1, . . . , Cl. Dann wird der natürliche<br />
Verb<strong>und</strong> R ⊲⊳ S explizit ausgedrückt durch<br />
SELECT DISTINCT A1, ..., Am, R.B1, ..., R.Bm, C1, ..., Cl<br />
FROM R, S<br />
WHERE R.B1 = S.B1 AND ... AND R.Bm = S.Bm<br />
In der SELECT-Klausel wird die Vereinigung der beiden Attributmengen explizit<br />
beschrieben, wobei es in diesem Fall unerheblich ist, ob man die gemeinsamen<br />
Attribute aus R oder aus S wählt. Da jedoch Namensgleichheiten zwischen<br />
Attributen aus verschiedenen Relationenschemata vorkommen, muss durch den<br />
Zusatz des Relationennamens (z.B. R.B1) eindeutig spezifiziert werden, welches<br />
Vorkommen des betreffenden Attributs gemeint ist. In der WHERE-Klausel wird<br />
die Überprüfung auf gleiche Werte für die gemeinsamen Attribute explizit <strong>und</strong><br />
vollständig gefordert. Eine einfachere Formulierung dieser Operation lautet:<br />
SELECT * FROM R NATURAL JOIN S<br />
Die oben gegebene Beschreibung der Simulation relationenalgebraischer Operationen<br />
in SQL reicht offensichtlich bereits aus, alle in der RA formulierbaren Anfragen in<br />
SQL auszudrücken.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 137<br />
5.3.5 Verb<strong>und</strong>-Operatoren in SQL<br />
Bevor wir SQL-Anfragen weiter erläutern, führen wir zunächst einige weitere Operationen<br />
auf den Relationen einer <strong>Datenbank</strong> ein, wobei es uns wesentlich darauf<br />
ankommt, die unterschiedlichen Verb<strong>und</strong>-Operatoren präzise zu beschreiben:<br />
Definition 5.3<br />
Es sei r ∈ Rel(X), s ∈ Rel(Y ). Dann heißt<br />
r ∗ s := {µν | µ ∈ r ∧ ν ∈ s}<br />
die Konkatenation von r <strong>und</strong> s. (Dabei steht ” µν“ nicht für eine Verknüpfung von µ<br />
<strong>und</strong> ν als Funktionen, sondern für eine Hintereinanderschreibung der beiden Tupel.)<br />
Die Konkatenation bildet – in Analogie zur Konkatenation von Zeichenketten in der<br />
Theorie der formalen Sprachen – zu zwei gegebenen Tupeln ein neues durch Hintereinanderhängen<br />
der einzelnen Werte.<br />
Als erstes Beispiel betrachten wir folgende beiden Relationen r ∈ Rel(AB) <strong>und</strong><br />
s ∈ Rel(CD):<br />
Dann gilt:<br />
A B C D<br />
r : 0 0 s : 1 0<br />
1 1 0 1<br />
A B C D<br />
0 0 1 0<br />
r ∗ s : 0 0 0 1<br />
1 1 1 0<br />
1 1 0 1<br />
Das Konkatenationsergebnis enthält also Tupel über der disjunkten Vereinigung der<br />
Attributmengen der beiden Operanden. (Man beachte, dass eine Konkatenation formal<br />
nicht dasselbe Ergebnis liefert wie ein Kartesisches Produkt, da Letzteres auf<br />
eine Menge von geordneten Paaren führt, wobei die erste Komponente jeweils aus<br />
dem einen, die zweite aus dem anderen Operanden stammt.) Es folgt unmittelbar,<br />
dass eine Konkatenation nicht notwendig eine Relation (in dem aus Kapitel 4 bekannten<br />
Sinne) zum Ergebnis hat, da die Attributmenge des Resultats unter Umständen<br />
doppelte Elemente enthält <strong>und</strong> dann eine Multimenge ist.<br />
Als zweites Beispiel betrachten wir daher zwei Relationen r ∈ Rel(AB) <strong>und</strong> t ∈<br />
Rel(BC):<br />
Dann gilt:<br />
A B B C<br />
r : 0 0 t : 1 0<br />
1 1 0 1<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
138 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
A B B C<br />
0 0 1 0<br />
r ∗ t : 0 0 0 1<br />
1 1 1 0<br />
1 1 0 1<br />
Nur in dem Fall, dass X ∩ Y = ∅ gilt für r ∈ Rel(X) <strong>und</strong> t ∈ Rel(Y ), ist r ∗ t<br />
eine Relation in dem hier verwendeten Sinne (r ∗ t ∈ Rel(XY )). Im Hinblick auf die<br />
bereits informal angegebene Semantik eines SELECT-Kommandos sei ferner bemerkt,<br />
dass man in den gerade genannten Beispielen anstelle von Relationen auch Tabellen<br />
mit doppelten Zeilen verwenden kann, so dass sowohl das Format einer Tabelle als<br />
auch ihr Inhalt eine Multimenge sein kann.<br />
In SQL wird die oben beschriebene Unterscheidung zwischen einer Konkatenation<br />
<strong>und</strong> einem Kartesischen Produkt nicht gemacht, sondern diese beiden Operationen<br />
werden identifiziert. In beiden oben genannten Beispielen erhält man daher das<br />
Konkatenationsergebnis durch Bildung eines Produkts wie folgt:<br />
SELECT R.*, S.* FROM R, S<br />
Eine äquivalente Formulierung, welche die verwendete Operation explizit angibt (<strong>und</strong><br />
daher etwa zu Dokumentationszwecken sinnvoller ist), lautet:<br />
SELECT * FROM R CROSS JOIN S<br />
Ein CROSS JOIN liefert also nichts anderes als ein Kartesisches Produkt bzw., in formal<br />
korrekterer Sprechweise, eine Konkatenation.<br />
Mit Hilfe der Konkatenation können wir eine weitere oben bereits erwähnte<br />
Operation definieren, welche für die Formulierung von SELECT-Anfragen wesentlich<br />
ist:<br />
Definition 5.4<br />
Es sei r ∈ Rel(X), s ∈ Rel(Y ), A ∈ X, B ∈ Y , Θ ∈ {, ≥, =, �=}. Dann heißt<br />
r[AΘB]s := {µν ∈ r ∗ s | µ(A)Θν(B)}<br />
Θ-Join (sprich: Theta-Join) von r <strong>und</strong> s. (In dieser Definition sei µ ∈ r bzw. ν ∈ s<br />
wie in Definition 10.1.)<br />
Ist Θ speziell das Zeichen ” =“, so spricht man vom Equijoin von r <strong>und</strong> s.<br />
Als Beispiel betrachten wir zunächst die weiter oben angegebenen Relationen r ∈<br />
Rel(AB) <strong>und</strong> s ∈ Rel(CD). Dann gilt:<br />
A B C D<br />
r[B = C]s : 0 0 0 1<br />
1 1 1 0<br />
In SQL lautet die entsprechende Formulierung wie folgt:<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
5 Gr<strong>und</strong>lagen von SQL 139<br />
SELECT * FROM R, S WHERE R.B = S.C<br />
Eine alternative (<strong>und</strong> explizitere) Formulierung derselben Anfrage lautet:<br />
SELECT * FROM R JOIN S ON R.B = S.C<br />
Für r ∈ Rel(AB), s ∈ Rel(BC) wie oben angegeben gilt z.B.<br />
A B B C<br />
r[B < B]s : 0 0 1 0<br />
Die entsprechende SQL-Formulierung lautet:<br />
SELECT * FROM R, S WHERE R.B < S.B<br />
Offensichtlich gilt für r ∈ Rel(X) <strong>und</strong> s ∈ Rel(Y ) formal dann Folgendes: Ist X ∩Y =<br />
∅, so ist r ∗ s eine Relation (über XY ). Dann ist auch r[AΘB]s eine Relation (über<br />
XY mit A ∈ X, B ∈ Y ), <strong>und</strong> der Theta-Join von r <strong>und</strong> s kann wie folgt geschrieben<br />
werden:<br />
r[AΘB]s = σAΘB(r ∗ s)<br />
Der Theta-Join stellt offensichtlich eine Verallgemeinerung des natürlichen Verb<strong>und</strong>es<br />
dar; konkret ist ein natürlicher Verb<strong>und</strong> ein Equijoin, welcher über gleichbenannte<br />
Attribute gebildet wird (<strong>und</strong> bei welchem auf diese projiziert wird).<br />
SQL lässt als weitere Verallgemeinerung des natürlichen Verb<strong>und</strong>s zu, dass<br />
einige, aber nicht alle gemeinsamen Attribute auf gleiche Werte überprüft werden.<br />
Hat z.B. R die Attribute A, B <strong>und</strong> C, S die Attribute B, C <strong>und</strong> D, so ist es möglich,<br />
einen (verallgemeinerten) natürlichen Verb<strong>und</strong> nur über B (oder über C) zu bilden.<br />
Die entsprechende Formulierung lautet:<br />
SELECT * FROM R JOIN S USING (B)<br />
Der natürliche Verb<strong>und</strong> <strong>und</strong> seine gerade beschriebenen Verallgemeinerungen werden<br />
in der SQL-Terminologie auch als innere Joins bezeichnet. Im Unterschied dazu<br />
werden Verb<strong>und</strong>-Operationen als äußere Verbünde (outer joins) bezeichnet, falls<br />
Operanden-Tupel, welche die Verb<strong>und</strong>-Bedingung nicht erfüllen, im Ergebnis erhalten<br />
bleiben.<br />
Wir verzichten auf eine formale Definition des äußeren Verb<strong>und</strong>s <strong>und</strong> beschreiben<br />
hier nur exemplarisch seine in SQL vorgesehenen Erscheinungsformen. Man spricht<br />
von einem LEFT OUTER JOIN, falls alle Tupel des ” linken“ (ersten) Verb<strong>und</strong>-Operanden<br />
im Ergebnis erhalten bleiben. Als Beispiel betrachten wir die folgenden beiden Tabellen:<br />
Der SELECT-Ausdruck<br />
A B C D<br />
r : 1 0 s : 1 0<br />
2 1 0 1<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.
140 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />
SELECT * FROM R LEFT OUTER JOIN S ON R.A = S.C<br />
liefert dann das folgende Ergebnis:<br />
A B C D<br />
1 0 1 0<br />
2 1 ? ?<br />
(Hierbei bezeichnet ” ?“ den Nullwert mit der Bedeutung ” unbekannt“.) Entsprechend<br />
erhält ein RIGHT OUTER JOIN alle Tupel des ” rechten“ (zweiten) Operanden im Ergebnis.<br />
Im Beispiel der oben angegebenen Relationen liefert also z.B.<br />
SELECT * FROM R RIGHT OUTER JOIN S ON R.A = S.C<br />
das folgende Ergebnis:<br />
A B C D<br />
1 0 1 0<br />
? ? 0 1<br />
Schließlich stellt ein FULL OUTER JOIN (im Allgemeinen kurz auch als OUTER JOIN bezeichnet)<br />
eine Kombination von LEFT <strong>und</strong> RIGHT OUTER JOIN dar. Im obigen Beispiel<br />
liefert also z.B.<br />
SELECT * FROM R FULL OUTER JOIN S ON R.A = S.C<br />
das folgende Ergebnis:<br />
A B C D<br />
1 0 1 0<br />
2 1 ? ?<br />
? ? 0 1<br />
Abschließend sei bemerkt, dass die Anwendung dieser Operatoren nicht auf zwei Operanden<br />
beschränkt ist.<br />
5.4 Beispiele für SQL-Anfragen<br />
Wir beschreiben als Nächstes eine Reihe von Beispielen für die Verwendung des<br />
SELECT-Kommandos, wobei wir mit Selektionen <strong>und</strong> Projektionen beginnen <strong>und</strong> dann<br />
zu Verb<strong>und</strong>- sowie anderen Anfragen (Aggregationen, Gruppierungen, Unteranfragen)<br />
übergehen. Der aktuelle Inhalt der hier verwendeten Beispiel-<strong>Datenbank</strong> ist im letzten<br />
Abschnitt dieses Kapitel zusammengestellt; ein Blick hierauf vor Durcharbeitung<br />
der nachfolgenden Beispiele wird empfohlen.<br />
Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />
ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.