Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Kapitel 05 Relationale Datenbanken 5 Relationale Datenbanken 5 Relationale Datenbanken ....................................................1 5.1 Das relationale Datenmodell........................................3 5.2 Modellierung im relationalen 5.3 Schlüssel......................................................................5 5.4 Arbeiten mit relationalen Datenbanken........................6 5.5 Sprachen für relationale Datenbanken ........................8 Datenmodell...........5 5.5.2 Relationenalgebra ....................................................9 5.5.3 Relationenkalkül .....................................................16 5.6 Beispiel für relationale Abfragesprachen ...................23 5.6.1 Die Abfragesprache SQL .......................................23 5.6.2 Die Abfragesprache Query-by-Example.................30 Seite 1 Prof. Dr. M.-R. Wolff 5.7 BWL / Wirtschaftsinformatik Optimierung von Abfragen .........................................34 5.7.1 Algebraische Optimierung ......................................35 5.7.2 Optimierung auf der physischen Ebene .................38 5.7.3 Ausnutzung von Sekundärindexen.........................39 Seite 2 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.1 Das relationale Datenmodell In einer relationalen Datenbank werden die Daten als eine Sammlung von Relationen dargestellt, die dann auch die Objekte für die Datenmanipulation sind. Definition: 1. Sind D1, D2, ..., Dn Mengen von Werten, so ist die Teilmenge R ⊆ D1 × D2 × ... × Dn eine n-stellige Relation über den Mengen (domains) D1, D2, ..., Dn. Die Zahl n gibt dabei den Grad (degree) der Relation an. 2. Ein Element r = (d1, d2, ..., dn) ∈ R mit di ∈ Di für i=1, ..., n ist ein Tupel der Relation R, auch n-Tupel genannt. Der Eintrag di ist dabei die i-te Komponente des Tupels. Ein Entity-Typ wird durch eine Attributkombination beschrieben, ein Entity von diesem Typ wird dann durch eine entsprechende Attributwertkombination charakterisiert. Man kann somit in natürlicher Weise die Entities eines bestimmten Typs als Relation über den Wertebereichen der entsprechenden Attribute auffassen. Seite 3 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel: NAME BERUF WOHNORT GEB.JAHR Weber Dreher München 1927 Müller Boxer Berlin 1948 Mayer Schneider Köln 1943 Relationenschema: Die Definition eines Relations-Typs R erfolgt im Relationenschema. Ein Relationenschema besteht aus folgenden Punkten: • einem Relationennamen • einer Liste von Attributnamen • der Beschreibung der Wertmengen der Attribute • der Beschreibung der Integritätsbedingungen Seite 4 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.2 Modellierung im relationalen Datenmodell Die Entity-Typen ANGESTELLTER und PROJECT können wir durch die Relationenschemata ANGEST und PROJEKT darstellen: ANGEST (ANGNR, ANG-NAME, WOHNORT, BERUF, ABT-NR) PROJEKT (PNAME, PNR, P-BESCHR, P-LEITER) Die Beziehung zwischen beiden stellen wir durch ein weiteres Relationenschema ANG-PRO dar: ANG-PRO (PNR, ANGNR, PROZ-ARB) 5.3 Schlüssel Da eine Relation eine Menge ist, sind die Tupel unterscheidbar. Es gibt also für jedes Relationenschema R eine Menge von Attributen - im Extremfall alle Attribute von R-, deren Werte für die Tupel identifizierend sind. Solche Attributmengen nennen wir Schlüssel Seite 5 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.4 Arbeiten mit relationalen Datenbanken Da wir alle Daten in der Datenbank als Relationen ansehen, ist auch das Ergebnis einer Anfrage (Query) eine Relation. Relationsschema ANGEST AN- ANG- NAME WOHNORT BERUF GEST NR ABT -NR 112 MUELLER KARLSRUHE PROGR 3 205 WINTER HANAU ORGANISATOR 3 117 SEELER MANNHEIM ING 5 KAUFMANN 4 ..... ..... 198 SCHMIDT KARLSRUHE ..... ..... ..... Relationsschema PROJEKT PROJEKT PNAME PNR P-BESCHR P2 12 ..... P4 18 ..... P3 17 ..... P5 33 ..... Seite 6 P-LEITER 205 198 198 117 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Relationsschema ANG-PRO ANG-PRO PNR ANGNR PROZ-ARB 12 205 100 18 117 20 33 117 80 33 400 100 17 198 30 18 198 70 17 112 100 Relationsschema A-P-A A-P-A ANGNR NAME 112 MUELLER 205 WINTER 117 SEELER 117 SEELER 198 SCHMIDT 198 SCHMIDT Seite 7 PNR 17 12 18 33 17 18 PROZ-ARB 100 100 20 80 30 70 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.5 Sprachen für relationale Datenbanken Es gibt eine ganze Reihe von Vorschlägen für relationale Datenmanipulationssprachen. Alle diese Sprachen lassen sich jedoch auf einen der beiden folgenden grundlegenden Ansätze zurückführen, oder sind Mischformen hiervon: • Relationenalgebra • Relationenkalkül Relationenalgebra Spezifikation von gewünschten Relationen durch Angabe einer Folge von Operationen, mit der die Relationen aufgebaut werden sollen. Der Benutzer wendet spezielle Operationen für Relationen an, um seine gewünschte Relation zu konstruieren. Relationenkalkül Spezifikation von gewünschten Relationen in deskriptiver Weise, d.h. ohne Angabe, welche Operationen zum Aufbau der Relation verwendet werden sollen. Mit Hilfe des Prädikatenkalküls wird die Menge der gewünschten Tupel beschrieben. Dazu wird ein Prädikat bzw. eine Bedingung angegeben, das die Tupel erfüllen müssen. Seite 8 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.5.2 Relationenalgebra Grundlegender Satz von Operationen für die Relationenalgebra 1. Vereinigung: Vereinigung der Tupelmengen zweier Relationen. 2. Mengendifferenz: Die Relation R-S ist die Menge der Tupel in R, die nicht auch in S enthalten sind. 3. Kartesisches Produkt: Sind R und S Relationen vom Grad gR bzw. gS, so ist R × S die Menge der (gR + gS)-Tupel, deren erste gR Komponenten einem Tupel in R, und deren letzte gS Komponenten einem Tupel in S entsprechen. 4. Projektion: Die Projektion dient dazu, Spalten aus Tabellen zu entfernen und Spalten umzuordnen. Wir betrachten eine Relation R vom Grad n und sei r = (a1, ..., an) ∈ R. Seite 9 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Dann wird mit r[j] wird die j-te Komponente von r bezeichnet. Wenn man mit L = (i1, ..., is) für ik∈{1, ..., n} mit k=1, ..., s eine Liste von Spaltennummern bezeichnet, so ist r[L] definiert als: r[L] = (r[i1], ..., r[is]) Die Projektion von R auf L ist dann definiert als: R[L] = {r[L] | r ∈ R} Beispiel zur Projektion: Man betrachte in diesem Beispiel die folgende Relation R: R A B C a b c d e f d g f Die Relation R’ = R[ C, B ] hat dann die folgende Form: R‘ C B c b f e f g Seite 10 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5. Selektion: Die Selektionsoperation selektiert aus einer Relation alle Tupel, die eine gegebene Bedingung erfüllen. Darstellen lässt sich eine solche Selektion auf folgende Weise: R[Bedingung] = {r ∈ R | r erfüllt Bedingung} Beispiel zur Selektion Für die Relation R (A,B,C) ergibt R[A = d] schließlich die folgende Relation R": R‘‘ A B C d e f d g f 6. Verbund (join): Wird benötigt um zwei Relationen bezüglich zweier Attribute mit gleichen Wertmengen miteinander zu verbinden. Es seien A in der Relation R und B in der Relation S diejenigen Attribute, nach denen die beiden Relationen R und S verknüpft werden sollen. Es muss daher für die Wertemengen der beiden Attribute A und B die Bedingung D(A) = D (B) gelten. Seite 11 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Dann ist der Verbund R[AΘ B]S folgendermaßen definiert: R[A Θ B]S = {r-s | r ∈ R, s ∈ S, r[A] Θ s[B]} Die Notation r • s stellt die Konkatenation dar, d.h. es gilt: (a1, ..., an) • (b1,...,bm) = (a1, ..., an, b1, ..., bm). Θ steht stellvertretend für einen der arith. Vergleichsoperatoren. Beispiel zum Join Die beiden Relationen R und S seien wie folgt definiert. R A 1 6 8 1 S B 2 5 8 1 C 3 5 9 7 D E 9 3 5 7 Es werden nun R [A>E] S und R [C=E] S gebildet. Seite 12 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik R [A>E] S A 6 8 8 B 5 8 8 C 6 9 9 D 9 9 5 E 3 3 7 R [C=E] S A B C D E 1 2 3 9 3 1 1 7 5 7 7. Natürlicher Verbund (natural join): Sind R und S zwei Relationenschemata und A1, A2, ..., Ap Attributnamen, die sowohl in der Relation R als auch in der Relation S auftreten, so ist der natürliche Verbund von R und S definiert als: R NATJOIN S: (R × S)[R.A1 = S.A1 ∧... ∧ R.Ap = S.Ap] [Ai1, Ai2, ..., Aiw] Dabei stellt R.Aj mit j∈{1, ..., p} das Attribut in R × S mit dem Namen Aj, das dem Attribut Aj in R entspricht. Entsprechendes gilt auch für S.Aj. Man sagt dabei, das Attribut A wird mit dem jeweiligen Relationennamen qualifiziert. Die Liste der Attribute von R × S, d.h. alle Attribute von R und S, ohne die Attribute S.A1, ..., S.Ap wird beschrieben durch Ai1, Ai2, ..., Aiw. Seite 13 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik R NATJOIN S kann man bei Verwendung der relationenalgebraischen Grundoperationen wie folgt bilden: Zunächst bildet man R × S und selektiert daraus alle Tupel, bei denen die Werte für R.A1 und S.A1 und zugleich auch die Werte für R.A2 und S.A2 usw. gleich sind. Schließlich streicht man aus der so erhaltenen Relation die Spalten für S.A1, ..., S.Ap. Erstes Beispiel zum Natural Join Es seien die Relation R und S gegeben A a b c d B b b b a C c c d b B b b a C c c b D x y z Seite 14 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Es entsteht die Relation R NATJOIN S A a a b b d B b b b b a C c c c c b D x y x y z Zweites Beispiel zum Natural Join Finde die Namen aller Angestellten, die am Projekt mit der Nummer 17 mitarbeiten. auf folgende Weise in Relationenalgebra formulieren: ANGEST[ANGNR = ANGNR]ANG-PRO [PNR = 17] [NAME] Oder: JOIN ANGEST, ANG-PRO BY ANGNR GIVING R1 SELECT R1 WHERE PNR = 17 GIVING R2 PROJECT R2 OVER NAME GIVING RESULT. Seite 15 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.5.3 Relationenkalkül Bei Sprachen auf der Basis des Relationenkalküls gibt der Benutzer die Definition einer Relation an, die aus den vorhandenen Relationen seines externen Modells abgeleitet werden soll. Einführende Beispielabfragen Finde die Wohnorte aller Angestellten, die Programmierer sind. Diese Abfrage lässt sich dann formulieren als: "Ermittle aus ANGEST eine Relation W mit dem Attribut WOHNORT. W soll die Wohnorte derjenigen Tupel von ANGEST enthalten, für die Beruf = 'Programmierer' gilt." Im Relationenkalkül definiert man die gewünschte Relation schließlich durch folgenden Ausdruck: {ANGEST.WOHNORT | ANGEST.BERUF = 'Programmierer'} Seite 16 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Allgemeine Form des Relationkalküls Ein Ausdruck im Relationenkalkül hat also allgemein die Form: {t | q} Das Prädikat q ist ein logischer Ausdruck von beliebiger Komplexität, der in üblicher Weise aufgebaut ist aus: 1. Attributnamen 2. Konstanten 3. Vergleichsoperatoren (=, ≠, ...) 4. Booleschen Operatoren (∧, ∨ , bzw. AND, OR, NOT) 5. Existenzquantor ∃ ("es existiert") 6. Allquantor ∀ ("für alle") 7. Tupelvariablen Freie und gebundene Variablen Man kann sich die Begriffe der freien und gebundenen Variablen etwas veranschaulichen mit folgendem Vergleich: 1. freie Variablen entsprechen globalen Variablen, die in einem Programm außerhalb der betrachteten Prozedur deklariert sind 2. gebundene Variablen entsprechen lokalen Variablen, die in einem Programm innerhalb der betrachteten Prozedur deklariert sind 3. die Quantifizierung entspricht der Variablendeklaration Seite 17 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Weiteres Beispiel Finde den (oder die) Programmierer mit dem höchsten Gehalt Wir formulieren diese Anfrage nun wie folgt: RANGE ANGEST X {ANGEST. NAME | (ANGEST.BERUF = 'PROGRAMMIERER') ∧ ¬ ∃ (X . BERUF = 'PROGRAMMIERER' ∧ X . GEHALT > ANGEST.GEHALT)} Beispiel (Einfaches Retrieval) Es soll die folgende Abfrage durchgeführt werden: Finde die Nummern aller Angestellten der Abteilung 6, die in Dortmund wohnen. Die Umsetzung dieser Abfrage sieht dann folgendermaßen aus: {ANGEST.ANGNR | ANGEST.ABT-NR = 6 ∧ ANGEST.WOHNORT = '4600 DO'} Seite 18 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Retrieval mit Existenz-Quantor) Es soll die folgende Abfrage durchgeführt werden: Finde die Namen der Angestellten, die an einem Projekt mitarbeiten. Die Umsetzung dieser Abfrage sieht dann folgendermaßen aus: RANGE ANG-PRO X {ANGEST.NAME | ∃ X ( X.ANGNR = ANGEST.ANGNR)} Beispiel 1 (Retrieval mit mehreren Existenzquantoren) Es soll die folgende Abfrage durchgeführt werden: Finde die Namen der Angestellten, die an einem Projekt mitarbeiten, an dem auch der Angestellte mit der Nummer 10 mitarbeitet. Die Umsetzung dieser Abfrage sieht dann folgendermaßen aus: RANGE ANG-PRO X RANGE ANG-PRO Y {ANGEST.NAME | ∃ X (X.ANGNR = ANGEST.ANGNR ∧ ∃ Y (Y.PNR = X.PNR ∧ Y.ANGNR = 10))} Seite 19 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel 2 (Retrieval mit mehreren Existenzquantoren) Es soll die folgende Abfrage durchgeführt werden: Finde die Namen der Angestellten, die an einem Projekt unter der Leitung des Angestellten mit der Nr. 30 arbeiten. Die Umsetzung dieser Abfrage sieht dann folgendermaßen aus: RANGE PROJEKT X RANGE ANG-PRO Y {ANGEST.NAME | ∃ Y(Y.ANGNR = ANGEST.ANGNR ∧ ∃ X (X.PNR = Y.PNR ∧ X.P-LEITER = 30))} In einer realen Abfragesprache könnte man diese Anfrage natürlich auch in einfachen überschaubaren Schritten folgendermaßen formulieren: W: {PROJEKT.PNR | PROJEKT.P-LEITER = 30} RANGE W X W1: {ANG-PRO.ANGNR | ∃ X (X.PNR = ANG-PRO.PNR)} RANGE W1 Y {Angest.NAME | ∃ Y (Y.ANGNR = ANGEST.ANGNR)} Seite 20 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Retrieval mit Allquantor) Es soll die folgende Abfrage durchgeführt werden: Finde die Namen der Angestellten, die an keinem Projekt mitarbeiten. Die Umsetzung dieser Abfrage sieht dann folgendermaßen aus: RANGE ANG-PRO X {ANGEST.NAME | ∀ X (X . ANGNR ≠ ANGEST.ANGNR)} Vollständigkeit einer Abfragesprache Das Relationenkalkül wird als Maßstab für die Beurteilung der Mächtigkeit relationaler Abfragesprachen angesehen Erweiterungen Für die praktische Anwendung sind Sprachmöglichkeiten wichtig, die im reinen Kalkül und in der einen Algebra nicht vorhanden sind. Hierzu gehören: 1. Möglichkeiten zur sortierten Ausgabe 2. arithmetische Operationen etwa bei Vergleichen (A<B+10) 3. Funktionen wie Anzahl der Tupel einer Relation, Durchschnitt, Summe, Maximalwert, Minimalwert, usw. Seite 21 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Update Neben dem reinen Retrieval muss eine Abfragesprache natürlich Möglichkeiten zur Veränderung (Update) von Relationen bieten. Beispiel zum Update Es soll die folgende Abfrage betrachtet werden: Verändere den Beruf des Angestellten 20 zu ‚Übersetzer‘. Im Sprachvorschlag ALPHA würde diese Aufgabe wie folgt gelöst: HOLD X {ANGEST.ANG-NR, ANGEST.BERUF) ANGEST.ANGNR = 20} X.BERUF:='ÜBERSETZER' UPDATE X Seite 22 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.6 Beispiel für relationale Abfragesprachen In diesem Kapitel diskutieren wir kurz zwei implementierte relationale Abfragesprachen: • SQL (früher SEQUEL) • QUERY BY EXAMPLE. 5.6.1 Die Abfragesprache SQL Mit SQL wurde versucht, eine Abfragesprache für den NichtProgrammierer zu entwickeln, die ohne mathematische Notation, wie z.B. Quantoren, auskommt.Eines der zentralen Konzepte von SQL ist das der Abbildung (mapping), womit eine spezielle Art der Selektion gefolgt von einer Projektion gemeint ist. Die allgemeine Form einer Abbildung ist die folgende: SELECT A1, ..., An FROM R WHERE Prädikat (R). Seite 23 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Einfache Abfrage) Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen der Angestellten in Abteilung 10. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT NAME FROM ANGEST WHERE ABT-NR = 10 Zweites Beispiel (Einfache Abfrage) Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen der Angestellten in den Abteilungen 10, 20 und 30. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT NAME FROM ANGEST WHERE ABT-NR IN (10, 20, 30) Alternativ hierzu könnte man natürlich auch anstatt unter Verwendung der Mengenschreibweise schreiben: WHERE ABT-NR = 10 OR ABT-NR = 20 OR ABT-NR = 30 Seite 24 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Geschachtelte Abfrage) Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen aller Angestellten, die an Projekt 10 arbeiten. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT NAME FROM ANGEST WHERE ANGNR IN SELECT ANGNR FROM ANG-PRO WHERE PNR = 10 Seite 25 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Vergleichende Abfragen) Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen aller Angestellten, die denselben Beruf haben und in derselben Abteilung arbeiten wie der Angestellte 127. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT NAME FROM ANGEST WHERE <BERUF, ABT-NR> = SELECT BERUF, ABT-NR FROM ANGEST WHERE ANGNR = 127 Beispiel Es soll die folgende Abfrage in SQL formuliert werden: Finde für jedes Projekt den Namen des Projektleiters. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT PROJEKT.PNR, ANGEST.NAME FROM PROJEKT, ANGEST WHERE PROJEKT.P-LEITER = ANGEST.ANGNR Seite 26 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen der Angestellten, die mehr verdienen als ihr Manager. Wir nehmen dazu an, dass die Relation ANGEST erweitert ist um die Attribute MGR-NR (Angestelltennummer des Managers) und GEHALT des Angestellten. Damit lautet dann die Umsetzung in der SQL-Abfragesprache: SELECT NAME FROM ANGEST AX WHERE GEHALT > SELECT GEHALT FROM ANGEST WHERE ANGNR = AX.MGR-NR Seite 27 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel Es soll die folgende Abfrage in SQL formuliert werden: Finde die Namen der Angestellten, die zu weniger als 50 % an Projekten mitarbeiten. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT NAME FROM ANGEST T WHERE 50 > SELECT SUM (PROZ-ARB) FROM ANG-PRO WHERE ANGNR = T.ANGNR Beispiel (Group-By) Es soll die folgende Abfrage in SQL formuliert werden: Gib für jede Abteilung deren Nummer und das Durchschnittsgehalt aller Angestellten dieser Abteilung aus. Die Umsetzung in der SQL-Abfragesprache lautet dann: SELECT ABT-NR, AVG(GEHALT) FROM ANGEST GROUP BY ABT-NR Seite 28 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Beispiel (Update) In diesem Beispiel wird der folgende SQL-Ausdruck betrachtet: UPDATE ANGEST SET GEHALT = GEHALT x 1.1 WHERE ABT-NR = 30 Einbettung von SQL in eine Wirtsprache Bemerkenswert ist, dass SQL im System R nicht nur als selbständige Sprache, sondern auch mit PL/I als Wirtssprache verwendet werden kann. SQL-Ausdrücke können in diesem Falle Variablen des umgebenden PL/I-Programmes enthalten. SELECT ... FROM ... WHERE ANG-NR = $ Z Aufbau von Sichten DEFINE VIEW ZDA 100 (ABT-NR, ANZAHL) AS SELECT ABT-NR, ANZAHL FROM ZAHL-DER-ANGEST WHERE ANZAHL > 100 Seite 29 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.6.2 Die Abfragesprache Query-by-Example Query-by-Example wurde als Sprache entworfen, bei der der Benutzer seine Anfrage nicht in einer linearen Notation aufschreibt, sondern im Dialog am Bildschirm erstellt, wobei er einen speziellen graphischen Editor benutzt. Dieser Editor stellt dem Benutzer auf Anforderung eine oder mehrere Tabellenskelette zur Verfügung, in die er dann alle benötigten Einträge macht. Für den Für Attribut- Für Attribut- Für Attribut- Relationennamen namen namen namen Für Befehle Für Für Für Beispieltupel Beispieltupel Beispieltupel Die Anfrage wird nun dadurch spezifiziert, dass ein Beispieltupel für eine mögliche Antwort in diese Tabelle eingesetzt wird. Man betrachte dazu etwa die folgende Anfrage: Seite 30 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Finde die Namen aller Angestellten mit Beruf = INGENIEUR in der Abteilung 30. ANGEST ANGNR NAME ANSCHRIFT BERUF P._MEYER ABT-NR INGENEUR 30 In gleicher Weise geht man vor, wenn mehrere Relationen angesprochen sind, wie es bei der folgenden Anfrage zu sehen ist. Finde die Namen aller Mitarbeiter an Projekt 10. ANGEST ANGNR NAME _300 ... P._MEYER ANG-PRO PNR ANGNR 10 _300 Finde für alle Angestellten, die an Projekt 77 mitarbeiten: Name, Anschrift und Prozent-Arbeitszeit. Seite 31 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik ANGEST ANGNR NAME _300 ANG-PRO ANSCHRIFT ... _MEYER _KA PNR ANGNR PROZ-ARBEZEIT 77 _300 _10 Da keine der Relationen alle auszugebenden Größen liefern kann, verlangen wir vom System ein neues Relationenskelett und tragen dort die auszugebenden Größen folgendermaßen ein. P._MEYER P._KA P._10 Finde die Angestellten mit einem Gehalt > DM 2000. Diese Anfrage wird in Query-by-Example folgendermaßen formuliert: ANGEST NAME ANGNR P._PETER Seite 32 GEHALT > 2000 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Der Operator UN. (unique) wandelt eine durch ALL. erzeugte Sammlung von Werten in eine Menge um, d.h. er eliminiert Duplikate. NAME WOHNORT ... P.CNT.ALL._D ALL. würde alle Wohnorte (einschließlich der Duplikate) ermitteln, CNT. (COUNT, zähle) würde diese Orte zählen. NAME WOHNORT P.CNT.UN.ALL._D Finde den Angestellten mit dem größten Gehalt. Zur Formulierung dieser Anfrage in Query-by-Example könnten wir die Maximumfunktion MAX verwenden, wir können aber auch den Negationsoperator wie folgt heranziehen. ANGEST NAME ANG-NR P._NAME GEHALT _1000 >_1000 Seite 33 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.7 Optimierung von Abfragen Anfrageoptimierung ist ein sehr komplexes Problem - und in Wirklichkeit optimieren die Systeme nicht, sondern ermitteln lediglich eine mit großer Wahrscheinlichkeit gute Ausführungsstrategie. Schon das kleine Beispiel zeigt, welche Faktoren bei der Optimierung zu berücksichtigen sind: • Wie kann die Anfrage umformuliert werden, so dass sie äquivalent zur ursprünglichen Anfrage ist: das System muss erkennen, dass R[A=B]S[C=10] äquivalent ist zu (S[C=10])[B=A]R. • Die Statistik der Datenbank (wieviele Tupel in jeder Relation, Prozentsatz der Tupel in S mit C=10, wieviele Tupel mit A=B in R und S, usw.) • Sind die Tupel einer Relation sortiert? • Welche Zugriffspfade gibt es (können wir die Selektion oder den Verbund Sekundärindexe oder Verbindungen ausnützen)? Seite 34 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.7.1 Algebraische Optimierung Wir betrachten in diesem Unterkapitel die Relationenalgebra. Für andere Sprachen gelten die folgenden Ausführungen sinngemäß SEL C = 10 JOIN A=B R S B=A JOIN R SEL S Seite 35 C = 10 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik Einige heuristische Regeln für die algebraische Optimierung lassen sich folgendermaßen zusammenfassen: 1. Selektionen auf dem gleichen Operanden werden zu komplexen Selektionen zusammengefasst. Die folgende Anfrage (S[C=20][B=A] R)[B=10] wird einfach umgeformt zu (S [C=20 ∧ B=10]) [B=A]R SEL SEL JOIN JOIN SEL SEL Alle Selektionen, die sich auf jeweils eine Relation beziehen, werden vor dem Join ausgeführt. Seite 36 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 2. Projektionen, die keine Eliminierung von Duplikaten erfordern, werden so früh wie möglich, jedoch nicht vor einer Selektion durchgeführt. Sie werden soweit wie möglich zu den Blättern des Operatorbaumes verschoben. Eine Projektion erfordert dann keine Elimination von Duplikaten, wenn dabei zumindest ein Schlüssel des Relationenschemas erhalten bleibt. Ist z.B. gegeben R(A,B,C,D) ein Relationenschema mit (A,B) Schlüssel, so kann R[B,C,D] identische Tupel enthalten, die dann entfernt werden müssen. Da das Auffinden identischer Tupel im allgemeinen aufwendig ist, wird in diesem Falle die Projektion möglichst spät (d.h. meist auf kleinen Relationen) durchgeführt. Seite 37 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 3. Projektionen, die eine Eliminierung von Duplikaten erfordern, sind also soweit als möglich zur Wurzel des Operatorbaumes zu verschieben. Suche gemeinsame Teilbäume des Operatorbaums. Wenn das Ergebnis des gemeinsamen Teilausdruckes nicht eine große Relation ist, und wenn diese Relation vom Sekundärspeicher in sehr viel kürzerer Zeit gelesen werden kann, als zu ihrer Berechnung notwendig ist, so lohnt es sich, diese Zwischenrelation nur einmal zu berechnen und abzuspeichern. (Hier kommt es also nicht auf eine Umstrukturierung der Anfrage an, sondern auf das Erkennen gleicher Teilbäume). 5.7.2 Optimierung auf der physischen Ebene Neben der Umformung algebraischer Ausdrücke ist natürlich zur Ermittlung einer günstigen Abfragestrategie die physische Organisation der Daten zu berücksichtigen. Seite 38 Prof. Dr. M.-R. Wolff BWL / Wirtschaftsinformatik 5.7.3 Ausnutzung von Sekundärindexen Existiert ein Index für B, so ist für jedes Tupel in R sofort die zugehörige Tupelmenge in S feststellbar - und damit die Tupelmenge des Verbundes konstruierbar. Existiert kein Index für A oder B, so lohnt es sich im allgemeinen, einen solchen Index für die gerade auszuführende Verbundoperation anzulegen. Seite 39