Kapitel 6 Das relationale Modell 1 Das Relationale Modell Wertebereiche (Domänen): Relation: Wertebereich von Attribut A: Relation Element von R: Schema der Relation: aktuelle Ausprägung: D1, D2 ,, ... , Dn R D1 D2 ... Dn dom(A) R dom (A1) dom (A2) ... dom (An) Tupel sch(R) = A1, A2 ,, ... , An R bei Datenbanksystemen zusätzlich zum Wertebereich noch Bezeichner: Telefonbuch : { [Name : string, Adresse: string, TelefonNr : integer] } Telefonbuch : { [Name, Adresse, TelefonNr ] } 2 Konzeptuelles Schema der Universität voraussetzen Vorgänger N MatrNr Name N Studenten Sem VorlNr M hören Vorlesungen M N N prüfen Note N Fachgebiet Titel 1 Rang 1 arbeitenFür SWS lesen 1 Assistenten Nachfolger M Professoren Raum is-a PersNr Angestellte Name 3 Initial-Entwurf für Entity-Typen Pro Entity-Typ eine Relation (Schlüssel unterstrichen): Studenten Vorlesungen Professoren Assistenten : {[ MatrNr : integer, Name : string, Semester : integer] } : {[ VorlNr : integer, Titel : string, SWS : integer] } : {[ PersNr : integer, Name : string, Rang : string, Raum : integer] } : {[ PersNr : integer, Name : string, Fachgebiet : string] } 4 Initial-Entwurf für Relationship-Typen Pro Relationship-Typ eine Relation: hören lesen arbeitenFür voraussetzen prüfen : : : : : {[ MatrNr : integer, VorlNr : integer] } {[ PersNr : integer, VorlNr : integer] } {[ AssiPersNr : integer, ProfPersNr : integer] } {[ Vorgänger : integer, Nachfolger : integer] } {[ MatrNr : integer, VorlNr : integer, PersNr : integer, Note : decimal] } Fremdschlüssel := Schlüsselattribut für referierte Entity-Typen 1:N-Beziehung entspricht einer Abbildung: lesen : Vorlesungen Professoren prüfen : Studenten Vorlesungen Professoren 5 Elimination bei gleichen Schlüsseln Vorlesungen Professoren lesen : {[ VorlNr : integer, Titel : string, SWS : integer] } : {[ PersNr : integer, Name : string, Rang : string, Raum : integer] } : {[ PersNr : integer, VorlNr : integer] } Relationen mit gleichem Schlüssel können zusammengefaßt werden (ggf. Umbenennung erforderlich): Vorlesungen Professoren : {[ VorlNr : integer,Titel : string, SWS : integer, gelesenVon : integer] } : {[ PersNr : integer, Name : string, Rang : string, Raum : integer] } 6 Elimination bei ungleichen Schlüsseln Vorlesungen : {[ VorlNr : integer, Titel : string, SWS : integer] } Professoren : {[ PersNr : integer, Name : string, Rang : string, Raum : integer] } Relationen mit ungleichem Schlüssel sollten nicht zusammengefaßt werden: Professoren' : {[ PersNr, liestVorl, Name, Rang, Raum ] } PersNr liestVorl Name Rang Raum 2125 2125 2125 Sokrates Sokrates Sokrates C4 C4 C4 226 226 226 5041 5049 4052 7 Elimination bei 1:1-Beziehung 1 Professoren PersNr 1 Dienstzimmer ... Räume ... RaumNr ... Professoren : {[ PersNr, Name, Rang ] } Räume : {[ RaumNr, Größe, Lage ] } Dienstzimmer : {[ PersNr, RaumNr ] } Professoren Räume : {[ PersNr, Name, Rang, Raum] } : {[ RaumNr, Größe, Lage ] } Professoren Räume : {[ PersNr, Name, Rang] } : {[ RaumNr, Größe, Lage, ProfPersNr ] } Obacht: Nullwerte ! 8 Generalisierung Professoren Assistenten : {[ PersNr, Name, Rang, Raum] } : {[ PersNr, Name, Fachgebiet] } Obertyp mit Gemeinsamkeiten: Angestellte : {[ PersNr, Name] } Aber: Die Information zu [2125, Sokrates, C4, 226] ist jetzt verteilt auf [2125, Sokrates] [2125, C4, 226] 9 Schwacher Entity-Typ GebNr RaumNr Größe Höhe Räume N liegt_in 1 Gebäude Die Beziehung liegt_in wird verlagert in den Entity-Typ Räume: Räume : {[ GebNr, RaumNr, Größe] } Die Beziehung bewohnt : Professoren Räume erfordert drei Attribute bewohnt : {[ PersNr, GebNr, RaumNr] } Alternative (bei geringer Gebäudeinformation): Professoren: {[PersNr, Name, Rang, Raum]} 10 Relationenschema Studenten Vorlesungen Professoren Assistenten hören voraussetzen prüfen : : : : : : : {[ MatrNr : integer, Name : string, Semester : integer] } {[ VorlNr : integer, Titel : string, SWS : integer, gelesenVon : integer] } {[ PersNr : integer, Name : string, Rang : string, Raum : integer] } {[ PersNr : integer, Name : string, Fachgebiet : string, Boss : integer] } {[ MatNr : integer, VorlNr : integer] } {[ Vorgänger : integer, Nachfolger : integer] } {[ MatrNr : integer, VorlNr : integer, PersNr : integer, Note :decimal] } 11 Ausprägung Professoren, Assistenten Professoren Assistenten PersNr Name Rang Raum 2125 2126 2127 2133 2134 2136 2137 Sokrates Russel Kopernikus Popper Augustinus Curie Kant C4 C4 C3 C3 C3 C4 C4 226 232 310 52 309 36 7 PersNr Name 3002 3003 3004 3005 3006 3007 Platon Aristoteles Wittgenstein Rhetikus Newton Spinoza Fachgebiet Boss Ideenlehre 2125 Syllogistik 2125 Sprachtheorie 2126 Planetenbewegung 2127 Keplersche Gesetze 2127 Gott und Natur 2134 12 Ausprägung Vorlesungen, Studenten Vorlesungen Studenten VorlNr Titel SWS 5001 5041 5043 5049 4052 5052 5216 5259 5022 4630 Grundzüge 4 Ethik 4 Erkenntnistheorie 3 Mäeutik 2 Logik 4 Wissenschaftstheorie 3 Bioethik 2 Der Wiener Kreis 2 Glaube und Wissen 2 Die 3 Kritiken 4 MatrNr Name Semester 24002 25403 26120 26830 27550 28106 29120 29555 Xenokrates Jonas Fichte Aristoxenos Schopenhauer Carnap Theophrastos Feuerbach 18 12 10 8 6 3 2 2 gelesenVon 2137 2125 2126 2125 2125 2126 2126 2133 2134 2137 13 Ausprägung hören, voraussetzen, prüfen voraussetzen hören MatrNr VorlNr 26120 27550 27550 27550 28106 28106 28106 27550 29120 29120 29555 25403 29555 5001 5001 4052 5041 4052 5216 5259 4630 5041 5049 5022 5022 5001 Vorgänger Nachfolger 5001 5001 5001 5041 5043 5041 5052 5041 5043 5049 5216 5052 5052 5259 prüfen MatrNr VorlNr PersNr Note 28106 25403 27550 5001 5041 4630 2126 2125 2137 1.0 2.0 2.0 14 Abfragesprachen • Relationenalgebra (prozedural): konstruktive Verknüpfung durch Operatoren wie , , ... . • Relationenkalkül (deklarativ): Beschreibung des gewünschten Ergebnisses mit Formel der Prädikatenlogik 1. Stufe unter Verwendung von , , , , • SQL (kommerziell): umgangssprachliche Mischung aus Relationenalgebra und Relationenkalkül • Query by Example (für Analphabeten): Ausfüllen eines Gerüstes mit Beispiel-Einträgen 15 Relationenalgebra Operanden = Relationen Operatoren: •Selektion •Projektion •Vereinigung •Mengendifferenz •Kartesisisches Produkt •Umbenennung abgeleitete Operatoren: • Verbund • Durchschnitt • Division 16 Selektion Semester >10(Studenten) MatNr Name Semester 24002 25403 Xenokrates Jonas 18 12 Selektionsprädikat durch Formel mit • Attributnamen oder Konstanten als Operanden • arithmetische Vergleichsoperatoren • logische Operatoren: 17 Projektion Rang (Professoren) Rang C4 C3 per definitionem keine Duplikate ! 18 Vereinigung PersNr, Name(Assistenten) PersNr, Name(Professoren) PersNr Name 2125 3002 Sokrates Platon . . . 19 Mengendifferenz MatrNr (Studenten) – MatrNr (prüfen) MatrNr 24002 26120 26830 . . . 20 Kartesisches Produkt Professoren hören PersNr Name Rang Raum MatrNr VorlNr 2125 ··· 2125 ··· 2137 Sokrates ··· Sokrates ··· Kant C4 ··· C4 ··· C4 226 ··· 226 ··· 7 26120 ··· 29555 ··· 29555 5001 ··· 5001 ··· 5001 sch(R S) := sch(R) sch(S). Ggf. durch Voranstellung des Relationennamens identifizieren: R.A 21 Umbenennung von Relationen und Attributen Dozenten(Professoren) Zimmer Raum(Professoren) finde Vorgänger vom Vorgänger von Vorlesung 5216: V1.Vorgänger(V1.Nachfolger = V2.Vorgänger V2.Nachfolger=5216 (V1(voraussetzen) V2(voraussetzen))) V1 V2 Vorgänger Nachfolger Vorgänger Nachfolger 5001 ··· 5001 ··· 5052 5041 ··· 5041 ··· 5259 5001 ··· 5041 ··· 5052 5041 ··· 5216 ··· 5259 22 Relationenalgebra Operanden = Relationen Operatoren: • Selektion • Projektion • Vereinigung • Mengendifferenz • Kartesisisches Produkt • Umbenennung abgeleitete Operatoren: • Verbund • Durchschnitt • Division 23 Natürlicher Verbund (Join) R habe m+k Attribute A1, A2 ,, ... , Am , B1, B2 ,, ... , Bk S habe n+k Attribute B1, B2 ,, ... , Bk , C1, C2 ,, ... , Cn R S := A1,..., Am, R.B1,..., R.Bk, C1,...,Cn(R.B1=S.B1 ... R.Bk=S.Bk(R S)) (Studenten hören) Vorlesungen Studenten (hören Vorlesungen) Studenten hören Vorlesungen MatrNr Name Semester VorlNr Titel 26120 25403 28106 ... Fichte Jonas Carnap ... 10 12 3 ... 5001 5022 4052 ... Grundzüge Glaube und Wissen Wissenschaftstheorie ... SWS 4 2 3 ... gelesenVon 2137 2137 2126 ... 24 Natürlicher Verbund mit Umbenennung Vorlesungen der C4-Professoren: Namen der C4-Professoren mit ihren Vorlesungstiteln: Name, Titel (Professoren PersNr gelesenVon(Vorlesungen)) Name Titel Sokrates Sokrates Sokrates Kant Kant ... Logik Ethik Mäeutik Die 3 Kritiken Grundzüge ... 25 Theta-Join Statt Gleichheit bei Attributen jetzt Prädikat : R A1 < B1 A2=B2 A3 < B5 S gleichwertig zu R S := (R S) Erweitere Professoren und Assistenten um ein Attribut Gehalt. Verbinde Professoren mit höherverdienenden Assistenten: Professoren Professoren.Gehalt < Assistenten.Gehalt Boss =Professoren.PersNr Assistenten 26 Outer Join Bisher: Inner Join (Tupel ohne Partner gehen verloren) Jetzt: Outer Join (rette partnerlose Tupel): • left outer join: Tupel der linken Argumentrelation bleiben erhalten • right outer join: Tupel der rechten Argumentrelation bleiben erhalten • full outer join: Tupel beider Argumentrelationen bleiben erhalten 27 Outer Joins L R inner Join A B C C D E A B C D E a1 a2 b1 b2 c1 c2 c1 c3 d1 d2 e1 e2 a1 b1 c1 d1 e1 left outer Join outer Join right outer Join A B C D E A B C D E A B C D E a1 a2 b1 b2 c1 c2 d1 - e1 - a1 - b1 - c1 c3 d1 d2 e1 e2 a1 a2 - b1 b2 - c1 c2 c3 d1 d2 e1 e2 28 Mengendurchschnitt Personalnummer der C4-Professoren, die mindestens eine Vorlesung halten: PersNr (PersNr gelesenVon(Vorlesungen)) PersNr (Rang=C4(Professoren)) Äquivalenz: R S = R \ (R \ S) R S 29 Division R sei r-stellig, S sei s-stellig, sch(S) sch(R) R S := { t = t1, t2, ..., tr-s u S : tu R} Anfangsstücke von R, zu denen sämtliche Verlängerungen mit Tupeln aus S in R liegen R M V m1 m1 m1 m2 m2 v1 v2 v3 v2 v3 S RS V M v1 v2 = m1 Namen der Studenten, die alle 4-stündigen Vorlesungen hören: Name (Studenten ( Hören VorlNr (SWS=4(Vorlesungen)))) 30 Ableitung der Division (Projektion über Index statt Namen) T := 1, ..., r-s (R) TS (T S) \ R V := 1, ..., r - s ((T S) \ R) T\V alle Anfangsstücke kombiniert mit allen Verlängerungen aus S davon nur solche, die nicht in R sind davon die Anfangsstücke davon das Komplement 31 Operatorbaum-Darstellung Name Studenten Hören VorlNr SWS=4 Vorlesungen 32 Relationenkalkül Bisher: Relationenalgebra (konstruktiv) Jetzt: Relationenkalkül (deklarativ) • Der relationale Tupelkalkül (binde freie Variable an Tupel) • Der relationale Domänenkalkül (binde freie Variable an Domäne) 33 Der relationale Tupelkalkül Sei t eine Tupelvariable (repräsentiert ein Tupel einer Relation) sei P ein Prädikat unter Verwendung von Ein Ausdruck im relationalen Tupelkalkül hat die Form { t P(t) } t ist eine freie Variable, die unter Berücksichtigung des Prädikats sukzessive an die Tupel einer Relation gebunden wird 34 Der relationale Tupelkalkül Alle C4-Professoren: { p p Professoren p.Rang = 'C4' } Alle Professoren mit den Personalnummern íhrer Assistenten: { [ p.Name, a.PersNr ] p Professoren a Assistenten p.PersNr = a.Boss } Alle Studenten, die sämtliche 4-stündigen Vorlesungen hören: { s s Studenten v Vorlesungen ( v.SWS=4 h hören (h.VorlNr = v.VorlNr h.MatrNr = s. MatrNr)) } 35 Tupelkalkül versus Relationenalgebra Sicherer Ausdruck: Ergebnis ist wieder Teilmenge der Domäne. Z.B. nicht sicher: { n (n Professoren) } Bei Beschränkung auf sichere Ausdrücke sind Tupelkalkül und Relationenalgebra gleichmächtig. 36 Der relationale Domänenkalkül Seien v1, v2, ..., vn Domänenvariable (repräsentieren Attributwerte) Sei P ein Prädikat unter Verwendung von Ein Ausdruck im relationalen Domänenkalkül hat die Form { [v1, v2, ..., vn] P (v1, v2, ..., vn ) } v1, v2, ..., vn sind freie Domänenvariable, die sukzessive unter Berücksichtigung des Prädikats an Wertebereiche der Attribute gebunden werden. 37 Der relationale Domänenkalkül (Beispiel) Alle Professorennamen mit den Personalnummern ihrer Assistenten: { [n,a] p, r, t ( [p, n, r, t ] Professoren v, w ( [a, v, w, p ] Assistenten )) } Bei Beschränkung auf sichere Ausdrücke sind die Relationenalgebra und der relationale Domänenkalkül gleichmächtig. 38 QBE Fordere Tabellenskelett an und fülle es exemplarisch: Vorlesungen VorlNr Titel p._t SWS >3 gelesenVon Grundzüge Ethik Logik Die 3 Kritiken Im Domänenkalkül: { [t] | v, s, r ( [v, t, s, r] Vorlesungen s > 3) } 39 QBE Join Liste alle Professoren, die Logik lesen: Vorlesungen VorlNr Titel SWS Logik Professoren PersNr Name Rang p._n _otto gelesenVon _otto Raum Sokrates 40 QBE Condition Box Liste alle Studenten, die in einem höheren Semester sind als Feuerbach: Studenten MatrNr Name p._s Feuerbach Semester _a _b conditions _a > _b 41 QBE Gruppierung Gruppierung: Aggregatfunktionen: 2125 2126 2127 2133 2134 2136 2137 Sokrates Russel Kopernikus Popper Augustinus Curie Kant C4 C4 C3 C3 C3 C4 C4 226 232 310 52 309 36 7 g. sum. avg. min. max. all. Liste für jede Gehaltsgruppe den Namen des Professors mit der größten Personalnummer: Professoren PersNr p.min._x 2137 2133 Name p._x Kant Popper Rang Raum p.g. C4 C3 42 QBE Gruppierung 5001 5041 5043 5049 4052 5052 5216 5259 5022 4630 Grundzüge Ethik Erkenntnistheorie Mäeutik Logik Wissenschaftstheorie Bioethik Der Wiener Kreis Glaube und Wissen Die 3 Kritiken 4 4 3 2 4 3 2 2 2 4 2137 2125 2126 2125 2125 2126 2126 2133 2134 2137 Liste für jeden Professor die Summe seiner Vorlesungsstunden: Vorlesungen VorlNr Titel SWS p.sum.all._x 10 8 2 2 8 gelesenVon p.g. 2125 2126 2133 2134 2137 43 QBE Einfügen Füge neuen Studenten ein: Studenten i. MatrNr 4711 Name Wacker Semester 5 44 QBE Ändern Setze Semesterzahl von Feuerbach auf 3: Studenten MatrNr Name Feuerbach Semester u.3 45 QBE Löschen Entferne Sokrates und seine Vorlesungen: Professoren d. PersNr Name _x Sokrates Vorlesungen d. VorlNr _y hören d. Titel VorlNr _y Rang SWS Raum gelesenVon _x MatrNr 46