Architektur von Datenbanksystemen II Aufgabe der Anfrageverarbeitung Abbildung auf die inhaltliche Adressierung von Mengen von Sätzen Überprüfung der syntaktischen Korrektheit von Anfragen Überprüfung? von Zugriffsberechtigungen und Integritätsbedingungen - Referenzielle Integrität, Eindeutigkeits- und Wertebereichszusicherungen, … Erzeugung einer optimalen ausführbargen Folge interner DBS-Operationen - Anfrageoptimierer ist (im Wesentlichen) für die effiziente Abarbeitung verantwortlich 2 Anfragespezifikation Direkte Adressierung und satzorientierter Zugriff auf die Datensätze, keine mengenorientierte Verarbeitung Verantwortung für die Zugriffspfadwahl, d.h. Art und Reihenfolge der Zugriffe liegt beim Programmierer Erlauben leichte Abbildung der DML-Befehle auf interne Satzoperationen (1:1) Inhaltliche Adressierung und mengenorientierter Zugriff auf die Datensätze, kein Rückgriff auf einzelne Sätze Verantwortung für die Zugriffspfadauswahl, d.h. Art und Reihenfolge der Zugriffe liegt beim System, transparent für den Anwender Hohe Auswahlmächtigkeit - an der Prädikatenlogik erster Stufe orientiert ist - unabhängige oder korrelierte Teilanfragen zur Bestimmung von Suchargumenten in beliebiger Schachtelungstiefe zulässig - zusätzlich den Einsatz von Built-in- und Sortier-Funktionen auf Partitionen der Satzmenge gestattet Komplexe Abbildung der deskriptiven Anfrage auf interne Satzoperationen 3 Motivation Formale Sprache, mit der sich Anfragen über einem relationalen Schema formulieren lassen SQL SELECT P_BRAND, O_SHIPPRIORITY, SUM(L_QUANTITY*L_EXTENDEDPRICE) AS TURNOVER FROM TPCD.LINEITEM, TPCD.ORDERS, TPCD.PART WHERE L_ORDERKEY = O_ORDERKEY AND L_PARTKEY = P_PARTKEY AND O_ORDERSTATUS = ’F’ AND P_CONTAINER = ’LG_BAG’ GROUP BY P_BRAND, O_SHIPPRIORITY HAVING AVG(L_QUANTITY) > 250; Interndarstellung: Relationale Algebra 5 Motivation Formale Sprache für den Berechnungsweg von Anfrageergebnissen Internrepräsentation für DB-Anfragen Mathematische Rechenregeln ermöglichen Abfrageoptimierung durch algebraische Umformung Nicht für den Nutzer eines DBMS sichtbar Auch geeignet zur Formulierung von Integritätsbedingungen Relationale Algebra enthält keine Operationen - zum Erzeugen bzw. Löschen von Relationen erzeugen - zum Einfügen, Löschen und Verändern von Tupeln Ausschließlich „lesenden“ Operationen Es wird vorausgesetzt, dass die Relationen der Datenbank schon irgendwie existieren und mit Tupeln gefüllt worden sind 6 Relationale Algebra Gegeben eine Menge N („Anker der Algebra”): Menge der Relationen Operationen opj: NkN (Abgeschlossenheit) Fünf Basisoperationen Gegeben zwei Relationen R(A1,…,Ar) und S(B1,…,Bs) mit Grad r und Grad s dann sind 𝑅′ ≔< 𝑜𝑝 ><𝑃𝑎𝑟𝑎𝑚𝑒𝑡𝑒𝑟> (𝑅) sowie 𝑅′′ ≔ 𝑅 < 𝑜𝑝 ><𝑃𝑎𝑟𝑎𝑚𝑒𝑡𝑒𝑟> 𝑆 wieder Relationen Zur Erleichterung der Definitionen sei angenommen, dass die Attribute der Relationen geordnet sind. Somit gilt: R = {(a1,…,ar) | ai dom(Ai), 1 i r} und S = {(b1,…,bs) | bi dom(Bi), 1 i s} 7 Projektion Sei A' eine Teilmenge der Attribute einer Relation R(A1, ..., An). Die Projektion der Attribute A' aus einem Tupel t R ist definiert als das Tupel 𝜋𝐴′ 𝑡 = (𝐴1′ 𝑡 , … , 𝐴′𝑚 𝑡 ) Die Projektion der Attribute A' einer Relation R ist definiert als die Relation 𝜋𝐴′ 𝑅 = {𝜋𝐴′ 𝑡 |𝑡𝜖𝑅} Projektion ist eine Operation, die bestimmte Spalten aus einer Relation auswählt und diese als neue Relation ausgibt 9 Projektion (2) Studenten MatrikelNr Vorname Vorname2 Geburt SgNr Bafoeg 1001 Schmidt Hans Peter 24.2.1990 Würzburg 2 200 1002 Meisel Dirk Helmut 17.8.1989 Schweinfurt 3 500 1003 Schmidt Amelie 19.9.1992 Rimpar 1 0 1004 Krause Christian 3.5.1990 Würzburg 1 100 1005 Schäfer Julia 30.3.1993 Kitzingen 5 0 1006 Rasch Lara 30.3.1992 Würzburg 3 0 1007 Bakowski Juri 15.7.1988 Schweinfurt 4 400 Johannes 𝜋𝑁𝑎𝑚𝑒,𝑂𝑟𝑡 (𝑆𝑡𝑢𝑑𝑒𝑛𝑡𝑒𝑛) Name Ort Schmidt Würzburg Meisel Schweinfurt Schmidt Rimpar Krause Würzburg Schäfer Kitzingen Rasch Würzburg Bakowski Schweinfurt 10 Projektion (4) Da Dubletten (identische Tupel) in Relationen nicht vorkommen dürfen, enthält die Projektion i. A. weniger Tupel als die ursprüngliche Relation! Achtung: Das ist in SQL standardmäßig nicht so! Wenn A' eine Teilmenge der Attribute von R(A1, ..., An) ist und es gilt 𝜋𝐴′ 𝑅 = |𝑅| Welche Eigenschaft hat dann A'? 11 Projektion in SQL: SELECT 𝜋𝑁𝑎𝑚𝑒,𝑂𝑟𝑡 (𝑆𝑡𝑢𝑑𝑒𝑛𝑡𝑒𝑛) Duplikate werden nicht standardmäßig eliminiert SELECT Name, Ort FROM Studenten Mit Duplikat-Eliminierung SELECT DISTINCT Name, Ort FROM Studenten 12 Selektion (Restriktion) Die Selektion einer Relation R ist definiert als die Menge aller Tupel aus R, die der Selektionsbedingung P genügen: 𝜎𝑃 𝑅 = {𝑡|𝑡𝜖𝑅 ∧ 𝑃(𝑡)} P setzt sich zusammen aus - Operanden: Konstanten oder Name eines Attributs - Vergleichsoperatoren: = , ≠ , < , ≤ , > , ≥ - Boolesche Operatoren: , , Selektion ist eine Operation, die bestimmte Zeilen aus einer Relation auswählt und diese als neue Relation ausgibt 13 Selektion: Beispiel Studenten MatrikelNr Name Vorname Vorname2 Geburt Ort SgNr Bafoeg 1001 Schmidt Hans Peter 24.2.1990 Würzburg 2 200 1002 Meisel Dirk Helmut 17.8.1989 Schweinfurt 3 500 1003 Schmidt Amelie 19.9.1992 Rimpar 1 0 1004 Krause Christian 3.5.1990 Würzburg 1 100 1005 Schäfer Julia 30.3.1993 Kitzingen 5 0 1006 Rasch Lara 30.3.1992 Würzburg 3 0 1007 Bakowski Juri 15.7.1988 Schweinfurt 4 400 Johannes 𝜎𝑁𝑎𝑚𝑒=′ 𝑆𝑐ℎ𝑚𝑖𝑑𝑡 ′ 𝑆𝑡𝑢𝑑𝑒𝑛𝑡𝑒𝑛 MatrikelNr Name Vorname Vorname2 Geburt Ort SgNr Bafoeg 1001 Schmidt Hans Peter 24.2.1990 Würzburg 2 200 1003 Schmidt Amelie 19.9.1992 Rimpar 1 0 14 Selektion in SQL: SELECT mit WHERE 𝜎𝑁𝑎𝑚𝑒=′𝑆𝑐ℎ 𝑚𝑖𝑑𝑡 ′ 𝑆𝑡𝑢𝑑𝑒𝑛𝑡𝑒𝑛 SELECT * FROM Studenten WHERE Name='Schmidt' 𝜋𝑁𝑎𝑚𝑒,𝑉𝑜𝑟𝑛𝑎𝑚𝑒,𝑂𝑟𝑡 (𝜎𝑁𝑎𝑚𝑒=′𝑆𝑐ℎ 𝑚𝑖𝑑𝑡 ′ 𝑆𝑡𝑢𝑑𝑒𝑛𝑡𝑒𝑛 SELECT Name, Vorname, Ort FROM Studenten WHERE Name='Schmidt' Name Vorname Ort Schmidt Hans Würzburg Schmidt Amelie Rimpar 15 Weitere Basisoperationen 𝑅×𝑆 Das kartesische Produkt zweier Relationen R(A1, A2, ..., An) und S(B1, B2, ..., Bm) ist definiert als Relation R x S = { (a1, a2, ..., an, b1, b2, ..., bm) | (a1, a2, ..., an) R (b1, b2, ..., bm) S } A1 A2 B1 B2 1 A 1 X 2 B 2 Y 3 C 4 Z x = A1 A2 B1 B2 1 A 1 X 1 A 2 Y 1 A 4 Z 2 B 1 X 2 B 2 Y 2 B 4 Z 3 C 1 X 3 C 2 Y 3 C 4 Z 16 Weitere Basisoperationen 𝑅∪𝑆 R S := { r | r R oder r S } R und S besitzen gleiches Relationenschema (bis auf Umbenennungen identisch) Wertebereiche müssen kompatibel oder vereinigungsverträglich sein! 𝑅−𝑆 R - S := { r | r R und r S } R und S besitzen gleiches Relationenschema (bis auf Umbenennungen identisch) Wertebereiche müssen kompatibel oder vereinigungsverträglich sein! 𝜌𝑆 (𝑅) 𝜌𝑆 𝑅 : Relation R wird in Relation S umbenannt 𝜌𝐵←𝐴 𝑅 : Attribut A der Relation R wird umbenannt in B - Umbenennung unterscheidet sich von den anderen Operatoren dadurch, dass keine Berechnung vorgenommen wird - Operator ist aber notwendig, wenn eine Relation mehrfach in einer Anfrage vorkommt 17 Beispiele zur Relationalen Algebra R A B C a b d c S D E F c b g a a f d a f b d RS R–S RS a b c d a f a b c b d c b b g a πA,C(R) A C a c d f c d σB=b(R) A B C D E F c a b c b g a d a b c d a f d a f b g a d a f d a f c b d b g a c b d d a f A B C a b c c b d 18 Durchschnitt und Division 𝑅⋂𝑆 R S := { r | r R und r S } Es gilt: 𝑅⋂𝑆 = 𝑅 − 𝑅 − 𝑆 𝑅÷𝑆 Seien Relation R(A,B), Relation S(B) zwei Relationen, wobei alle Attribute aus S in R enthalten sind Die Division 𝑅÷𝑆 ist dann definiert zu 𝑅 ÷ 𝑆 = 𝑡 ∃𝑥, 𝑦 ∈ 𝑅 ∀𝑦 ∈ 𝑆} Darstellung des Quotienten durch die Basisoperationen 𝑅 ÷ 𝑆 ≔ 𝜋𝐴−𝐵 𝑅 − 𝜋𝐴−𝐵 ( 𝜋𝐴−𝐵 𝑅 × 𝑆) − 𝑅 20 Natürlicher Verbund 𝑅⋈𝑆 Wichtigste Operation neben der Selektion Voraussetzung A1 = B1, ..., Ak = Bk und Aj Bi für alle j und i mit k < j r und k < i s Der natürliche Join ist definiert als 𝑅 ⋈ 𝑆 ≔ 𝜋𝑖𝑘+1 ,𝑖𝑘+2 ,….,𝑖𝑟+𝑠 (𝜎𝑅.𝐴1=𝑆.𝐵1∧...∧𝑅.𝐴𝑘=𝑆.𝐵𝑘 (𝑅 × 𝑆)) Gibt es keine gemeinsames Attribut so ist das Ergebnis das kartesische Produkt Bemerkung: i.A. besitzen die Relationen nur ein gemeinsames Attribut!!! R B C A S B C D b c a b c d b c d b c e b f b a d b a d c 𝑹⋈𝑺 B C A D b c a d b c a e b c d d b c d e a d c b 21 Theta- und Equi-Join 𝑅 ⋈𝛩 𝑆 Auswahl bestimmter Tupel aus dem kartesischen Produkt RS: 𝑅 ⋈𝑖𝛩𝑗 𝑆 ≔ 𝜎𝐴𝑖 Θ𝐵𝑗 (𝑅 × 𝑆) Mit {=, , <, , >, } Beispiel: 𝑅 ⋈𝐴=𝐸 𝑆 R A B C D E F G 𝑅 ⋈𝐴=𝐸 𝑆 A B C D E F G 2 3 4 1 2 3 1 2 3 4 1 2 3 4 5 6 7 7 8 9 7 8 9 0 7 8 0 1 7 S 8 9 0 22 Verlustfreiheit von Joins Eine Join-Operation zwischen R und S heißt verlustfrei, wenn jeder Datensatz aus R und jeder Datensatz aus S in der Ergebnisrelation enthalten ist. Die inverse Operation Projektion erzeugt dann wieder R und S aus dem Join-Ergebnis Tupel, denen bei Join-Operationen die entsprechenden Tupel in der anderen Tabelle fehlen, mit denen sie verknüpft werden können, heißen auch „Dangling Tupel“ bzw. Datensätze Um sie in die Ergebnismenge mit aufnehmen zu können, werden die Outer-Join-Operatoren benötigt Inner Joins sind in der Regel verlustbehaftet! 23 Outer Joins ⟕ Alle Tupel der linken Relation R, die keinen Join-Partner in der rechten Relation S haben, werden trotzdem ausgegeben Die entsprechenden Spalten für S enthalten NULL-Werte R S A1 A2 1 A 2 B 3 C B1 ⟕ B2 1 X 2 Y 4 Z A1 = A2 B1 B2 1 A 1 X 2 B 2 Y 3 C NULL NULL 24 Outer Joins (2) ⟖ Alle Tupel der rechten Relation S, die keinen Join-Partner in der linken Relation R haben, werden trotzdem ausgegeben Die entsprechenden Spalten für R enthalten NULL-Werte ⟗ Alle Tupel sowohl der linken als auch der rechten Relation, die keinen Join-Partner haben, werden trotzdem ausgegeben Auf beiden Seiten werden die entsprechenden Spalten mit NULL-Werten aufgefüllt 25 Outer Joins (3) in SQL RIGHT JOIN (alternativ RIGHT OUTER JOIN) SELECT * FROM Studenten RIGHT JOIN Studiengang ON Studenten.SgNr = Studiengaenge.SgNr LEFT JOIN (alternativ LEFT OUTER JOIN) SELECT * FROM Studiengaenge LEFT JOIN Studenten ON Studenten.SgNr = Studiengaenge.SgNr FULL OUTER JOIN - Nicht in allen DB-Systemen verfügbar (z.B. MySQL nicht) 26 Halbverbund 𝑅⋉𝑆 Sei RS das Schema der Relation R. Dann ist der Semi-Join von R und S definiert als: R ⋉ S ≔ πR (R ⋈ S) Enthält alle Tupel der Relation R, die die Join-Bedingung mit der Relation S erfüllen 27 Beispiele zu Verbundarten R A B C a1 b1 a2 b2 C D E A B C D E c1 c1 d1 e1 a1 b1 c1 d1 e1 c2 c3 d2 e2 - - c3 d2 e2 A B C a1 b1 c1 𝑅⋉𝑆 R⟕S S R⟖S R⟗S A B C D E a1 b1 c1 d1 e1 a2 b2 c2 - - A B C D E a1 b1 c1 d1 e1 a2 b2 c2 - - - - c3 d2 e2 28 Joins – Übersicht 29 Zerlegung der Anfrageverarbeitung Logischer DB-Prozessor (System R: relational data system) liefert einen Ausführungsplan (query execution plan; QEP) zur Übersetzungszeit Physischer DB-Prozessor (System R: relational storage system) tatsächliche Ausführung des Anfrageplanes zur Laufzeit 31 Beispiel SELECT R.c, S.c, T.c, sum(T.d) FROM R, S, T WHERE R.a = S.a and S.b = T.b and R.b > 100 and S.d<100 and T.a <> 500 GROUP BY R.c, S.c, T.c HAVING COUNT(*) > 20 32 Zerlegung der Anfrageverarbeitung (2) Interndarstellung mit Zugriffs- und Integritätskontrolle - Überprüfung der referenzierten Datenbankobjekte wie Tabellen oder Attribute - Erweiterung der Anfrage um Operatoren, die bei der Ausführung der Anfrage die strukturelle Konsistenz der Datenbank sicherstellen bzw. deren Verletzung verhindern Anfragerestrukturierung (logische Optimierung) - Vereinfachung der Anfrage durch algebraische Eigenschaften der Relationenalgebra - Umformung auf Schemaebene; unabhängig von der konkreten Ausprägung der Datenbank (z.B. unabhängig von Werteverteilungen, der Existenz von Indexstrukturen etc.) Anfragetransformation - Zuordnung eines Planoperators zu jedem Operator der relationalen Algebra Planparametrierung und Codeerzeugung Ausführungskontrolle und Ergebnisbereitstellung 33 Phasen der Anfrageverarbeitung Anfrageoptimierung Anfrage Interndarstellung Zugriffs- & Integritätskontrolle Anfragerestrukturierung Anfragetransformation Anfrageausführungsplan (QEP) Ergebnis Ergebnisbereitstellung Ausführungskontrolle Codeerzeugung Planparametrierung Logischer DB-Prozessor (Anfrageprozessor) Übersetzungszeit Laufzeit Physischer DB-Prozessor (Anfrageausführer) 34 Phasen der Anfrageverarbeitung (2) Wie ist eine Anfrage intern repräsentiert? -> Operatorengraph Lexikalische und syntaktische Analyse - Überprüfung auf korrekte Syntax (Parsing) - Erstellung eines Anfragegraphen für die nachfolgenden Übersetzungsschritte (Überführung in Interndarstellung) Semantische Analyse - Feststellung der Existenz und Gültigkeit der referenzierten Relationen und Attribute - Ersetzen der externen durch interne Namen (Namensauflösung) - Konversion vom externen Format in interne Darstellung Durchführung einfacher Integritätskontrollen (Kontrolle von Formaten und Konversion von Datentypen) Generierung von Laufzeitaktionen für werteabhängige Kontrollen 35 Phasen der Anfrageverarbeitung (3) Anwendung von heuristischen Regeln zielt auf globale Verbesserung des Anfragegraphen ab Berücksichtigung ausführbarer Operationen Ersetzung und ggf. Zusammenfassen der logischen Operatoren durch Planoperatoren Auswahl der günstigsten Planalternative Generierung eines zugeschnittenen Programms für die vorgegebene (SQL-) Anfrage Erzeugung eines ausführbaren Zugriffsmoduls Verwaltung der Zugriffsmodule in einer DBVSBibliothek Anfragetransformation, Datenlokalisierung, globale Optimierung - meist sind mehrere Planoperatoren als Implementierung eines logischen Operators verfügbar - meist sind viele Ausführungsreihenfolgen oder Zugriffspfade auswählbar - Bewertung der Kosten und Auswahl des günstigsten Ausführungsplanes 36 Schwerpunkt: Interndarstellung Anfrageoptimierung Anfrage Interndarstellung Zugriffs- & Integritätskontrolle Anfragerestrukturierung Anfragetransformation Anfrageausführungsplan (QEP) Ergebnis Ergebnisbereitstellung Ausführungskontrolle Codeerzeugung Planparametrierung Logischer DB-Prozessor (Anfrageprozessor) Übersetzungszeit Laufzeit Physischer DB-Prozessor (Anfrageausführer) 37 Interndarstellung Strukturelle Betrachtung: Relationen, visualisiert als Tabellen Operationelle Betrachtung: Operatoren der Relationalen Algebra SELECT FROM WHERE AND AND Name, Beruf ABT a, PERS p, PM pm, PROJ pj a.Anr = p.Anr AND a.Aort = ‘Erlangen’ p.Pnr = pm.Pnr AND pm.Jnr = pj.Jnr pj.Port = ‘Erlangen’ Selektion - Auswahl von ‚Zeilen‘: pred()(R) Projektion - Auswahl von ‚Spalten‘: {A1,…,Ak}(R) Gruppierung - Auswahl von ‚Spalten‘ und Aggregatbildung auf Duplikaten: {G1,…,Gn:A1,…,Ak}(R) Verbund - Verbinden von Relationen R und S: RP(Ai,Bj)⋈S auf logischer Ebene: n-äre Verbundoperationen - Beispiel SQL-Server: ca. 200 logische DB-Operatoren - Umsetzung in relationalen Operatoren - effiziente Datenstruktur mit geeigneten Zugriffsfunktionen prozedurale Darstellung einer deskriptiven, mengenorientierten Anfrage Knoten sind Operatoren der Relationalen Algebra Blattknoten sind (üblicherweise) Relationen gerichtete Kanten repräsentieren den Datenfluss Operatorengraph 38 Interndarstellung – Beispiele Projektion Selektion SELECT FROM WHERE AND C_NAME, C_ADDRESS TPCD.CUSTOMER, TPCD.SUPPLIER C_NAME = S_NAME C_MKTSEGMENT = ’MACHINERY’; SELECT P_BRAND, O_SHIPPRIORITY, SUM(L_QUANTITY*L_EXTENDEDPRICE) AS TURNOVER FROM TPCD.LINEITEM, TPCD.ORDERS, TPCD.PART WHERE L_ORDERKEY = O_ORDERKEY AND L_PARTKEY = P_PARTKEY AND O_ORDERSTATUS = ’F’ AND P_CONTAINER = ’LG_BAG’ GROUP BY P_BRAND, O_SHIPPRIORITY HAVING AVG(L_QUANTITY) > 250; Verbundoperation Quellrelationen 39