Kapitel1_SQL - auf der Homepage des Lehrstuhls für

Werbung
Modul „Data and Knowledge Management“ MW31.6
SS 2016
Prof. Dr. Johannes Ruhland
Lehrstuhl für Wirtschaftsinformatik
Friedrich-Schiller-Universität Jena
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
1
FAZ, 12. Nov 2014
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
3
Organisation
• Die Vorlesungs- und Übungsunterlagen finden Sie
auf http://www.wiinf.uni-jena.de/Lehre/Download.html
• M.Sc. Wirtschaftsinformatik - Pflichtmodul
• M.Sc. Betriebswirtschaftslehre Schwerpunkt Decision & Risk –
Wahlpflichtmodul
• Die Modulnote setzt sich zusammen aus:
– Projekt (40%) (weitere Informationen in der Übung)
– Klausur (60%)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
4
Themengebiete der Veranstaltung
• Relationale Datenbanken und SQL (Whg. und Vertiefung )
• XML (Whg. und Vertiefung )
• Data Warehouse & OLAP (MDX, Sternschema,
Schneeflockenschema)
• Spaltenorientierte Datenbanken
• Basistechnologien von NoSQL DB: MapReduce, REST
• Dokumentenorientierte Datenbanken: Beispiel CouchBase
• Graph oriented Databases
• Semantische Datenbanken und SPARQL
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
5
Kapitel 1
RELATIONALE DATENBANKEN UND
SQL (VERTIEFT)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
6
Basisliteratur
Andreas Heuer, Gunter Saake : Datenbanken Konzepte und Sprachen , International Thomson Publishing, Bonn 2., aktualisierte und erweiterte Auflage, 704
Seiten, Januar 2000, ISBN 3-8266-0619-1
Carlo Batini, Stefano Ceri, Shamkant B. Navathe: Conceptual Database Design: An Entity-Relationship Approach. Benjamin/Cummings 1992
Gottfried Vossen: Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme, 5. Auflage Oldenbourg 2008
Ramez Elmasri und Shamkant B. Navathe: Grundlagen von Datenbanksystemen, Pearson Studium, 2002, ISBN 9783827370211
Kemper, A. Eickler: Datenbanksysteme – Eine Einführung, 6. Auflage Oldenburg Verlag, 2006, ISBN 3-486-57690-9
Ramez Elmasri und Shamkant B. Navathe: Fundamentals of Database Systems, Addison-Wesley Longman, 2003, ISBN 9780321204486
•
•
•
•
•
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
7
http://db-engines.com/de/ranking @ March 2015
„relational
DMBS
rules“
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
8
Online-Literatur
Inhalte dieser Vorlesung entstammen z.T. aus folgenden auch online verfügbaren Quellen:
–
http://www.informatik.uni-frankfurt.de/~prg2/SS2009/folien/zicari/zicari-db_teil1.pdf
–
http://www.iai.uni-bonn.de/III//lehre/vorlesungen/Informationssysteme/WS02/folien/DB3.pdf
–
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
–
http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
–
http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm
–
http://www.thomaskaelin.ch/media/archive1/zusammenfassungen/db1.pdf
–
http://www.postgresql.org/docs/8.3/interactive/queries-table-expressions.html
–
http://www.tinohempel.de/info/info/datenbank/operation.htm
–
http://aktuell.de.selfhtml.org/artikel/datenbanken/
–
http://rowa.giso.de/oracle/latex/Komplexere_SQL_Abfragen.html
–
http://www.informatik.uni-bonn.de/III/lehre/vorlesungen/Informationssysteme/WS02/folien/DB3e-1.pdf
–
http://www2.informatik.uni-halle.de/lehre/db/heusa.html
–
http://www.roro-seiten.de/info/db/05Relationenmodell/Relationenmodell.html
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
9
Agenda
•
•
•
•
•
•
WI
Zentrale Datenhaltung! Warum?
Entity-Relationship-Modell
Relationenmodell
Structured Query Language (SQL)
Einbindung von Datenbanken in Programme
Verteilte Datenbanken
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
10
Warum benötigen wir Relationale Datenbanken?
Nachteile der Speicherung der Daten für jede Anwendung in einzelnen Dateien
•
Redundanz und Inkonsistenz
–
•
Beschränkte Zugriffsmöglichkeiten
–
•
Mehrbenutzerbetrieb wird von
Dateisystemen nicht unterstützt
Integritätsverletzung
–
•
Informationen können bei
isolierten Dateien schwer
miteinander verknüpft werden
Eingeschränkter
Mehrbenutzerbetrieb
–
•
Informationen werden mehrfach
gespeichert
Einschränkende Bedingungen
(Constraints) sind schwer zu
überprüfen
Sicherheitsprobleme
–
Nicht alle Benutzer sollen Zugriff
auf alle Daten haben
Eigene Darstellung in Anlehnung an: http://www.informatik.uni-frankfurt.de/~prg2/SS2009/folien/zicari/zicari-db_teil1.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
11
Warum benötigen wir Relationale Datenbanken?
Zentrale Datenverwaltung und Datenhaltung mit einem DBS
•
•
•
•
Ein Datenbanksystem besteht aus
einem DBMS und den dazugehörigen
Datenbanken
Zentraler Zugriff auf die Datenbank von
verschiedenen Applikationen
Zugriff über standardisierte Sprache (de
facto fast immer SQL)
Einbettung von SQL in Anwendungen
Eigene Darstellung in Anlehnung an: http://www.informatik.uni-frankfurt.de/~prg2/SS2009/folien/zicari/zicari-db_teil1.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
12
Warum benötigen wir Relationale Datenbanken?
Vorteile einer zentralen Datenverwaltung und Datenhaltung mit einem DBS
Die relationalen Datenbanksysteme wurden entwickelt (seit ca. 1975 von IBM
Research), um die Probleme mit der getrennten Dateihaltung zu überwinden:
• Redundanz und Inkonsistenz
• Werden durch die zentrale Datenverwaltung und Datenhaltung vermieden
• Beschränkung der Zugriffsmöglichkeiten
• Durch verschiedene Konzepte können Informationen miteinander verknüpft
werden (z.B. relationales Modell).
• Eingeschränkter Mehrbenutzerbetrieb
• Durch die zentrale Benutzerverwaltung einfach zu realisieren
• Integritätsverletzungen
• Durch Constraints in der zentralen Datenverwaltung gut umzusetzen
• Sicherheitsprobleme
• Durch die zentrale Benutzerverwaltung können Zugriffsrechte gut kontrolliert
werden
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
13
Warum benötigen wir Relationale Datenbanken?
Vorteile einer zentralen Datenverwaltung und Datenhaltung mit einem DBS
• Physische Datenunabhängigkeit
– Anwendungen von Modifikationen an der physischen Speicherstruktur nicht
betroffen
• Logische Datenunabhängigkeit
– Änderungen an der logischen Datenstruktur beeinflussen Anwendungen nicht
•
•
•
•
WI
Dauerhafte Speicherung von großen Datenbeständen
Bereitstellung einer Anfragesprache zum einfachen Umgang mit der Datenbank
Sicherheit gegenüber Hard- und Softwareausfällen
Effizient, möglichst schnell unter Benutzung weniger Ressourcen.
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
14
Alternative Datenbankparadigmen
•
•
•
•
Relationales Datenmodell
Hierarchisches Datenmodell (hier nicht behandelt)
Netzwerk Datenmodell (hier nicht behandelt)
Semistrukturierte Datenbestände XML
– Nicht alle Entitäten haben exakt die gleiche Information zu speichern →
gewisse Flexibilität gefordert (z.B. Rechnung, Datenbank der Freunde, … )
– (siehe später)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
15
Alternative Datenbankparadigmen
Beispiel zum Relationalen Modell und dessen Flexibilität
halter
idHalter
vname
nname
12
Georg
Müller
56
Hasso
Plattner
89
Nino
Sashi
…
…
…
…
besitzdaten
…
IDHund
IDHalter
seit
bis
312
12
Dec2000
Dec2002
312
56
Jan2003
891
89
Mar2009
…
…
hund
idHund
rufname
rasse
312
Lumpi
Pudel
891
Hasso
Rottw.
0121
NULL
Dackel
…
…
…
WI
…
…
…
…
•Wem
gehört
welcher Hund?
•Wer heißt wie sein Hund?
•Wer heißt wie irgend ein Hund?
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
16
Alternative Datenbankparadigmen
Abfragebeispiel: Flexibilität des relationalen Modells
•
Wer hat den gleichen Vornamen wie sein Hund ?
– Abfrage:
SELECT DISTINCT vname, nname FROM halter ▶◀ besitzdaten ▶◀ hund
WHERE halter.vname = hund.rufname;
•
Wer hat einen Vornamen, den auch irgendein Hund hat?
– Abfrage:
SELECT DISTINCT vname, nname FROM halter, hund
WHERE halter.vname = hund.rufname
•
Das Symbol ▶◀ steht für den NATURAL INNER JOIN (siehe später)
– halter ▶◀ besitzdaten
↔
halter INNER JOIN besitzdaten ON halter.idHalter = besitzdaten.IDHalter
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
17
Alternative Datenbankparadigmen
Sonderformen
• Geokodierte Datenbanken → Sonderrolle der Geokoordinaten
berücksichtigen
– Abfrage z.B. „alle Gasleitungen, die näher als 10 Meter an Grundstück
2739 heranreichen“
• Multimedia-Datenbanken
– „Query by humming“ http://www.musicline.de/de/melodiesuche/input
– Extrem lange Info-Teile (Video-Spur) mit Suchfunktion innerhalb
• Mehrdimensionale Datenspeicherung
– (siehe später unter OLAP-Systeme)
• Semantische Datenbanken
– (siehe später)
• …
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
18
Größenklassen von Datenbanksystemen
•
Desktop-Datenbanken
–
–
•
High-End-Datenbanken
–
–
–
•
ACCESS, SQLIte, …
Ein Nutzer bzw. ein paar Nutzer, kleine Tabellen, wenig Sicherungsmechanismen
ORACLE, SQLServer von MS, DB2 von IBM; (Postgresql, Ingres, Informix, MaxDB)
Sehr viele simultane Nutzer, ausgefeiltes Rollenkonzept, automatische Datensicherung, ggf. „verteilte
Speicherung“ ( eine Tabelle wird aufgespalten und die Teile an verschiedenen Standorten gehalten), Query
Optimizer, …
Erweiterbar um Sonderleistungen wie „spatial queries“ oder XML durch add-ons (sog „blades“ oder
„cartridges“)
Zwischenlösungen
–
–
mySQL, Firebird …
Häufig sehr kostengünstig verfügbar (open source)
SQL als Abfragesprache unterscheidet sich in seinem Kern
nur sehr wenig zwischen den Größenklassen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
19
Research Datenbanksysteme
•
Shore
–
•
BerkleyDB
–
•
–
–
WI
http://www.oracle.com/technetwor
k/database/berkeleydb/overview/i
ndex.html
SQLITE
–
–
•
http://research.cs.wisc.edu/shoremt/
http://www.sqlite.org/
Siehe auch
http://de.wikipedia.org/wiki/SQLite
SQLite Manager
https://addons.mozilla.org/enUS/firefox/addon/5817
…
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
20
DBS Nutzung in Projekten
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
21
Gartner 2008
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
22
Kapitel 1.1
DAS ENTITY-RELATIONSHIPMODELLL ALS GRUNDLEGENDES
MODELLIERUNGSTOOL
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
23
Das Entity-Relationship-Modell
• Datenbank zeigt Ausschnitt aus der realen Welt
• Modelliere die Diskurswelt nach Entitäten (die Realisationen von
Entitäts-Typen sind), Relationen und Attributen
• Ein Datenbankmodell ist ein System von Konzepten zur
Beschreibung von Datenbanken. Es legt Syntax und Semantik von
Datenbankbeschreibungen für ein Datenbanksystem fest.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
24
Das Entity-Relationship-Modell
Notation und Syntax
• Entwickelt von P. P. Chen im Jahre 1976.
•
Peter Pin-Shan Chen: The Entity-Relationship Model--Toward a Unified View of Data. In: ACM Transactions on
Database Systems 1/1/1976 ACM-Press ISSN , S. 9–36
• Entity: Objekt der realen oder der Vorstellungswelt, über das
Informationen zu speichern sind z.B. Vorlesungsveranstaltung, Buch,
Lehrperson etc. Auch Informationen über Ereignisse: Prüfungen, ...
• Relationship: Beziehung zwischen Entities, z.B. eine Lehrperson hält eine
Vorlesung
• Attribut: Eigenschaft von Entities oder Beziehungen, z.B. die ISBN eines
Buchs, der Titel einer Vorlesung, oder das Semester, in dem eine
Vorlesung gehalten wird
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
25
Schlüssel im Entity-Relationship-Modell
(erste Einführung)
• Eine minimale Menge von Attributen, welche das zugeordnete Entity
eindeutig innerhalb aller Entities seiner Relation identifiziert, nennt man
Schlüssel oder auch Schlüsselkandidaten.
• Gibt es mehrere solcher Schlüsselkandidaten, wird einer als
Primärschlüssel ausgewählt.
• Oft gibt es künstlich eingeführte Attribute, wie z.B. Personalnummer
(PersNr), die als Primärschlüssel dienen.
• Schlüsselattribute werden durch Unterstreichung gekennzeichnet.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
26
Das Entity-Relationship-Modell
Beziehungstypen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
27
Das Entity-Relationship-Modell
Beziehungstypen
•
Man kann Beziehungstypen hinsichtlich ihrer Funktionalität charakterisieren. Ein binärer Beziehungstyp R
zwischen den Entity-Typen E1 und E2 heißt
•
1:1-Beziehung (one-one)
–
–
•
1:N-Beziehung (one-many)
–
–
•
falls analoges zu obigem gilt.
Beispiel: beschäftigt_bei
N:M-Beziehung (many-many)
–
–
WI
falls jedem Entity e1 aus E1 beliebig viele (also keine oder mehrere) Entities aus E2 zugeordnet sind, aber
jedem Entity e2 aus E2 höchstens ein Entity e1 aus E1 zugeordnet ist.
Beispiel: beschäftigen.
N:1-Beziehung (many-one),
–
–
•
falls jedem Entity e1 aus E1 höchstens ein Entity e2 aus E2 zugeordnet ist und umgekehrt jedem Entity e2
aus E2 höchstens ein Entity e1 aus E1 zugeordnet ist.
Beispiel: verheiratet_mit.
wenn keinerlei Restriktionen gelten, d.h. jedes Entity aus E1 kann mit beliebig vielen Entities aus E2 in
Beziehung stehen und umgekehrt kann jedes Entity e2 aus E2 mit beliebig vielen Entities aus E1 in
Beziehung stehen.
Beispiel: befreundet_mit.
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
28
Das Standard- Entity-Relationship-Modell (ERD)
Ein Beispiel aus der Universität
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
29
Das Entity-Relationship-Diagramm
Notation und Syntax
•
Verschiedene Notationen für ein ERD möglich
– die Chen-Notation von Peter Chen, dem
Entwickler der ER-Diagramme, 1976; erweitert
durch die Modifizierte Chen-Notation (MCNotation)
– die IDEF1X als langjähriger De-FactoStandard bei US-amerikanischen Behörden;
– die Bachman-Notation von Charles Bachman
als weit verbreitete Werkzeug-DiagrammSprache;
– die Martin-Notation (Krähenfuß-Notation) als
weit verbreitete Werkzeug-Diagramm-Sprache
(Information Engineering);
– die (min, max)-Notation von Jean-Raymond
Abrial, 1974.
– UML als Standard, den selbst ISO in eigenen
Normen als Ersatz für ER-Diagramme
verwendet.
Inhalte entnommen von:
http://de.wikipedia.org/wiki/Entity-Relationship-Modell
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
30
Erweiterung SERM nach Sinz
•
•
quasihierarchische Anordnung des
Datenschemas
Erkennung von Existenzabhängigkeiten
durch Beziehungssemantik
– Ein Auftrag kann nur angelegt
werden, wenn ein entsprechender
Kunde gepflegt wurde
Inhalte entnommen von:
http://de.wikipedia.org/wiki/Structured-Entity-Relationship-Modell
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
31
• eine Anordnung der Symbole („topologie“), die die
Existenzabhängigkeiten bei weak entities
berücksichtigt (unten)
nach http://udoo.uni-muenster.de/downloads/publications/1308.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
32
http://www.informatik.unijena.de/dbis/lehre/ss2008/dbs/dbs_lehrer_04.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
33
Kapitel 1.2
VOM ERD ZUM TABELLENENTWURF /
RELATIONENMODELL
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
34
Grundkomponenten des Tabellenentwurfs
Vom ERD zum Tabellenentwurf
die typischen Komponenten eines RDBMS (als Software)
• Tabellen
• Spalten mit einigen wenigen Datentypen und Constraints
• Id-Spalten und Fremdschlüssel, die nicht wesensverschieden von anderen
Spalten sind
– composite keys
– autogenerated keys
• NULL im key bei 1:N (c) Beziehungen
• Constraints zur Sicherstellung der der Referentiellen Integrität
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
35
Vom ERD zum Tabellenentwurf
Regeln für die Umwandlung
Eine Modellierung muss in die genannten Strukturen der Software gewandelt werden
•
•
•
•
•
WI
Jede Entity gibt eine Tabelle mit (fast immer) Primärschlüssel
Zwischen zwei Tabellen kann via Fremdschlüssel nur eine 1:N oder 1:N(c) Beziehung abgebildet
werden
Eine weak entity = existenzabhängige entity  Abbildung von N:M Beziehungen (oder Relationen
mit „mehr als 2 Beinchen“ (arity >2)) kann als Primärschlüssel den composite key der Elterntabellen
erhalten (oft aber auch eigener Primärschlüssel)
Fremdschlüsselbeziehungen können unter die Constraint der „Referentiellen Integrität“ gestellt
werden
–
On delete cascade
–
•
On delete abort
…
Tabellen können verbunden werden, wobei dies meist längs der Schlüssel 
Fremdschlüsselbeziehungen geschieht, aber das ist nicht zwingend (siehe Einführungsbeispiel: „Wer
heißt wie irgend ein Hund?“)
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
36
Der Tabellenentwurf
Universitätsbeispiel (wird später häufig verwendet)
hören
Studenten
Vorlesungen
voraussetzen
Semester MatrNr VorlNr
VorlNr
Titel
18
26120 5001
5001
Grundzüge
4
2137
5001
5041
2125
Sokrates
C4
226
Jonas
12
27550 5001
5041
Ethik
4
2125
5001
5043
2126
Russel
C4
232
26120
Fichte
10
27550 4052
5043
Erkenntnistheorie
3
2126
5001
5049
2127 Kopernikus C3
310
26830
Aristoxenos
8
28106 5041
5049
Mäeutik
2
2125
5041
5216
6
28106 5052
4052
Logik
4
2125
5043
5052
2133
C3
52
28106 5216
5052 Wissenschaftstheorie
3
2126
5041
5052
2134 Augustinus C3
309
5052
5259
5216
Bioethik
2
2126
36
5259
Der Wiener Kreis
2
2133
2136
Curie
C4
Assistenten
2137
Kant
C4
Name
Fachgebiet
7
Boss
2
2134
3002
Platon
Ideenlehre
2125
3003
Aristoteles
Syllogistik
2125
Sprachtheorie
2126
MatrNr
Name
24002
Xenokrates
25403
27550 Schopenhauer
28106
Carnap
3
29120 Theophrastos
29555
2
Feuerbach
prüfen
2
28106 5001
2126
1
25403 5041
2125
2
27550 4630
2137
2
WI
Vorgänger Nachfolger PersNr
28106 5259
29120 5001
29120 5041
29120 5049
MatrNr VorlNr PersNr Note
SWS gelesenVon
Professoren
29555 5022
5022 Glaube und Wissen
4630
Die 3 Kritiken
4
Rang Raum
Popper
2137
25403 5022
Beispiel entnommen aus
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
PerslNr
Name
3004 Wittgenstein
3005
Rhetikus
Planetenbewegung 2127
37
Vom ERD zum Tabellenentwurf
Schlüssel
Primärschlüssel
•
– Um einen Datensatz (ein Tupel) eindeutig
beschreiben zu können, gibt es drei
Möglichkeiten:
• Ein vorhandenes Attribut ist bereits eindeutig,
z.B. der Name einer Pizza
• Man kombiniert mehrere Attribute, z.B. Datum
und Uhrzeit bei der Bestellung
• Man führt eine Zahl ein, die mit jedem neu
erzeugten Tupel steigt (id).
Fremdschlüssel
•
– Ist der referenzierter Primärschlüssel von
einer anderen Tabelle
Inhalte entnommen von:
http://de.wikipedia.org/wiki/Schl%C3%BCssel_%28Datenbank%29#Fremdschl.C3.BCssel_u
nd_Beziehungstypen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
38
Beispiel ERD: Uni-Schema
MatrNr
Name
Studenten
Semester
N
N
voraussetzen
Nachfolger
Vorgänger
hören
N
M
Vorlesungen
M
Note
M
N
lesen
prüfen
1
1
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J.
N
arbeitenFür
Fachgebiet
WI Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
SWS
Titel
PersNr
Name| SS2015
Assistenten
Ruhland
VorlNr
1
Professoren
PersNr
Name
Rang
Raum
39
Relationen-Theorie
Grundlagen
•
Mathematische Fundierung des Arbeitens mit Tabellen, Relationen und dem Select
•
•
Basiselement : jede Relation (vulgo: Tabelle) ist Menge von „Tupeln“.
Jedes Tupel ist geordnete Folge von Einträgen („Attributen“) aus jeweils einer Domäne
‡. Jedes Attribut trägt einen Namen
Relation künstler(Rang, Name, Geburtsdatum, lfdNummer, lfdNr2)
•
–
Tupel sind z.B.
(12, „Hansi Hinterseer“,12.Mai1976, 898 , 3)
– Relation ist Menge (im mathem. Sinn) von Tupeln; damit wird keine Reihenfolge der
Tupel garantiert
•
Kombinationen von Attributen, die innerhalb der Tupelmenge eindeutig sind, heißen
Schlüsselkandidaten (candidate key), der tatsächlich gewählte Kandidat Primärschlüssel
–
(Name ,lfdNr2) und
(Geburtsdatum, lfdNummer) sind Schlüsselkandidaten
– der zweite Kandidat ist nicht „minimal“
‡ schließt oft den speziell behandelten Wert NULL ein
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
40
Relationentheorie
Grundlegende Operationen auf Tupeln
π eliminiert Attribute
σ wählt Tupel aus
ρ benennt Attribute oder Relationen um
•
•
•
Projektion
Selektion
Umbenennung
•
•
•
•
Vereinigung
Durchschnitt
Differenz
Kartesisches
•
alle SELECT-Befehle (ohne Aggregation) können aus diesen Basisoperationen aufgebaut
werden
Natural Join wählt aus dem kartesischen Produkt diejenigen Tupel aus, bei denen die
Primäschlüssel  Fremdschlüssel-Beziehungen „passen“
Left Outerjoins u.ä. lassen sich ebenso aus den Basisoperationen definieren
•
•
WI
R1 ∪ R2 bildet die Vereinigungsmenge typkompatibler Tupel
R1 ∩ R2 entsprechend die Durchschnittsmenge
R1 ∖ R2 eliminiert Tupel von R2 aus R1
Produkt R1 X R2 bildet die Menge aller Tupel, deren erster
Teil aus R1 und zweiter Teil aus R2 stammt
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
41
Relationentheorie
Grundlegende Operationen auf Tupeln
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
42
Theorie der Normalformen
Kernfrage: was kann man rein aus Kenntnis der momentanen Tupel machen, um
änderungsfreundliche, redundanzarme Darstellungen in Tabellen (Relationen) zu erhalten ?
•
•
•
1 NF Spalten so definieren, dass „alle Attribute elementar“ sind
2 NF bei allen möglichen zusammengesetzten Schlüsselkandidaten: nirgends Abhängigkeit
von Teilen des Schlüssels (nur bei zusammengesetzten Schlüsseln)
3 NF Die dritte Normalform ist erreicht, wenn sich das Relationenschema in 2NF befindet, und
jedes Nichtschlüsselattribut von keinem Schlüsselkandidaten transitiv abhängt.
Ein Attribut A ist vom Schlüsselkandidaten P transitiv abhängig, wenn es ein Attribut B gibt, sodass P  B und B  A
Vulgo: Ein Nichtschlüsselattribut darf nicht von einer Menge aus Nichtschlüsselattributen abhängig sein. Ein
Nichtschlüsselattribut darf also nur direkt von einem Schlüssel abhängen.
•
•
•
WI
minimal schärfer: BCNF (every non key field depends on the key , the full key and nothing but
the key)
4 NF nicht behandelt
5 NF ebenso
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
43
Notwendigkeit der Normalisierung
 Lösch-, Update und
Einfügeanomalien sollen
verhindert werden
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
44
Beispiel zur 3. NF
(aus http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14675-Die-dritte-Normalform.html)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
45
Boyce-Codd Normalform
Boyce-Codd-Normalform (BCNF)
• Eine Relation ist in BCNF, wenn sie die Voraussetzungen der 3NF erfüllt, und jede Determinante
(Attributmenge, von der irgendwelche andere Attribute funktional abhängen) ein Superschlüssel ist
(oder die Abhängigkeit ist trivial). Ein Superschlüssel ist eine Menge von Attributen, von der alle
Attribute der Relation funktional abhängig sind.
• Die BCNF (nach Raymond F. Boyce und Edgar F. Codd) verhindert, dass Teile zweier aus mehreren
Feldern (nicht überlappungsfrei) zusammengesetzten Schlüsselkandidaten voneinander abhängig
sind
• Die BCNF ist höchstens im Fall zusammengesetzter Schlüssel von der 3NF verschieden, und auch
dort nur höchstens, falls gilt
– der Primärschlüssel ist eine Zusammensetzung aus mehreren sog. Schlüsselattributen
– es gibt mehr als einen Schlüsselkandidaten
– die Schlüssel sind nicht disjunkt zueinander, d.h. mehrere Attribute kommen in mehr als einem
Schlüsselkandidaten vor
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
46
Beispiel zur BCNF
In diesem Beispiel gibt es eine einfache Datenbank, in der die Vereinszugehörigkeit von
Sportlern gespeichert wird. Es sollen die folgenden Bedingungen gelten:
jeder Verein bietet nur eine Sportart an.
ein Sportler kann in verschiedenen Vereinen spielen, aber nur, wenn diese Vereine
unterschiedliche Sportarten betreiben. (Damit wird sichergestellt, dass der Sportler nie gegen einen
Verein spielt, in dem er selbst Mitglied ist.) (*)
Quelle: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Boyce-Codd-Normalform_.28BCNF.29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
47
Beispiel
Verletzung der BCNF
• Aus den oben genannten Bedingungen folgt, dass das Attribut Sportart funktional
abhängig vom Attribut Verein ist, d. h. Verein ist eine Determinante. Jedoch ist Verein
kein Schlüsselkandidat. Mögliche Schlüsselkandidaten sind {Name,Verein} und
{Name,Sportart}. Wie man sieht, kommt jedes Attribut in einem Schlüsselkandidat vor,
wodurch die Relation in 3NF, allerdings nicht in BCNF ist. Jedoch ist eine Konvertierung in
BCNF möglich, indem (Name, Verein) als Primärschlüssel verwendet und die Relation
aufgeteilt wird:
wenn EC Beispielstadt jetzt
ein Fußballverein wird,
können wir (*) NUR NACH
JOIN verifizieren
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
48
Literatur zur Technik der Normalisierung
•
•
•
WI
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.87.6890&rep=rep1&type=pdf
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29#Zerlegungsalgorithmus
http://de.wikipedia.org/wiki/Synthesealgorithmus-Normalform
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
49
Kapitel 1.3
STRUCTURED QUERY LANGUAGE
(SQL)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
50
Structured-Query-Language (SQL)
•
•
•
•
WI
Strukturierte Ablage von Daten
ist schön
Genauso wichtig ist aber auch
die Möglichkeit der effizienten
Abfrage bzw. Extraktion von
Daten!!!
SQL enthält Sprachelemente
zum Erzeugen/Ändern von
Tabellen und zu deren Abfrage
… und ist sehr umfassend
verbreitet (in verschiedenen
Dialekten)
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
51
Structured-Query-Language (SQL)
• SQL = DDL (incl. SDL und VDL) + DML + DCL
• Weiterentwicklung des SQL Standards im Laufe der Zeit (SQL 92 als
verbreitetster) + viele Dialekte je nach Hersteller
• Sehr oft wird nur eine Teilmenge des SQL Standards implementiert
• SQL ist zeichenorientiert (character-orientierte 4 GL):
– Benutzer schreibt SQL entweder selbst oder …
– ein GUI erzeugt im Hintergrund SQL, das an die Datenbank gesandt wird
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
52
Grundkomponenten
• DDL (Data Definition Language)
– CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX ,…
• DML (Data Manipulation Language)
– INSERT INTO, DELETE, UPDATE
– Abfragen
• INNER und OUTER JOINS über Tabellen
• Nested queries (subqueries)
• Correlated and uncorrelated
• IN, ANY , ALL als modifiers im WHERE Teil
• Aggregation
• Details gibt es auf den nachfolgenden Folien!
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
53
Structured-Query-Language (SQL)
Elemente der Data Definition Language (DDL)
•
•
•
•
CREATE TABLE
ALTER TABLE
DROP TABLE
Datentypen für die Spalten
– „NULL“ / NOT NULL / UNIQUE
– Wertebereiche und referentielle Integrität
• etliche andere Befehle(Trigger etc. siehe unten)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
54
Structured-Query-Language (SQL)
CREATE TABLE und ALTER TABLE
•
•
CREATE TABLE „Tabellen_Name“
(„Spalte 1“
„Datentyp_für_Spalte1“,
„Spalte 2“
„Datentyp_für_Spalte2“,
... )
Zur Erstellung einer Kundentabelle
würden wir also eingeben:
–
•
WI
CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)
•
ALTER TABLE "Tabellen_Name“ [Alter Spezifikation]
•
[Alter Spezifikation] hängt von der Art der
gewünschten Änderung ab. Kernbeispiele:
–
–
–
–
•
Spalte hinzufügen:
ADD "Spalte 1" "Datentyp_für_Spalte1“
Spalte löschen: DROP "Spalte 1“
Spaltenname ändern:
CHANGE "alter Spaltenname" "neuer Spaltenname"
"Datentyp für neuen Spaltennamen“
Datentyp einer Spalte ändern:
MODIFY "Spalte 1" "neuer Datentyp"
ALTER TABLE customer add Gender char(1)
Ergänzung um Information zu
Schlüsseln möglich
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
55
Structured-Query-Language (SQL)
DDL Referentielle Integrität: Eigene und Fremdschlüssel
•
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
•
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
•
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
•
•
•
•
WI
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));
Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);
SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);
Unique und (NOT) NULL als Spaltenmodifier
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
56
Structured-Query-Language (SQL)
Datentypen
• Datentypen
–
–
–
–
–
–
character (n), char (n)
character varying (n), varchar (n)
numeric (p,s), integer
blob oder raw für sehr große binäre Daten
clob für sehr große String-Attribute
date für Datumsangaben
• Anlegen einer Tabelle
CREATE TABLE Professoren
(PersNr
Name
Rang
WI
integer not null,
varchar (30) not null
character (2));
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
57
Structured-Query-Language (SQL)
CREATE TABLE Beispiel in SQLite
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
58
Structured-Query-Language (SQL)
Tabelle löschen versus Inhalte löschen
• DROP TABLE "Tabellen_Name“
– Löscht die gesamte Tabelle aus der Datenbank
– DDL
• TRUNCATE TABLE "Tabellen_Name“
– Leert die Tabelle von Inhalten
– Struktur bleibt erhalten!
– DML
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
59
Structured-Query-Language (SQL)
CREATE VIEW
•
CREATE VIEW "SICHT_NAME" AS "SQLAnweisung"
•
CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer
•
CREATE VIEW V_REGION_SALES
AS SELECT A1.region_name REGION,
SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
Views lassen sich an allen Stellen einsetzen, an
denen Tabellen erwartet werden. Sie werden
zur Laufzeit aktualisiert
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
60
Structured-Query-Language (SQL)
Elemente der Data Manipulation Language (DML)
•
•
•
•
INSERT INTO
UPDATE
DELETE
SELECT
• Details zu den Befehlen der DML auf den Folgeseiten!
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
61
Structured-Query-Language (SQL)
INSERT INTO
•
INSERT INTO "Tabellen_Name"
("Spalte1", "Spalte2", ...) VALUES
("Wert1", "Wert2", ...)
•
INSERT INTO Store_Information
(store_name, Sales, Date) VALUES
('Los Angeles', 900, '10.Jan.1999')
WI
•
INSERT INTO Store_Information (store_name, Sales,
Date) SELECT store_name, Sales, Date FROM
Sales_Information WHERE Year(Date) = 1998
•
!! Das ist ein Befehl, der einen sog. „materialized view“
generiert!!
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
62
Structured-Query-Language (SQL)
Fortführung Universitätsbeispiel
•
•
INSERT INTO hören
SELECT MatrNr, VorlNr
FROM Studenten, Vorlesungen
WHERE Titel= `Logik‘ ;
INSERT INTO Studenten (MatrNr,
Name)
VALUES (28121, `Archimedes‘);
MatrNr
Studenten
Name
Semester
…
…
29120 Theophrastos
…
2
29555 Feuerbach
28121 Archimedes
2
NULL
Null-Wert!!
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
63
Structured-Query-Language (SQL)
DML-UPDATE / DELETE
•
•
•
WI
UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert]
WHERE {Bedingung}
UPDATE Store_Information
SET Sales = 500
WHERE store_name = "Los
Angeles"
AND Date = "08.Jan.1999“
UPDATE "Tabellen_Name"
SET Spalte1 = [Wert1], Spalte2 =
[Wert2]
WHERE {Bedingung}
•
DELETE FROM "Tabellen_Name"
WHERE {Bedingung}
•
DELETE FROM Store_Information
WHERE store_name = "Los Angeles“
•
Achtung: Auf SQL-Ebene gibt es kein
UNDO !
•
Updates generieren aus der alten Tabelle
Änderungsdatensätze, die nach Ausführen aller
Änderungen eingearbeitet werden
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
64
Structured-Query-Language (SQL)
Fortführung Universitätsbeispiel
• Löschen von Tupeln
DELETE FROM Studenten
WHERE Semester > 13;
• Verändern von Tupeln
UPDATE Studenten
SET Semester= Semester + 1;
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
65
Structured-Query-Language (SQL)
DML - SELECT
• Grundlogik des SELECT Befehls:
Aus einer oder mehrerer Tabelle entsteht durch ein SELECT
Statement immer eine Tabelle, die u.U. in weitergehenden SQL
Statements verwendet werden kann
Tabelle
WI
Tabelle
…
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
SELECT
über
Tabelle(n)
Ergebnis
Tabelle
66
Structured-Query-Language (SQL)
Grundelemente des SELECT (Details siehe Folgefolien)
•
Quelle: Tupelmenge
•
– Einzeltabelle oder
– JOIN über mehrere Tabellen
•
•
•
•
•
–
–
–
–
•
Union ‡
Union all
Intersect ‡
Minus (=Difference) ‡
(Division)
Projektion: Spaltenauswahl
WHERE
AND OR BETWEEN
DISTINCT
TOP n
Gruppierung
– Aggregat-Funktionen
Mengentheoretische
Operatoren
–
–
–
–
•
INNER JOIN
OUTER JOIN
FULL JOIN
…
Selektion
• count, sum, avg, max, min
– Selektion auf das Aggregat („HAVING“)
•
„Utilities“
– Sortieren, Berechnen, Alias-Namen für
Tabellen und Spalten
– Funktionen
•
NULLS
– SELECT «spaltenliste»
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
‡ stets mit implizitem „distinct“
67
Das Relationenmodell
Fortführung Universitätsbeispiel
hören
Studenten
Semester MatrNr VorlNr
MatrNr
Name
24002
Xenokrates
18
25403
Jonas
12
26120
Fichte
10
26830
Aristoxenos
8
26120 5001
5001
Grundzüge
4
2137
27550 5001
5041
Ethik
4
2125
27550 4052
5043
Erkenntnistheorie
3
2126
28106 5041
5049
Mäeutik
2
2125
28106 5052
4052
Logik
4
2125
5052 Wissenschaftstheorie
3
2126
5216
Bioethik
2
2126
5259
Der Wiener Kreis
2
2133
PerslNr
Name
Fachgebiet
Boss
5022 Glaube und Wissen
2
2134
3002
Platon
Ideenlehre
2125
4630
4
2137
3003
Aristoteles
Syllogistik
2125
Sprachtheorie
2126
28106
3
28106 5216
29120 Theophrastos
2
28106 5259
29555
2
29120 5001
SWS gelesenVon
Vorgänger Nachfolger PersNr
29120 5041
prüfen
29120 5049
MatrNr VorlNr PersNr Note
28106 5001
2126
1
25403 5041
2125
2
27550 4630
2137
2
WI
Professoren
Titel
6
Feuerbach
voraussetzen
VorlNr
27550 Schopenhauer
Carnap
Vorlesungen
29555 5022
Die 3 Kritiken
25403 5022
Beispiel entnommen aus
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Name
Rang Raum
5001
5041
2125
Sokrates
C4
226
5001
5043
2126
Russel
C4
232
5001
5049
2127 Kopernikus C3
310
5041
5216
2133
C3
52
5043
5052
2134 Augustinus C3
309
5041
5052
2136
Curie
C4
36
5052
5259
2137
Kant
C4
7
Popper
Assistenten
3004 Wittgenstein
3005
Rhetikus
Planetenbewegung 2127
3006
Newton
Keplersche Gesetze 2127
3007
Spinoza
Gott und Natur
2126
68
Structured-Query-Language (SQL)
Eine Einfache SQL Anfrage über eine Tabelle
• Ziel: “Selektiere die Personalnummer und den Namen der Professoren mit Rang
C4”
• Lösung:
PersNr Name
SELECT PersNr, Name
FROM Professoren
WHERE Rang= ´C4´;
WI
2125 Sokrates
2126
Russel
2136
Curie
2137
Kant
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
69
Structured-Query-Language (SQL)
Eine Einfache SQL Anfrage über eine Tabelle mit Sortierung der Ergebnisse
• Ziel: Selektiere die Personalnummer, den Namen und den Rang aller
Professoren und ordne die Ergebnisse absteigend nach dem Rang sowie
anschließend aufsteigend nach dem Name
PersNr
Name
• Lösung
SELECT PersNr, Name, Rang
FROM Professoren
ORDER BY Rang desc, Name asc;
2136
Curie
C4
2137
Kant
C4
2126
Russel
C4
2125
Sokrates
C4
2134
Augustinus C3
2127
Kopernikus C3
2133
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Rang
Popper
C3
70
Structured-Query-Language (SQL)
Duplikateleminierung
• Ziel: Zeige alle vorhandenen Ränge von Professoren
• Lösung:
Rang
SELECT DISTINCT Rang
FROM Professoren
C3
C4
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
71
Structured-Query-Language (SQL)
Fortführung Universitätsbeispiel
Studenten
hören
MatrNr
Name
Semester MatrNr VorlNr
24002
Xenokrates
18
25403
Jonas
26120
26830
Vorlesungen
voraussetzen
VorlNr
Titel
26120 5001
5001
Grundzüge
4
2137
12
27550 5001
5041
Ethik
4
2125
Fichte
10
27550 4052
5043
Erkenntnistheorie
3
2126
Aristoxenos
8
28106 5041
5049
Mäeutik
2
2125
27550 Schopenhauer
6
28106 5052
4052
Logik
4
2125
28106
3
28106 5216
5052 Wissenschaftstheorie 3
2126
29120 Theophrastos
2
28106 5259
29555
2
Carnap
Feuerbach
29120 5001
29120 5041
prüfen
29120 5049
MatrNr VorlNr PersNr Note
29555 5022
28106 5001 2126
1
25403 5022
25403 5041 2125
2
27550 4630 2137
2
WI
Professoren
SWS gelesenVon Vorgänger Nachfolger PersNr
Name
Rang Raum
5001
5041
2125
Sokrates
C4
226
5001
5043
2126
Russel
C4
232
5001
5049
2127 Kopernikus C3
310
5041
5216
2133
C3
52
5043
5052
2134 Augustinus C3
309
5041
5052
2136
Curie
C4
36
5052
5259
2137
Kant
C4
7
Popper
5216
Bioethik
2
2126
5259
Der Wiener Kreis
2
2133
PerslNr
Name
Fachgebiet
Boss
5022 Glaube und Wissen
2
2134
3002
Platon
Ideenlehre
2125
4630
4
2137
3003
Aristoteles
Syllogistik
2125
Sprachtheorie
2126
Die 3 Kritiken
Beispiel entnommen aus
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Assistenten
3004 Wittgenstein
3005
Rhetikus
Planetenbewegung 2127
3006
Newton
Keplersche Gesetze 2127
3007
Spinoza
Gott und Natur
2126
72
Structured-Query-Language (SQL)
Anfragen über mehrere Relationen
• Ziel: Welcher Professor liest "Mäeutik"?
• Lösung:
SELECT Name, Titel
FROM Professoren, Vorlesungen
WHERE PersNr = gelesenVon and Titel = `Mäeutik‘ ;
• Anfrage in Relationen-Algebra
∏
WI
Name, Titel
(σ
PersNr = gelesenVon ∧ Titel = ' Mäeutik'
(Professoren × Vorlesungen))
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
73
Structured-Query-Language (SQL)
Fortführung des Beispiels für Anfragen über mehrere Relationen
Professoren
PersNr Name Rang Raum VorlNr
PersNr Name Rang Raum
2125 Sokrates C4
226
2126
Russel
C4
232
…
…
…
…
2137
Kant
C4
7
Titel
5001
Grundzüge
4
2137
5041
Ethik
4
2125
…
…
…
…
5049
Mäeutik
2
2125
…
…
…
…
4
2137
4630 Die 3 Kritiken
226
5001
Grundzüge
4
2137
2125 Sokrates C4
226
5041
Ethik
4
2125
…
…
…
…
…
226
5049
Mäeutik
2
2125
…
…
…
2125 Sokrates C4
VorlNr
…
…
…
…
…
…
…
…
2126
Russel
C4
232
5001
Grundzüge
4
2137
2126
Russel
C4
232
5041
Ethik
4
2125
…
…
…
…
2137
Kant
C4
7
4
2137
SWS gelesenVon
4630 Die 3 Kritiken
Auswahl
PersNr
Name
Rang
2125
Sokrates
C4
Raum VorlNr
226
Titel
5049 Mäeutik
SWS gelesen Von
2
2125
Name
Projektion
WI
SWS gelesenVon
2125 Sokrates C4
Verknüpfung
Vorlesungen
Titel
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Titel
Sokrates Mäeutik
74
Structured-Query-Language (SQL)
Data Manipulation Language (DML) – Varianten von JOINS
• JOINS werden benötigt für Anfragen über mehrere Relationen
(Tabellen)
• Die Art des JOINS bestimmt wie die Zeilen aus den Relationen
miteinander verknüpft werden!
• CROSS JOIN
– Der CROSS JOIN (auch als Kartesisches Produkt oder Kreuzprodukt
bezeichnet)verbindet jede Zeile der ersten Tabelle mit jeder Zeile der
zweiten Tabelle. Die Ergebnistabelle eines Kreuzproduktes kann sehr
groß werden und ist häufig nutzlos.
– SELECT * FROM TabelleA CROSS JOIN TabelleB
– SELECT * FROM TabelleA, Tabelle B
Entnommen aus http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
75
Structured-Query-Language (SQL)
Data Manipulation Language (DML) – Varianten von JOINS
• INNER JOIN
– Der INNER JOIN verbindet Datensätze aus zwei Tabellen, welche in
beiden Tabellen denselben Werte enthalten. Die Spalten die in beiden
Tabellen verglichen werden sollen, muss explizit angegeben werden.
– SELECT * FROM TabelleA INNER JOIN TabelleB ON TabelleA.Index
= TabelleB.Index
Entnommen aus http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
76
Structured-Query-Language (SQL)
Data Manipulation Language (DML) – Varianten von JOINS
• NATURAL JOIN
– Der NATURAL JOIN verknüpft die beiden Tabellen über die
Gleichheit der Felderwerte in Spalten mit gleichem Namen.
Spalten mit gleichem Namen werden im Ergebnis nur einmal
angezeigt. Haben die Tabellen keine Spalten mit gleichem Namen,
wird der NATURAL JOIN automatisch zum CROSS JOIN
SELECT * FROM TabelleA NATURAL JOIN TabelleB
Entnommen aus http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
77
Structured-Query-Language (SQL)
Data Manipulation Language (DML) – Varianten von JOINS
•
LEFT JOIN
– Der Left Join (auch Left Outer Join genannt) erstellt eine so genannte linke
Inklusionsverknüpfung. Diese schließt alle Datensätze aus der ersten (linken) Tabelle
ein, auch wenn keine entsprechenden Werte für die Datensätze in der zweiten
(rechten) Tabelle existieren. Die zu vergleichenden Spalten müssen explizit Angegeben
werden.
–
•
SELECT * FROM TabelleA LEFT JOIN TabelleB ON TabelleA.Index = TabelleB.Index
RIGHT JOIN
– Der Right Join (auch Right Outer Join genannt) erstellt eine so genannte rechte
Inklusionsverknüpfung. Diese schließt alle Datensätze aus der zweiten (rechten)
Tabelle ein, auch wenn keine entsprechenden Werte für die Datensätze in der ersten
(linken) Tabelle existieren. Die zu vergleichenden Spalten müssen explizit Angegeben
werden.
–
SELECT * FROM TabelleA RIGHT JOIN TabelleB ON TabelleA.Index = TabelleB.Index
Entnommen aus http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
78
Structured-Query-Language (SQL)
Data Manipulation Language (DML) – Varianten von JOINS
•
FULL JOIN
–
•
UNION JOIN
–
•
Der Union Join nimmt die Datensätze beider Tabellen auf und gibt sie in einer Tabelle aus. Der Union Join steht nicht
immer zur Verfügung, da er zum SQL 92 Intermediate Level gehört. In PostgreSQL steht der Union Join nicht zur
Verfügung.
SELF JOIN
–
•
Der Full Join (auch Full Outer Join genannt) ist eine Kombination von Left Join und Right Join. Die zu vergleichenden
Spalten müssen explizit Angegeben werden.
Der Self Join dient dazu, um in bestimmten Situationen einen Verbund innerhalb einer einzigen Tabelle bilden zu
können. Dazu muss man der Tabelle zwei verschiedene Aliasnamen geben. Self Joins können mit allen Joins
durchgeführt werden. Ein Beispiel für den Gebrauch eines Self Joins ist zum Beispiel ein Vergleich innerhalb einer
Tabelle.
THETA JOIN
–
Der Theta Join ist eine Verallgemeinerung des Inner Join. Beim Inner Join wird die Gleichheit des Inhalts zweier
Attribute verglichen und beim Theta Join wird der Inhalt der Attribute x und y mit einer beliebigen Formel, zum
Beispiel "<", "<=", ">", ">=", "<>" verglichen.
Entnommen aus http://glossar.hs-augsburg.de/Verbundoperatoren_%28Join%29
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
79
Structured-Query-Language (SQL)
Anfragen über mehrere Relationen
• Welche Studenten hören welche Vorlesungen?
select Name, Titel
from Studenten, hören, Vorlesungen
where Studenten.MatrNr = hören.MatrNr and
hören.VorlNr = Vorlesungen.VorlNr;
• Alternativ:
select s.Name, v.Titel
from Studenten s, hören h, Vorlesungen v
where s. MatrNr = h. MatrNr and
h.VorlNr = v.VorlNr
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
80
Structured-Query-Language (SQL)
• Mengenoperationen UNION, INTERSECT, MINUS
( select Name
from Assistenten )
union
( select Name
from Professoren);
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
81
Aggregationen
• Aggregatfunktionen avg, max, min, count, sum
select avg (Semester)
from Studenten;
select gelesenVon, sum (SWS)
from Vorlesungen
group by gelesenVon;
select gelesenVon, Name, sum (SWS)
from Vorlesungen, Professoren
where gelesenVon = PersNr and Rang = ´C4´
group by gelesenVon, Name
having avg (SWS) >= 3;
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Siehe hierzu die
Detailerläuterung
auf den Folgefolien
82
Aggregationen
• SQL erzeugt pro Gruppe ein Ergebnistupel
• Deshalb müssen alle in der select-Klausel aufgeführten Attribute - außer
den aggregierten – auch in der group by-Klausel aufgeführt werden
• Nur so kann SQL sicherstellen, dass sich das Attribut nicht innerhalb der
Gruppe ändert
select gelesenVon, Name, sum (SWS)
from Vorlesungen inner join Professoren on gelesenVon = PersNr
where Rang = ´C4´
group by gelesenVon, Name
having avg (SWS) >= 3;
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
83
Aggregationen
Fortführung Universitätsbeispiel
hören
Studenten
Vorlesungen
voraussetzen
Semester MatrNr VorlNr
VorlNr
Titel
18
26120 5001
5001
Grundzüge
4
2137
5001
5041
2125
Sokrates
C4
226
Jonas
12
27550 5001
5041
Ethik
4
2125
5001
5043
2126
Russel
C4
232
26120
Fichte
10
27550 4052
5043
Erkenntnistheorie
3
2126
5001
5049
2127 Kopernikus C3
310
26830
Aristoxenos
8
28106 5041
5049
Mäeutik
2
2125
5041
5216
6
28106 5052
4052
Logik
4
2125
5043
5052
2133
C3
52
28106 5216
5052 Wissenschaftstheorie
3
2126
5041
5052
2134 Augustinus C3
309
5052
5259
5216
Bioethik
2
2126
36
5259
Der Wiener Kreis
2
2133
2136
Curie
C4
Assistenten
2137
Kant
C4
Name
Fachgebiet
7
Boss
2
2134
Platon
Ideenlehre
2125
Syllogistik
2125
Sprachtheorie
2126
MatrNr
Name
24002
Xenokrates
25403
27550 Schopenhauer
28106
Carnap
3
29120 Theophrastos
29555
2
Feuerbach
prüfen
2
SWS gelesenVon
Professoren
Vorgänger Nachfolger PersNr
28106 5259
29120 5001
29120 5041
29120 5049
5022 Glaube und Wissen
MatrNr VorlNr PersNr Note
28106
3002
29555 5022
4630
DieManagement"
3 Kritiken
4
2137
Vorlesung "Data
and Knowledge
(MW31.6)
| Prof.
Dr. J.
3003 Aristoteles
25403
5022
5001 2126
Ruhland1| SS2015
Beispiel entnommen aus
25403 5041
2125
2
27550 4630
2137
2
WI
PerslNr
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
3004 Wittgenstein
3005
Rhetikus
Name
Rang Raum
Popper
Planetenbewegung 2127
84
Aggregationen
Fortführung Universitätsbeispiel
VorlNr
Titel
5001
Grundzüge
4
2137
2137
5041
Ethik
4
2125
2125 Sokrates C4
226
5043
Erkenntnistheorie
3
2126
2126
C4
232
5049
Mäeutik
2
2125
2125 Sokrates C4
226
4052
Logik
4
2125
2125 Sokrates C4
226
5052 Wissenschaftstheorie
3
2126
2126
Russel
C4
232
5216
Bioethik
2
2126
2126
Russel
C4
232
4630
Die 3 Kritiken
4
2137
2137
Kant
C4
7
WI
SWS gelesen Von PersNr Name Rang Raum
Kant
Russel
C4
7
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
85
Aggregationen
Fortführung Universitätsbeispiel
Vorlesung x Professoren
VorlNr
Titel
5001
Grundzüge
4
2137
2125 Sokrates C4
226
5041
Ethik
4
2125
2125 Sokrates C4
226
...
...
...
...
...
...
...
...
4
2137
2137
Kant
C4
7
4630 Die 3 Kritiken
SWS gelesen Von PersNr Name Rang Raum
Aggregation und
Having Bedingung
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
86
Aggregationen
Fortführung Universitätsbeispiel
gelesenVon Name sum (SWS)
WI
2125
Sokrates
10
2137
Kant
8
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
87
Fortgeschrittene Elemente der Abfrage
•
•
„LIKE“ mit _ und % Wildcards
NULL Behandlung  Folgeseiten
– NVL(expr1, expr2)
•
Ersetzt in expr1 möglicherweise vorkommende NULL-Werte durch expr2
Siehe Folgeseite
– COALESCE (expr1,expr 2… expr n) gibt ersten NON_NULL zurück
• SELECT ProductNumber,COALESCE(Class, Name, ProductNumber) AS
FirstNotNull FROM Production.Product ;
•
WI
Subqueries  Folgeseiten
– Uncorrelated
– Correlated
– Funktionen mit besonderer Bedeutung für Subqueries
• EXISTS
• IN
• Ein SELECT darf überall stehen, wo eine Table erwartet wird; und außerdem
ein select, das sicher nur einen Wert ausgibt, überall, wo ein Wert erwartet wird
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
88
NULL- Werte
•
•
•
•
Steht für: „unbekannter Wert
…wird vielleicht später nachgereicht“
Nullwerte können auch im Zuge der Anfrageauswertung entstehen (Bsp. äußere Joins)
Und sind als Fremdschlüssel bei 1:n (c) Beziehungen häufig
•
manchmal sehr überraschende Anfrageergebnisse, wenn Nullwerte vorkommen
select count (*)
from Studenten
where Semester < 13 or Semester > =13
•
Wenn es Studenten gibt, deren Semester-Attribut den Wert null hat, werden diese nicht
mitgezählt
Der Grund liegt in folgenden Regeln für den Umgang mit Null-Werten begründet:
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
89
Auswertung bei NULL-Werten
1. In arithmetischen Ausdrücken werden Nullwerte propagiert, d.h. sobald ein Operand null
ist, wird auch das Ergebnis null. Dementsprechend wird z.B.
null + 1 zu null ausgewertet
aber auch null * 0 wird zu null ausgewertet.
2.
SQL hat eine dreiwertige Logik, die nicht nur true und false kennt, sondern auch einen
dritten Wert unknown. Diesen Wert liefern Vergleichsoperationen zurück, wenn
mindestens eines ihrer Argumente null ist. Beispielsweise wertet SQL das Prädikat
(PersNr=...) immer zu unknown aus, wenn die PersNr des betreffenden Tupels den Wert
null hat.
3. Logische Ausdrücke werden nach den folgenden Tabellen berechnet:
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
90
not
true
false
unknown unknown
false
and
true
unknown
false
true
true
unknown
false
unknown
unknown
unknown
false
false
false
false
false
true
or
true
unknown
false
true
true
true
true
unknown
true
unknown
unknown
false
true
unknown
false
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J.
Ruhland | SS2015
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
91
Auswertung bei NULL-Werten
Diese Berechnungsvorschriften sind recht intuitiv. Unknown or true wird z.B. zu
true - die Disjunktion ist mit dem true-Wert des rechten Arguments immer
erfüllt, unabhängig von der Belegung des linken Arguments. Analog ist unknown
and false automatisch false - keine Belegung des linken Arguments könnte die
Konjunktion mehr erfüllen.
4. In einer where-Bedingung werden nur Tupel weitergereicht, für die die
Bedingung true ist. Insbesondere werden Tupel, für die die Bedingung zu
unknown auswertet, nicht ins Ergebnis aufgenommen.
5. Bei einer Gruppierung wird null als ein eigenständiger Wert aufgefasst und in
eine eigene Gruppe eingeordnet.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
92
Besonderheiten bei NULL und AVG
•
•
Die Funktion AVG zieht in die Berechnung des Durchschnittes lediglich die Zeilen ein, die nicht NULL
in der entsprechenden Spalte sind.
Dies führt zu folgendem Ergebnis:
select avg(comm) from emp;
–
•
•
•
Es gibt jedoch nur 4 Datensätze, in denen die Spalte Comm nicht NULL ist.
In diesen Datensätzen ist die Spalte Comm 300, 500, 1400 und 0. Das Ergebnis von 550 ergibt sich
demnach aus (300+500+1400+0) / 4.
Sollen jedoch auch die Datensätze einbezogen werden, in denen Comm NULL ist, so können Sie
diese mit der Funktion NVL durch eine 0 ersetzen lassen.
–
•
WI
AVG(COMM) --------- 550
select avg(nvl(comm,0)) from emp;
AVG(NVL(COMM,0)) ---------------- 157,142857
Durch die Funktion NVL(comm,0) werden NULL-Werte in der Spalte comm als 0 interpretiert.
Demnach wird nun (300+500+1400+0+0+0+0+0+0+0+0+0+0+0) / 14 gerechnet.
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
93
Geschachtelte Anfragen
• Unteranfrage in der where-Klausel
• Welche Prüfungen sind besser als durchschnittlich verlaufen?
select *
from prüfen
where Note < ( select avg (Note)
from prüfen );
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
94
Geschachtelte Anfragen
• Unteranfrage in der select-Klausel
• Für jedes Ergebnistupel wird die Unteranfrage ausgeführt
• Man beachte, dass hier die Unteranfrage korreliert ist (greift auf
Attribute der umschließenden Anfrage zu)
select PersNr, Name, ( select sum (SWS) as Lehrbelastung
from Vorlesungen
where gelesenVon=PersNr )
from Professoren;
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
95
Geschachtelte Anfragen
• unkorrelierte Formulierung
select s.*
from Studenten s
where s.GebDatum <
(select max (p.GebDatum)
from Professoren p);
• Vorteil: Unteranfrageergebnis kann materialisiert werden
• Unteranfrage braucht nur einmal ausgewertet zu werden
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
96
Korreliert versus Unkorreliert
•
Korreliert: wer ist gebildeter als der
Durchschnitt seiner Abteilung ?
SELECT EMPNO, LASTNAME,
WORKDEPT, EDLEVEL
FROM EMPLOYEE X
WHERE EDLEVEL >
(SELECT AVG(EDLEVEL)
FROM EMPLOYEE Y
WHERE Y.WORKDEPT =
X.WORKDEPT)
•
Unkorreliert: wer ist gebildeter als der
Durchschnitt der Abteilungen c11,d13
SELECT EMPNO, LASTNAME,
WORKDEPT, EDLEVEL
FROM EMPLOYEE X
WHERE EDLEVEL >
(SELECT AVG(EDLEVEL)
FROM EMPLOYEE Y
WHERE Y.WORKDEPT IN (‘c11‘,
‘d13‘))
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
97
Weitere Abfragen mit Unterabfragen
Ein Select darf überall vorkommen, wo eine Tabelle erwartet wird, aber Problem:
Ich möchte, dass ein WERT kleiner ist als alle EINZELWERTE, die eine Unterabfrage
liefert, was eine Liste sein kann
Select … where alter > select avg(alter) from TblMitarbeiter

Select … where alter > ANY(select alter from TblMitarbeiter)
Avg liefert eine Zahl  any kann gegen eine Liste vergleichen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
98
Weitere Abfrageelemente insbes. Bei Unterabfragen
select Name
from Professoren
where PersNr not in ( select gelesenVon
from Vorlesungen );
select Name
from Studenten
where Semester > = all ( select Semester
from Studenten );
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
99
Weitere Abfragen mit Unterabfragen
• Existenzquantor: exists
select Name
from Professoren
where not exists ( select *
from Vorlesungen
where gelesen Von = PersNr );
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
100
Verwertung der Ergebnisse einer Unterabfrage
select tmp.MatrNr, tmp.Name, tmp.VorlAnzahl
from (select s.MatrNr, s.Name, count(*) as VorlAnzahl
from Studenten s, hören h
where s.MatrNr=h.MatrNr
group by s.MatrNr, s.Name) tmp
where tmp.VorlAnzahl > 2;
WI
MatrNr
Name
VorlAnzahl
28106
Carnap
4
29120
Theophrastos
3
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
101
„echte“ Allquantifizierung z.B. mittels „count“
•
•
Allquantifizierung im Sinne eines Pendants zum „exists“ kann immer durch eine countAggregation ausgedrückt werden
Wir betrachten dazu eine Anfrage, in der wir die (MatrNr der) Studenten ermitteln
wollen, die alle Vorlesungen hören:
select h.MatrNr
from hören h
group by h.MatrNr
having count (*) = (select count (*) from Vorlesungen);
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
102
Herausforderung und Aufgabe
• Wie formuliert man die komplexere Anfrage: Wer hat alle
vierstündigen Vorlesungen gehört
• Grundidee besteht darin, vorher durch einen JOIN die
Studenten/Vorlesungs-Paare einzuschränken und danach das
Zählen durchzuführen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
103
Wer hat alle vierstündigen Vorlesungen gehört
STRATEGIE
• Count der 4-Stünder (†) versus Count der 4-Stünder pro Student ( „group by …. Having …“,
(‡))
• Brauchen für † nur Tabelle Vorlesungen
• Brauchen für ‡ die Tabellen Vorlesungen hören (tabelle Studenten ggf für die Namen der
Studenten)
REALISIERUNG
• † select count(*) from vorlesungen where SWS = 4
• ‡ select H.MatrNr, count(*)
from hören AS H inner join Vorlesungen AS V on H.VorlNr=V.VorlNR
where SWS = 4
group by H.MatrNR
having count(*) = † (select count(*) from vorlesungen where SWS = 4)
Das ist eine uncorrelated sub-Query
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
104
Übungsfrage: Länderdatenbank und Anrainer
•
•
•
WI
Welche Länder sind
Binnenstaaten?
Welche Länder sind doppelt
eingeschlossen „doppelter
Binnenstaat“ = auch seine
Nachbarn haben keine
„InternationalWaters“ als
Grenze? Z.B. Liechtenstein
Welches Land hat Nachbarn, die
alle jeweils mehr Nachbarn
haben als wir. zB Andorra,
Lesotho,..
•
Table LÄNDER (LandID, NachbarId, Länge der Grenze)
•
NachbarId = IW = „dummyland international Waters“
•
Annahme: Wir haben alle Grenzen genau 2 Mal drin
DtAu 344km und AuDt 344 km.
•
Sollte das nicht der Fall sein: baue eine „union“-view
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
105
Lösung: Binnenländer
Select L.Landid from Länder AS L
MINUS --- als Mengenoperation beinhaltet das ein SORT und DISTINCT
Select L.Landid from Länder AS L where
L.Nachbarid = ‘IW‘
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
106
Lösung: doppelte Binnenländer
Select L.Landid from Länder AS L where
not exists (select * from Länder as own where own.Landid = L.Landid and
own.nachbarid = ‚IW‘ ) ‡
AND
not exists (select * from Länder as neighb where
neighb.Landid = L.nachbarid and neighb.nachbarid = ‚IW‘ ) †
ALTERNATIVE
Create view binnenländer as select * from Länder where ‡
Select * from binnenländer where †
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
107
Lösung: Anrainer mit vielen Nachbarn
Create view ANRAINER as select landid, count(*) as anzneigh from LÄNDER group
by landid
Select landid
from anrainer AS A INNER JOIN länder AS L on A.landId = L.landid
where anzneigh > ALL (select (n.anzneigh from anrainer as n
where n.landid = L.nachbarId ) )
Alternativen mit count(*) sind möglich
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
108
Recursive Queries mit with
•
Problem:
– Stücklisten, Organigramme, Graphen u.ä. Konstrukte gestatten im Prinzip eine
undefinierte Anzahl von Rekursions- und Join-Operationen
– Das ist in SQL zu beschreiben
– … und ggf. die Tiefe erfassen und beschränken
•
Lösung (im Standard-SQL)
– Rekursion mit Verankerung und Rekursionsschritt
– Wobei das Ergebnis wie eine virtuelle Tabelle beschrieben wird
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
109
Referenzen
•
•
•
•
•
•
•
•
WI
msdn.microsoft.com/en-us/magazine/cc794278.aspx Excellent on hierachy traversal
www.mssqltips.com/sqlservertip/1520/recursive-queries-using-common-table-expressions-cte-insql-server/ Into to CTE Usage
www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/A_2186-Is-there-the-bestway-to-find-a-sub-tree-in-a-self-referencing-table.html on All Tree Handling In SQL
archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=RecursiveCTE CTE Syntax
http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/index.html Very
Advanced Recursive
http://www.ibm.com/developerworks/data/library/techarticle/0307steinbach/0307steinbach.html
the Maths Of Recursion
http://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL und Referenzen
http://www.youtube.com/watch?v=AY2ztQ-khHM Movie on RecursiveSQL
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
110
Recursive Query im Einsatz
(vgl http://www.ibm.com/developerworks/data/library/techarticle/0307steinbach/0307steinbach.html) CTE Syntax
DROP TABLE #ProjectMemberDetails
-- create temporary table called ProjectMemberDetails
CREATE TABLE #ProjectMemberDetails
(
ID int Identity(1,1) PRIMARY KEY,
TeamMemNm varchar(100),
Designation varchar(50),
ManagerID int NULL
)
-- Insert some sample records in the ProjectMemberDetails table
INSERT INTO #ProjectMemberDetails VALUES('Tim',‘CEO',NULL);
INSERT INTO #ProjectMemberDetails VALUES('Kathy','Sr. Project Manager',1);
INSERT INTO #ProjectMemberDetails VALUES('Levonca','Project Manager',2);
INSERT INTO #ProjectMemberDetails VALUES('Sid','Project Manager',2);
Etc ---INSERT INTO #ProjectMemberDetails VALUES('Steve','Developer',15);
INSERT INTO #ProjectMemberDetails VALUES('Rachael','Developer',15);
INSERT INTO #ProjectMemberDetails VALUES('Sally','Tester',16);
INSERT INTO #ProjectMemberDetails VALUES('Peter','Tester',16);
Das Beispiel ist didaktisch
unschön; wir kennen
„irgendwie“ den Wert des
auto-idFelds
-- continue on next slide ….
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
111
Recursive Query im Einsatz
SELECT * FROM #ProjectMemberDetails; -- only a check
-- And NOW : Use Recursive CTE to find out the Level of each ProjectMemberDetails in the project
WITH TEM_TA (ID, TeamMemberName, Designation, ManagerID, ProjectLevel)
AS
(
SELECT ID, TeamMemNm, Designation, ManagerID, 1 as ProjectLevel
From #ProjectMemberDetails WHERE ManagerID is NULL
UNION ALL --es muss an dieser Stelle praktisch IMMER union all heißen
SELECT e.ID, e.TeamMemNm, e.Designation, e.ManagerID, c.ProjectLevel + 1
FROM #ProjectMemberDetails e
INNER JOIN TEM_TA c
ON e.ManagerID = c.ID
)
SELECT ID, TeamMemberName, Designation, ManagerID, ProjectLevel
FROM TEM_TA Order BY ID -- we could also integrate other tables
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
Virtuelle Tabelle TEM_TA
kann NUR onTheFly
definiert werden
Verankerung
liefert T0
Rekursion
(dieser Teil verwendet
(auch) TEM_TA den Teil i
Und liefert aus Ti die Ti+1
Verwendung
dieser Teil verwendet (auch)
TEM_TA , die durch
Union All der Ti gebildet wurde
112
on recursion
http://de.urbandictionary.com/define.php?term=recursion
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
113
From http://msdn.microsoft.com/en-us/library/ms186243.aspx
for in_depth Analysis
A recursive CTE consists of three elements:
Invocation of the routine.
The first invocation of the recursive CTE consists of one or more
CTE_query_definitions joined by UNION ALL, UNION, EXCEPT, or
INTERSECT operators. Because these query definitions form the base
result set of the CTE structure, they are referred to as anchor members.
CTE_query_definitions are considered anchor members unless they
reference the CTE itself. All anchor-member query definitions must be
positioned before the first recursive member definition, and a UNION
ALL operator must be used to join the last anchor member with the
first recursive member.
Recursive invocation of the routine.
The recursive invocation includes one or more CTE_query_definitions
joined by UNION ALL operators that reference the CTE itself. These
query definitions are referred to as recursive members.
Note
An incorrectly composed recursive CTE may cause an infinite
loop. For example, if the recursive member query definition
returns the same values for both the parent and child columns,
an infinite loop is created. When testing the results of a
recursive query, you can limit the number of recursion levels
allowed for a specific statement by using the
MAXRECURSION hint and a value between 0 and 32,767 in
the OPTION clause of the INSERT, UPDATE, DELETE, or
SELECT statement. For more information, see Query Hints
(Transact-SQL) and WITH common_table_expression
(Transact-SQL).
Termination check.
The termination check is implicit; recursion stops when no rows are
returned from the previous invocation.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
114
http://www.youtube.com/watch?v=AY2ztQ-khHM Movie on RecursiveSQL
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
115
Weitere Literatur zum Nachlesen
•
SQL Einführung mit MS Access Beispielen
–
•
Einführung von Jeckle
–
–
•
http://www3.in.tum.de/research/publications/books/DBMSeinf/
In allen Details SEHR ausführlicher Kurs, aber gut
–
WI
http://electures.informatik.uni-freiburg.de/portal/download/17/8479/10_SQLAggregierung-4auf1.pdf AGG, Exists,
Nested !! §§ (etwa advanced)
Datenbanksysteme eine Einführung
–
•
http://www3.in.tum.de/research/publications/books/DBMSeinf/EIS_4_Auflage/Kapitel4.pps
Tabellenausdrücke und Aggregationen
–
•
www.dbs.ifi.lmu.de/Lehre/DBS/WS-2009/Skript/Kapitel5.pdf
Beispiele zum Nachvollziehen
–
•
www.jeckle.de/vorlesung/datenbanken/script.html
auch www.jeckle.de/files/db.pdf --> Jekcle Vorlesung§§
LMU München
–
•
http://www.i4ds.ch/fileadmin/user_upload/vorlesungen/programm_und_datenban/untericht/le06-SQL.pdf
http://www.iai.uni-bonn.de/III//lehre/vorlesungen/Informationssysteme/WS02/
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
116
MERGE-Operation
(aus www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf korrigiert)
•
Matche 2 Tabellen und mache ggf. in
jeder row unterschiedliches
• Inventory(Part, Qty)
soll angepasst werden durch
• Changes(Part, Qty, Action)
wobei Action =
–
–
–
„Mod“
„Dis“
„New“
MERGE INTO Inventory AS I
USING Changes AS C
ON I.Part = C.Part
WHEN MATCHED AND C.Action = 'Mod'
THEN UPDATE SET Qty = Qty + C.Qty
WHEN MATCHED AND C.Action = 'Dis'
THEN DELETE
WHEN NOT MATCHED AND C.Action = ‚New‘
THEN INSERT VALUES (C.Part, C.Qty)
NB: es kann auch Einträge zum Ändern
von nicht-existenten Parts geben
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
118
limited FETCH -Operation
(aus www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf)
•
•
•
hole nur die „ersten“ Einträge
nach Anzahl oder %
und wenn an der Abschneidekante
„ties“ auftreten, kann man entweder
die Anzahl streng nehmen oder oder
die Grenze des Werts
SELECT Name, Salary FROM Emp ORDER BY Salary Desc
FETCH FIRST 10 {ROWS | PERCENT}
{ONLY | WITH TIES}
fetch first 10 percent with ties  alle „oberen 10%-Top-
Verdiener“, auch wenn das wg. ties mehr als 10% der Verdiener sind
die nächsten Einträge via:
SELECT Name, Salary FROM Emp ORDER BY Salary Desc
OFFSET 10 ROWS
FETCH NEXT 10 {ROWS | PERCENT}
{ONLY | WITH TIES}
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
119
Windows and Partitions
typische Probleme
• running sums
• running avgs
• lead/lags
• alles, was über die „eigene“ Row
hinausschaut
waren im SQL schwierig zu
berechnen
•
•
neues Konzept 1: PARTITION BY rechnet alle
Aggregate völlig getrennt in jeder Partition
weiteres neues Konzept 2: Window-Funktionen
definieren für jede einzelne Row in einer
Partition ihre Umgebung (z.B. 5er MittelwertFenster 2 davor und 2 dahinter)
SELECT Acctno, Transdate, SUM (Amount) OVER
(PARTITION BY Acctno
ORDER BY TransDate
ROWS BETWEEN UNBOUNDED PRECEEDING
AND CURRENT ROW)
FROM Accounts
gleitende („yearToDate“) Umsatzsumme für jeden
einzelnen Kunden. Lies: „SUM OVER PARTITION“
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
120
Windows and Partitions (Überblick)
SELECT Acctno, Transdate,
AVG (Amount) OVER
(PARTITION BY Acctno
ORDER BY TransDate
ROWS BETWEEN 3
PRECEEDING
AND 3 FOLLOWING)
FROM Accounts
WI
•
SELECT Price AS CurPrice, LAG(Price,1) OVER
(PARTITION BY ProdID ORDER BY Tstamp) AS
PrevPrice
FROM Data
•
-------- komplexere Optionen in der angegebenen
Quelle oder (besser) bei www.simpletalk.com/sql/learn-sql-server/window-functionsin-sql-server-part-2-the-frame/
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
121
Windows and Partitons and CTEs
aus http://stackoverflow.com/questions/4740748/when-to-use-common-table-expression-cte
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
122
Temporale Aspekte im SQL:2011
Teil1: „Gültigkeitsdauern“ (siehe für das Beispiel
cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
•
•
•
BeginnZeitpunktDerGültigkeit (per
Konvention incl.)
EndeZeitpunkt (per Konvention excl.)
Zeitpunkt des Eintrags (Kann z.B. bei
Versicherungen differieren)
SQL:2011: das sind explizit definierte und
„user-accessible“ Spalten (mit Datentyp
„Date“ oder „Timestamp“)
• für Berechnungen und Selects kann
das System als eine Art „virtuelle
Spalte“ die Dauer berechnen
UPDATES können dazu führen, dass das
System automatisch 3 neue Einträge
anlegt (siehe das Beispiel)
WI
CREATE TABLE Emp (
Eno INTEGER,
Estart DATE,
Eend DATE,
EDept INTEGER,
PERIOD FOR Eperiod (Estart, Eend)
)
INSERT INTO Emp VALUES
(22217, DATE ‚2010-01-01‘,DATE `2011-11-12` ,3)
UPDATE Emp
FOR PORTION OF Eperiod
FROM DATE `2011-02-03‘ TO DATE `2011-09-10‘
SET Edept= 4 WHERE Eno = 22217
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
123
Temporale Aspekte im SQL:2011
Teil1: „Gültigkeitsdauern“ (Fortsetzung)
cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
Uniqueness / Primary Key
Funktionen zum Rechnen mit Zeiträumen
(Beispiele)
es soll zB. ein Mitarbeiter zu jedem
Zeitpunkt eindeutig in 1 Abteilung
arbeiten; also sollen 2 Einträge der Art
Eno
Estart
Eend
Edept
22217
2010-01-01
2011-09-10
3
22217
2010-02-03
2011-11-12
4
ausgeschlossen sein 
ALTER TABLE Emp
ADD PRIMARY KEY (Eno,
Eperiod WITHOUT OVERLAPS )
WI
SELECT Name, Edept FROM EMP
WHERE Eno = 22217 AND
EPeriod CONTAINS DATE ‚2011-01-02‘
ODER AUCH
…
EPeriod OVERLAPS
PERIOD(DATE `2010-01-01‘ ,
DATE `2011-01-01‘ )
ODER AUCH
…
EPeriod PRECEDES
PERIOD(DATE `2010-01-01‘ ,
DATE `2011-01-01‘ )
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
124
Temporale Aspekte im SQL:2011
Teil2: System versioned tables cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
„Journalisierung“: Das System
dokumentiert automatisch die
Änderungen. Der Benutzer kann nur die
aktuelle Version ändern, die dadurch als
unveränderbare Kopie weiterbesteht.
Primärschlüssel und Constraints werden
nur auf der aktiven Kopie geprüft
Auf den alten Stand kann lesend
zurückgegriffen werden
… weitere Möglichkeiten; siehe z.B.
https://wiki.postgresql.org/wiki/SQL2011
Temporal
WI
CREATE TABLE Emp (
Eno INTEGER,
Sys_start TIMESTAMP(12) GENERATED ALWAYS AS ROW
START,
Sys_end TIMESTAMP(12) GENERATED ALWAYS AS ROW
END,
Ename VARCHR(30),
PERIOD FOR SYSTEM_TIME (Sys_start,Sys_end)
PRIMARY KEY (Eno)
-- und sonst nichts im Schlüssel
) WITH SYSTEM VERSIONING
SELECT Eno, Ename, Sys_start, Sys_end FROM Emp
FOR SYSTEM_TIME AS OF TIMESTAMP `2011-01-02 00:01:11‘
---- und mit Intervallen:
FOR SYSTEM_TIME BETWEEN …. AND
---- default: AS OF CURRENT_TIMESTAMP
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
125
Übersicht zu temporalen Aspekten in SQL 2011
http://en.wikipedia.org/wiki/SQL:2011
•
Time Period definitions use two standard table columns as the start and end of a named time period, with closed-open semantics.
This provides compatibility with existing data models, application code, and tools
•
•
•
Definition of application time period tables (elsewhere called valid time tables), using the PERIOD FOR annotation
Update and deletion of application time rows with automatic time period splitting
Temporal primary keys incorporating application time periods with optional non-overlapping constraints via the WITHOUT
OVERLAPS clause
Temporal referential integrity constraints for application time tables
•
•
•
•
•
WI
Application time tables are queried using regular query syntax or using new temporal predicates for time periods including
CONTAINS, OVERLAPS, EQUALS, PRECEDES, SUCCEEDS, IMMEDIATELY PRECEDES, and
IMMEDIATELY SUCCEEDS (which are modified versions of Allen’s interval relations)
Definition of system-versioned tables (elsewhere called transaction time tables), using the PERIOD FOR SYSTEM_TIME
annotation and WITH SYSTEM VERSIONING modifier. System time periods are maintained automatically. Constraints for
system-versioned tables are not required to be temporal and are only enforced on current rows
Syntax for time-sliced and sequenced queries on system time tables via the AS OF SYSTEM TIME and VERSIONS
BETWEEN SYSTEM TIME ... AND ... clauses
Application time and system versioning can be used together to provide bitemporal tables
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
126
Temporale Aspekte im SQL:2011
Teil 3: weitere Elemente
cs.ulb.ac.be/public/_media/teaching/infoh415/tempfeaturessql2011.pdf
• siehe die Quelle
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
127
Kapitel 1.4
ERWEITERTE SQL
FUNKTIONALITÄTEN
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
128
Benutzerverwaltung
• Zentral für alle DBMS
• Rollenkonzept
– Rechte werden an Rollen vergeben
– Benutzer sind (n:m) Rollen zugeteilt
• Genehmigung gewisser Aktivitäten + logging
– GRANT privilege_name
• ON object_name
• TO {user_name |PUBLIC |role_name}
• [WITH GRANT OPTION];
– CREATE ROLE verwalter;
– GRANT verwalter TO joerg, sabine, harald;
– GRANT INSERT, SELECT, UPDATE(gehalt) ON mitarbeiter
• TO verwalter WITH GRANT OPTION;
• Einschränkung mittels VIEWS und Updateable Views
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
129
Updateable Views
•
•
In besonderen Fällen, in denen das DBMS eine eindeutige Zuordnung zwischen den in
der Sicht zu ändernden Daten und einer physikalischen Tabelle, zu der sie gehören,
herstellen kann, ist ein Update möglich.
Beispiel für so eine Updateable View wäre folgende triviale Sicht:
–
•
Ein Update auf SoftwareVerkaeufe2 kann hier eindeutig
–
WI
CREATE VIEW ''SoftwareVerkaeufe2'' AS 'SELECT verkaeufe.kaeufer FROM verkaeufe
SELECT verkaeufe.kaeufer FROM verkaeufe zugeordnet werden.
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
130
Updateable Views
• Im Beispiel unten ist eine eindeutige Zuordnung nicht möglich, da produkt_id in
beiden Quellrelationen enthalten ist, ...
CREATE VIEW SoftwareVerkaeufe AS
SELECT v.kaeufer, v.verkaeufer,p.product_id
FROM produkte p, verkaeufe v
WHERE p.produkt_id = v.produkt_id -- ← Achtung!
AND p.produkt = "Software"
• ... und z. B. bei einer Löschung wie in ...
• DELETE FROM SoftwareVerkaeufe WHERE produkt_id = 123456
• ... nicht entscheidbar ist, ob Datensätze aus Produkte oder Verkaeufe gelöscht
werden sollen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
131
Updateable Views
In welchen Situationen sind Updateable Views verboten?
Die geschilderte Anomalie entsteht generell in einer Situation, wo eine Durchführung der Änderung
nicht den Erwartungen des Benutzers entspricht oder nicht entscheidbar ist, welche Änderungen genau
durchzuführen sind. Man kann sie folgendermaßen einteilen:
• In einer Selektionssicht können Datensätze aus dem sichtbaren Bereich verschwinden, wenn ein in
der Sicht vorhandener Datensatz so geändert wird, dass er aus der Sicht herausfällt.
• In einer Projektionssicht kann eine Einfügeoperation dann problematisch werden, wenn in der
Originalrelation Felder vorhanden sind, die belegt sein müssen (NOT NULL), aber nicht in der Sicht
vorkommen, oder wenn die Sicht durch die Angabe von DISTINCT gleiche Ergebnistupel zu einem
zusammenfasst.
• In einer Verbundsicht ist nicht immer entscheidbar, auf welcher Originalrelation die Operation
auszuführen ist.
• In einer Aggregationssicht kann nicht entschieden werden, wie die Operation umzusetzen ist. Zum
Beispiel ist nicht klar, wie eine Halbierung aller Verkaufszahlen auf die Originalrelation umzusetzen
ist: Entweder kann die Hälfte der Verkäufe gelöscht oder die einzelnen Verkäufe halbiert werden.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
132
Updateable Views
In welchen Situationen sind Updateable Views verboten?
•
•
Aus der mySQL Referenz
A view is not updatable if any of the following conditions are true:
–
–
–
–
–
the keyword DISTINCT is used in the view definition
the select list contains components other than column specifications, or contains more than one specification of the same
column
the FROM clause specifies more than one table reference or refers to a non-updatable view
the GROUP BY clause is used in the view definition
the HAVING clause is used in the view definition
•
Ähnlich DB2
http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_sql_cre
ateview.htm
•
Im Prinzip sollten Views mit 2+ Tabellen den gleichen Regeln wie Single Table Views unterliegen, sofern alle
Primär- und Fremdschlüssel im View vorkommen
Aber: Die Entscheidung, ob ein View updateable ist, wird letztlich vom DBMS getroffen
Zusätzlich muss der Benutzer / die Rolle auch noch die entsprechenden Rechte auf den View besitzen
•
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
133
Metadaten und Data Dictionary
im Relationalen Modell
•
•
•
•
ERD zum Aufbau „jedes“ ERD → Meta-ERD
Meta-Tabellen in einem Datenbanksystem
Ein ERD lässt sich aus den Systemtabellen (ggf. mit graphischer Position im
gezeichneten ERD) jederzeit rekonstruieren
Ausschnitte aus einem ERD lassen sich als SQL-Abfragen gegen die Meta-Tabellen
formulieren
– Beispiel: welche Tabellen sind in einer Relation mit „HAUPTTABELLE“ verbunden?
•
Beobachtung: die Metatabellenstruktur ist für alle ERDs (und damit alle RDBMS)
gleich
– Die Namen und die Struktur der Metatabellen sind zwischen Herstellern unterschiedlich
•
•
•
WI
Schreibende Zugriffe sind in aller Regel dem RDBMS vorbehalten
Oft spezielle Befehle zum Lesen der Tabellen (statt select … from sysTables ..)
Auch andere Entwurfsmethoden (z.B. klassische Flussdiagramme) lassen sich via
Meta-ERD syntaktisch beschreiben
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
134
Metadaten und Data Dictionary im Relationalen Modell
Quelle: http://www.infforum.de/themen/anwendungsentwicklung/thema_SE-methode_esa.htm
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
135
Metadaten und Data Dictionary im Relationalen
Modell
Extraktion der Metadaten aus SQL Lite
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
136
Systemtabellen beschreiben Metadaten
aus der DB2-beschreibung
publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref2.doc/rbafzmst970.htm
SYSCOLUMNS
The SYSCOLUMNS view contains one row for every column of each table
and view in the SQL schema (including the columns of the SQL catalog). The
following table describes the columns in the SYSCOLUMNS view:
Table 115. SYSCOLUMNS viewColumn name System Column Name
Data Type
Description
COLUMN_NAME
NAME
VARCHAR(128)
Name of the column. This will be the SQL column name if
one exists; otherwise, it will be the system column name.
TABLE_NAME
TBNAME
VARCHAR(128)
Name of the table or view that contains the column. This will
be the SQL table or view name if one exists; otherwise, it will be the system
table or view name.
TABLE_OWNER
TBCREATOR VARCHAR(128)
The owner of the table or view.
….. etc …….
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
137
Systemtabellen beschreiben Metadaten (ibd)
•
SYSTABLES
•
The SYSTABLES view contains one row for every table, view or alias in the SQL schema, including the tables and views of the SQL catalog. The following table
describes the columns in the SYSTABLES view:
•
SYSTABLES viewColumn
name
System Column Name
Data Type
Description
-----------------------------------------------------------------------------------------------------------------------------------------------------------TABLE_NAME
NAME
VARCHAR(128) Name of the table, view or alias. This is the SQL table, view or alias name if it exists; otherwise, it is the system
table, view or alias name.
TABLE_OWNER CREATOR
VARCHAR(128) Owner of the table, view or alias
TABLE_TYPE
TYPE
CHAR(1)
If the row describes a table, view, or alias:
A Alias ; L Logical file ; M Materialized query table ; P Physical file ; T Table; V View
COLUMN_COUNT
COLCOUNT
INTEGER
Number of columns in the table or view. Zero for an alias.
ROW_LENGTH RECLENGTH 114 INTEGER
Maximum length of any record in the table. Zero for an alias
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
138
Parametrisierte Queries
Motivation
• ? Welche Bücher haben die „Opuszko“s ausgeliehen?
SELECT BuchTitel, PLZ,… FROM Bücher INNER JOIN Personen ON
Bücher.AusleiherID = Personen.PersID WHERE Personen.Nachname =„Opuszko“
• Oder parametrisiert
SELECT BuchTitel, PLZ, … FROM Bücher INNER JOIN Personen ON
Bücher.AusleiherID = Personen.PersID WHERE Personen.Nachname =
[Nachname des Ausleihers:]
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
139
Parametrisierte Queries
•
•
•
•
Abfrageparameter werden erst zur Laufzeit eingegeben
Struktur der Abfrage bleibt
z.B. Between [Start date:] And [End date:]
Vorteile:
– Vorformulierung durch den Abfragedesigner
– “Voroptimierung” der Abfrage durch das RDBMS
– Sicherheit vor Manipulationen (insbesondere sogenannte Query
Injection)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
140
Stored Procedures
•
•
•
•
•
•
WI
Programme, die die Datenbank abfragen und ihr Ergebnis i.d.R. als Tabelle abliefern (und
auch SQL-Teile enthalten)
Gespeichert im DBMS und in der Quelle nur bei entsprechender Berechtigung
zugänglich
„precompiled“ im Datenbankserver
Eigene Programmiersprache (namens „T-SQL“ oder ähnlich)
Oft unmittelbar aufgerufen vom Benutzer (bei entsprechender Berechtigung)
Von sehr vielen RDBMS unterstützt
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
141
Stored Procedures
Ein Beispiel
CREATE PROCEDURE sp_GetInventory
@location varchar(10)
AS
SELECT Product, Quantity
FROM Inventory
WHERE Warehouse = @location
•
Our Florida warehouse manager can then access inventory levels by issuing the command
–
•
The New York warehouse manager can use the same stored procedure to access that area's inventory.
–
WI
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
142
Stored Procedures
Weitere Beispiele
CREATE PROCEDURE uspGetAddress @City
nvarchar(30)
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = @City
CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City LIKE @City + '%'
EXEC uspGetAddress @City = 'New York'
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
143
Stored Procedures
Ein Beispiel mit 2 Parametern und Default-Werten
CREATE PROCEDURE uspGetAddress @City
nvarchar(30) = NULL, @AddressLine1
nvarchar(60) = NULL
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = ISNULL(@City,City)
AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1
,AddressLine1) + '%’
WI
EXEC uspGetAddress @City = 'Calgary', @AddressLine1 = 'A'
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
144
Stored Procedures
Vorteile
•
•
Effizienz durch Prä-Compilation
Information Hiding: die Namen der Tabellen, joins etc interessieren den Anwender nicht
– Sicherheit
– einfachere Wartung
•
•
•
•
WI
Stored Procedure sitzt in der Datenbank und ist benutzer-unabhängig zu warten
Stored Procedure hat u.U. gegenüber dem Aufrufer erweiterte Rechte
Vorteile der SP: in jüngster Zeit nicht unumstritten
viele ähnliche Alternativen verfügbar (z.B. ein C#-Programm anbinden)
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
145
Integritätsbedingungen, Regeln, Trigger
Idee: Lege in der Datenbank Eigenschaften fest, die legale Einträge erfüllen müssen 

Constraint
– AnzahlBücher integer <50 OR NULL
– PersID
Start mit 1 oder 2, dann eine gültige 2 stellige Ländernummer, dann 4 beliebige Ziffern
– PersID in BÜCHER
gültige PersID in PERSONEN or NULL
– „referentielle Integrität“

Aktionen (meist stored procedures), die von Ereignissen ausgelöst werden: Trigger
– Bei update PERSON.gehalt durch Benutzerrolle „Sachbearbeiter“ schreibe einen Eintrag in eine spezielle log-Tabelle
…
• Neben der Gehaltsänderung
• … oder an Stelle der Gehaltsänderung (der Chef stößt die eigentliche Änderung dann später an)
– Bei ungültigem PersID -Eintrag: Warne Benutzer und biete Hilfe an
– On delete cascade | on delete abort | on delete set Null | on delete exec procedureName ( typische Aktionen bei
Verletzung der referentiellen Integrität )
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
146
Integritätsbedingungen, Regeln, Trigger
•
Inhärente Integritätsbedingungen des Relationenmodells (modellinhärent)
– Typenintegrität (Wertebereiche von Attributen)
– Schlüsselintegrität
– Referentielle Integrität
•
Erweiterungen durch SQL-92
–
–
–
–
•
not null
check
primary key
foreign key
Komplexe Integritätsregeln in Relationalen Datenbanken
– kaum genutzt
– Nutzung von Triggern (da einfacher und variabler)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
147
Integritätsbedingungen, Regeln, Trigger
•
Beispiel Referentielle Integrität
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER Not Null,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
CREATE TABLE song(
songid INTEGER,
songartist TEXT,
songalbum TEXT,
songname TEXT Not Null,
FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)
);
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
148
Probleme der referentiellen Integrität
•
•
•
Befüllungsprobleme einer Relation
•
MaritalTable (PersID, Gender, marriedTo
references MartialTable(persID) )
Maggie heiratet Hans  OK ( HINWEIS: die referentielle Integrität
sichert nicht den Fall, dass ein Systemabsturz auftritt, nachdem die
Heirat bei Hans schon eingetragen ist und bei Maggie noch nicht)
•
Aber das Eintragen der schon immer verheirateten Grete macht
Probleme, da ihr Tupel bis zum Eintrag von Egon die Referentielle
Integrität verletzt!
Einzeleintrag eines Paares muss der 1.
Partner mit NULL eingetragen werden
Beim anfänglichen Befüllen der Tabelle („bulk
load“) zunächst alle Ehepartner auf NULL
–
–
–
•
Unterschiedliche Mechanismen nach DBMS
–
–
WI
??? Dubiose Lösung
Bessere Lösung: Ausschalten der
referentiellen Integrität „für gewisse Zeit“
… was mittlerweile auch im SQL:2011
Standard vorgsehen ist
SQLite ‹marriedTo references
MaritalTable(persID) DEFERRED
INITIALLY DEFERRED›
SQLServer, DB2 ,,, *‘ BCP- Befehl zum
„bulk copy“
persID
First name
Gender
marriedTo
10
Guido
M
NULL
11
Hans
M
NULL
12
Grete
F
43
13
Maggie
F
NULL
14
Michael
M
NULL
15
George
M
NULL
43
Egon
M
12
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
149
Trigger
Ein Beispiel
CREATE TRIGGER salary_trigger
BEFORE UPDATE ON employee_table
REFERENCING NEW ROW AS n, OLD ROW AS o
FOR EACH ROW
IF n.salary <> o.salary THEN
do something
END IF;
;
•
WI
Quelle: http://en.wikipedia.org/wiki/Database_trigger
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
150
Trigger
Weitere Beispiele
•
Assuming that customer records are stored in the "customers" table, and that order records
are stored in the "orders" table, the following trigger ensures that all associated orders are
redirected when a customer changes his or her address:
CREATE TRIGGER update_customer_address UPDATE OF address ON customers
BEGIN
UPDATE orders SET address = new.address WHERE customer_name = old.name;
END;
•
With this trigger installed, executing the statement:
UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones';
•
causes the following to be automatically executed:
UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';
Beispiele entnommen aus: http://www.sqlite.org/lang_createtrigger.html
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
151
Trigger
Ein Beispiel zur Neuverheiratung
CREATE TRIGGER married_trigger
BEFORE UPDATE ON marital_table
REFERENCING NEW ROW AS n, OLD ROW AS o
FOR EACH ROW
IF n.marriedTo <> o.marriedTo THEN
if (n.marriedTo is not null) and ((select m.gender from marriedTo as m where m.persId = n.marriedTo) =
n.gender) THEN
persID
First name Gender marriedTo
ABORT;
END IF;
10
Guido
M
NULL
END IF;
11
Hans
M
13
;
WI
12
Grete
F
43
13
Maggie
F
11
14
Michael
M
NULL
…
…
…
…
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
152
Trigger
SQLite Syntax
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
153
Kapitel 1.5
INTERNA DES BETRIEBS VON
DATENBANKEN
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
154
Interna des Betriebs
Gliederung
• Indizes
• Query Planner
• Transaktionen
– ACID  commit, rollback und die Unterstützung durch logs
– Isolation als Problem des multitasking und ihre Sicherstellung durch
Sperrprotokolle oder andere Mechanismen
–  2PL
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
155
Indizes
•
Fortsetzung des „Ausleihe“-Beispiels ….
•
Oder parametrisiert
SELECT BuchTitel, PLZ, … FROM Bücher INNER JOIN Personen ON Bücher.AusleiherID
= Personen.PersID WHERE Personen.Nachname =[Nachname des Ausleihers:]
•
Sehr häufig wird auf die Bücher Tabelle mit Fremd-Schlüssel AusleiherID zugegriffen
…
Und sehr häufig auf die Personen Tabelle via Nachname, was gar kein Schlüssel ist
•
•
WI
!! Wirklich schnelle Zugriffe in eine Tabelle erfolgen nur sequentiell, oder wenn man
– salopp formuliert – die Zeilennummer kennt !!
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
156
Indizes
• Organisation auf der Festplatte
• Visual Basic Syntaxbeispiel
– Get #FileNum,
Position, Employee
– Put #FileNum,
Position, Employee
– LastRecord =
LastRecord + 1 ; Put
#FileNum, LastRecord,
Employee
–
–
WI
#FileNum  Kennzeichen der Datei
Position  Nr des Eintrags
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
157
Indizes
•
Lösung:
Neben der Tabelle eine weitere Struktur pflegen, in der die Zuordnung „Suchbegriff“ →
Satznummer rasch nachgeschlagen werden kann: „Index“
•
Beispiel: Grundmuster der „Inverted file“
Index on
Personen.Nachname
Index on
Bücher.AusleiherID
Suchbegriff
Liste des Auftretens
(Satznummern!
Nicht Primärschlüssel)
Opusko
981
Ruhland
2,99
Müller
Suchbegriff
12,13,14,45,98
Liste des Auftretens
(Satznummern)
789
123,453,523
1901
901
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
persID
Opuszko
4
45
158
Indizes
• Beobachtungen
– Der Index ist erheblich kleiner als die Datenbanktabelle und daher kann oft im
Hauptspeicher gehalten werden
– Tradeoff
• Es ist bei Vorhandensein eines Index zunächst auf den Index und dann auf Teile der Tabelle
zuzugreifen
• Der Index muss gepflegt werden (löschen/einfügen von Einträgen)
– Nicht immer ist ein bestimmter Index vorteilhaft
•
•
•
•
Wieviele Bücher sind derzeit insgesamt ausgeliehen?
Wieviel Bücher von Männern? Von 4 Personen-Familien?
Wieviele Bücher von Personen, deren Namen mit „O“ beginnt?
Wieviele Bücher von Personen, deren Namen mit „o“ endet?
– Die Ergebnisse sind mit ohne Index identisch (Index ist also reine Performanz-Überlegung)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
159
Indizes
• Konsequenzen
– Die Anlage eines Index auf Spalten/Spaltengruppen muss vom Benutzer
angefordert werden (Ausnahme: Primärschlüssel und UNIQUE constraint)
– Ob ein Index bei der Abfrage verwendet wird, kann und wird meist vom DBMS
allein entschieden (Der Benutzer kann sog. Query Hints setzen)
– Sobald ein Index angelegt ist, muss er bei insert/delete/updates neben den
Tabellen gepflegt werden. Das DBMS macht das automatisch.
– Die optimale Indexstruktur ist ein bedeutendes Problem der Praktischen
Informatik und ist von Eigenschaften der indexierten Spalten abhängig (Beispiel:
„Index auf Primärschlüssel“  maximal 1 Eintrag; „Index auf Geschlecht“ 
~50% aller Zeilen). Die leistungsfähigsten DBMS stellen unterschiedliche
Indexarten bereit
– en.wikipedia.org/wiki/Index_(database) ist ein guter Einstieg
– Falls ein Indexwert nur wenige Records tangiert, ist der B-Tree ein guter und
gängiger Startpunkt
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
160
Indizes
Syntax
• CREATE INDEX index_name [index_type] ON tbl_name (index_col_name,...)
– index_col_name: col_name [(length)] [ASC | DESC]
– index_type: USING {BTREE | HASH}
• SELECT * FROM table1 IGNORE INDEX (col3_index) WHERE col1=1 AND
col2=2 AND col3=3;
• SELECT * FROM table1 USE INDEX (col3_index) WHERE col1=1 AND
col2=2 AND col3=3;
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
161
Indizes
•
Von http://www.sqlite.org/queryplanner.html:
“Most of the time, the query planner in SQLite does a good job on its own and without
outside help. However, the query planner needs indices to work with and it usually falls to
the programmer to add indices to the schema that are sufficient for the query planner to
accomplish its task.”
•
Es gibt Systeme, bei denen der Query-Planner selbst noch einen Index “on the fly”
anlegen darf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
162
Indizes: Btree ( hier aus http://20bits.com/articles/interview-questions-database-indexes/ )
http://slady.net/java/bt/view.php animated Btree
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
163
Dt. und US Wikipedia SEHR gut
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
164
Lehrvideos
• https://www.youtube.com/watch?v=DoUWf3ASwpQ
• https://infosys.uni-saarland.de/datenbankenlernen/ Ein
exzellentes Kompendium aller Aspekte der Datenbanktechnik auf
Folien
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
165
Theo Härder (* 28. August 1945 in Bad Neustadt an der Saale) ist Professor der
Informatik an der Universität Kaiserslautern.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
166
Transaktionen / ACID / Multitasking
•
•
•
Viele Benutzer / Prozesse greifen auf eine DB zu. Nicht jede einzelne Operation ist geeignet, die
Datenbank in einem „für Dritte“ benutzbaren Zustand zu hinterlassen (Beispiel: Buchung von
mehreren Aktiv- und Passiv-Konten)
Konzept der Datenbanktransaktion = Bündelung von logisch zusammengehörigen Operationen
Atomicity = „ganz oder gar nicht“ Prinzip. Nachdem aber die Einzeloperationen einer Transaktion eben
doch sequentiell ausgeführt werden, muss es geben:
–
Rollback transaction: alle bisherigen Änderungen der Transaktion werden rückgängig gemacht. Der Zustand der
Datenbank ist, als wäre eine Transaktion nie gestartet
•
–
•
Ein Rollback kann in Nutzer-Anforderung oder DBMS-Fehler, Rechten des Nutzes und anderem begründet sein
Commit transaction: die Transaktion hat auch die Prüfung auf Consistency überstanden. Ihr Dauernder Effekt
auf die Datenbank ist nach erfolgreichem commit garantiert †
Consistency. Eine Transaction, die committen will, wird auf alle Konsistenzbedingungen, die in der
Datenbank abgelegt sind, geprüft. Weitere Konsistenzbedingungen müssen ggf. durch user geprüft
sein.
–
Folgerung: eine Commit führt eine Datenbank aus einem konsistenten in einen anderen konsistenten Zustand
† heißt:
auf Datenbank, Sicherungskopie und logFile, so dass man auf Permanenz
hoffen darf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
167
Transaktionen / ACID / Multitasking
•
•
Isolation: Transaktionen wissen nichts von anderen Transaktionen; sie lassen sich serialisieren
– Es ist für das Ergebnis egal, ob parallel zu TA auch TB und TC laufen
– Wenn TA,TB und TC zeitweise parallel laufen, so ist das Ergebnis doch so als ob sie in einer (u.U.
vorher nicht festgelegten) Reihenfolge völlig separat hintereinander gelaufen wären (z.B. TA  TC 
TB)
Durability: nach einem Commit von TA muss die Datenbank auch „nach einem crash“ die Veränderungen,
die TA gebracht hat, wieder enthalten (ggf. nach einer „Wiederanlaufphase“). Ein erfolgreich ausgeführter
Commit Befehl beinhaltet diese Verpflichtung.
Hinweis:
• „Rollback“ alias „Abort“ ist eine vergleichsweise komplizierte Operation, da z.B. abgebrochen wird,
nachdem schon 2 Teil-Ergebnisse geschrieben sind und diese wieder auf den alten Wert gesetzt
werden müssen (dazu hat die Datenbank „logs“ mit „vorher und nachher“-Zustand der Zeilen
• In modernen DBMS („Verteilte DBMS“, „Web DBMS“, ….) wird ACID oft für gewisse Zeitspannen
gelockert, in seiner Grundorientierung fast nie aufgegeben
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
168
Transaktionen / ACID / Multitasking
•
No changes can be made to the database except within a transaction. Any command that changes
the database (basically, any SQL command other than SELECT) will automatically start a transaction
if one is not already in effect. Automatically started transactions are committed when the last query
finishes.
(Quelle: SQLite)
•
Kernbefehle
–
–
–
–
•
WI
Begin transaction
Commit
Rollback
Autocommit wie oben geschildert
Verfeinerte Möglichkeiten für fortgeschrittene Anwendungen
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
169
Transaktionen / ACID / Multitasking
Literatur
• Informatik Universität Tübingen
– http://www-db.informatik.unituebingen.de/files/teaching/ws0910/dbs2/10_transactions_2_3.pdf
– Sehr gut in Deutsch
• Gute DBMS Kurse
– http:/inst.eecs.berkeley.edu/~cs186/sp03/lecs/ ab 22 ff auch was zu
Sperrprotokollen
– http://www.voneicken.com/courses/ucsb-cs290ffa06/images/f/ff/Lecture11.pdf
– kaul.inf.h-brs.de/home/script/db/folien_2004/12_Transactions.pdf und
auch sonst guter, suggestiver Deutscher Kurs
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
170
Rollback und ACID
zugleich: Wiederanlauf nach Störung
Transaction log auf „ausfallischerem Speicher“
hält für jede Transaktion ein „before“ und „after“
fest, sowie eine „commit“ bzw „abort“. Auch nach
einem crash kann die Datenbank so durch
„Nachfahren“ des log (wg. des „before-Image“
ggf. sogar „rückwärts“vom crash, indem
uncommited Transactions zurückgefahren werden
http://dbs.uni-leipzig.de/file/LoggingRecovery.pdf
sehr kurze logfile Intro
http://courses.cs.washington.edu/courses/cse544/00
sp/lectures/ppt/l11.ppt Intermediate Level
http://pages.cs.wisc.edu/~dbbook/openAccess/third
Edition/slides/slides3ed-english/Ch18_Recovery95.pdf
Ramakrishnan / Gehrke Slides
http://www.csee.umbc.edu/portal/help/oracle8/serv
er.815/a67781/c28recov.htm advanced level
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
171
http://www.sqlbackuprestore.com/trxlog07_a.png
Logfile Structue (simplified)
•
WI
see also
http://pages.cs.wisc.edu/~dbbook/openAccess/thi
rdEdition/slides/slides3edenglish/Ch18_Recovery-95.pdf
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
172
Serialisierbarkeit
• Probleme des Multitasking: Änderungen durch schreibende Transaktionen
können mit anderen Transaktionen interferieren und Ergebnisse generieren, die
auf der Basis eines konsistenten Zustands der Datenbank nicht möglich wären
• Lost Updates: Zwei Transaktionen modifizieren parallel denselben Datensatz
und nach Ablauf dieser beiden Transaktionen wird nur die Änderung von einer
von ihnen übernommen. T1: aa+2; bb*a T2 a3*a
• Dirty Read: Daten einer noch nicht abgeschlossenen, anderen Transaktion
werden gelesen. T2 hat gerechnet T3 berechnet eine sum(a) T2 aborts
• Non-Repeatable Read: Wiederholte Lesevorgänge liefern unterschiedliche
Ergebnisse. T2 hat gerechnet T3 berechnet eine sum(a) T2 aborts T3 sum(a)
• Phantom Read: Suchkriterien treffen während einer Transaktion auf
unterschiedliche Datensätze zu, weil eine (während des Ablaufs dieser
Transaktion laufende) andere Transaktion Datensätze hinzugefügt, entfernt oder
verändert hat.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
173
Serialisierbarkeit
•
•
•
•
Das gängigste Verfahren zur Sicherstellung (starker Formen der) Serialisierbarkeit:
Sperren („locks“) auf Objekte, die eine Transaktion zu lesen (RL = read lock) oder zu
schreiben wünscht (WL)
WL schließt RL mit ein, WL ist exclusive, RL ein shared lock
Eine Transaktion, die ein Lock nicht erhält, muss warten, bis es verfügbar ist. Erst dann
rechnet sie weiter.
Locks allein reichen zur Serialisierbarkeit nicht aus, Zeitplan bei Erwerb/ Rückgabe
entscheidend
– Alle Locks zu Anfang erwerben und ganz zum Ende zurückgeben  OK, aber
überhaupt keine Parallelität potentiell kritischer Transacts
– 2 Phase lock: eine Transaktion kann in Phase 1 immer nur neue Locks erwerben (oder
RLWL upgraden), aber keine zurückgeben. In Phase 2 werden nur locks abgebaut
– … und in der „strict 2PL“ (manchmal „rigorous 2PL genannt“ erfolgt der Abbau sogar
zum Ende „schlagartig“  sehr häufig gewählte Variante
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
174
Sperrverfahren
•
Strong strict two-phase locking
•
or Rigorousness, or Rigorous scheduling, or Rigorous two-phase
locking
•
To comply with strong strict two-phase locking (SS2PL) the locking
protocol releases both write (exclusive) and read (shared) locks
applied by a transaction only after the transaction has ended, i.e.,
only after both completing executing (being ready) and becoming
either committed or aborted. This protocol also complies with the
S2PL rules. A transaction obeying SS2PL can be viewed as having
phase-1 that lasts the transaction's entire execution duration, and
no phase-2 (or a degenerate phase-2). Thus, only one phase is
actually left, and "two-phase" in the name seems to be still utilized
due to the historical development of the concept from 2PL, and 2PL
being a super-class. The SS2PL property of a schedule is also called
Rigorousness. It is also the name of the class of schedules having
this property, and an SS2PL schedule is also called a "rigorous
schedule". The term "Rigorousness" is free of the unnecessary
legacy of "two-phase," as well as being independent of any (locking)
mechanism (in principle other blocking mechanisms can be
utilized). The property's respective locking mechanism is sometimes
referred to as Rigorous 2PL.
Quelle: http://de.wikipedia.org/wiki/Sperrverfahren#Zwei-Phasen-Sperrprotokoll
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
175
Sperrverfahren:Begiffskonfusion
•
WI
Especially before 1990, but also after, in many articles and books, e.g., (Bernstein et al. 1987, p. 59),
the term "Strict 2PL" (S2PL) has been frequently defined by the locking protocol "Release all locks
only after transaction end," which is the protocol of SS2PL. Thus, "Strict 2PL" could not be there the
name of the intersection of Strictness and 2PL, which is larger than the class generated by the SS2PL
protocol. This has caused confusion. With an explicit definition of S2PL as the intersection of
Strictness and 2PL, a new name for SS2PL, and an explicit distinction between the classes S2PL and
SS2PL, the articles (Breitbart et al. 1991) and (Raz 1992) have intended to clear the confusion: The
first using the name "Rigorousness," and the second "SS2PL."
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
176
Sperrverfahren
Detailfragen
• Welches Objekt wird gesperrt
– Tabelle ?
– Zeile ?
– Zelle ?
• Sinnvoll ist es, dass zum Ende eher eine kleine Granularität gesperrt wird, aber
wir für die größeren Ebenen „vor-Sperrungen“ (Intention locks) einfügen
• Weitere Lock-Formen und -Kompatibilitäten
– Z.B. „Write Intention lock auf Tabelle2“ Erst mit einem derartigen WIL(Tab2)
Writelock auf Zeile3.Tabelle2“
– Siehe z.B. http://msdn.microsoft.com/en-us/library/ms175519.aspx
– Ähnlich wie ein write lock eine andere Transaktion von einem read lock
ausschließt, gibt es es bei den Intention locks auch eine Hierarchie des
Zulässigen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
177
Sperrverfahren
Detailfragen
• Die Matrix in Tabelle 1
beschreibt, wann eine
Transaktion Tj eine Sperre
• erhält (Eintrag in der Zelle 1)
oder nicht erhält (Eintrag in
der Zelle 0),
• wenn eine andere
Transaktion Ti bereits eine
bestimmte Sperre hält
Quelle: http://homepages.fh-giessen.de/~hg11260/mat/trans-l.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
178
Zeitstempel (Timestamping)
• „Optimistische“ Alternativen zum Locking
– Annahme: es geht in den allermeisten Fällen gut
– Wir müssen die Konfliktfälle erkennen und dann eine der
Transaktionen zurücksetzen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
179
Zeitstempel (Timestamping)
•
Jedes Objekt (z.B. Tabellenzeile) trägt zwei time stamps
– Zeitpunkt letztes Write Tw(Obji) (genauer: timestamp τ der letzten ändernden Transaction)
– Zeitpunkt letztes Read Tr(Obji) (genauer: timestamp τ der letzten schreibenden Transaction)
•
Jedes Transaktion trägt als stamp den Zeitpunkt ihrer Erstellung τ
– Idee ist: die Transaktion verhält sich so, als wäre sie komplett zu diesem
Zeitpunkt abgelaufen. Wenn sie sich z.T. auf Daten stützt, die nach τ verändert
wurden, muss sie abbrechen
– Ebenso in gewissen Fällen des Schreibkonflikts
•
Jede Transaktion poolt alle ihre möglichen Änderungen und führt diese erst am
Ende aus
•
Typische Anwendung z.B. WEB-datenbanken, damit uns nicht ein „abgestürzter“
user den Rest ausbremst
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
180
Zeitstempel (Timestamping) - Regeln
•
•
Wenn ein Objekt i gelesen wird, das zuletzt vor τ geändert wurde  OK; anpasse dessen
letztes Read Tr
Wenn ein Objekt i gelesen wird, das zuletzt nach τ geändert wurde  Breche ab und
Starte die Transaktion neu
– Nachdem wir alle Ergebnisse erst ganz zum Ende schreiben  einfach abbrechen
•
•
•
WI
Wenn ein Objekt geschrieben werden soll, dessen letztes Tr nach τ liegt  eine andere
Transaktion hat sich schon auf diesen (bisherigen Wert verlassen)  Abbrechen
Wenn ein Objekt geschrieben werden soll, dessen letztes Tw nach τ liegt  eine
Transaktion, die jünger ist als unsere hat einen ganz neuen Wert reingeschrieben. Unser
Wert wäre überschrieben  ignoriere unseren Schreibbefehl
Else: schreiben und Tw(Obji) mit τ aufdatieren
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
181
Deadlocks bei Sperrprotokollen
Beispiel
t1
tc
T1 hat RL(A) und
will WL(B)
T2
hat WL(B) und
will WL(A)
In einem S2PL muss bei tc die T1 oder T2 abgebrochen werden („rollback“ and redo), sonst droht
unendlich lange Verklemmung
t
Handlungsbedarf
• Wer entscheidet, ob T1 oder T2 abgebrochen wird
–
•
WI
…nach welchen Kriterien
Oder vermeidet man den deadlock durch Rücksetzen von T1 oder T2 ehe er auftritt (deadlock droht
erst nach tc also könnte man vor tc eine der Transaktionen zurücksetzen), wofür t1 der natürlich
Zeitpunkt ist
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
182
Deadlocks
Beispiel
T1 hat RL(A) und
T2
hat WL(B) und
t1
tc
t
will WL(B)
will WL(A)
Typische Strategie
• Jede Transaction hat ihren Startzeitpunkt
• Will eine Transact eine Ressource, die von einer anderen gehalten wird (hier:t1), läuft die ältere
weiter; die jüngere transact bricht ab und wird mit Originalstartzeitpunkt neu gestartet („wait or
die“). Es wird oft nicht geprüft, ob es tatsächlich zu einem Deadlock gekommen wäre
• Alternativ könnte z.B. die rechenintensivere der beiden Transacts der Gewinner sein
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
183
locking vs. timestamping
Locks
•
•
•
•
•
WI
Timestamps
jede xact wird u.U. oft warten,
bis sie ihre locks bekommt
beim R2PL bricht keine xact
wegen einer anderen ab
der Zeitpunkt der xact ist der
Zeitpunkt ihres commit
sie friert sich progressiv die für
sie relevanten Datenbank ein
•
Risiko: „deadlock“
•
•
•
•
keine xact wird je warten, aber u.U. oft
abbrechen
xacts brechen ab, wenn sie einen Konflikt
feststellen
der Zeitpunkt eine xact ist ihre „Geburt“
sie hofft, dass sich die DB in ihrer
Lebensdauer nicht verändert hat
Risiko: oftmaliger „abort“
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
184
Transaktionen vs. Locks
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
185
Kapitel 1.6
ANBINDUNG VON DATENBANKEN IN
PROGRAMMEN
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
186
Problemübersicht
• Ein Programm muss Anfragen an die DB absetzen können und Ergebnisse in
einer Form erhalten, die innerhalb der Programmiersprache weiterverwendbar
sind
• Der genaue Typ der im Client/Servermodell kontaktierten Datenbank sollte dem
Programm weitestgehend
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
187
Lost in Translation
• SQL is a powerful language but specific to DBMS
• Result of a query can be a set of rows that come crashing down like a big wave
• Application languages very flexible but no data structure to handle rows and
rows of query results
• Mismatch resolved through additional SQL constructs
• Obtain a handle on a collection and iterate over it one record at a time
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
188
Operationalisierung der Grundideen
Verbindung zum DBMS
 „Embedded SQL“: spezielle Befehle innerhalb eines Programms werden
von einem „Precompiler“ übersetzt  nur noch selten

 „API“: es gibt direkte Aufrufe eines Application Programmers Interface, das
vom Hersteller der Datenbank mitgeliefert wird.

– y = Math.Exp (x) -- das von einem Programmierer zur Verfügung gestellte EXP Programm wird aufgerufen. Der Wert in
x wird verwendet, das Ergebnis in y gespeichert
-------------– $dbhandle = sqlite_open('sqlitedb');
– $query = sqlite_query($dbhandle, 'SELECT name, em FROM users LIMIT 25'); --führe den SelectBefehl aus, richte ihn gegen die Datenbank, die mit $dbhandle bezeichnet ist, und speichere das Ergebnis in $query (eine
Struktur, deren Spaltentyp und Zeilenanzahl unbekannt sind !!!
$result = sqlite_fetch_all($query, SQLITE_ASSOC); --extrahiere die 1. Zeile aus $query
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
189
Operationalisierung der Grundideen
Problem der Weiterverarbeitung der Ergebnisse:
• ein SELECT liefert eine Tabelle unbekannter Länge, mit unbekannten
Spaltennamen und Spaltentypen ab unterschiedliche Lösungen
• (a) Einfachlösung
– Cursor Prinzip: ein SELECT kreiert eine Ergebnistabelle mit einem
Cursor (= Zähler auf die Zeilennummer). Ein Cursor auf dieses Ergebnis
liefert die Resultate zeilenweise ab. Mit einem Befehl der Art fetch_next
bekommt man die folgende Zeile
– die Felder werden als Text angeliefert. Für die weitere Verarbeitung ist
das Programm verantwortlich.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
190
Operationalisierung der Grundideen
• Problem der Weiterverarbeitung der Ergebnisse:
ein SELECT liefert eine Tabelle unbekannter Länge, mit unbekannten
Spaltennamen und Spaltentypen ab unterschiedliche Lösungen
• (b)OO Lösung
– OO Prinzip: das SELECT kreiert ein Objekt vom Typ Resultset. Objekte
dieses Typs verstehen Methoden der Art „gib mir deine nächste Zeile“,
„sag mir, wie deine 3. Spalte heißt“, „sag mir, wie viele Zeilen Du
enthältst“, gibMirVonZeile 30 die Spalte mit dem Namen „Umsatz“
– Das ist leistungsfähiger und intuitiver als (a) , setzt aber
Programmiersprachen voraus, die solche Konzepte unterstützen!
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
191
Lokaler Zugriff durch das Programm - Beispiel
$<?php
Beispiel: Programmiersprache PHP 5 und (nativer) Zugriff auf SQLite Datenbank
// create new database (OO interface)
$db = new SQLiteDatabase("db.sqlite");
// create table foo and insert sample data
$db->query("BEGIN;
CREATE TABLE foo(id INTEGER PRIMARY KEY, name CHAR(255));
INSERT INTO foo (name) VALUES('Ilia');
INSERT INTO foo (name) VALUES('Ilia2');
INSERT INTO foo (name) VALUES('Ilia3');
COMMIT;");
// execute a query
WI
……
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
192
Lokaler Zugriff durch das Programm - Beispiel
// …execute a query
$result = $db->query("SELECT * FROM foo");
// iterate through the retrieved rows
Echo “we have in Total”. $result->numRows()
while ($result->valid()) {
// fetch current row
$row = $result->current();
print_r($row);
// proceed to next row
$result->next();
}
// not generally needed as PHP will destroy the connection
unset($db);
?>
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
193
Lokaler Zugriff durch das Programm - Beispiel
•
WI
/* each result looks something like this
Array
(
[0] => 1
[id] => 1
[1] => Ilia
[name] => Ilia
)
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
194
Anbindung von DB in Programme: PHP  PDO
<?php
/*** mysql hostname ***/
$hostname = 'localhost';
/*** mysql username ***/
$username = 'username';
/*** mysql password ***/
$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username,
$password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
/*** INSERT data ***/
$count = $dbh->exec("INSERT INTO animals(animal_type, animal_name)
VALUES ('kiwi', 'troy')");
/*** echo the number of affected rows ***/
echo $count;
/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>Beispiel OO-Zugriff in PHP
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
195
Datenbankabstraktion
• Jedes Datenbanksystem hat seine eigenen API-Befehle, die leicht
unterschiedlich sein können
– SELECT name, gebDat FROM users LIMIT 25;
– SELECT TOP 25 name, gebDat FROM users
• Programmierer haben Interesse, nicht unterschiedliche
Programmversionen pro Datenbank zu pflegen
• Datenbankhersteller wollen möglichst viele Programmierer /
Anwender erreichen
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
196
Datenbankabstraktion
• Lösung „Abstraktions-‹layer›“:
– Programm ruft die API einer „abstrakten“ Datenbank in einem Standard-SQLDialekt auf
– Abstraktionsschicht übersetzt in die Sprache der konkreten Datenbank und ruft
deren API auf
– Ergebnisse werden ebenfalls über die Abstraktionsschicht geleitet und ggf.
umformatiert
• Meyer,Sept 14 2010
• Meyer, 20100914
• Dieses Konzept wird von einer Vielzahl leicht unterschiedlicher Lösungen
umgesetzt
– ODBC JDBC
– PEAR PDO OLE DB
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
197
Datenbankabstraktion
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
198
Datenbankabstraktion
•
The barest ODBC system would
include an ODBC-conformant
driver accessing some data, and an
ODBC-conformant application,
linked to the driver library.
•
If commercial applications were
distributed in this way, users would
need to re-link their applications
to their chosen driver whenever
they wanted to access a different
data source.
•
Instead, the application program is
linked to a driver manager, which
loads and initializes the required
driver at runtime:
Quelle:
http://www.easysoft.com/products/data_access/xml_odbc_server/manu
al/introduction.html
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
199
Datenbankabstraktion - Bemerkungen
• Die Herstellerabhängigkeit wird nicht beseitigt, sondern an einer
einzigen Stelle konzentriert
• Diese Abhängigkeit wird durch den Driver Manager vom Benutzer
voll verborgen
• Die Grundidee lässt sich erweitern, indem z.B. anders formatierte
Datenbestände, die ebenfalls letztlich eine Tabelle liefern können,
am backend verwendet werden
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
200
Datenbankabstraktion
•
WI
OLE DB (Object Linking and Embedding, Database, sometimes written as OLEDB or OLEDB) is an API designed by Microsoft for accessing data from a variety of sources in a
uniform manner. It is a set of interfaces implemented using the Component Object
Model (COM); it is otherwise unrelated to OLE. It was designed as a higher-level
replacement for, and successor to, ODBC, extending its feature set to support a wider
variety of non-relational databases, such as object databases and spreadsheets that do
not necessarily implement SQL.
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
201
Literatur
http://php.net/manual/en/intro.pdo.php onPDO
http://php.net/manual/en/book.pdo.php
http://www.ch-werner.de/sqliteodbc/ SQLite ODBC
PEAR
JDBC
http://www.sqlsummit.com/ODBCVend.HTM listet –zig ODBC und OLE
DB und JDBC providers
• http://www.canaimasoft.com/f90sql/ListOfODBCDrivers.htm d/o
• http://www.greaterscope.net/documentation/php_database_abstractio
n_class_comparison.html (PEAR PDO,…)
•
•
•
•
•
•
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
202
Kapitel 1.7
VERTEILTE DATENBANKEN
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
203
Verteilte Datenbanken (gesamter Abschnitt aus http://www.sts.tuharburg.de/~r.f.moeller/lectures/db-ws-04-05/91-VerteilteDBs.pdf)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
204
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
205
Verteilte Datenbanken
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
206
Horizontale Fragmentierung der ProfessorenTabelle
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
207
Verteilte Datenbanken
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
208
Schlechte Fragementierung der VorlesungTabelle
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
209
Gute horizontale Fragmentierung
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
210
Verteilte Datenbanken
Aufteilung in einzelne, meist nicht überlappungsfreie „Projektionen“
Siehe später in der Vorlesung bei
Coumnar storage
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
211
Verteilte Datenbanken 2PC (two phase commit)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
212
Verteilte Datenbanken 2PC (two phase commit)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
213
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
214
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J.
Ruhland | SS2015
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
215
Verteilte Datenbanken 2PC (two phase commit)
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
216
Verteilte Datenbanken 2PC (two phase commit)
behandeln wir zum
Ende des 2PC !
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
217
Verteilte Datenbanken 2PC (two phase commit)
wenn Agent lange inaktiv war, kann
ein „abort assumed“ von Anfang an
für das DBMS global vereinbart
werden
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
218
Verteilte Datenbanken 2PC (two phase commit)
wieder das KoordinatorAbsturz-Problem
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
219
Verteilte Datenbanken
• 3PC: mehrstufige Verfahren zur Sicherung von ACID
•
•
Siehe zB
www.cs.utexas.edu/users/lorenzo/corsi/
cs380d/past/03F/notes/9-11.pdf
•
Precommit sagt „als coordinator habe
ich gegen commit nichts einzuwenden“
EIN Client, der ein preCommit
erhalten hat, reicht aus um die
Meinung des Coordinators zu
sichern (oder „Quorum“-regelung) 
Nachfolger für Coordinator
wählbar
doCommit sagt: jetzt kannst du alles
zur Transact vergessen
•
•
WI
Eine Variante des 3 phase commit protocols
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
220
http://dbs.uni-leipzig.de/buecher/mrdbs/mrdbs-70.html
Mit dem Precommit sichert der Koordinator zu, daß er von sich aus die Transaktion nicht mehr zurücksetzt. Allerdings ist es im Gegensatz zum Commit
nach einem Precommit des Koordinators nach dessen Ausfall noch möglich, die Transaktion abzubrechen.
Wird während der Commit-Behandlung ein Koordinatorausfall erkannt (durch Timeout), so erfolgt die Wahl eines neuen Koordinators. Damit der neue
Koordinator die Commit-Behandlung fortführen kann, erfrägt er zunächst von den überlebenden Rechnern den Commit-Zustand bezüglich der
betroffenen Transaktion. Wenn einer der Agenten einen Commit-Satz oder Abort-Satz für die Transaktion protokolliert hat, wird das
entsprechende Ergebnis global gültig gemacht. Wenn keiner der Agenten einen Abort- oder Commit-Satz, jedoch wenigstens einer einen
Precommit-Zustand vorliegen hat, dann wird das 3PC-Protokoll mit dem Verschicken der PRECOMMIT-Nachrichten fortgesetzt. Anderenfalls wird
auf Abbruch der Transaktion entschieden.
Abb. 7-8: Nachrichtenfluß beim Drei-Phasen-Commit
Das im 2PC-Protokoll bestehende Blockierungsproblem im Prepared-Zustand eines Agenten ist mit diesem Ansatz gelöst. Denn wenn der Koordinator
auf Abort entschieden hat, dies jedoch nicht mehr propagiert wurde, dann kann keiner der Agenten im Precommit-Zustand sein. Der neue
Koordinator entscheidet daher richtigerweise auf Transaktionsabbruch. Hatte der ausgefallene Koordinator auf Commit entschieden, so findet
der neue Koordinator bei wenigstens einem der überlebenden Agenten einen Precommit-Zustand vor (da nach Voraussetzung neben dem
Koordinator höchstens K-1 weitere Rechner ausfallen dürfen und vor dem Commit K Agenten das Precommit quittierten). Allerdings entscheidet
der neue Koordinator in dieser Situation nicht unmittelbar auf Commit, da dann der Ausfall des neuen Koordinators auf dasselbe
Blockierungsproblem wie beim 2PC führen würde. Stattdessen wird das 3PC-Protokoll mit dem Verschicken der PRECOMMIT-Nachrichten
fortgesetzt. Ist der ursprüngliche Koordinator im Precommit-Zustand ausgefallen, so kann die globale Transaktion sowohl abgebrochen als auch
erfolgreich beendet werden. Welche Entscheidung vom neuen Koordinator gefällt wird, hängt davon ab, ob noch einer der Agenten den
Precommit-Zustand erreicht hat.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
221
Kritik 2PC und insbes. 3PC
•
•
•
WI
Sehr großer Aufwand, der eigentlich
nur für einige wenige Situationen
benötigt wird (Coordinator fail in der
2.Phase), sonst aber zu nichts
genutzt wird. (vgl. Aiport Security;
Entrauchung BER)
ACID zu jeder Millisekunde als
„heilige Kuh“
?? ist fail-> stop der wahrscheinliche
Verlauf einer Störung = ??
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
222
http://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/
see also http://the-paper-trail.org/blog/consensus-protocols-paxos/
Consensus Protocols: Three-phase Commit
Last time we looked extensively at two-phase commit, a consensus algorithm that has the benefit of low latency but which is offset by fragility in the face of participant machine crashes. In this short note, I’m going to explain how the addition of an extra phase to the protocol
can shore things up a bit, at the cost of a greater latency.
The fundamental difficulty with 2PC is that, once the decision to commit has been made by the co-ordinator and communicated to some replicas, the replicas go right ahead and act upon the commit statement without checking to see if every other replica got the message.
Then, if a replica that committed crashes along with the co-ordinator, the system has no way of telling what the result of the transaction was (since only the co-ordinator and the replica that got the message know for sure). Since the transaction might already have been
committed at the crashed replica, the protocol cannot pessimistically abort – as the transaction might have had side-effects that are impossible to undo. Similarly, the protocol cannot optimistically force the transaction to commit, as the original vote might have been to abort.
This problem is – mostly – circumvented by the addition of an extra phase to 2PC, unsurprisingly giving us a three-phase commit protocol. The idea is very simple. We break the second phase of 2PC – ‘commit’ – into two sub-phases. The first is the ‘prepare to commit’ phase.
The co-ordinator sends this message to all replicas when it has received unanimous ‘yes’ votes in the first phase. On receipt of this messages, replicas get into a state where they are able to commit the transaction – by taking necessary locks and so forth – but crucially do not
do any work that they cannot later undo. They then reply to the co-ordinator telling it that the ‘prepare to commit’ message was received.
The purpose of this phase is to communicate the result of the vote to every replica so that the state of the protocol can be recovered no matter which replica dies.
The last phase of the protocol does almost exactly the same thing as the original ‘commit or abort’ phase in 2PC. If the co-ordinator receives confirmation of the delivery of the ‘prepare to commit’ message from all replicas, it is then safe to go ahead with committing the
transaction. However, if delivery is not confirmed, the co-ordinator cannot guarantee that the protocol state will be recovered should it crash (if you are tolerating a fixed number of failures, the co-ordinator can go ahead once it has received confirmations). In this case, the
co-ordinator will abort the transaction.
If the co-ordinator should crash at any point, a recovery node can take over the transaction and query the state from any remaining replicas. If a replica that has committed the transaction has crashed, we know that every other replica has received a ‘prepare to commit’
message (otherwise the co-ordinator wouldn’t have moved to the commit phase), and therefore the recovery node will be able to determine that the transaction was able to be committed, and safely shepherd the protocol to its conclusion. If any replica reports to the
recovery node that it has not received ‘prepare to commit’, the recovery node will know that the transaction has not been committed at any replica, and will therefore be able either to pessimistically abort or re-run the protocol from the beginning.
So does 3PC fix all our problems? Not quite, but it comes close. In the case of a network partition, the wheels rather come off – imagine that all the replicas that received ‘prepare to commit’ are on one side of the partition, and those that did not are on the other. Then both
partitions will continue with recovery nodes that respectively commit or abort the transaction, and when the network merges the system will have an inconsistent state. So 3PC has potentially unsafe runs, as does 2PC, but will always make progress and therefore satisfies its
liveness properties. The fact that 3PC will not block on single node failures makes it much more appealing for services where high availability is more important than low latencies.
Next time I talk about consensus, it will be to try and describe Paxos, which is really a generalisation of 2PC and 3PC which has found massive popularity recently in building real-world distributed replicated state machines such as Chubby.
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
223
Verteilte Datenbanken 2PC (two phase commit)
•
•
Hundertprozent ACID und Konsistenz an jedem Ort verursachen einen ERHEBLICHEN
Aufwand und Latenzzeiten bis zum Commit
Ein „auseinandergebrochenes Netz“ ist gar nicht arbeitsfähig
gute Quellen zum 3PC
http://www.ipd.uka.de/~ipd/institut/tav/Material06/09b-verteilteTA.pdf
http://pages.cs.wisc.edu/~dbbook/openAccess/thirdEdition/ Ramakrishnan/Gehrke
http://books.google.de/books?id=_Z0DTXSJHfwC&pg=PA726&lpg=PA726&dq=3pc+alte
rnatives+2pc&source=bl&ots=7gZijRhdoy&sig=JeRJY0QpxAbROXtj5gpOzEPqyE&hl=de&sa=X&ei=ZOZpU5TtCMTkOsDsgMAE&ved=0CFIQ6
AEwAw#v=onepage&q=3pc%20alternatives%202pc&f=false ein Google Book
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
224
http://www.facweb.iitkgp.ernet.in/~pallab/dist_sys/Lec-11CommitProtocols.pdf
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
225
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
226
Ende
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
227
ACK
ACK
NAK
NAK
PRECOMMIT !
COMMIT !
PREPARE
PRECOMMIT !
COMMIT !
PREPARE
WI
Vorlesung "Data and Knowledge Management" (MW31.6) | Prof. Dr. J. Ruhland | SS2016
228
Herunterladen