Die Grundterminologie Relationale Objekte • Relation (Tabelle) • Attribut (Spalte, Feld) • Domain (Wertebereich) • Degree(Ausdehnungsgrad der Tabelle) • Tupel (Datensatz, Rekord) • Cardinalität • Key (Schlüsselfeld) • Candidate – Key (eindeutiger Schlüssel) • Primary – Key ( Hauptschlüssel) • Alternate – Key (Zweitschlüssel) • Foreign – Key (Fremdschlüssel) 1 Relationale Integritätsregeln • Entity – Integrität • Referentielle Integrität Relationale Operationen • Restriction (Zeilenselektion) • Projection (Spaltenselektion) • Union (Vereinigung) • Intersection (Schnittmenge) • Difference (Diferenz) • Product (Kartesisches Produkt) • Join (Verbindung) • Division (Division) 2 Datenmodelle In jedem System, in dem Daten verwaltet werden, müssen diese eine bestimmte Struktur haben. Diese Struktur heißt "SCHEMA" einer Datenbank. Diese Struktur, zusammen mit den assoziirten Operatoren wird als Datenmodell, logisches Modell oder konzeptuelles Modell bezeichnet. Das bekannste und zugleich abstakteste Modell stammt von 1970 und wird relationales Datenbankmodell gennant. Der verfasser heisst CODD. 3 Codd’s Principles • Jede Relation muss ein Identifikationsatributt haben (falls dieser nicht existiert muss er hergestellt werden); • Jedes Attribut muss atomar (unzerteilbar) sein; • Jedes Tupel einer Relation muss für ein Attribut einen einzige Wert enthalten; • Jedes Attribut mus direkt und vollständig vom Identifikationsatributt abhängen; • Ein Attribut darf nur ein einziges Mal innerhalb einer Relation auftreten. Um Codds Prinzipien einzuhalten und um die Redundanzheit innerhalb einer DB zu reduzieren, muss man die "Normalisierung von Relationen" zu benutzen. 4 Relationenalgebra Um die Relationen zu manipulieren, d.h. in einen vom Benutzer der Datenbank gewünschten Zustand zu bringen, gibt es eine Anzahl von Operatoren. Diese Operatoren nehmen Relationen als Input an und erzeugen Relationen. 5 Basisoperationen Es gibt 5 Basisioperationen (genügend um Algebra zu definieren und andere Operationen damit auszudrücken): • Vereinigung (Union) R S • Differenz (Set difference) R – S • Kartesisches Produkt(Product) R x S • Projektion (Projection) Ak... (R) • Restriktion (Selection) F (R) 6 Es seien die Relationen R und S als Basisirelationen gegeben: R A a d c B b a b C c f d S D E F b g a d a f 7 Die Vereinigung R S ist auch eine Relation (E) und zwar die Menge aller Tupel, die in R oder S oder in beiden Relationen sind. Die Verknüpfung zweier Relationen mit UNION ist nur erlaubt, wenn beide Relationen den gleichen Degree besitzen und jedes Attribut der ersten Relation kompatibel ist mit dem korrespondierenden Attribut der zweiten Relation (d.h. dass die Folge der Attribute die selbe ist. Die Folge und nicht die Namen der Attribute!). Wenn diese Voraussetzung erfüllt ist, sind diese zwei Relationen "UNION-kompatibel". 8 Differenz. Die Differenz R – S ist eine Relation E. Diese Relation ist die Menge aller Tupel die in R aber nicht in S enthalten sind. Die Relationen R und S müssen denselben Degree haben und die Folge der Attribute muß dieselbe sein. (Die Folge und nicht die Namen der Attributen!). Auch bei der Differenz müssen die Relationen UNION-kompatibel zueinander sein. 9 Kartesisches Produkt. Seien R und S Relationen mit Degree D1 und D2. Das kartesische Produkt R x S ist die Menge aller (D1+D2) gradigen Tupel, deren erste D1 Elemente ein Tupel in R und deren letzte D2 Elemente ein Tupel aus S darstellen. 10 Man bezeichnet: E = PRODUCT(R,S) , wobei E A a a d d c c B b b a a b b C D c b c d f b f d d b d d E g a g a g a F a f a f a f Die Ergebnisrelation (E) hat die Cardinalität C(E) = C(R) * C(S) , wenn sie nicht Duplikate enthält! Also, man bildet das kartesische Produkt aus zwei Relationen, indem man jedes Tupel der ersten Relation mit jedem Tupel der zweiten Relation kombiniert (es wird also jede Kombinationsmöglichkeit der beiden Relationen gebildet). 11 Projektion. Bei der Projektion werden einzelne Spalten einer Relation auf eine neue Relation abgebildet. Die Projektion einer Relation ist gleichbedeutend mit einer Ausschnittbildung der Relation in vertikaler Richtung. Sei R eine Relation mit Degre k. Dann ist A1,A2,. . ., Am(R) die Abbildung von R auf die Komponenten A1,A2, ..., Am. Die entstehende Relation ist m-gradig. 12 Die formalen Beschreibungen sind: E = A1,A2,. . ., Am(R) E = R[A1,A2,...,Am] E = PROJ(R,<A1,A2, . . ., Am>) Der Algorithmus: 1. Man löscht aus der Relation R alle Attribute welche nicht als Parametern der Projektion erwähnt sind. 2. Man liest die Tupeln in der bestimmten Reihenfolge. 3. In der Relation RP löscht man die Duplikate (Tupeln !) 13 Beispiel. R A B C a c a c b a a b c a b b C,A(R) C A a b a b a c a c 14 Restriktion. Manchmal auch Selektion bezeichnet, diese Operation entwickelt eine Relation, indem nur bestimmte Tupel berücksichtig werden. Die Auswahl der Tupel erfolgt dieses Mal zusätzlich in horizontaler Art. Die Auswahl der Tupel wird nach einem bestimmten Kriterium gemacht. 15 Die Bedingung ist eine Formel. Diese Formel enthält: • Operanden (Konstante oder Komponente einer Relation); • Aritmethische Vergleichsoperatoren <, =, >, <>; • Logische Operatoren AND, OR, NOT. Sei F die Formel. Dann ist die Selektion F(R) die Menge aller Tupel t in R, für die die Formel F wahr ist. 16 Beispiel. Es sei die Relation R A B C a d c b a b c f d und die Formel F: B = b. Die Ergebnisrelation E ist E A B C a c b b c d , wobei E = B=b (R) 17 Schnittmenge. Ermittelt gleiche Tupel aus zwei Relationen. Die Relationen müssen UNION-kompatibel zueinander sein. Das Ergebnisrelation ist die Menge der Tupel welche sowohl R als auch S gehören. Bemerkung. R S kann als R S = R – (R-S) ausgedrückt werden. 18 Es seien die Relationen R und S gegeben: R A B C a b c d a f c b d S D E F b g a d a f RS => d a f 19 JOIN (Verbund). Durch eine Verknüpfung werden zwei Relationen zu einer Relation verbunden, indem die Attribute vergleicht werden und bei Übereinstimmung die Tupel kombiniert werden. Der Join verbindet zwei Relationen ähnlich wie das kartesische Produkt. 20 Die Ergebnisrelation E kann wie folgt berechnet werden: • Man bildet das kartesische Produkt RxS. • Für jedes Attribut, das sowohl in R als auch in S erscheint, selektiert man die Tupel, für die die Werte der gleichnamigen Attribute übereinstimmen. • Eine der gleichen Spalten wird ausprojektiert. 21 Die allgemeine Form des Join ist das Theta-Join, geschrieben R S wobei eine Formel ist, die Elemente der Spalten i und j vergleicht. Der Vergleichsoperatoren sind =, >, <, <>, >=, <=. Die formale Beschreibung ist: E = JOIN(R, R.Ak S.Ak, S) wobei E = PROJ(REST(PRODUCT(R,S), R.A1 S.A1), <R.A1, . . ., R.An, S.A1, ..., S.Am>) 22 Beispiel Relation R Relation S A B C D a w c y b x d z c y PRODUCT(R,S) A B C D a w c y a w d z b x c y b x d z c y c y c y d z JOIN(R, B<>D, S) A B C D A w c y A w d z B x c y B x d z C y d z Der Operator Theta- Join 23 Ein Theta-Join mit dem Vergleich-operator "=", wird Equi-Join gennant, wobei auch hier wie bei allen Theta-Joins die Ergebnis-relation beide Join Attribute beinhaltet. E = PROJ(REST(PRODUCT(R,S), R.A1 = S.A1), <R.A1, . . ., R.An, S.A1, ..., S.Am>) 24 Beispiel Relation R A a b c B w x y Relation S C D c y d z PRODUCT(R,S) A B a w a w b x b x c y c y Der Operator JOIN(R, B=D, S) C D A B C D c y c y c y d z c y d z c y d z Equi-Join 25 Natural-Join. Ein Equi-Join,dessen Ergebnis relation die beiden gleichen Attributwerte nur einmal beinhaltet, heißt natürlicher Join. E = PROJ(REST(PRODUCT(R,S), R.A1 = S.A1), <R.A1, . . ., R.An, S.A2, ..., S.Am>) 26 Beispiel Relation R A B a w b x c y Relation S C D c y d z PRODUCT(R,S) JOIN(R, B=D, S) A B C D A B C a w c y c y c a w d z b x c y b x d z c y c y c y d z Der Operator Natural-Join 27 Folgende Regeln gelten für Join’s: • Die Attribute, über die der Join ausgeführt wird (Join-Attribute), müssen keine Keys sein. • Die Join-Attribute der beiden betroffenen Relationen müssen nicht den gleichen Namen haben. • Jede Relation kann mit jeder anderen gejoint werden (auch mit sich selbst). 28 Auto-Join. Der Auto-Join, auch Self-Join genannt, ist eine Verknüpfung einer Relation mit sich selbst. E = REST(PRODUCT(R,R), R.A1 = R.A2). Inner-Join, Outer-Join. Der “normale” Join erzeugt nur Tupel in der Ergebnisrelation, wenn der Attributwert der ersten Relation in der zweiten Relation vorkommt. Dieser Join wird auch INNER-JOIN genannt. 29 Beispiel Relation R Relation S (Inner) JOIN(R, B=D, S) A B C D A B C D a w c y c y c y b x d z c y Der Operator Inner-Join Im Gegensatz dazu erzeugt der Outer-Join in der Ergebnisrelation zumindest alle Tupel einer der beiden Relationen. 30 Beispiel Relation R A a b c B w x y Relation S C c d D y z (linker Outer) JOIN(R, B*=D, S) A a b c B w x y C ? ? c D ? ? y Der Operator Linker Outher-Join Beispiel Relation R Relation S A B C D a w c y b x d z c y Der Operator Rechter (rechter Outer) JOIN(R, B=*D, S) A c ? B y ? C c d D Y Z Outer-Join 31 Beispiel: Es seien die Relationen : ARTIKEL A_Nr A_Bez A_Art Lief_Nr 1 ACER Monitor 1 2 LG Monitor 2 3 Herkules Grafikkarte 1 4 Samsung Monitor 3 5 Compaq Monitor 2 6 HP Druker 4 7 HP+ Druker 4 8 Cannon Druker 4 32 Und die Relation LIEFERANT Lief_Nr Lief_Name 1 Oktalgroup 2 Audio Master 3 Elnicron 4 Easyprint 5 Sharp 33 Erste Frage: Welche Artikel (Artikelbezeichnung) werden vom Lieferanten nr.4 geliefert ? Die Lösung: E= PROJ(REST(ARTIKEL, Lief_Nr=4), A_Bez) 34 Zweite Frage: Welche Lieferanten liefern einen Monitor? Die Lösung: E=PROJ(REST(JOIN(ARTIKEL,Lief_Nr= Lief_Nr, LIEFERANTEN), A_Art="Monitor"), Lief_Name) oder E1=JOIN(ARTIKEL,Lief_Nr=Lief_Nr, LIEFERANTEN) E2 = REST(E1, A_Art=„Monitor“) E = PROJ(E2, Lief_Name) 35 Oder E1=REST(PRODUCT(ARTIKEL,LIEFERANTEN), Lief_Nr=Lief_Nr) E2=REST(E1, A_Art="Monitor) E=PROJ(E2, Lief_Name) 36 Beispiel: Es seien die Relationen: PRODUKT (Code,Bennenung, Maßeinheit,Preis) KUNDE (KNr,Name,Adresse,Konto) RECHNUNG (RNr,Datum,KNr,Code, Liefermenge) 37 Problem 1 Die Bennenungen aller Produkte welche an der Kunden GRIRO geliefert wurden. Lösung E1= REST(KUNDE, Name="GRIRO") E2= JOIN(RECHNUNG,KNr=KNr, E1) E3=PROJ(PRODUKT, Code, Bennenung) E4=JOIN(E2,E3, E2.Code = E3.Code) E = PROJ(E4, Bennenung) 38 Problem 2 Die Namen der Kunden an die, nach dem 01.01.2007, keine Produkte mehr geliefert wurden. Lösung E1=REST(RECHNUNG,Datum >#01.01.2007#) E2=PROJ(E1, KNr) E3=PROJ(RECHNUNG, KNr) E4=MINUS(E3,E2) E5=JOIN(KUNDE,KNr=KNr, E4) E=PROJ(E5, Name) 39 Problem 3 Die Rechnungen für die Produkte mit einem höheren Preis als 100 Lei. Lösung E1 = REST(PRODUKT, Preis>100) E2 = JOIN(E1, Code = Code, RECHNUNG) E = PROJ(E2, RNr) 40