Informatik III Datenbanken Prof. Dr. R. Laue Sommersemester 1992 Erstellt von Walter Dorwald, Martin Dobmann und Helmut Hahn Graphiken von Walter Dorwald, Helmut Hahn und Martin Dobmann Inhalt: 1. Einfuhrung . . . . . . . . . . . . . . 2. Formale Beschreibungsmittel . . . . . . 3. Datenmodelle . . . . . . . . . . . . . 4. Die Sprache SQL . . . . . . . . . . . 5. Die physikalische Ebene . . . . . . . . 6. Entwurfstheorie relationaler Datenbanken A. Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 6 11 24 36 90 1. Einfuhrung Es wird darauf hingewiesen, da die Vorlesung zu groen Teilen aus der im Anhang stehenden Literatur entnommen wurde. Beispiel Versicherungsunternehmen In einem Versicherungsunternehmen gebe es die Sparten Lebens-, Kfz-, Gebaude-, Kranken-, Hausrat-, Transport- und Rechtsschutzversicherung. Auerdem gibt es Abteilungen fur die einzelnen Bereiche. Dort arbeiten Spezialisten fur den jeweiligen Bereich. Die Daten fallen in groen Mengen an. Deshalb erfolgt die Speicherung und Verwaltung im Computer. Fur die einzelnen Sparten werden spezielle Auswertprogramme und Datensammlungen benotigt beziehungsweise vorgenommen. Daher mu man Daten, die mehrere Sparten betreen, mehrfach speichern. Vorteil Jede Sparte ist fur ihre eigenen Daten verantwortlich, daher ergeben sich keine Kompetenzschwierigkeiten und es sind keine zeitaufwendigen Abstimmungen uber Datenfestlegung zwischen den verschiedenen Abteilungen notig. Nachteil Ist eine Information mehrfach vorhanden, so besteht bei einer A nderung das Risiko, da die Information nicht uberall gleichzeitig geandert wird. Ursachen dafur konnen sein 1. Schlechte Organisation 2. Informationen sind verschieden modelliert (Transformation schwierig) Beispiel Die Informationen vom Kunden kommen an eine bestimmte Sparte, zum Beispiel Kontoanderung oder Adressanderung. Bei Zahlungsunfahigkeit wird eine Sparte informiert. Fur Werbezwecke mu jede Sparte auf die Kundendaten der anderen Sparten zugreifen. Auch die Rentabiltat und Reaktionen auf den Markt sind spartenubergreifend. 1.1 3-Ebenen-Modell Man kann sich das 3-Ebenen-Modell wie folgt veranschaulichen Anwendersichten Logische Ebene Sicht 1 Sicht 2 Sicht n ZZ ZZ BBB ZZ BB ZZ B ZB Datenbanksystem Massenspeicher Physikalische Ebene 1 Die logische Ebene stellt ein Gesamtmodell aller Daten des Unternehmens dar. Der zu verwaltende Ausschnitt der realen Welt ist hier deniert. Das erfordert die Kenntnis der Bedeutung aller Daten des Unternehmens. Dies ist somit nicht nur eine datenverarbeitungsspezische Beschreibung! Die verschiedenen Sichten stellen Ausschnitte aus dieser Gesamtheit dar. Sie entsprechen speziellen Anwenderwunschen, etwa denen einer Abteilung. Die physikalische Ebene beschreibt die Datenverarbeitungssicht der Daten. Dies beinhaltet die Aufteilung in Dateien, Zugriswege, Zugrisrechte und anderes. Bemerkung Es wird gefordert, da die Ebenen unabhangig sein mussen. A nderung der physikalischen Speicherung darf Anwenderprogramme nicht beruhren. Jederzeit mussen neue Sichten auf vorhandene Daten hinzufugbar sein. Auf der logischen Ebene sollte es moglich sein, den Ausschnitt der modellierten Welt zu vergroern, ohne vorhandene Sichten zu andern. 1.2 Datenbanksystem Die Aufgabe des Datenbanksystems ist es, eine automatische Transformation der Anwenderwunsche zu Datenverarbeitungsanfragen durchzufuhren. Weiterhin mu durch Programme die Rucktransformation der Ergebnisse durchgefuhrt werden. Auerdem mussen die eingegebenen Daten auf ihre Korrektheit uberpruft werden. 2 2. Formale Beschreibungsmittel 2.1 Das Entity-Relationship-Model Die Objekte der realen Welt heien Entities. Objekte gleichen Typs werden zu Entity-sets zusammengefat. Objekte besitzen Eigenschaften oder Merkmale, diese heien Attribute. Alle Entities eines Entity-sets haben die gleichen Attribute. Beispiel Hinz und Kunz sind Angestellte. Hinz, Kunz sind also Entities des Entity-sets Angestellter. Attribute sind etwa Alter, Telefonnummer, Anschrift, Kinderzahl, Gehalt usw. Seien nun A1 ; : : :; An die Attribute eines Entity-sets E . Dann wird jedem Ai ein Wertebereich D(Ai) zugeordnet. Jedes Entity E aus E wird beschrieben durch (e1; : : :; en ), wobei ei 2 D(Ai ). Es ist also ei der Wert des Objekts E bei Eigenschaft Ai. Falls Ai = Alter, dann ist beispielsweise ei = 45 Jahre. Die Attributwerte dienen dazu, Eigenschaften zu beschreiben. Damit konnen zu diesen Objekten Informationen ausgegeben werden. Auerdem dienen sie dazu, die Objekte (Entities) zu identizieren. Es werden haug spezielle Attribute zur Identikation eingefuhrt. Denition Eine minimale Menge von Attributen, deren Eintrage ein Objekt bereits festlegen, heit Schlussel, mit anderen Worten ein minimales S mit S A = fA1 ; : : :; An g und der Eigenschaft, da fur jedes E = (e1; : : :; en ) 2 E und E 0 = (e01; : : :; e0n ) 2 E mit ei = e0i fur alle Ai 2 S folgt, da E = E 0 ist. Es reicht, die Werte bei einem Schlussel zu kennen, um ein Objekt eindeutig zu identizieren. Ein spezieller Schlussel wird im allgemeinen als sogenannter Primarschlussel ausgezeichnet. Es gibt im allgemeinen mehrere Schlussel. Die Nicht-Primarschlussel heien Sekundarschlussel . Beispiel Kraftfahrzeuge lassen sich identizieren uber Hersteller, Fahrgestellnummer, uber Besitzer und Schlu sselnummer, oder uber Polizeiliches Kennzeichen. Hier ist die Hinzunahme des redundanten Attributs \Polizeiliches Kennzeichen" aus Datenschutzgrunden erwunscht. Neben den Entity-sets bestehen auch Beziehungen zwischen diesen. Denition Eine Beziehung zwischen E1 ; : : :; En ist eine Teilmenge von E1 : : : En , das heit gewisse n-Tupel (E1; : : :; En) 2 E1 : : : En . Beispiel Es sei E1 = Angestellter und E2 = Abteilung. Dann ist die Beziehung \arbeitet in" die Menge der (Ang, Abt) mit Ang 2 Angestellter und Abt 2 Abteilung Ang arbeitet in Abt. Somit gehoren also (Hinz, Versand) und (Kunz, Reklamation) zu \arbeitet in". 2.2 Das Entity-Relationship-Diagramm Eine Darstellung der realen Welt durch eine Menge von Entity-sets und Beziehungen wird durch einen Graphen veranschaulicht. Es gibt 3 Arten von Knoten 3 Attribute werden Kreisen zugeordnet, Entity-sets werden Rechtecken zugeordnet, Beziehungen werden Rauten zugeordnet. Ein Entity-Relationship-Diagramm sieht typischerweise wie folgt aus: '$'$'$ Name RufNr Gehalt &%&%&% Angestellter arbeitet in Abteilung '$ '$ Aufgabe Leiter &% &% Die Kanten verlaufen zwischen Rechtecken und Kreisen zugehoriger Attribute und zwischen Rechtecken und Rauten zugehoriger Entity-sets. Die Beziehungen sind haug 2-stellig, wobei es folgende Typen von Beziehungen gibt (1,n)-Beziehung E1 1 B n E2 Zu jedem Entity aus E2 gehort hochstens ein Entity aus E1 . Somit folgt aus (E1; E2) 2 B und (E10 ; E2) 2 B , da E1 = E10 ist. Sei E1 = Abteilungsleiter und E2 = Abteilung, dann ist die Relation B \gehort zu" ein Beispiel fur eine (1,n)-Beziehung. (n,m)-Beziehung E1 n B m E2 Es durfen mehrere Entities aus E1 zu mehreren Entities aus E2 in der jeweiligen Beziehung stehen. Sei E1 = Student und E2 = Vorlesung, dann ist die Relation B \hort" ein Beispiel fur eine (n,m)Beziehung. 4 is a-Beziehung E1 - B E2 Jedes Entity aus E1 ist Spezialisierung eines Entities aus E2 Sei E1 = Techniker und E2 = Angestellter, dann ist die Relation B \ist ein" ein Beispiel fur eine (is a)-Beziehung. Fur eine is a-Beziehung gilt 1. Jedes E1 2 E1 hat die Attribute der E2 2 E2 . 2. Ist E1 2 E1 , so ist ihm ein E2 2 E2 zugeordnet, das die gleichen Attributwerte hat. Mit diesen Beispielen konnen wir ein komplexes Entity-Relationship-Diagramm konstruieren, wobei die Schlu sselattribute unterstrichen sind. '$ AngNr &% 6 is a Pilot n '$ '$ Name Beruf &% Gehalt &% Angestellter '$ AngNr &% kann iegen m '$ &% 6 is a Techniker n kann warten Maschine 1 m iegt 1 n Flug 1 um hat gebucht 1 Abug n Passagier 5 3. Datenmodelle Es gibt im wesentlichen drei verschiedene Modelle, und zwar das Netzwerk, das Hierarchische Modell und das Relationale Modell. 3.1 Netzwerk In einem Netzwerk gibt es Entity-Sets und (1,n)-Beziehungen. Denition Ist B E1 E2 eine (1,n)-Beziehung, so heit E1 Owner-Typ und E2 Member-Typ. Eine graphische Veranschaulichung fur ein Netzwerk erfolgt durch das Bachmann-Diagramm. Fur jedes Entity-Set wird ein Rechteck gezeichnet. Eine (1,n)-Beziehung wird durch einen Pfeil dargestellt. Beispiel Es werden die Vorlesungen Analysis I, Algebra I und so weiter angeboten. Die Vorlesung Analysis I h oren Hinz, Kunz, : : : Meier, und die Vorlesung Algebra I horen die Studenten Meier, Kunz, : : : Egon. Dann sieht das Bachmann-Diagramm wie folgt aus: j ? r Meier ? r Kunz r r Hinz j? r r Kunz Analysis I Algebra I ..? . ..? . Meier r R r ? r ..? . Egon r Implementierung von Beziehungen durch Zeigerketten (Lineare Liste) Fur jede Beziehung benotigt man eine eigene Zeigerkette. Die Position eines Zeigers bestimmt die Beziehung, die durch die entsprechende Zeigerkette dargestellt wird. Probleme gibt es bei den (n,m)-Beziehungen. Diese werden aufgelost zu einer (1,n)-Beziehungen und einer (1,m)-Beziehung. Beispiel In diesem Beispiel wollen wir wissen welche Studenten welche Vorlesungen besuchen. Da ein Student mehrere Vorlesung horen kann, und in jeder Vorlesung mehrere Studenten sind, handelt es sich um eine sogenannte (n,m)-Beziehung. Nach Auosen, dieser fur das Netzwerkmodell nicht zu verarbeitenden Beziehung, erhalten wir die Entity-Sets Owner-Typ Vorlesung Member-Typ/Member-Typ - Vorlesung/Horer 6 Owner-Typ Horer Fur das konkrete Beispiel Meier, Hinz und Kunz horen Analysis I und Meier, Hinz und Egon horen Algebra I erhalten wir folgende Entities und Beziehungen: ?r r? Analysis I 6 Algebra I 6 ?r r 6 ?r r r r Meier r Hinz r ?r r Kunz r r? r Egon ? r 6 6 ? ?r r 6 Um zu starten, wird ein Einstiegspunkt benotigt. Dazu wird zu jeder Zeigerkette die zuletzt verwendete Adresse in einer Tabelle gehalten. Wenn (n,m)-Beziehungen so realisiert werden sollten, hatte ein Member mehrere Owner, und dazu muten mehrere Zeiger fur dieselbe Beziehung bei demselben Entity stehen. Somit ist es schwierig zu entscheiden, welcher Zeiger zu welcher Beziehung gehort. Navigieren Um die Horer der Vorlesung Analysis I auszugeben, ist die Zeigerkette startend bei Analysis I zu durchlaufen. Bei jedem Member ist die andere Zeigerkette, die zum Horer gehort, solange zu durchlaufen, bis der Owner gefunden wird. Dieser wird ausgegeben und der Durchlauf der 1. Zeigerkette fortgesetzt. Breche ab, wenn die Kette zu Analysis I zuruckfuhrt. Mehrstellige Beziehungen Es sei die mehrstellige Beziehung B E1 E2 : : : En gegeben. Die im Netzwerkmodell nicht darstellbare (1,n)-Beziehung 6 E1 B 6 E2 6 En wird durch Einfuhrung eines kunstlichen Entity-Types mit n Attributen wie folgt aufgelost. Die Entities dieses kunstlichen Attributes bestehen aus den Zeigerkombinationen der Entities der Ei's, die in Relation zueinander stehen. Man erhalt also fur (a; b; c) 2 B 7 kunstliches Entity a 6 ? b 6 ? c 6 ? Bewertung Der Zugri uber Zeigerketten ist schnell, aber die Zugrisroutinen sind vollig abhangig von der Speichermethode. Das Netzwerkmodell entspricht also nicht dem 3-Ebenen-Modell. Denn eine Anfrage erfolgt auf der physikalischen Ebene. 3.2 Hierarchisches Datenmodell (IMS von IBM) Bei diesem Modell werden die Daten in Baumen abgespeichert. Man erhalt einen \Wald". Auf der logischen Ebene werden Baume gebildet, deren Knoten Entity-Sets darstellen. Es gibt nur (1,n)-Beziehungen, die Member-Typen sind Sohne der Owner-Typen. Tritt ein Entity-Set in mehreren Beziehungen auf, so werden virtuelle Kopien deniert. Als Member-Set tritt ein Entity-Set nur einmal auf sonst werden die virtuellen Kopien verwendet. Diese Kopien sind nie Owner-Typ einer Beziehung. Auf der physikalischen Ebene werden bei jedem Entity variabel viele Zeiger zu Nachfolgern erlaubt. Dafur ist die Menge der Nachfolger geordnet. Datenstruktur Die Datenstruktur wird durch einen in Informatik II vorgestellten Baum realisiert. Darstellung eines Netzwerkes durch eine hierarchische Datenbank 1. Wahle ein Entity-Set als Wurzel des Baumes, wenn moglich ein solches, das nie als MemberTyp einer Beziehung erscheint. 2. Ordne alle die Entity-Sets als Sohne an, die als Member-Typ einer Beziehung zu diesem gewahlten Entity-Set auftreten. 3. Versuche, jeden der Sohne als Owner-Typ und damit als Vater einer weiteren Beziehung darzustellen und mache deren Member-Typ zu Sohnen. 4. Ist jedoch ein Member-Typ bereits im Wald aufgetreten, so ernde an dieser Stelle einen virtuellen Member-Typ, dessen Entities aus Zeigern auf die bereits bestehenden Entities des betrachten Entity-Sets bestehen. Diese virtuellen Entity-Sets werden nie Vater. 5. Kann man den Baum nicht vergroern, so suche weitere Entity-Sets, die noch nicht verwendet wurden. Dann fahre fort mit 1. Sind alle Entity-Sets verbraucht, so hore auf. Bewertung Der Zugri bezu glich der jeweiligen Hierarchie ist schnell, der Zugri anhand von Eigenschaften, die in den Blattern beschrieben sind, ist jedoch langsam. Auerdem besteht eine hohe Abhangigkeit der Anwenderprogramme von der Speicherung, das heit das 3-Ebenen-Modell wird nicht ausreichend unterstutzt. 8 3.3 Relationales Modell (Codd 1971) Das relationale Modell vermeidet die Verwendung von Zeigern. Die Beziehungen werden wie die Entites behandelt. Die bei den relationalen Datenbanken verwendete Datenstruktur ist die Tabelle. A1 A2 : : : An . . . . . . . . . . . . . . . a1 a2 an . . . Die Spalten der Tabellen tragen Attributnamen (A1 , A2 , : : : , An ), und jede Zeile ist ein Wertetupel. Ein Tupel t = (a1; a2; : : :; an ) hat in der i-ten Spalte einen Eintrag ai aus dem Ai zugeordneten Wertebereich. Beispiel Die Datenbank eines Unternehmens enthalt die Tabellen folgenden Daten LNR L1 L2 L3 Lieferant LName LOrt Meier K oln Meier Berlin Schmitz K oln TNR T1 T2 T3 Teil TName Schraube Mutter Schraube Lieferant, Teil Gewicht 20 10 15 und Lieferung mit Lieferung LFNR TNR Menge LF1 T1 1000 LF2 T2 500 LF3 T1 2000 Um die in einer Menge von Tabellen abgespeicherten Informationen abzurufen, kann man die Tabellen verknupfen und gezielt Informationen heraussuchen. Dazu dient als Hilfsmittel eine relationale Algebra. Wir konnen folgende Operationen auf Mengen von Tabellen anwenden, wobei die Ergebnisse wieder Tabellen sind. 1. Schnitt, Vereinigung und Dierenz Sind T1 und T2 Tabellen und haben fur alle i die Attribute Ai (T1) und Ai (T2) denselben Wertebereich, so kann man mit T1 und T2 die Operationen \\", \[" und \n" ausfuhren. 2. Projektion Sei T eine Tabelle mit den Attributen A1 ; : : :; An und B1 ; : : :; Bk 2 fA1 ; : : :; Ang. Dann kann man T auf (B1 ; : : :; Bk ) projizieren, das heit 1. Streiche jede Spalte Aj mit Aj 2= fB1 ; : : :; Bk g. 2. Sortiere die Spalten in der Reihenfolge B1 ; : : :; Bk . 3. Streiche Duplikate unter den Tupeln. Die Projektion der Tabelle T auf die Attribute Ai1 ; : : :; Aik wird mit i1 ;:::;ik (T ) bezeichnet. 4. Selektion Sei T eine Tabelle mit Attributen A1; : : :; An . Sei Di der Wertebereich von Ai und auf Di sei \", \<", \=", \>" und \" deniert. Dann kann man eine Formel F bilden, indem man in jeder Komponente i vorschreibt, welche Pradikate die Eintrage der gesuchten Tupel | formuliert in den Vergleichen und Konstanten aus Di | erfullen sollen. Das Ergebnis ist die Menge der Tupel, die allen Pradikaten genugt, also in obigem Beispiel beispielsweise alle Tupel aus Lieferant, fur die der Ort den Eintrag Koln besitzt. Die Selektion der Tabelle T bezuglich der Formel F wird mit F (T ) bezeichnet. 9 5. Naturlicher Verbund (\natural join") Seien T1 und T2 Tabellen. T1 habe die Attribute A1 ; : : :; An ; B1 ; : : :; Bm und T2 habe die Attribute C1; : : :; Cl; B1; : : :; Bm . Weiter sei Ai 6= Cj fur alle i und j . T1 ./ T2 ist eine Tabelle mit den Attributen A1 ; : : :; An ; B1; : : :; Bm ; C1; : : :; Cl. Die Tupel von T1 ./ T2 erhalt man, indem man zu jedem Tupel t1 2 T1 jedes Tupel t2 2 T2 aufsucht, dessen Eintrage auf B1 ; : : :; Bm mit den Eintragen von t1 ubereinstimmen, und t1 auf C1; : : :; Cl durch die Eintrage von t2 bei diesen Attributen verlangert. Wenn zu t1 kein passendes t2 existiert, wird aus t1 kein Tupel von T1 ./ T2 erzeugt. In obigem Beispiel ergibt sich fur Lieferung ./ Teil TNR T1 T1 T2 ./ Lieferung Teil TName Gewicht LFNR Schraube 20 LF1 Schraube 20 LF3 Mutter 10 LF2 Menge 1000 2000 500 Teil ./ Lieferant liefert hingegen das kartesische Produkt, da die beiden Tabellen keine gemeinsamen Attribute besitzen. Es gilt unter anderem (T1 ./ T2) ./ T3 = T1 ./ (T2 ./ T3 ), das heit der \natural join" ist assoziativ. 6. -Verbund Die Tabelle T1 habe die Attribute A1 ; : : :; An und T2 habe die Attribute B1 ; : : :; Bm . Es seien C1; : : :; Cl 2 fA1; : : :; Ang und D1 ; : : :; Dl 2 fB1 ; : : :; Bmg. Weiter gelte Wertebereich(Ci) = Wertebereich(Di) und i 2 f; <; =; >; g fur alle i: T1 ./ T2 entsteht aus den Tupel von T1 , indem aus T2 die Tupel t2 mit den Tupeln t1 2 T1 verbunden werden, bei denen der Eintrag ai (t1) von t1 bei Ci in der -Relation zu dem Eintrag ai (t2) bei Di steht. Es ist auch moglich statt ai(t2 ) eine Konstante a zu wahlen. Beispiel Mittels eines -Joins konnen wir aus der Tabelle Zugnummer 601 603 607 Ankunft 10:00 10:30 12:00 Abfahrt 10:15 11:00 12:15 eine Umsteigetabelle konstruieren. Der Eintrag bei Ankunft mu kleiner als der bei Abfahrt sein. Man bilde also den Verbund der Tabelle mit sich selbst, soda die \"-Beziehung erfullt ist. Bewertung Das relationale Modell erlaubt es eine Anfrage zu formulieren, ohne da man bereits angibt, wie die Antwort zu realisieren ist (\deklarativ"). Damit kann die logische Datenbankstruktur getrennt werden von der realen Implementation und die Datenunabhangigkeit nach dem 3-Ebenen-Modell ist gewahrleistet. Allerdings sind die relationalen Datenbanken vor allem bei Verwendung von Verbundoperationen langsamer als die beiden anderen konkurrierenden Modelle. 10 4. Die Sprache SQL Die relationale Datenbanksprache SQL wird weiterentwickelt zu SQL2 und SQL3. Fur Implementierungen durch mehrere Hersteller wird die Sprache durch eine ANSI-Norm beschrieben. Neuerdings wird die Sprache objektorientiert weiterentwickelt. 4.1 Einige Befehle CREATE TABLE Tafelname (Attributname 1 [,Attributname 2 . . . . . . ,Attributname n Typ 1 Typ 2 Typ m [NOT NULL] [NOT NULL] . . . [NOT NULL]]); Erlaubte Typen In SQL gibt es die folgenden Typen integer 2 [ 215 + 1; 215 1] small integer 2 [ 231 + 1; 231 1] decimal(m; n): m-stellige Zahl (m 15) mit n Nachkommastellen (0 n m) oat 2 [5:4 10 79; 7:2 1075] char(n): Zeichenkette fester Lange (n 254) varchar(n): Zeichenkette variabler Lange (n 254) longchar: Zeichenkette variabler Lange (bis 215 1 Symbole) drei Graphik-Datentypen Nur die festen Basistypen haben Vergleichsfunktionen \<", \", \<>", \>", \", \=". Nullwerte sind erlaubt, auer wenn sie explizit durch \Not Null" verboten worden sind. ALTER TABLE [Erzeuger] Tafelname ADD Attributname Typ; DROP TABLE Tafelname; CREATE [UNIQUE] INDEX Indexname ON [Erzeuger.] Tafelname (Attributname 1 [ASC|DESC] [,Attributname 2 [ASC|DESC] . . . . . . ,Attributname n [ASC|DESC]]); Es wird ein B -Baum erzeugt zum Wertebereich W1 : : : Wn , wobei Wi der Wertebereich von Attributname i mit lexikographischer Anordnung ist. 11 Der B-Baum ist eine Variation des B-Baumes, bei dem die Daten nur in Blattern gehalten werden. Damit ergibt sich mehr Platz fur Zeiger in den inneren Knoten. Werden nur die Adressen bereits vorhandener Daten abgespeichert, so kann ein solcher Zugrisweg jederzeit hinzugefu gt oder geloscht werden. Das Schlusselwort UNIQUE Bei den angegebenen Attributnamen kann zu einem Wertetupel nur ein Datensatz existieren. (zum Beispiel TelNr, Name, Gebdatum, Gehalt). Damit kann man sogenannte Primarschlussel spezizieren. Weitere SQL-Befehle sind INSERT INTO [Erzeuger.] {Tafelname|Sichtname} [(Attributname)] VALUES (Daten); DELETE FROM [Erzeuger.] Tafelname [WHERE Bedingung]; UPDATE [Erzeuger.] Tafelname SET Attributname 1 = Ausdruck 1, Attributname 2 = Ausdruck 2, . . . . . . Attributname n = Ausdruck n [WHERE Bedingung]; Beispiel CREATE TABLE Professor (Pnr char(7) NOT NULL, Pname varchar(20) NOT NULL, Ort varchar(15) NOT NULL); CREATE UNIQUE INDEX Profindex ON Professor (Pnr); INSERT INTO Professor VALUES(``N44'',``Gauss'',``Bayreuth''); Das Data Dictionary Das Data Dictionary stellt eine Art Datenbank uber die Datenbank dar. Es gibt die Strukturen SYSCATALOG: Fur jede Tabelle ein Tupel. TNAME Name der Tabelle CREATOR BenutzerKennzeichen TABLETYP Basis oder Sicht NCOLS Attributzahl REMARKS ::: ROWCOUNT Tupelzahl SYSCOLOUMS: Fur jedes Attribut jeder Tabelle ein Tupel. TNAME CREATOR NAME Attributname COLNO Attributnummer 12 COLTYPE Wertebereichstyp LENGTH L ange REMARKS ::: Weitere Tabellen beinhalten die Zugriswege, die Zugrisrechte und die Views. ::: VIEWTEXT Ausdruck, der das View definiert ::: Das SELECT-Kommando Ein typisches Beispiel fur die SELECT-Anweisung ist SELECT Professor_Ort,Student_Name FROM Professor,Student WHERE Professor_Ort = Student_Ort AND Student_Fach = 'Mathematik' ORDER BY Professor.Pname ASC; Die allgemeine Semantik fur ein SELECT-Kommando lautet all select distinct ? 6 where Bedingung <Erzeuger.> alias Name ? from ? ? <Tafelname> 6 6 , select list having Bedingung group by order by ? <Attributname> <Attributname> ? 6 Nummer 6 , asc desc ? ; 6 6 wobei Bedingung fur not 6 Vergleichs-Bed. 13 ?6 - and or steht. Der Ausdruck Vergleichs-Bed. wiederum steht fur is not ? null Ausdruck = <> < > Ausdruck all any Dabei ist Ausdruck von der Gestalt ? Spaltenselektion ( ) 6 6 + = term term und Term steht fur + ?6 <Spaltenname> <constant> ( ) Ausdruck Aggregat Die Sprache SQL arbeitet mengenorientiert. Die Tupel werden anhand der Eintrage angesprochen. In C hingegen werden Variablen oder Strukturen uber ihre Adressen angesprochen. Werden Werte aus C-Variablen in SQL ubernommen, so geschieht dies mittels Einfugeoperationen. Soll umgekehrt aus einer Tabelle ein Tupel in C benutzt werden, so mu fur dieses Tupel einzeln die Zuweisung an Variablen erfolgen, die uber Adressen ansprechbar sind. U bersetzung Das Quellprogramm enthalt neben C-Anweisungen auch SQL-Anweisungen. Der Precompiler sucht aus dem Quellprogramm die SQL-Anweisungen heraus und ersetzt sie durch den Aufruf von CBibliotheksfunktionen. prog.pc Precompiler ! prog.c Compiler ! prog.o ! SQL-Programmbibliothek ! 14 9 > > > = > > > ; Linker ! prog In einer Declare-Section werden Variablen sowohl dem C-Teil als auch dem SQL-Teil bekannt gemacht. exec SQL begin declare section; int char exec SQL end declare section; ::: ::: Ein einfaches Einfugen geschieht zum Beispiel folgendermaen exec SQL execute immediate insert into Auftr age values (1027,'Jan. 7','Schmidt'); oder um ein Tupel aus C-Variablen einzufugen exec SQL execute immediate insert into Auftr age values (:Auftragsnummer,:Datum,:Name); Ein prepare-Statement bewirkt, da ein Statement nicht bei jedem Auftreten interpretiert werden mu. exec SQL begin declare section int Auftragsnummer,Menge; char Datum[10],Name[20],Teil[10]; exec SQL end declare section; exec SQL connect; /* vor auszuf uhrendem SQL-Aufruf */ exec SQL prepare Auftr_Eing from /* Vorbereiten der Einf uge-Operation */ insert into Auftr age values (:Auftragsnummer,:Datum,:Name); exec SQL prepare Einf ugen from insert into Enth alt values (:Auftragsnummer,:Teil,:Menge); Schreib("Eingabe von Auftragsnummer, Datum und Kunde: "); Lies(&Auftragsnummer); Lies(Datum); Lies(Name); exec SQL execute Auftr_Eing using :Auftragsnummer,:Datum,:Name; Schreib("Eingabe von Teil-Mengen-Paaren (Abschlu mit 'Ende': "); Lies(Teil); while (strcmp(Teil,"Ende")) { Lies(&Menge); exec SQL execute Einf ugen using :Auftragsnummer,:Teil,:Menge; Lies(Teil); } Um eine aus SQL zuruckgegebene Tabelle in C zu verarbeiten, wird eine Tupel-Variable eingefuhrt, 15 die die Tabelle wie ein Cursor durchlauft. hselect statementi exec SQL prepare S from ; exec SQL declare C cursor for S; exec SQL open C; exec SQL whenever notfound goto Ende; for (;;) { exec SQL fetch C into :A1,:A2, ,:An ; /* Hier kann nun das Wertetupel (A1,A2, } Ende: exec SQL close C; ::: ::: : : : ,An) verarbeitet werden */ 4.2 Algebraische Optimierung von Anfragen Wir haben zwei Moglichkeiten, die Ausfuhrung von Datenbank-Anfragen zu beschleunigen a) Nur Benutzung der relationalen Algebra, und b) Hinzunahme von Indexen, die im Hauptspeicher abgelegt werden. Zunachst wollen wir uns mit der Nutzung der Moglichkeit a) befassen. Die Ausdrucke werden durch Baume dargestellt. Die Blatter stellen die Relationen (Tabellen) dar, auf die zugegrien wird. Die inneren Knoten stellen einzelne Operationen dar, mit denen die aus den Nachfolgern bestehenden Datenmenge zu verarbeiten sind. Die Wurzel ist die Ergebnis-Relation. Beispiel Wir haben die Relationen Pers mit Attributen ANR, Name, Gehalt, Tel, Kind und Beruf sowie Abt mit Attributen ANR, Ort, Manager und Aufgabe. Es soll folgende Anfrage beantwortet werden \Finde Name und Gehalt aller Angestellten, die in Bindlach arbeiten". SELECT Name,Gehalt Projektion FROM Pers,Abt WHERE Pers.ANR = Abt.ANR Verbund AND Ort = 'Bindlach' Selektion Ein Anfrage-Baum sieht folgendermaen aus A Projektion Selektion Verbund @ Name,Gehalt Ort = 'Bindlach' Pers.ANR = Abt.ANR Pers @ @@ Abt 16 Direkte Abarbeitung dieses Baumes, wie er sich zum Beispiel aus einem Compiler ergeben wurde, verursachte beim Verbund einen Aufwand von O(jPersj jAbtj). Durch eine Veranderung der Reihenfolge der Operationen kann der Aufwand verringert werden. Dazu ist der Baum in einen anderen zu transformieren, der weniger Aufwand bei der Abarbeitung erfordert. A Projektion Verbund @ Name,Gehalt Pers.ANR = Abt.ANR Pers @@ @ Selektion Ort = 'Bindlach' Abt Um die Projektion mit Verbund zu vertauschen, mu in die Projektion das Verbundattribut mit aufgenommen werden. Die ursprungliche Projektion ist wiederum auszufuhren, um das Verbundattribut zu eliminieren. A Projektion Verbund @ Name,Gehalt Pers.ANR = Abt.ANR Name,Gehalt,ANR @ @@ Projektion Projektion Selektion ANR Ort = 'Bindlach' Pers Beispiel In der Tabelle Pers Abt aus dem vorausgegangenen Beispiel sei zusatzlich noch das Attribut 17 Fremdsprache vorhanden. Wir suchen alle englisch oder franzosisch sprechenden Mitarbeiter. A Union @ Fremdsprache = 'englisch' @@ @ Selektion Selektion Pers Fremdsprache = 'franz osisch' Pers Hier erhalten wir kurzer A Selektion Fremdsprache = 'englisch' oder Fremdsprache = 'franz osisch' Pers Assoziative Operatoren Das Ergebnis der Operation R1 ./ R2 ./ R3 ./ R4 ist von der Klammerung unabhangig. Bezuglich des Aufwands ergeben sich jedoch Unterschiede. Beispiel Fur die Berechnung von ((R1 ./ R2) ./ R3) ./ R4 erhalt man A ./ @ @ ./ @@R4 @ @@ @R ./@ @ R1 @@ R 2 18 3 Fur die Berechnung von (R1 ./ R2) ./ (R3 ./ R4) erhalt man hingegen A ./ HH ./ @ @ @@ R R 1 HH HH HH./ @ @ @@ R R 2 3 4 Die Groe der Zwischenergebnisse (in obigen Bildern fett gezeichnet) entscheidet daruber, welcher Baum gunstiger ist. Heuristik fur die Abschatzung der Groe der Zwischenergebnisse Es wird angenommen, da bei allen vier Relationen der Verbund uber dasselbe Attribut mit j gleichwahrscheinlichen Werten gebildet wird, das heit j jR1j jR2j jR3j jR4j : Zum Beispiel hat R1 ./ R2 ca. jR1j jRj2 j Tupel. Insgesamt erhalten wir die Entscheidung uber die Wahl der besseren Alternative aus der Ungleichung jR1j jR2j jR3j jR3j jR4j j und damit einfacher aus j j jR1j jR2j jR j : j 4 A hnliches lat sich fur \[" und \\" durchfuhren. Regeln zur Optimierung 1) Projektionen werden soweit wie moglich zu den Blattern gezogen. 2) Selektionen werden soweit wie moglich zu den Blattern gezogen. 3) Selektionen, die die gleiche Relation betreen, sowie entsprechende Projektionen werden zusammengefat. 4) Bei Folgen von Verbund- und Mengenoperationen wird die Reihenfolge nach der Machtigkeit der beteiligten Relationen festgelegt. 5) Eventuell auftretende gemeinsame Teilbaume sind als ein gemeinsamer Baum zu berechnen. Die zweite Moglichkeit zur algebrarischen Optimierung von Anfragen besteht in der Optimierung der Baume fur die relationalen Ausdrucke unter Berucksichtigung der Zugriswege. 19 4.3 Methoden zur Beschleunigung des Zugris Aufspaltung eines Blattknotens fur alle Relationen durch Anwendung eines Operators \Realisiere" auf den Zugrisweg und die Relation Angestellter Realisiere @ wird ersetzt durch Index @ @@ Angestellter Die Selektionen und Projektionen konnen auch hier mit dem Operator Realisiere vertauscht werden. Somit ist der Baum formal transformierbar in einen Baum mit gunstigerem Zugrisverhalten. Beispiel Gesucht sind alle Programmierer mit einem Gehalt von mehr als 100000 (Mark) und mit einer bestimmten Angestelltennummer, das heit Selektion Beruf=`Programmierer' und Gehalt>100.000 und (ANR=`K50' oder ANR=`K55') Pers Sei bezu glich des Attributs Beruf ein Index I(Pers,Beruf) vorhanden. Dann konnen wir die obige Anfrage umtransformieren zu Selektion Gehalt>100.000 und (ANR=`K50' oder ANR=`K55') Realisiere @ Beruf=`Programmierer' @@ @ Pers Selektion I(Pers,Beruf) 20 Ist weiterhin ein Index I (Pers, ANR) vorhanden, so verwende A Selektion Gehalt>100.000 Realisiere HH Pers Beruf=`Programmierer' HH HHH H\ HH HH HHH H Selektion I(Pers,Beruf) ANR=`K55' [@ @@ @ Selektion Selektion ANR=`K50' I(Pers,ANR) I(Pers,ANR) Wir brauchen also die Vereinigung zu dem Attribut A mit zwei Relationen, die beide einen Index bezuglich A besitzen. Der Index liefert gerade die Adressen der Tupel, sortiert nach dem Wert des Verbundattributes. R2:A R1:A - Beim aufsteigenden Durchlauf zweier sortierter Felder kann mit linearem Aufwand paarweise ver- 21 glichen werden (siehe Mergesort). Wir erhalten also fur das Beispiel von Seite 17 A Projektion Name,Gehalt 1HH ANR HHH HH HProjektion Realisiere @ @ @@ Projektion ANR I(Pers,ANR) Name Gehalt ANR Selektion Ort=`Bindlach' Realisiere @ Pers I(Abt,ANR) @ @@ Abt Operationen, die dieselbe Datei oder das selbe Zwischenergebnis betreen, lassen sich durch einen entsprechend machtigen Operator zusammenfassen. Dadurch brauchen die Dateien nicht mehrfach durchlaufen werden. Ist kein Index vorhanden, so sortiere bezu glich des Verbundattributs. Aus Informatik II wissen wir, da n Daten mit o(n log n) Zeitaufwand sortiert werden konnen. Der Aufwand, um R1 und R2 zu verbinden, betragt ohne Sortierung jR1j jR2j. Mit Sortierung hingegen ist der Aufwand c1 jR1j{z log jR1}j + |c2 jR2j{z log jR2}j + |jR1j + jR2}j | {z Sortiere R1 Sortiere R2 Durchlaufe linear wie bei Index Damit ist das Sortieren in den meisten Fallen gunstiger. Daher stellt man einen Sortieroperator zur Verfugung, der dann eingesetzt werden kann, wenn kein Index vorhanden ist. Beim Sortieren konnen doppelte Records leicht erkannt werden. Vor einer Verbundoperation sind die Doubletten zu entfernen. \Realisiere" erhalt die Daten, die bezuglich eines Attributs sortiert sein konnen. Beispiel Sei (a1; : : :; an ) eine bestimmte Reihenfolge, und die Daten wie folgt auf der physikalischen Ebene gespeichert. a1 ; a4 ; a6 a2 ; a5 a3 Es lat sich nun vermeiden, dieselbe Datenseite mehrfach von der Platte einzulesen, indem man die physikalische Adresse als Sortierkriterium verwendet und die Liste der zu holenden Tupel 22 danach sortiert. Wenn man die durch Sortieren bewirkte Permutation wieder ruckgangig macht, so erhalt man die ursprungliche Reihenfolge zuruck. 23 5. Die physikalische Ebene Zur Speicherung auf der pysikalischen Ebene werden die Verfahren verwendet, die in Informatik II vorgestellt wurden. Schlagworte hierfur sind Sortierte Daten, binares Suchen, interpolierendes binares Suchen, Hashfunktionen, B-Baume, k-d-Baume und Gridle. 5.1 Sortierte Daten Die Daten werden blockweise sortiert auf Platte abgelegt. Beim Initialisieren wird jeder Block zu 80% ausgelastet. Es wird ein Index fur die Blockanfange angelegt. Index sequentielle Zugri Metfoden ? ? ? 5.2 B-Baume Die Datenstruktur der Bayer-Baume wurde bereits in Informatik II behandelt. Ein Knoten des B-Baumes enthalt jeweils Vergleichswerte und Nachfolgerzeiger. r wi r wi+1 j Wenn in den Indexseiten des B-Baumes bereits vollstandige Datensatze liegen, so benotigen diese viel Platz. Daher passen weniger Zeiger und Vergleichswerte auf eine Indexseite, und somit wachst die Hohe des Baumes und die Anzahl der Seitenzugrie. Besser geeignet sind daher die sogenannten B -Baume. 5.3 B-Baume Hier werden nur in den Blattern vollstandige Datensatze gespeichert. Die Indexseiten enthalten neben den Zeigern nur Vergleichswerte. Beispiel Zu speichern sind 1000000 Datensatze zu je 200 Bytes. Die Blockgroe sei 4096 Byte. Im B-Baum stehen pro Datenseite mindestens 10 und hochstens 19 Datensatze. Die Hohe des 24 Baumes ist also 1 + log10(1000000) = 7. Das Schlusselwort habe 20 Byte, ein Zeiger 4 Byte. Die Indexseiten haben 4096 Byte, also passen insgesamt 170 Vergleichswerte und 171 Zeiger, (170 20 + 171 4 = 4084) auf eine Indexseite. 4 20 4 20 4 r r r ? ? ? 4 20 4 r r ? ? Somit konnen mindestens 86 und hochstens 171 Nachfolgerzeiger in einem Knoten gespeichert werden. In den Blattern stehen 1000000 Satze. Die Hohe ist also 2+log 86 1000000 10 < 5, was der Anzahl der Seitenzugrie pro Anfrage darstellt. Indexbereich: 86 Satze | {z } 1000000 10 \Zweige" Datenbereich: 10 Satze B-Baume in denen in den Blattern Zeiger stehen Indexbereich r Adressenr der Daten r r ) s s Daten Im B -Baum werden nur die Adressen der Daten abgelegt. Somit konnen die Seiten bei den Daten voll ausgenutzt werden. Das bringt eine Ersparnis von ca.25% abzuglich 12% fur die Adressebene, also werden etwa 13% gewonnen. Die Speicherung kann neu organisiert werden, es brauchen nur die entsprechenden Adressen uberschrieben werden. Problem bei mehreren Zugriswegen Es existieren verschiedene Zeiger, die auf denselben Datensatz zeigen. Von diesem Datensatz aus gesehen ist jedoch nicht bekannt welche Zeiger auf ihn zeigen, daher ergeben sich beim Loschen dieses Datensatzes Komplikationen. 25 Erste Losung Beim Datensatz wird ein Loschkennzeichen eingefuhrt, wodurch sich auf jedem Zugriweg feststellen lat, ob der Datensatz gultig ist oder nicht. Allerdings fuhrt diese Methode langfristig zu einer Speicherplatzverschwendung, es ist daher von Zeit zu Zeit eine Reorganisation der Datenbank notig, das heit es wird eine neue Datenbank ohne die geloschten Satze angelegt. Zweite Losung Um den Speicherplatzverbrauch fur geloschte Datensatze zu verrringern, kann man die eigentlichen Datensatze auf der untersten Ebene durch Zeiger auf die Datensatze ersetzen. B-Baume @@ r B1 @ Addressliste der Datensatze r @ @@ r B2 r @@ - w1 .. . w2 .. . w .. . - Externer Speicher NULL r - r i - Somit ist es moglich den physikalischen Speicherplatz zu verschieben oder zu loschen. Als Alternative konnte man bei den Sekundarindexen statt der Datensatze den Schlusselwert, unter dem der Datensatz im Primarindex gefunden wird, ablegen. Der Zugri bezuglich des Sekundarindexes erfordert dann allerdings den Durchlauf beider Zugriswege und ist somit zeitaufwendiger. 5.4 TID-Konzept (Tupel-Identier) Ein Datensatz wird durch eine Adresse beschrieben, die sich in zwei Teile aufteilt 1. Adresse der Datenseite 2. Nummer der Adresse des Datensatzes in einem Adressfeld auf der Seite r Seite r Nummer (1 Byte) - - r 6 26 ::: Datensatz U berlauf einer Seite Statt der Datensatze konnen auf der Datenseite wieder TIDs stehen. r TID r Erste Seite - - r r ::: 6 U berlaufseiten r - r 6 - Datensatz ::: .. . Fur alle realistischen Situationen wird bei U berlaufseiten fur das Aufsuchen eines Datensatzes hochstens ein weiterer Seitenzugri erforderlich. 5.6 Dynamisches Hashen Gegeben ist die Hashfunktion h: W ! A, dabei ist h(w) die Adresse fur den Datensatz (oder die Datenseite), der beziehungsweise die mittels w gefunden werden soll. Die Datenmenge kann stark wachsen, damit wachst die Anzahl der Kollisionen ebenfalls stark und der Zugri auf einen Datensatz erfordert viele Seitenzugrie. Ausweg Es wird zu Beginn nur ein Teil der berechneten Hashadresse zur Datenadressierung verwendet. h(w) = a| n an 1{z: : :ai+1} jai : : :a1a0 Hashadresse Der Teil an an 1 : : :ai+1 wird als Hashadresse verwendet. Treten zu viele Seitenzugrie auf, so nehme eine weitere Stelle hinzu. 00: : : 000 h(w) - r r 11: : : 110 00: : : 001 r r 11: : : 111 27 - - 6 Berechne fur die ubergelaufene Seite alle Hashwerte neu und teile die Seite entsprechend dieser Adresse in die alte und eine neue Seite auf. Kopiere das vorhandene Adressfeld (00 : : : 000 bis 11 : : : 110) in den neu angelegten Bereich (00 : : : 001 bis 11 : : : 111) und uberschreibe fur die U berlaufseite den Zeiger auf die alte Seite mit der neuen Adresse. Lauft eine Seite uber, auf die bereits zwei Zeiger zeigen (dies ist durch A nderung einer Stelle in der Hashadresse und Zeigervergleich feststellbar), so braucht das Adressfeld nicht verdoppelt zu werden. Es wird nur die U berlaufseite entsprechend der Hashadresse gespalten und der eine Zeiger im Adressfeld auf die neue Seite umgebogen. 5.7 Mehrdimensionale Anfragen Es seien Datensatze w = (w1; w2; : : :; wk ) mit k Attributen gegeben. Gesucht werden alle Datensatze, die Bedingungen der Form ui wi < oi fur i = 1; : : :; k genugen. Die Daten seien in B-Baumen gespeichert. Dann gibt es zwei Moglichkeiten, eine solche Anfrage zu realisieren. a) Fur jede Komponente existiert ein Baum | @@ @ @ {z ui wi <oi } | {z @@ @ @ } uj wj <oj Alle Bedingungen sollen zugleich erfullt sein, daher ist der Schnitt der Losungsmengen zu betrachten. Das Problem bei dieser Methode ist, da die Zwischenlosungen eventuell sehr umfangreich sein konnen. b) Es existiert ein B-Baum fur jede Kombination von Attributen (z.B. in SQL Index bzgl. mehrerer Attribute mit Reihenfolge und Sortierrichtung) @@ @ @ Hier gibt es keine uberussigen Zwischenergebnisse, aber bei k Attributen gibt es 2k Teilmengen der Attributmenge. Wenn man nicht vorher wei, in Bezug auf welche Kombination von Attributen die Anfrage formuliert wird, wurden bei dieser Losung maximal 2k Zugriwege benotigt. Somit ist diese Losung nur fur spezielle haug auftretende Anfragen brauchbar. Wir interpretieren nun die Datensatze als Punkte in einem Vektorraum. Es ist w = (w1; w2; : : :; wk ) 2 W1 W2 : : : Wk : Ohne Beschrankung der Allgemeinheit sei Wi = IR fur alle i, damit ist w ein Punkt im IRk . Fur k = 2 28 erhalten wir die folgende Veranschaulichung 6 o2 rw = (w1 ; w2) w2 u2 u1 w1 - o1 Die Suchanfrage u 1 w 1 o1 u 2 w 2 o2 beschreibt die Datenpunkte, die in einem Quader im Datenraum liegen. Dies liefert uns nun einen anderen Ansatz fur mehrdimensionale Abfragen. 5.7.1 Gridle Zerlege den Datenraum in Quader. Alle Punkte in einem solchen werden auf derselben Datenseite abgelegt. Die Intervallgrenzen mussen dazu entsprechend gewahlt werden, damit die Daten gleichmaig uber die Datenseiten verteilt werden. Bei einer Suchanfrage wird ein Suchquader deniert. Die darin liegenden Datenpunkte sind auf den Datenseiten der den Suchquader schneidenden Datenquader zu nden. 6 o2 rw = (w1; w2) w2 u2 u1 w1 o1 - Es werden nur wenige Daten geholt, die der Anfrage nicht genugen. Dieses Vorgehen ist allerdings nur bei statischen bekannten Datensatzen sinnvoll. Ziel ist eine mehrdimensionale dynamische Datenstruktur, die beim Einfugen, Loschen und beim Zugri mit dem Bayerbaum vergleichbar ist. Verfeinere dazu schrittweise eine grobe Zerlegung des Raumes, 29 solange bis die in den Quadern liegenden Datensatze jeweils auf eine Seite passen. 6 o2 r r w2 u2 u1 w1 - o1 ? ? Ein einzelner Knoten sieht darin wie folgt aus k n1 : : :n k w11 : : :w1 n1 : : : w 1 : : :w k knk n1 : : : n Zeiger auf Nachfolger k Beispiel Die Seitengroe betrage 4096 Bytes und ein Zeiger benotige 4 Bytes. Pro Komponente i ist eine Skala mit ni Vergleichswerten zu speichern. Wir haben also n1 : : : nk Sub-Quader zu verwalten und somit n1 : : : nk Zeiger zu speichern. Auerdem sind die n1 + : : : + nk Vergleichswerte zu speichern sowie k und n1 ; : : :; nk . Sei jetzt k = 3, n1 = 10, n2 = 10 und n3 = 9 und ein Vergleichswert benotige 4 Bytes, dann konnen wir auf einer Seite die 900 Zeiger unterbringen. Haben wir einen Baum der Hohe 2 (das heit zwei Ebenen mit Knoten und eine Ebene mit Blattern), wobei in den Blattern 200 Datensatze gespeichert werden konnen, so konnen wir 9002 200 = 162 000 000 Datensatze unterbringen. Sei w = (w1; : : :; wk ). In jeder Komponente i gibt es zu jedem wi ein Intervall [wji ; wji +1) mit wi 2 [wji ; wji +1). Also ist die Nummer des Intervalls in der i-ten Komponente bestimmt. Jedem Indextupel (i1; : : :; ik ) wird ein Zeiger zugewiesen f : [0; n1 1) [0; nk 1) ! [0; k Y i=1 ni 1]; der auf dem Platz f (i1 ; : : :; ik ) abgelegt wird. f (i1; : : :; ik) = i1 + i2n1 + i3n1 n2 + : : : + ik n1 n2 : : :nk Behauptung: f ist bijektiv Beweis 1 Der Urbildbereich und der Bildbereich sind gleichmachtig, es bleibt also nur die Surjektivitat von f zu zeigen. Q Sei dazu j 2 [0; ki=1 ni 1]. 30 Induktion nach k k = 1: f = id k > 1: Sei also l maximal mit Qlm=1 nm < j . j = il+1 l Y m=1 0r nm + r; l Y m=1 nm Fur r ist nach IV die gesuchte Darstellung bereits vorhanden. j= k X l=1 il lY1 m=1 nm Damit ist ein mehrdimensionales Zeigerfeld eindimensional verwaltet! Ein Suchquader wird auf seine Komponenten projeziert. Die Endpunkte bestimmen ein Intervall, das im Allgemeinen mehrere der Skalenintervalle schneidet. Es sind alle Kombinationen von Skalenintervallen in die Suche einzubeziehen, die hier gefunden werden. Die Struktur ist gut geeignet fur gleichverteilte Daten. Bei stark korrelierten Daten ergeben sich viele Quader, die keine Daten enthalten. r r r r r rr r r r r r rr rr r Die Einteilung der Quader ist immer so zu gestalten, da die Datenpunkte eines Quaders stets auf eine Seite passen. Fur jeden Quader wird ein Zeiger benotigt, auch wenn er leer ist, das heit keine Daten enthalt. Es kann also vorkommmen, da viele Zeiger nutzlos sind. Ausweg Die Zeiger brauchen nicht auf paarweise verschiedene Datenseiten zeigen! Bedingung Gebiete, auf die derselbe Zeiger zeigt, sollen Quader sein. Das heit leere Blocke werden nur dann zusammengefat, wenn sie Quader geben. Die Bedingung wird beim Aufbau eines solchen Verwaltungsbaumes sichergestellt. Aufbau Wenn ein Quader durch Einfugen zuviele Eintrage erhalt, so mu er zerlegt werden. Suche dazu eine Komponente i auf. Fuge in die i-te Skala in das zu diesem Quader gehorende Intervall eine neue Grenze (einen Skalenwert) ein. Zerlege alle Quader, die die gleiche Projektion auf diese Komponente haben. Bei den Quadern, die nicht uberbelegt waren, wird bei den beiden entstehenden neuen Quadern derselbe Zeiger eingetragen, den der Quader vorher hatte. Strategie fur die Wahl der Komponente, in der aufgespalten wird a) Durchlaufe die Komponenten zyklisch b) Wahle so aus, da die Zerlegung moglichst in gleichgroe Teile erfolgt. 31 Strategie zur Auswahl der Grenze Suche Intervallmitte auf (\Buddy-System"). Loschen Es werden Datenpunkte entfernt. Sind Seiten unterbelegt, konnen die entsprechenden Quader mit Nachbarn so verschmolzen werden, so da wiederum Quader entstehen. Verschmelzungsregel Es sind nur solche Verschmelzungen erlaubt, die zu Situationen fuhren, die auch durch iteriertes Zerlegen hatten erreicht werden konnen. Im Bild kommt es zu einer Verklemmungssituation, da der mittlere Quader mit keinem Nachbarn zu einem Quader verschmolzen werden kann! Da die jeweils vorliegende Situation legal hervorgerufen wurde, ist immer ein solches Verschmelzen moglich. Algorithmus (rekursiv) Seien B1 , B2 Kandidaten, die auf Verschmelzbarkeit zu testen sind. Bilde B := B1 [ B2 . Starte mit R = ganzer Datenraum. Wiederhole Ist R = B , so gib \Verschmelzen erlaubt" aus und breche ab. Sonst suche eine Zerlegung R = R1 [ R2, R1 \ R2 = ;, mit B R1 oder B R2. Ersetze R durch das Ri , das B enthalt. Falls diese Suche erfolglos ist, so gib \Verschmelzen verboten" aus und breche ab. Probleme, die dabei auftreten konnen a) Wertebereiche, bei denen das Datenbanksystem nicht die Mitte eines Intervalls bestimmen kann. Somit konnen nur Werte verwendet werden, die bei den vorliegenden Daten auftreten. Deshalb ist das Buddy-System nicht brauchbar! Man mu deshalb aus den vorliegenden Werten geeignete auswahlen. Dieses Verfahren ist aber sehr aufwendig. b) Doppelte Zeiger vermeiden! Bemerkung Die Zahl der Seitenzugrie ist entscheidend fur die Zeitkomplexitat. Der Aufwand fur das Behandeln von Daten auf einer Seite ist zweitrangig. 32 5.7.2 Verbesserter Ansatz fur das Gridle Es ist moglich, Quader durch Angabe von Unter- und Obergrenze auf einer Seite zusammen mit dem zugehorigen Zeiger zu beschreiben. r r r r r r r r r r Der Zugri erfordert dann bei jeder Seite sequentiellen Durchlauf der Quader, um den zugehorigen Zeiger zu nden. Dieses Verfahren ist daher gut geeignet bei nicht gleichverteilten Daten. Es tritt maximal linearer Aufwand bezuglich der Quaderanzahl auf, die Seitenzugrie werden nicht beruhrt und unnutze Doppelzeiger vermieden. Zusammenlegen von Datenseiten Sollen Datenseiten verschmolzen werden, so entferne alle Daten aus einem umgebenden Quader des Baumes und fuge sie anschlieend wieder ein. Man hat eine bezuglich des Einfugealgorithmus optimale Reorganisation des betroenen Datenbereichs. Aunden der Quader, die einen Suchquader schneiden Durchlaufe die Hyperebenen, die Grenzen darstellen. Verwerfe jeden Wurfel, der auf einer anderen Seite liegt als der Suchquader. Beispiel Es wurden Datensatzen mit 30 Komponenten benutzt, wobei 20 davon Suchkomponenten waren. 15 Komponenten hatten feste und 15 hatten variable Lange. Die gesamte Datenbank beinhaltete 100 000 Datensatze und umfasste 26 607 616 Bytes. Seitengroe war 4096 Bytes, die Baumhohe 3. Die Seitenauslastung betrug 69% (dies ist ein typischer Wert, auch beim B-Baum erhalt man Werte von 69{70%). Jeder Knoten hatte zwischen 8 und 43 Nachfolger. Das Platzverhaltnis zwischen den inneren Knoten, die nur Vergleichswerte enthalten und den Datenseiten betrug ca. 1 : 28. Auf einer HP 845 wurden beim Anlegen der Datenbank 5500 Sekunden user-time und 500 Sekunden system-time gemessen. Bei einer Bereichsanfrage, bei der in jeder Komponente das Intervall [0; 10000] verwendet wurde, betrug die Suchzeit zwischen 20 und 120 Sekunden (im Mittel 70 Sekunden) Anmerkung zur Verwendung variabel langer Komponenten Die Verwendung variablel langer Datensatze stort die Theorie. Zum Beispiel kann wegen der festen Seitengroe keine Mindestanzahl von Datensatzen pro Datenseite garantiert werden. Daher mu beim Datensatz nun ebenfalls seine Lange mit abgespeichert werden. Bei groen Datensatzen konnen die Seiten schnell gefullt sein. Werden also innere Knoten mit Daten gefullt, so haben diese haug wenige Nachfolgerknoten. Auch aus diesem Grunde wurde die Strategie gewahlt, wie beim B -Baum die Datensatze nur in Blattern zu halten. In den inneren Knoten liegen nur Vergleichswerte aus einzelnen Komponenten. Um zu vermeiden, da Vergleichswerte variabler Lange mehrfach auf einer Seite gespeichert werden, kann man ein Feld von Vergleichswerten auf der Seite anlegen und nur deren Indizes verwenden. 33 5.7.3 k-d-Baum Um die Quader platzsparend auf einer Seite zu beschreiben, kann man k-d-Baume verwenden. Fur zweidimensionale Datensatze lat sich das Prinzip folgendermaen veranschaulichen 6r r rC r r Br r Ar E r r D F r r B r - r@ r@A @rC @ @ @@ @rD @@rE Fr 1. Komp 2. Komp 1. Komp Die Vergleichskomponenten werden zyklisch durchlaufen und bei gleichverteilten Daten hat ein k-d-Baum mit n Knoten eine Hohe von O(log n). Beweis Die hier verwendete Strategie ahnelt Quicksort. Siehe deshalb dortige Aufwandsabschatzung. Beim k-d-Baum sind die Operation Einfugen und exaktes Suchen genauso wie beim eindimensionalen binaren Suchbaum. Beim Loschen allerdings kann nicht wie beim eindimensionalen Baum der kleinste Nachfolger im rechten Teilbaum (oder auch der grote Nachfolger im linken Teilbaum) an die Stelle des zu loschenden Knotens gesetzt werden, um so zu erreichen, da ein Blatt zu loschen ist. Es mu der Vergleichswert durch den kleinsten aller Blatter im rechten Teilbaum in dieser Komponente ersetzt werden. Eine Operation, die beim eindimensionalen binaren Suchbaum nicht praktikabel ist, ist die sogenannte \partial match query". Das heit, einen Datensatz zu suchen, von dem nur einige Komponenten bekannt sind, die ubrigen sind unbekannt. Sei der Datensatz w gesucht und der aktuelle betrachtete Baumknoten enthalte einen Vergleichswert zur Komponente i. a) Die i-te Komponente von w ist bekannt Folge dem linken oder rechten Zeiger je nach Ausgang des Vergleichs (oder gebe den Inhalt aus, falls gefunden). b) Die i-te Komponente von w ist unbekannt Es mussen beide Zeiger verfolgt werden. Sei ein optimaler k-d-Baum gegeben mit 2kh 1 = n Knoten, das heit ein Baum minimaler Hohe. Es seien t der k Komponenten in der Anfrage bekannt | wobei t < k ist, da sonst eine exakte Suche vorliegt. Wir nehmen an, da die unbekannten Komponenten die ersten k t Komponenten 34 sind, dies ist der schlechteste Fall, da hier die meisten Vergleiche durchgefuhrt werden mussen. r@ @ @ @@ r@ @r@ r@ @@r@ r@ @@r@ @ @ @ @ @@ @@ r r@ r @ r@ @r r @@r @@r @r @@r r@ r@ @ @@ @ @ r @ r @ r@r r@r r @r 1 2 4 2 t 2 t k k Fur den ersten Zyklus durch die Komponenten erhalten wir fur die Anzahl der Vergleiche 1 + 2 + 4 + : : : + 2k t + 2| k t + :{z: : + 2k }t ; fur den nachsten t 2k t 1 + 2 + 4 + : : : + 2k t + 2k t + : : : + 2k t und insgesamt ergibt sich fur die Anzahl der Vergleiche ! hX1 k t 1 2(k t)h 1 2k t 1 + t2k t 2 k t ( k t ) i + t 2 = 2 2 1 2k t 1 i=0 k t = C 2(k t)h 1 = C 2 k hk 1 =C k t 2kh k ! 1 = C (n + 1)1 t k 1 t 5.7.4 Lomet-Salzberg = O(n1 k ): Es benden sich k-d-Baume auf den Seiten. Die Strategie Bereiche aufzuteilen ist gegenuber dem Gridle verandert. Es braucht die Form von Quadern nicht erhalten zu bleiben. Dazu werden mehrere Komponenten zugleich verwendet, um aus einem Gebiet ein Teilgebiet herauszulosen. 35 6. Entwurfstheorie relationaler Datenbanken Wir wenden uns nun wieder der logischen Ebene des Datenbankentwurfs zu. Sei A = fA1; : : :; An g eine Attributmenge und jedem A 2 A sei ein Wertebereich D(A) zugeordnet, ohne Beschrankung der Allgemeinheit sei D(A) = Z . Denition Eine Relation R auf A besteht aus einer Menge von Abbildungen f : A ! ni=1 D(Ai) mit f (Ai ) 2 D(Ai ) fur jedes i = 1; : : :; n. A = Attr(R) ist die Attributmenge von R. Die Tupel werden also durch Abbildungen beschrieben. S Anmerkung Bei den Abbildungen ist die Reihenfolge der Attribute nicht festgelegt. Bei den Relationen ist die Reihenfolge der Abbildungen ebenfalls nicht festgelegt. Die Tabellen sind Darstellungen der Relationen. Schreibweise Die Abbildungen einer Relation werden \Tupel" genannt. Denition Naturlicher Verbund Seien R1, R2 Relationen. Weiter sei A1 = Attr(R1) und A2 = Attr(R2). Dann heit R1 ./ R2 := f : A1 [ A2 ! D(A) f jA1 2 R1 und f jA2 2 R2 [ A2A1 [A2 der naturliche Verbund von R1 und R2. Denition Projektion Sei R eine Relation mit A = Attr(R). Weiter sei B A. Dann heit B (R) := f f jB j f 2 Rg die Projektion von R auf B. Die mengentheoretischen Operationen \[", \\" und \n" lassen sich ebenfalls denieren. Durch Hinzufu gen und Loschen andert sich der Inhalt einer Datenbank. Beim Datenbankentwurf wird eine zeitlich gegenuber den A nderungen invariante Denition von Relation vorgenommen. Es werden Eigenschaften formuliert, die die jeweils gultigen Relationen besitzen mussen. n F (A) := R R Relation auf A mit jRj < 1 o Denition Semantische Bedingung, Relationsschema Eine Abbildung : F (A) ! fwahr; falschg heit semantische Bedingung auf A. Sei eine Menge von semantischen Bedingungen auf A, dann heit n S (A; ) := R 2 F (A) (R) = wahr fur alle 2 Relationsschema auf A. 36 o Beispiele i) Prufung der Korrektheit einer Eingabe (z.B. kein 31. Februar bei Datumseingabe) ii) Sei die Attributmenge A = fKundenNr; Name; Anschrift; VersScheinNr; Sparte; Deckung; ; ; ; ; Abschlussdatum Vertragsende SchadensNr Schadensh ohe ; ; g Schadenstag Auszahlungsbetrag Agent gegeben. Denkbar sind dann die semantischen Bedingungen Schadenstag Vertragsende Auszahlungsbetrag Deckung Abschlussdatum oder \Wenn keine VersScheinNr existiert, darf auch keine SchadensNr angelegt werden." Denition Funktionale Abhangigkeiten Seien X; Y A = Attr(R). Eine semantische Bedingung geschrieben X ! Y heit funktionale Abhangigkeit. R erfullt X ! Y genau dann, wenn fur alle f1 ; f2 2 R gilt f1 jX = f2 jX dann folgt f1 jY = f2 jY ; das heit bei R sind die Eintrage auf Y bereits festgelegt durch die Eintrage auf X . Beispiel Im obigen Beispiel waren die folgenden funktionalen Abhangigkeiten denkbar fKundenNrg ! fName; Anschrift; Agentg fVersScheinNrg ! fKundenNrg fSchadensNrg ! fVersScheinNr; Schadenshohe; Schadenstagg Denition 1. Normalform Eine Relation R ist in erster Normalform, wenn jeder Eintrag von R atomar ist, das heit ein einzelner Wert des Wertebereichs. Beispielsweise ist die folgende Tabelle nicht in erster Normalform KundenNr K1 Name Otto VersScheinNr 4711 4712 4713 37 SchadensNr S1,S2,S3 S4,S5,S6 S7,S8,S9,S10 Fuhrt man eine \Normalisierung" durch, so erhalt man KundenNr K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 Name Otto Otto Otto Otto Otto Otto Otto Otto Otto Otto VersScheinNr 4711 4711 4711 4712 4712 4712 4713 4713 4713 4713 SchadensNr S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 Neuere Entwicklungen behandeln auch Datenbanken in NFNF (\Non-First-Normal-Form"), zum Beispiel das NF2 - oder das eNF2-Modell. Hier sollen jedoch im weiteren nur Tabellen in erster Normalform betrachtet werden. Nullwerte Es kann vorkommen, da einige Eintragungen nicht vorgenommen werden konnen, da sie bisher nicht existieren oder nicht bekannt sind. Solche Werte heien Nullwerte und werden mit bezeichnet. Beispiele Im obigen Beispiel Ein Kunde der Versicherung hat keinen Schaden gemeldet. Ein potentieller Kunde braucht keinen Vertrag abgeschlossen zu haben. Eine Telefonnummer braucht nicht zu existieren. Beispiel Sei R die folgende Relation uber fA; B; C g A a B C c Gesucht sind alle Tupel t mit t(B ) = b. Es gibt zwei Alternativen a) Nur fur Tupel mit t(B ) = b wird die Bedingung als erfullt angesehen. b) Auch Tupel mit t(B ) = erfullen die Bedingung. Von Codd wurde eine dreiwertige Logik mit den Werten eingefuhrt. ^ 0 1 0 0 0 0 1 0 0 1 _ 0 0 1 38 0 1 1 1 1 1 1 wahr ( 1), not(0) = 1 not( ) = not(1) = 0 falsch ( 0) und A uerer Verbund Bei Tupeln, die nicht in den Ausgangstabellen auftauchen, werden die Werte bei den nicht erklarten Attributen mit aufgefullt. A 1 2 4 6 7 B 4 2 1 1 3 ./ C 1 2 3 4 B 1 2 2 5 = A 1 2 2 4 6 7 B 4 2 2 1 1 3 5 C 2 3 1 1 4 (Solch ein auerer Verbund ist zum Beispiel auch in SQL moglich) ./ nicht assoziativ ist, denn fur Ein Nachteil des aueren Verbundes ist, da R2 R1 A 1 B 2 B 2 gilt beispielsweise B 2 A 1 C 4 ./ (R2 ./ R3 ) R1 ./ R2) ./ R3 (R1 A 1 1 R3 C 3 A C 3 4 1 1 B 2 2 C 3 4 Da im allgemeinen die Auswertreihenfolge vom Datenbank-System bestimmt wird, konnen hier also Probleme auftreten. Eine alternative Moglichkeit Nullwerte zu verarbeiten ist, sie als indizierte Werte 1 , 2 , : : : zu betrachten. Die Nullwerte sind zunachst paarweise verschieden, nur wenn geschlossen werden kann, da zwei Nullwerte gleich sein mussen werden sie identiziert. Zum Beispiel sind Nullwerte haug als verschieden anzusehen, etwa Telefonnummer, Autokennzeichen, Kinder. Fur funktionale Abhangigkeiten vereinbaren wir folgendes: Eine Relation R erfullt X ! Y , dann wenn aus t1 jX = t2 jX folgt, da die Nullwerte von t1 und t2 auf Y ubereinstimmen. Im weiteren werden wir alle Nullwerte als indizierte Nullwerte betrachten. Schlussel Sei S (A; ) ein Relationenschema. X A heit Schlussel von S (A; ), wenn gilt X ! A und fur alle A 2 X darf X n fAg ! A nicht von allen R 2 S (A; ) erfullt werden. Schlu ssel konnen verschieden viele Attribute enthalten. Sei zum Beispiel A = fA; B; C; Dg und = fABC ! D; BD ! A; ABD ! C g, dann sind in S (A; ) ABC und BD Schlu ssel. Fur ABC zeigt man dies so: Es gilt ABC ! A, aber nicht AB ! A, AC ! A oder BC ! A, da zum Beispiel die Tabelle A 1 1 B 1 1 C 0 1 D 0 1 erfullt aber nicht AB ! A. Fur AC ! A und BC ! A lassen sich ahnliche Gegenbeispiele nden. Die Anzahl der Schlussel kann exponentiell wachsen. 39 Beispiel Sei wieder die Attributmenge A = fKundenNr; Name; VersScheinNr; Sparte; Deckung; SchadensNr; Schadenstagg und die folgende Tabelle gegeben KundenNr 1 1 1 2 3 Name Otto Otto Otto Hinz Hinz VersScheinNr 4711 4712 4711 15 16 Sparte Kfz Kfz Kfz Kfz Kfz Deckung 1000000 1000000 1000000 1000000 1000000 SchadensNr 1 2 3 ----- Schadenstag 1.1.90 2.1.90 3.1.90 ----- Der einzig denkbare Schlussel ware SchadensNr, aber bei einem Schlussel durfen keine Nullwerte eingetragen werden. Aus einer Menge funktionaler Abhangigkeiten lat sich eine Menge + funktionaler Abhangigkeiten bestimmen, die logisch impliziert werden. Beispiel Sei A = fA; B; C g und = fA ! B; B ! C g. In + liegen zum Beispiel A ! C; A ! BC; A ! AB; A ! A; A ! ;; A ! AC; A ! ABC B ! BC; B ! ;; : : : C ! C; C ! ;; AB ! C; : : : Schwierigkeiten bei groen Schemata Informationen, die keinen Wert beim Schlussel besitzen, konnen nicht gespeichert werden. Informationen, die an andere gekoppelt gespeichert sind, werden beim Loschen der anderen Informationen mitgeloscht. Dieselbe Information kann haug gespeichert werden mussen. Daraus ergibt sich ein hoher Speicherverbrauch und Redundanz. Eine Information soll moglichst nur an einer Stelle gespeichert werden. Bilde also mehrere Relationenschemata fur die verschiedenen Typen von Informationen. Denition Seien S1(A1 ; 1); : : :; Sn(An ; n ) Relationenschemata und : S1 Sn ! fwahr; falschg eine semantische Bedingung auf (S1 ; : : :; Sn ). Ist eine Menge semantischer Bedingungen auf (S1; : : :; Sn ), so heit DS = DS(S1; : : :; Sn; ) = f(R1; : : :; Rn) 2 S1 Sn j (R1; : : :; Rn ) = wahr fur alle 2 g ein Datenbankschema. Ein (R1; : : :; Rn) 2 DS heit Beispiel fur das Schema. 40 Beispiel Seien die Attributmengen A1 = fSchadensNr; Schadenstag; Schadenhohe; VersScheinNrg A2 = fVersScheinNr; KundenNr; Sparte; Deckung; Abschlussdateng A3 = fKundenNr; Name; Anschrift; Agentg und die funktionalen Abhangigkeiten 1 = fSchadensNrg ! fSchadenstag; Schadenhohe; VersScheinNrg 2 = fVersScheinNrg ! fKundenNr; Sparte; Deckung; Abschlussdateng 3 = fKundenNrg ! fName; Anschrift; Agentg gegeben. Daraus ergibt sich Si = Si(Ai ; fig) sind Relationsschemata fur i = 1; 2; 3 DS = DS(S1 ; S2; S3; fvertr aglichg) 3 (R1; R2; R3) Bei einem solchen Schema konnen unabhangig Daten eingefu gt werden. Es braucht etwa kein Schaden (beziehungsweise Vertrag) vorzuliegen, damit eine VersScheinNr (beziehungsweise KundenNr) vergeben werden kann. Vertraglichkeit vertraglich mu so aussehen, da kein (beziehungsweise werden kann, zu dem kein Vertrag (beziehungsweise Kunde) existiert. Schaden Vertrag) gespeichert Fremdschlusselbedingung Die Attributmenge Ai enthalte einen Schlussel X von S (Aj ; j ). Dann lautet die Fremdschlusselbedingung t 2 Ri 2 S (Ai ; i) =) 9t0 2 Rj 2 S (Aj ; j ): tjX = t0 jX : Das heit, falls in Ri ein Tupel t eingefugt werden soll, mu in Rj ein Tupel existieren, das in X mit t ubereinstimmt. Im obigen Beispiel ist VersScheinNr ein Fremdschlu ssel in A1 von A2 . S Sei A = ni=1 Ai , die Menge der funktionalen Abhangigkeiten X ! Y , fur die ein Ai existiert mit X; Y 2 Ai und X ! Y 2 i. Betrachte nun die Abbildung : S (A; ) ! S1 : : : Sn S (A; ) 3 R 7! (A1 (R)); : : :; An (R) = (R1; : : :; Rn ): Man sagt (R1; : : :; Rn) 2 S1 Sn erfullt die Universalrelationbedingung UR, wenn ein R 2 S (A; ) existiert mit (R) = (R1; : : :; Rn ). Und (R1; : : :; Rn) 2 S1 Sn erfullt die schwache Universalrelationbedingung SUR , wenn ein R 2 S (A; ) exstiert mit (R) (R1; : : :; Rn). In der Theorie wird immer UR vorausgesetzt. Dann ist namlich DS(S1 ; : : :; Sn ; fURg ) ein Datenbankschema. Wir beschaftigen uns im folgenden mit der Frage welche Information in (R1; : : :; Rn ) enthalten ist. n n Wir wissen bereits, da i./ R auf A deniert ist. Gilt aber auch R = ./ R im allgemeinen? i =1 i=1 i Die Inklusion \" gilt nach U bungsaufgabe 5 immer. 41 Beispiel Seien die folgenden drei Relationen R, R1 und R2 gegeben, mit R1 = Nummer;LName;Ort (R) und R2 = TNummer;TName;Ort(R). Sei Nummer L1 L2 L1 L3 LName Meier Meier Meier Schmidt Nummer L1 L2 L3 TNummer T1 T2 T3 R Ort K oln Berlin K oln K oln TNummer T1 T2 T3 T1 R1 LName Meier Meier Schmidt R2 TName Mutter Bolzen Schraube TName Mutter Bolzen Schraube Mutter Ort K oln Berlin K oln Ort K oln Berlin K oln Es folgt Nummer . . . L3 LName . . . Schmidt R1 ./ R2 Ort . . . K oln TNummer . . . T3 TName . . . Schraube Der letzte Datensatz ist falsch, die Inklusion \" gilt also im allgemeinen nicht! Denition Gilt nun stets fur n R = i./ R =1 i (R1; : : :; Rn ) 2 DS(S1 ; : : :; Sn; fURg) und R 2 S (A; ), so besitzt DS einen verlustlosen Verbund bezuglich (A1 ; : : :; An ). Bemerkung Die Aussage, da : S (A; ) ! DS(S1; : : :; Sn ; fURg) injektiv ist, ist gleichbedeutend damit, da die Zerlegung von S (A; ) in Verbund besitzt. 42 DS einen verlustlosen Beweis Im obigen Beispiel ware dasselbe R1 und R2 resultiert, wenn in R das Tupel L3 Schmidt K oln T3 Schraube vorgekommen ware. Das heit wir erhalten das gleiche Bild fur verschiedene Urbilder, somit ist die Zerlegung nicht injektiv. Algorithmus fur den Test auf verlustlosen Verbund bei funktionalen Abhangigkeiten Gegeben sei S (A; ) mit einer Menge von funktionalen Abhangigkeiten und (A1 ; : : :; Am) mit A= m [ i=1 Ai: Ausgegeben werde, ob die Zerlegung von S (A; ) bezuglich (A1; : : :; Am ) verlustlos ist. Erstelle dazu eine Tabelle T mit den Zeilen A1 ; : : :; Am und den Spalten A1; : : :; An , wobei A = f A1 ; : : : ; An g, und mit Eintragen falls Aj 2 Ai T (Ai ; Aj ) = ab sonst. i Wiederhole bis sich T nicht mehr andert Durchlaufe mit X ! Y Falls zwei Zeilen Ak und Al existieren, deren Eintrage in den Spalten von X ubereinstimmen, so setze deren Eintrage auf Y ebenfalls gleich. Dabei wird als Ergebnis a eingetragen, wenn eine der Zeilen in der entsprechenden Spalte einen Eintrag a enthalt, sonst das b mit dem kleineren der Indizes. Genau dann, wenn die stabile Tafel eine Zeile enthalt, die nur Eintrage a besitzt, existiert ein verlustloser Verbund. Beispiel Sei A = fA; B; C; D; E g und = fA ! C; B ! C; C ! D; DE ! C; CE ! Ag und A1 = fA; Dg, A2 = fA; Bg, A3 = fB; E g, A4 = fC; D; Eg, A5 = fA; E g. A1 A2 A3 A4 A5 A B a b1 a a b3 a b4 b4 a b5 A1 A2 A3 A4 A5 A!C A B C D E a b1 b1 a b1 a a b1 b2 b2 b3 a b3 b3 a b4 b4 a a a a b5 b1 b5 a 43 C D E b1 a b1 b2 b2 b2 b3 b3 a a a a b5 b5 a A1 A2 A3 A4 A5 B!C A B C D E a b1 b1 a b1 a a b1 b2 b2 b3 a b1 b3 a b4 b4 a a a a b5 b1 b5 a A1 A2 A3 A4 A5 C!D A B C a b1 b1 a a b1 b3 a b1 b4 b4 a a b5 b1 D a a a a a E b1 b2 a a a A1 A2 A3 A4 A5 A a a a a a DE ! C B C b1 b1 a b1 a a b4 a b5 a D a a a a a E b1 b2 a a a A a a a a a CE ! A B C b1 b1 a b1 a a b4 a b5 a D a a a a a E b1 b2 a a a A1 A2 A3 A4 A5 Also handelt es sich um einen verlustlosen Verbund. Beweis Es ist R 2 S (A; ), das heit R erfullt alle X ! Y 2 . Wir haben zu zeigen, da \" gilt. m (R). Dann ist (a1; : : :; an) 2 R zu zeigen. Das Tupel Sei dazu also (a1; : : :; an ) 2 i./ =1 Ai a = (a1; : : :; an) wurde aus den Ai (R) durch Verbund erzeugt, daher existiert also in jedem Ai (R) ein ti mit Ai (a) = ti. In R existiert somit zu jedem ti ein Tupel fi mit fijAi = ti , das heit ur Aj 2 Ai ; fi (Aj ) = baijj f sonst, dabei ist bij ein bisher unbekannter Wert. Wir haben somit f1 ; : : :; fn 2 R und R erfullt alle X ! Y 2 . Stimmen ein fk und ein fl auf X uberein, so mussen sie auch auf Y ubereinstimmen. Damit konnen die Eintrage gleichgesetzt 44 werden, ist ein Eintrag dabei bekannt, das heit ein aj , so mu der unbekannte Wert im anderen Tupel ebenfalls aj gewesen sein. Besteht schlielich ein fi nur noch aus aj 's, so ist also fi = (a1; : : :; an ) 2 R. Enthalte umgekehrt die stabile Tafel keine Zeile, die nur aus aj 's besteht. Dann besetze die Tafel mit paarweise verschiedenen Werten. Es ergibt sich eine Relation, die alle X ! Y 2 erfullt. m Fur diese Relation R ist (a1; : : :; an ) 2= R aber (a1; : : :; an) 2 i./ (R). In diesem Fall ist der =1 Ai Verbund also nicht verlustlos. (Beim formalen Durchfuhren der Gleichsetzungen kann der Spaltenindex entfallen!) Folgerung Sei A = A1 [ A2 und eine Menge funktionaler Abhangigkeiten auf A. Ist A1 \ A2 ! A1 n A2 2 +; so gibt es einen verlustlosen Verbund der Zerlegung von S (A; ) bezuglich (A1 ; A2). Beweis Die Startbelegung der Tafel sieht folgendermaen aus A1 \ A2 A1 n A2 A2 n A1 A1 a : : :a a : : :a b1 : : :b1 A2 a : : :a b2 : : :b2 a : : :a Betrachten wir die Abhangigkeit A1 \ A2 ! A1 n A2 , so wird daraus A1 \ A2 A1 n A2 A2 n A1 A1 a : : :a a : : :a b1 : : :b1 A2 a : : :a a : : :a a : : :a Beispiel Sei A = fLehrer; Kurs; Studentg und = fKurs ! Lehrerg. Dann lat sich nach obiger Folgerung jedes R 2 S (A; ) verlustos bezuglich (fKurs; Lehrerg; fKurs; Studentg) zerlegen. Die Armstrong-Axiome Um formal bestimmen zu konnen, welche funktionalen Abhangigkeiten von einer Menge funktionaler Abhangigkeiten logisch impliziert werden, kann man folgende drei Regeln verwenden. Fur alle X; Y; Z A gilt Ist Y X so gilt X ! Y . (A1) Gilt X ! Y so auch XZ ! Y Z . (A2) Gilt X ! Y und Y ! Z , so auch X ! Z . (A3) Diese Armstrong-Axiome sind korrekt und vollstandig. Beweis Die Korrektheit lat sich leicht zeigen, wir wollen uns hier mit der Vollstandigkeit beschaftigen. Es ist zu zeigen, da sich jede funktionale Abhangigkeit X ! Y 2 + durch Anwenden der Regeln (A1), (A2) und (A3) aus ableiten lat. Sei dazu X + := fA A j X ! A ist durch (A1), (A2) und (A3) aus ableitbarg 45 Sei Y X +. Dann ist die Abhangigkeit X ! Y mit (A1), (A2) und (A3) ableitbar, denn fur Y = fA1 ; : : :; An g wissen wir, da jedes X ! Ai ableitbar ist. Vergroere mit Induktion fA1; : : :; Aig fur i = 1; 2; : : : bis Y erreicht ist. Dies funktioniert so: Aus X ! Ai und X ! A1 : : :Ai 1 (IV) folgt mittels (A2) XX ! XAi und XAi ! A1 : : :Ai 1 Ai und hieraus mit (A3) X ! A1 : : :Ai 1 Ai . Sei nun Y 6 X +. Dann kann X ! Y keine logische Konsequenz der Abhangigkeiten in sein, denn wir konnen eine Relation R denieren, die zwar alle Abhangigkeiten aus erfullt, aber X ! Y nicht. X+ A n X+ R = 1: : : 1 0: : : 0 1: : : 1 1: : : 1 Nach der Voraussetzung Y 6 X + erfullt R X ! Y nicht. Nun ist noch zu zeigen, da R alle V ! W 2 erfullt. Sei dazu angenommen, da ein V ! W von R nicht erfullt werde. Dann mu V X + sein, da sonst V ! W trivialerweise erfullt ware, da dann R keine auf V gleichen Tupel enthielte. Weiter mu W 6 X + gelten, da sonst V ! W erfullt ware. Aus V X + erhalten wir mittels (A1) X + ! V und mit (A3) ergibt sich daraus X ! V . Weiter folgt hieraus mit (A3) und V ! W die Abhangigkeit X ! W . Wegen W 6 X + existiert ein Attribut A 2 W n X + . Damit gilt nach (A1) W ! A und nach (A3) folgt damit X ! A, wobei A 2= X + . Um dies zu zeigen haben wir nur (A1), (A2) und (A3) benutzt. Damit ist ein Widerspruch gefunden, da R diese Abhangigkeit nicht erfullt. Um zu entscheiden, ob X ! Y 2 + ist, braucht nur Y X + gepruft zu werden. Algorithmus zur Berechnung von X + Sei X (0) := X . Sei X (i+1) := X (i) [ fA j Es exitiert ein Y ! Z 2 mit Y X (i) und A Z g Ist X (i+1) = X (i) so ist X (i) = X + . Beispiel Sei A = fA; B; E; G; H; I g, = fAB ! E; E ! G; BE ! I; GI ! H g und X = AB . Der Algorithmus liefert dann X (0) = AB ? ? ?AB ! E y X (1)?= ABE ? ?E ! G y X (2) = ABEG ? ? ?BE ! I y X (3)?= ABEGI ? ?GI ! H y X (4) = ABEGIH 46 Der Algorithmus bricht nach diesem Durchgang ab, da bereits X (4) = A ist und somit nicht mehr vergroert werden kann. Es ist also X + = A. Weiter ist A+ = A und B + = B . Somit haben wir gezeigt, da X = AB Schlussel von S (A; ) ist. Ableitungsgraphen Sei A eine Attributmenge und eine Menge funktionaler Abhangigkeiten. (1) Ist X A, so ist der Graph, der nur die Attribute aus X als Knoten und keine Pfeile enthalt, ein Ableitungsgraph zu . (2) Sind A1,: : : ,Ak Knoten eines Ableitungsgraphen G1 und ist A1 : : :Ak ! fC g [ Z 2 , so ist auch G2 mit Knoten(G2 ) = Knoten(G1) [ C Pfeile(G2) = Pfeile(G1) [ fA1 ! C; : : :; Ak ! C g ein Ableitungsgraph zu . (3) Nur die mit (1) und (2) konstruierten Graphen sind Ableitungsgraphen zu . Ist X die Menge der Knoten eines Ableitungsgraphen zu , auf die keine Pfeile zeigen, so heit X Anfangsmenge. Ist Y Knoten(G), so heit G Ableitungsgraph zu X ! Y bezuglich . Es gilt X ! Y 2 + genau dann, wenn es zu X ! Y einen Ableitungsgraph bezuglich gibt. Beispiel Seien A und wie in obigem Beispiel, dann konnen wir folgenden Ableitungsgraph konstruieren. Wir verwenden dazu in dieser Reihenfolge die Regeln AB ! E , BE ! I , E ! G und GI ! H . k A k A k B B R Ek k k k A A R Ek k B R I?k R Ek k B ? R Ik - Gk k A R Ek k B R I?k - Gk - H?k Dieser Graph ist ein Ableitungsgraph zu AB ! GH . Welche Regeln werden benutzt um einen Ableitungsgraph zu konstruieren Die Axiome X!X Ist X ! Y Z 2 G und Z ! CW 2 , dann gilt auch X ! ZC Gilt X ! Y Z , so auch X ! Y (B 1) (B 2) (B 3) werden verwendet, um einen Ableitungsgraphen zu konstruieren. Damit wird X + mitbestimmt. Behauptung Die Axiome (B1), (B2) und (B3) sind aquivalent zu (A1), (A2) und (A3). Beweis 47 Bi =) Ai (B 3) !X X X = Y Z (, X Y ) =) X ! Y , das heit (A1). ) (B 2) (B 3) X ! Y XZ ! XZ =) XZ ! XY Z =) XZ ! Y Z; das heit (A2). ) (B 2) (B 3) X ! Y Y ! Z =) X ! Y Z =) X ! Z; das heit (A3). ) Ai =) Bi Die Armstrongaxiome sind vollstandig, implizieren also alle gultigen Regeln. Damit ist also die A quivalenz von X!Y 2 + zur Existenz eines Ableitungsgraphen fur X ! Y gezeigt. Algorithmus zur Berechnung von X + Die einfachste Version dieses Algorithmus durchlauft zu jedem A 2 X alle 2 und versucht X zu vergroern, bis X nicht mehr wachst. Die Ezienz kann verbessert werden durch (1) Wurde U ! V 2 einmal benutzt, so wird diese Abhangigkeit nie wieder verwendet. (2) Wann lat sich U ! V verwenden, um X i zu X i+1 zu vergroern? U X i: Zahle die Attribute von U , die noch nicht erfat sind. Sobald diese Zahl auf 0 heruntergezahlt ist, diese Regel anwenden. (3) Damit ohne Suchaufwand heruntergezahlt werden kann, wird zu jedem Attribut eine Liste mit Verweisen auf die Regeln gefuhrt, bei denen es auf der linken Seite vorkommt. 48 Algorithmus Linclosure zur Berechnung der Hulle X + von X bezuglich (1) Initialisierung for each FD do begin count ( ) := for each ( ) add ( ) to list( ) end newdep = ; update = ; (2) Berechnung while update = do begin w ahle ein update entferne aus update for each list( ) begin W !Z2 W ! Z jW j A2W W!Z A X X 6 ; A2 A W !Z2 A count(W ! Z ) if count(W ! Z ) == 0 then begin add := Z n newdep newdep = newdep [ add update = update [ add end end end (3) Gebe newdep aus Der Algorithmus leistet das gleiche wie der Tafelalgorithmus, ist also korrekt. Aufwand Sei n die Lange der Eingabe, das heit n = jX j + X (jW j + jZ j) W !Z 2 und X und wie immer. Dann ist der Aufwand von Linclosure O(n). Beweis Bei der while-Schleife zahlt man uber alle Schleifendurchga nge hinweg global, welcher Aufwand insgesamt bei den Operationen anfallt. Da kein Suchen erforderlich ist, ist nur zu berucksichtigen, wie oft Herunterzahlen und Vergroern notig ist. Schlimmstenfalls wird beim Herunterzahlen jede linke Seite einer Abhangigkeit benotigt, das heit es fallt der Aufwand X W !Z 2 O(jW j) an. Bei add wird fur jedes A 2 Z Aufwand O(1) benotigt. 49 Die Berucksichtigung von Z erfordert den Aufwand O(jZ j) fur jede Abhangigkeit, die verwendet wird, insgesamt wird also uber alle Abhangigkeiten hinweg der Aufwand X O(jZ j) W !Z 2 notig. Da das Initialisieren einen Aufwand der Groenordnung O(jX j) erfordert, folgt nach Aufsummierung die Behauptung. Beispiel Sei = fA ! D; AB ! E; BI ! E; CD ! I; E ! C g und X = fA; E g. Die Initialisierung liefert: newdep = fA; E g; update = fA; E g list(A) = (A ! D; AB ! E ) count(A ! D) = 1 count(AB ! E ) = 2 list(B ) = (AB ! E; BI ! E ) count(BI ! E ) = 2 list(C ) = CD ! I count(CD ! I ) = 2 list(D) = CD ! I list(E ) = E ! C count(E ! C ) = 1 list(I ) = BI ! E Der Algorithmus macht folgendes: A2 update = fE g. A fcount(A ! D) = 0, count(AB ! E ) = 1, add = fDg newdep = fA; E; Dg, update = fE; Dg W ahle E 2 update, update = fDg Durchlaufe list(E ) count(E ! C ) = 0 add = fC g W ahle update, Durchlaufe list( ) usw. Ziel des Folgenden wird es nun sein, eine sinnvolle Abbildung S (A; ) ! DS(S1; : : :; Sn; ) R ! (R1; : : :; Rn) Ri = Ai (R) zu nden. Die update-Operationen sollen auf den Ri vorgenommen werden. Dabei soll es ausreichen, statt die lokalen Mengen i von Abhangigkeiten zu berucksichtigen. Das Problem ist also zunachst die i zu bestimmen. Sei dazu = X ! Y eine Abhangigkeit auf A und B A, so deniere X ! Y auf B falls X; Y B B (X ! Y ) := wahr sonst, und B := fB ( ) j 2 + g = B ( ) ist die Menge der auf B implizierten funktionalen Abhangigkeiten. 50 Beispiel Sei A = fA; B; C; D; E g und = fA ! E; B ! E; CE ! Dg und B = fA; B; C; Dg. Dann ist B = fAC ! D; BC ! Dg, wobei die trivialen Abhangigkeiten weggelassen wurden. Sei die Tabelle A B C D 1 3 5 7 2 4 5 8 1 4 6 8 die die Abhangigkeiten in B trivialerweise erfullt, gegeben. Erfullt nun das Urbild uber A die funktionalen Abhangigkeiten in ? Wir mussen dazu das Relationenschema R kunstruieren. Sei also A B C D E 1 3 5 7 x R= 2 4 5 8 y 1 4 6 8 z .. . .. . .. . .. . .. . Aus A ! E folgt nun x = z , aus B ! E folgt y = z und daher aus CE ! D 7 = 8, also ein Widerspruch, das heit die auf B implizierten Abhangigkeiten sind nicht notwendigerweise mit den funktionalen Abhangigkeiten auf A vertraglich. Sei auf A gegeben und A1 ; : : :; Am mit m [ i=1 Ai = A: Weiter sei i = Ai ( ). Gegeben sei die Abbildung : S (A; ) ! DS(S1(A1; 1); : : :; Sn(An ; n); 0): Wegen UR existiert dann fur jedes (R1; : : :; Rn) 2 DS ein R 2 S (A; ) mit Ri = Ai (R) und 0 = fUR g: Falls dann R jedes 2 erfullt, so ist abhangigkeitserhaltend. Man braucht also bei einer abhangigkeitserhaltenden Zerlegung nur die i lokal zu prufen, um sicherzustellen, da das globale R alle 2 erfullt. Seien , 0 Mengen von funktionalen Abhangigkeiten auf A. Es gilt: alle 0 2 0 werden von logisch induziert 0 () alle 2 werden von 0 logisch induziert. Ein Verfahren zur Prufung Berechne X + bezuglich . Sei 0 = X ! Y 2 0 . Falls Y X + bezuglich , so wird 0 von impliziert. Eine solche Problemstellung ist naturlich rechnerisch entscheidbar. Gegeben seien nun 1 ; : : :; m . Fur alle i erfulle Ri die Abhangigkeiten aus i . Weiterhin existiere R uber A mit der Eigenschaft Ai (R) = Ri. 51 Welche Abhangigkeiten erfullt nun R? Sei (X ! Y )Ai 2 i . Erfullt Ri die Abhangigkeit (X ! Y )Ai , so erfullt R die Abhangigkeit (X ! Y )A . Sei n ./ = f(X ! Y )A j Es existiert ein i mit X [ Y Ai und (X ! Y )Ai 2 i g: i=1 i Dann ist : S ! DS abhangigkeitserhaltend, wenn n i./=1 i gilt. Mathematisch ausgedruckt heit dies abhangigkeitserhaltend () surjektiv hat verlustlosen Verbund () injektiv. Welche Eigenschaften soll ein Datenbanksystem(DS) haben? Ziel ist es, Redundanz zu vermeiden, das heit jede Information nur einmal zu speichern. Dies geschieht uber die Denition von Normalformen. Sei S (A; ) ein Relationenschema in 1. Normalform, wobei eine Menge von funktionalen Abhangigkeiten ist. Denition Eine Abhangigkeit X ! Y 2 + heit voll, wenn es kein Z = X gibt mit Z ! Y 2 + . Dann ist Y voll von X abhangig. A heit Schlusselattribut, wenn ein Schlussel X von S (A; ) mit A 2 X existiert. Denition 2. Normalform Jedes Nichtschlu sselattribut (NSA) ist von jedem Schlussel voll abhangig. Denition Eine Abhangigkeit der Form X ! Y 2 + , Y ! fAg 2 + , Y 6! X , A 2= X , A 2= Y heit transitiv. A heit dann transitiv uber Y von X abhangig. Denition 3. Normalform Jedes NSA ist von jedem Schlussel nicht transitiv abhangig. Denition Boyce-Codd-Normalform(BCNF) Jedes Attribut ist von jedem Schlussel nicht transitiv abhangig. Bemerkung Es gelten die folgenden Implikationen: R erfullt BCNF =) R erfullt 3NF R erfullt 3NF =) R erfullt 2NF R erfullt 2NF =) R erfullt 1NF 52 Beispiel Sei A = fLieferant; Teil; Anzahl; Ort; Entfernungg und = ffLieferant; Teilg ! fAnzahlg; fLieferantg ! fOrtg; fOrtg ! fEntfernunggg: Dann hat S (A; ) als einzigen Schlussel X = fLieferant; Teilg. Die funktionale Abhangigkeit fLieferantg ! fOrtg liegt in + , Ort ist ein NSA und es ist fLieferantg = X . Also liegt keine 2NF vor. Dies verursacht die Redundanz, da der Wohnort eines Lieferanten jedesmal erneut gespeichert wird, wenn eine Lieferung des Lieferanten erfolgt. Setze A1 = fLieferant; Teil; Anzahlg 1 = ffLieferant; Teilg ! fAnzahlgg A2 = fLieferant; Ort; Entfernungg 2 = ffLieferantg ! fOrtg; fOrtg ! fEnfernunggg Die Abbildung S (A; ) ! DS(S1(A1 ; 1); S2(A2; 2 ); 0) ist abhangigkeitserhaltend. A1 \A2 = fLieferantg und A2 nA1 = fOrt; Entfernungg und es gilt A1 \ A2 ! A2 n A1 2 + ; also ist der Verbund verlustlos. Weiterhin sind S1 und S2 in 2NF. S1 ist daruberhinaus in 3NF, aber S2 nicht, da fLieferantg ! fOrtg, fOrtg ! fEnfernungg eine transitive Abhangigkeit ist. Sind mehrere Lieferanten am gleichen Ort, so wird die Entfernung dieses Ortes redundant gespeichert. Zerlege daher S2 weiter in A21 = fLieferant; Ortg 21 = ffLieferantg ! fOrtgg A22 = fOrt; Entfernungg 22 = ffOrtg ! fEnfernunggg S21(A21; 21); S22(A22; 22); 0) ersetzt S2(A2 ; 2) abhangigkeitserhaltend und der Verbund ist verlustlos. Die Abbildung S (A; ) ! DS(S1 (A1; 1 ); S21(A21; 21); S22(A22; 22); 0) ist also ebenfalls abhangigkeitserhaltend, der Verbund ist verlustlos und die Schemata sind in 3NF und in BCNF. Ein Relationenschema in 3NF mu nicht notwendigerweise in BCNF sein, wie das folgende Beispiel lehrt. DS( 53 Beispiel Sei A = fHersteller; Modell; Geratenummerg und = ffHersteller; Geratenummerg ! fModellg; fModellg ! fHerstellergg: Dann hat S (A; ) als Schlussel fHersteller; Geratenummerg und fModell; Geratenummerg. Jedes Attribut ist Schlusselattribut, also liegt 3NF vor. Wegen der transitiven Abhangigkeit fModell; Geratenummerg ! fModellg fModellg ! fHerstellerg liegt aber keine BCNF vor. Die Redundanz besteht darin, da bei jedem Gerat eines Modelltyps aufgelistet wird, wer Hersteller des Modells ist. Setze A1 = fModell; Geratenummerg 1=; A2 = fModell; Herstellerg 2 = ffModellg ! fHerstellergg Die Zerlegung S (A; ) ! DS(S1(A1 ; 1); S2(A2; 2 ); 0) hat einen verlustlosen Verbund, ist aber nicht abhangigkeitserhaltend, weil die ursprungliche funktionale Abhangigkeit fHersteller; Geratenummerg ! fModellg nicht mehr vorhanden ist. Eine abhangigkeitserhaltende Zerlegung ist hier nicht moglich. Ein Beispiel fur einen Widerspruch liefert die konkrete Tabelle Hersteller Opel Ford Opel Ger atenummer 1 1 2 Modell Kadett Fiesta Kadett die zerlegt wird in Ger atenummer 1 1 2 Modell Kadett Fiesta Kadett und Modell Kadett Fiesta Hersteller Opel Ford In den zerlegten Tabellen kann man die Tupel (1; Taunus) und (Taunus; Ford) einfugen, wogegen in der oberen Tabelle kein entsprechendes Tupel (Ford; 1; Taunus) existieren darf, da fHersteller; Geratenummerg sonst kein Schlussel mehr ware. Algorithmus zur Zerlegung in BCNF-Schemata Gegeben sei S (A; ) mit einer Menge von funktionalen Abhangigkeiten. Ausgegeben wird eine verlustlose Zerlegung DS(S1(A1 ; 1); : : :; Sn (An ; n ); 0) mit der Eigenschaft, da alle Si (Ai ; i ) in BCNF sind. 54 Methode 1. Initialisiere DS(S1 ; 0), wobei S1 = S . 2. Ist Si ein Schema aus DS und nicht in BCNF, so sei X ! fAg 2 +i , X enthalte keinen Schlu ssel von Si und es sei A 2= X . Zerlege Si in Si1 und Si2 Ai1 = fAg [ X i1 = Ai1 ( i ) Ai2 = Ai n fAg i2 = Ai2 ( i ) Wiederhole dies solange, bis jedes Si in BCNF ist. 3. Gebe die Zerlegung aus. Test auf BCNF Falls X kein Schlussel von Ai ist, konnen wir A; B 2 Ai mit A 2 (Ai n fA; B g)+ bezuglich nden. Damit folgt die transitive Abhangigkeit Ai n fAg ! Ai n fA; Bg ! A: | {z X } Dieses Kriterium lat sich verwenden, um eine Abhangigkeit X ! A fur die obige Zerlegung zu nden. Algorithmus 1. Falls Ai kein fA; B g mit A 2 (Ai nfA; B g)+ besitzt, so hat Si (Ai ; Ai ( )) bereits BCNF. 2. Nimm ein solches Paar fA; B g und setze Y = Ai n fB g. 3. Solange in Y ein Paar fA; B 0g mit A 2 (Y n fA; B 0 g)+ existiert: setze Y = Y n fB 0 g. 4. Setze Ai1 = Y und Ai2 = Ai n fAg. Das Schema Si1(Ai1 ; Ai1 ( i )) hat nun BCNF. Das Schema Si2 mu weiter untersucht und even- tuell zerlegt werden. Die Komplexitat ist polynomial (O(n4)) zur Lange n der Eingabe, da n-mal ein Attribut A entfernt werden kann und jedesmal bei den verbleibenden Attributen alle Paare gebildet werden mussen. Dabei ist dann Linclosure() aufzurufen. Bemerkung Nicht fur jede Komponente wird Ai ( ) bei jedem Zerlegungsschritt bestimmt. Nur fur die BCNF-Komponente wird ein Schlussel ausgezeichnet: Ai = X [ fAg, falls X ! A existiert mit einem Schlu ssel X von Si (Ai ; i ). Fur die weitere Zerlegung wird stets verwendet. Die erreichte Zerlegung in BCNF-Schemata hat einen verlustlosen Verbund, ist aber nicht notwendig abhangigkeitserhaltend. Beweis Verlustloser Verbund Dann gilt mit X ! fAg und A1 = X [ fAg, da X ! A1 2 + ist. Weiter ist A2 = A n fAg und A1 \ A2 = X . Die Zerlegung bezuglich A1 und A2 ist also verlustlos und bei der Iteration wird diese Eigenschaft erhalten. 55 Beispiel (eigentlich fur 3NF, da nur ein Schlussel vorhanden ist!) Sei und A = fVorlesung; Lehrer; Stunde; Raum; Studentg = ffVorlesungg ! fLehrerg fStunde; Raumg ! fVorlesungg; fStunde; Lehrerg ! fRaumg; fStunde; Studentg ! fRaumgg Dabei ist fStunde; Studentg Schlussel. Da fVorlesungg kein Schlu ssel ist, setze A1 = fVorlesung; Lehrerg 1 = ffVorlesungg ! fLehrergg: Setzt man A2 = fVorlesung; Stunde; Raum; Studentg; so ist fStunde; Studentg der einzige Schlussel. Wegen fVorlesung; Stundeg+ fVorlesung; Stunde; Lehrer; Raumg verletzt fVorlesung; Stundeg ! fRaumg die BCNF-Bedingung, da das Attribut fRaumg uber fVorlesung; Stundeg transitiv von fStunde; Studentg abhangig ist. Spaltet man dieses Schema noch einmal auf in A21 = fVorlesung; Stunde; Raumg mit 21 = ffVorlesung; Stundeg ! fRaumg; fStunde; Raumg ! fVorlesunggg und A22 = fVorlesung; Stunde; Studentg mit 22 = ffStunde; Studentg ! fVorlesunggg; so sind die resultierenden Schemata in BCNF. Man beachte, da die Projektionen der i von + herkommen. Es wurde also anschaulich eine Zerlegung in Vorlesungs-, Horsaal- und Stundenplan vorgenommen. Genauso hatte man bei A2 auch A21 = fStunde; Raum; Studentg wahlen konnen. Daraus ware ein Raumplan fur Studenten resultiert. Daraus ersieht man, da nicht jede Zerlegung, die automatisch erzeugt wird, sinnvoll ist. Manuelles Eingreifen ist hier notig. Die Abhangigkeit fStunde; Lehrerg ! fRaumg bleibt bei dieser Zerlegung nicht erhalten. Es besteht also das Risiko, da bei ausschlielich lokaler Beachtung der Abhangigkeiten global eine falsche Eintragung erzeugt wird, das heit in unserem Beispiel eine \Doppelbelegung von Lehrern". Statt BCNF lat sich die dritte Normalform erreichen. Dabei ist es moglich, sowohl abhangigkeitserhaltend als auch verlustlos zu zerlegen. 56 Idee \Synthesealgorithmus" Die Menge der Abhangigkeiten wird auf eine Basismenge reduziert. Die bei den einzelnen Abhangigkeiten verwendeten Attribute werden jeweils als Attributmenge eines Schemas aufgefat. Denition Sei eine Menge von funktionalen Abhangigkeiten. heit nichtredundant genau dann, wenn 6 n f g fur alle 2 ist. heit rechtsreduziert genau dann, wenn = X ! fAg fur alle 2 ist. heit linksreduziert genau dann, wenn fur alle Regeln 2 mit = X ! Y gilt, da 6 ( n f g) [ fX n fAg ! Y g mit A 2 X ist. Bemerkung Die dritte Denition besagt, da auf keiner linken Seite ein Attribut fortgelassen werden darf. Jede Menge aus funktionalen Abhangigkeiten ist aquivalent zu einer Menge 0 , die nichtredundant und reduziert ist. Es kann vorkommen, da 1 2 ist und sowohl 1 als auch 2 nicht redundant und reduziert sind, aber da j 1 j 6= j 2 j ist. Beispiel Sei A = fA; B; C; D; E; F g und = fAB ! C; C ! A; BC ! D; ACD ! B; D ! EF; BE ! C; CF ! BD; CE ! AF g: Im ersten Schritt spaltet man die rechten Seiten auf und erhalt als neue funktionale Abhangigkeiten D ! E; D ! F; CF ! B; CF ! D; CE ! A; CE ! F: Wegen C ! A ist CE ! A redundant. Weiterhin ist CF CFD CFDA ABCDF (CF )+ bezuglich ohne CF ! B . Daher ist n fCF ! Bg: Es sind keine weiteren Abhangigkeiten redundant. Die funktionale Abhangigkeit ACD ! B kann wegen C ! A reduziert werden auf CD ! B . Die Menge 1 = fAB ! C; C ! A; BC ! D; CD ! B; D ! E; D ! F; BE ! C; CF ! D; CE ! F g ist nichtredundant und reduziert. Man kann aber stattdessen auch CE ! A, CF ! D und ACD ! B weglassen. 57 Begrundung Aus CF CFB BCFD folgt bereits CF ! D. Ebenso kann wegen ACD ACDEF ACDEFB die Abhangigkeit ACD ! B weggelassen werden. Die Menge 2 = fAB ! C; C ! A; BC ! D; D ! E; D ! F; BC ! E; CF ! B; CE ! F g ist also ebenfalls nichtredundant und reduziert, aber es gilt j 1j = 9 6= 8 = j 2j: Erster Synthesesalgorithmus Gegeben sei S (A; ) mit einer nichtredundanten und reduzierten Menge von funktionalen Abhangigkeiten und einem Schlu ssel X . Ausgegeben werde ein Datenbankschema S1 (A1; 1 ); : : :; Sm(Am; DS( m ); 0) in 3NF und eine abhangigkeitserhaltende und verlustlose Zerlegung : S ! DS. Methode 1. Durchlaufe fur i = 1; : : :; m 1 mit i = U ! V und setze Ai = U [ V und i = fi g. 2. Setze Am = X und m = ;. 3. Gebe die Si (Ai ; i ) aus. Beweis Nach Konstruktion ist die Zerlegung abhangigkeitserhaltend. Sie ist auch verlustlos, wie wir aus dem Test auf verlustlosen Verbund ersehen konnen. z A1 .. . Am A}|m { A1 : : :Ar Ar+1 : : :An a a a : : :a bm : : :bm Die Reihenfolge der Spalten entspricht der Reihenfolge, in der die Attribute bei der Berechnung von A+m hinzugenommen werden. Da X = Am Schlu ssel ist, folgt A+m = A. Mit Induktion nach i zeigt man, da das bm in der Spalte Ar+i durch a ersetzt wird. Wird i = U ! V verwendet, so ist U fA1 ; : : :; Ar+i 1 g und V = fAr+i g und folglich wird bm in der r + i-ten Spalte durch a ersetzt. Mit Induktion ergibt sich eine Zeile bestehend nur aus a's. Beispiel Sei A = fA; B; C g und = fAC ! B g. Dann liefert die Zerlegung der Tabelle R A B C a1 b c1 a2 b c2 58 die beiden Tabellen R1 A R1 ./ R2 liefert schlielich B B und a1 b a2 b A B a1 a1 a2 a2 R2 C b c1 b c2 C b b b b c1 c2 c1 c2 Dies ist nicht die ursprungliche Tabelle. Wir berechnen nun X (R) A C a1 c1 a2 c2 und bilden X (R) ./ (R1 ./ R2 ) und erhalten wieder R. Der Schlussel bewirkt also die Entfernung falscher Informationen. Bemerkung Ist ein 2 mit = X ! Y in S (A; ), wobei X Schlussel ist, so kann das Schema Am fur einen gesonderten Schlussel entfallen. Es bleibt zu zeigen, da jedes Si (Ai ; i ) in 3NF ist. Ist i = ; bei i = m, so liegt 3NF vor. Betrachte nun i = fX ! fAgg, wobei Ai = X [ fAg. Sei angenommen, es gebe U ! V ! fB g mit V 6! U und B 2= V und B 2= U in Si , das heit es liegt keine 3NF vor. Wir vergroern nun U zu Z := U [ ((X n V ) n fBg): Damit gilt ebenfalls Z ! V ! fB g, da Z ! U gilt. Weiter ist B 2= Z , B 2= V und V 6! Z . Behauptung Es ist Z ! X 2 folgt. +. Man beachte, da U Schlu ssel ist, was direkt aus der Denition von 3NF Beweis Es gilt Z ! fB g und Z ! (X n V ) n fB g und damit auch Z ! X n V . Mit Z ! V erhalten wir schlielich Z ! X . Also enthalt Z einen Schlussel von Si ; (Ai; i ). Wegen B 2= Z und Z U gilt auch B 2= U . Ware A 2 Z , so ware A 2= U , da A kein Schlusselattribut ist (Ware A Schlusselattribut, so ware jedes Attribut von Ai Schlusselattribut und es lage 3NF vor.) Also ist U = X , da A 6= B 2 X . Dies ist ein Widerspruch, da der Schlussel X keine echte Teilmenge als Schlussel enthalten darf. Also ist A 2= Z und somit Z X . 1. Ist B 6= A, so gilt wegen B 2 X , B 2= U und U Z X auch hier U = X . Widerspruch! 59 2. Sei also B = A. Wegen Z ! X , X ! Z und Z X ist Z = X . Es ist W X , da A = B 2= W . Wir haben also X = Z ! W ! fBg = fAg: Kritik Ware W = X , so konnte man X ! A durch W ! A ersetzen und ware nicht reduziert. Das Ergebnis ist von der Auswahl der Schritte abhangig. Die Anzahl der Ergebnisschemata ist ebenfalls nicht eindeutig. Als Ausweg streben wir eine Verbesserung der Theorie an. Praktisch Gegenuber der BCNF-Zerlegung ist zwar die Zerlegung in 3NF abhangigkeitserhaltend, dies kann aber bedeuten, da mehr Einzelschemata benotigt werden. In der Praxis ist abzuwagen, wie wichtig diese Eigenschaft ist. Beispiel Im Beispiel A = fVorlesung; Lehrer; Stunde; Raum; Studentg war bereits nichtredundant und reduziert. Wir erhalten A1 = fVorlesung; Lehrerg A2 = fStunde; Raum; Vorlesungg A3 = fStunde; Lehrer; Raumg A4 = fStunde; Student; Raumg: fStudent; Stundeg war Schlussel von A, somit enthalt A4 einen Schlussel. Wir erhalten gegenuber der BCNF-Zerlegung ein zusatzliches Schema, dafur ist die Zerlegung abhangigkeitserhaltend. Zur Struktur nichtredundanter U berdeckungen Denition Seien X; Y; A und eine Menge funktionaler Abhangigkeiten auf A. X und Y heien aquivalent bezuglich (in Zeichen X Y ), wenn X ! Y 2 gilt. Lemma Seien 1 und 2 nichtredundant und mit X U (bezuglich 1 und 2 ). 1 2 auf A. Ist X Beweis und Y ! X 2 + ! Y 2 1, so existiert ein U ! V 2 2 + Da 1 2 ist, existiert ein Ableitungsgraph fur X ! Y bezuglich 2 , darin werden Abhangigkeiten aus 2 verwendet. Jede dieser wiederum lat sich aus 1 ableiten, das heit dazu existiert ein Ableitungsgraph bezuglich 1 . Es ergibt sich durch das Einsetzen ein Ableitungsgraph fur X ! Y bezuglich 1 . Wurde bei keiner Ableitung eines U ! V aus 2 durch 1 die Abhangigkeit X ! Y verwendet, so liee sich in 1 die Abhangigkeit X ! Y entfernen. Dies ist ein Widerspruch zur Nichtredundanz von 1 . 60 Denition Sei eine Menge funktionaler Abhangigkeiten auf A und X A. Wir denieren E (X ) := fU ! V 2 j X U g und E := fE (X ) j E (X ) 6= ;g: E ist eine Partition von . Nach dem Lemma gilt fur 1 und 2 mit E 1 (X ) 6= ; () E 2 (X ) 6= ; und somit E 1 = E 2 1 2 : Denition Eine Menge von funktionalen Abhangigkeiten heit minimal, wenn fur alle 0 mit 0 0 j j gilt. Bemerkung Jedes minimale ist nichtredundant. Ziel Algorithmus, der zu gegebenem ein dazu aquivalentes minimales 0 erzeugt. Denition Sei eine Menge funktionaler Abhangigkeiten auf A und X; Y A. X bestimmt das Y direkt unter (in Zeichen X ! Y ), wenn es eine nichtredundante Menge 0 gibt, bei der ein Ableitungsgraph fur X ! Y keine Abhangigkeit U ! V mit U X benutzt, das heit E 0 (X ) wird nicht benotigt. Lemma Folgende Aussagen sind aquivalent (i) X ! Y (ii) Fur alle nichtredundanten 0 mit 0 existiert eine Ableitung fur X ! Y bezuglich 0 , die kein Element aus E 0 (X ) verwendet. Beweis \(" Siehe Denition \)" Seien 0 und 00 nichtredundant und es gelte 0 00. Fur X ! Y existiere ein Ablei0 tunggraph bezuglich , der keine Abhangigkeit aus E 0 (X ) verwendet. Behauptung Auch zu 00 existiert ein solcher Ableitungsgraph. Beweis Jede der verwendeten Abhangigkeiten aus 0 wird von 00 impliziert. Fur jede Regel W ! Z 2 0 , die verwendet wird, bilde den Ableitungsgraphen bezuglich 00 und ersetze den zu W ! Z gehorenden Teilgraphen durch diesen Ableitungsgraphen bezuglich 00. Es ergibt sich ein Ableitungsgraph fur X ! Y bezuglich 00. 61 Behauptung Der so konstruierte Ableitungsgraph verwendet keine Abhangigkeiten aus E 00 (X ) Beweis Sei angenommen, da U ! V 2 E 00 (X ) verwendet wurde, um W ! Z 2 0 zu ersetzen. Wenn wir U ! W 2 + zeigen konnen, so ist wegen U W + W ! U , damit W U und W U W sowie schlielich W ! Z 2 E 0 (X ), was einen Widerspruch darstellt. Wir haben also noch U ! W 2 + zu zeigen. Es wurde W ! Z benutzt um X ! Y herzuleiten, also W X + und damit X ! W 2 + . Wegen U ! V 2 E 00 (X ) ist U X , insbesondere U ! X 2 + . Schlielich ist also U ! W 2 + . Satz Seien 1 und 2 minimal und 1 2 . Dann gilt fur alle X A jE 1 (X )j = jE 2 (X )j : Lemma A sei nichtredundant. Sei X ! Y 2 E (X ) und Y A mit Y X . Dann existiert eine Regel Z ! W 2 E (X ) mit Y ! Z . Beweis Seien X1, X2 , : : : , Xn alle zu X aquivalenten Attributmengen. Dann existieren i0 und j0 mit Y = Xi0 und X = Xj0 . Im allgemeinen ist nicht jedes Xi linke Seite eines 2 . Gesucht ist ein Z 2 fXi j i = 1; : : :; ng, das als linke Seite auftritt und fur das Y ! Z . Falls Y selbst als linke Seite auftritt, so wahle Z = Y (denn Y ! Y gilt immer). Sei also Y keine linke Seite. Da Y Xi fur jedes i, kann man fur jedes Y ! Xi einen Ableitungsgraphen erstellen. Unter allen solchen Ableitungsgraphen wahle einen solchen aus, der minimale Knotenzahl hat und bei dem Xi linke Seite ist. (Ein solches Xi mu wegen E (X ) 6= ; existieren.) Behauptung Dieser Ableitungsgraph verwendet kein 2 E (X ). Beweis Sei angenommen, da fur Y ! Z (Z linke Seite) ein Ableitungsgraph mit minimaler Knotenzahl ein U ! V 2 E (X ) verwendet. Dann ist dieser Ableitungsgraph auch einer fur Y ! U . Es gibt ein A 2 V , das fur die Ableitung von Y ! U nicht gebraucht wird. Damit entsteht durch das Entfernen von A ein Ableitungsgraph fur Y ! U , der weniger Knoten als der ursprungliche besitzt, auerdem ist U ! V 2 E (X ), im Widerspruch zur Minimalitat des Graphen. Dieses U ! V kann also nicht existieren, damit ist Y ! Z . Lemma B Sei minimal und X A. Dann existiert kein Y ! U 2 E (X ) und kein Z ! V 2 E (X ) mit Y 6= Z und Y ! Z . Beweis Sei angenommen, es gebe Y ! U und Z ! V 2 E (X ) mit Y ! Z . Bilde einen Ableitungsgraph fur Y ! Z , der keine Abhangigkeiten aus E (X ) verwendet. Dann konnen wir E (X ) abandern, ohne den Ableitungsgraphen fur Y ! Z zu verandern. Bilde 0 aus durch Ersetzen von Y ! U und Z ! V durch Z ! UV . 62 Behauptung Es ist 0 Beweis In ( 0)+ ist Z ! U und Y ! Z und damit Y ! U 2 ( 0)+. Auerdem ist wegen Z ! UV 2 0 auch Z ! V 2 ( 0 )+, also impliziert 0 die Abhangigkeiten Y ! U und Z !V. Umgekehrt ist Z ! V 2 + , Y ! Z 2 + und Y ! U 2 + . Wegen Z X gilt Z ! Y , denn X Y . Hieraus folgt schlielich Z ! U 2 + und damit impliziert auch 0 . Aus 0 folgt dann wegen j 0 j = j j 1 ein Widerspruch zur Minimalita t von . Beweis des Satzes Seien also 1 und 2 minimal mit 1 2 . Weiter sei X A. Sei angenommen, da jE 1 (X )j < jE 2 (X )j : | Es sei {z =: m } | {z =: n } E 1 (X ) = fX1 ! X 1; : : :; Xm ! X m g und E 2 (X ) = fY1 ! Y 1; : : :; Yn ! Y ng: Dann existiert ein Yj mit Yj 6= Xi fur alle i. (Sonst existieren k, l mit Yk = Yl , damit Yk ! Yl , im Widerspruch zu Lemma B.) Sei ohne Beschrankung der Allgemeinheit j = 1, das heit Y1 6= Xi fur alle i. Nach Lemma A existiert ein Xi mit Y1 ! Xi . (Ohne Beschrankung der Allgemeinheit sei i = 1.) Bilde 02 durch Ersetzen von Y1 ! Y 1 durch X1 ! Y 1 . Aus Y1 ! X1 2 ( 02 )+ (Beweis wie oben) und X1 ! Y 1 folgt Y1 ! Y 1 2 ( 02 )+ . 2 impliziert X1 ! Y 1 , da X1 Y1, denn 1 2 . Ist X1 = Yj 6= Y1 , so Y1 ! Y 1 und Y1 = Yj ! Y j , also X1 ! Y1 , im Widerspruch zu Lemma B. Also ist X1 6= Yj fur alle j 6= 1. Gegenuber 2 ist die Anzahl der linken Seiten, die gleich irgendeinem Xi sind um eins gewachsen. Dies lat sich iterieren: Jedes Yj , das von allen Xi verschieden ist, kann man durch ein neues Xk ersetzen. Dies fuhrt schlielich zum Widerspruch zu n > m. Bemerkung Die Abbildung E 1 (X ) ! E 2 (X ); (Xi ! X i) 7! (Yj ! Y j ) mit Xi ! Yj : ist eine Bijektion, wenn 1 und 2 aquivalent und minimal sind. Begrundung Zu Xi ! X i existiert nach Lemma A ein Yj mit Xi ! Yj und ein k mit Yj ! Xk . Dann ist (siehe Xk fur i 6= k, im Widerspruch zu Lemma B. Wir erhalten also U A) Xi ! Xi ! Yj =) Yj ! Xi : Yk und somit Yj ! Yk , was wiederum einen Widerspruch Ist Xi ! Yj und Xi ! Yk , so Yj ! Xi ! zu Lemma B darstellt. Somit ist die obige Abbildung wohldeniert und bijektiv. Man kann nach dem Beweis in E 1 (X ) jedes Xi ersetzen durch Yj mit Xi ! Yj , ohne 63 + 1 zu verandern. Beispiel Es sei A = fFahrgestellnummer; KFZ-Kennzeichen; Halter; Schaden; Tag; Zeit; SchadensNrg: Weiter seien 1 = ffFahrgestellnummerg ! fKFZ-Kennzeichen; Halterg; fKFZ-Kennzeicheng ! fFahrgestellnummerg; fSchadensNrg ! fKFZ-Kennzeichen; Tag; Zeit; Schadeng; fKFZ-Kennzeichen; Tag; Zeitg ! fSchadensNr; Schadengg und 2 = ffFahrgestellnummerg ! fKFZ-Kennzeicheng; fKFZ-Kennzeicheng ! fFahrgestellnummer; Halterg; fSchadensNrg ! fKFZ-Kennzeichen; Halter; Tag; Zeitg; fTag; Zeit; Fahrgestellnummerg ! fSchadensNr; Schadengg: Dann ist E 1 (KFZ-Kennzeichen) = ffFahrgestellnummerg ! fKFZ-Kennzeichen; Halterg; und Satz fKFZ-Kennzeicheng ! fFahrgestellnummergg E 2 (KFZ-Kennzeichen) = ffFahrgestellnummerg ! fKFZ-Kennzeicheng; fKFZ-Kennzeicheng ! fFahrgestellnummer; Haltergg E 1 (SchadensNr) = ffSchadensNrg ! fKFZ-Kennzeichen; Tag; Zeit; Schadeng; fKFZ-Kennzeichen; Tag; Zeitg ! fSchadensNr; Schadengg E 2 (SchadensNr) = ffSchadensNrg ! fKFZ-Kennzeichen; Halter; Tag; Zeitg; fTag; Zeit; Fahrgestellnummerg ! fSchadensNr; Schadengg: Sei nichtredundant und nicht minimal. Dann existiert X A und Y ! U 2 E (X ) sowie Z ! V 2 E (X ) mit (Y ! U ) 6= (Z ! V ), so da Y ! Z bezuglich . Folgerung Dann kann man in die beiden Abhangigkeiten Y ! U und Z ! V durch Z ! UV ersetzen. Beweis des Satzes Sei 0 und 0 sei minimal. Dann exitiert ein X A mit jE 0 (X )j < jE (X )j : | Sei wieder und {z =: m } | {z =: n } E 0 (X ) = fX1 ! X 1; : : :; Xm ! X m g E (X ) = fY1 ! Y 1; : : :; Yn ! Y n g: Fur alle Yj existiert dann ein Xi mit Yj ! Xi und wegen m < n existieren i, j und k mit j 6= k und Yj ! Xi sowie Yk ! Xi. Weiter existiert ein h mit Xi ! Yh . Es ist entweder h 6= j (Dann ist Yj ! Yh die gesuchte direkte Abhangigkeit) oder es ist h 6= k und Yk ! Yh ist die gesuchte Abhangigkeit. 64 Algorithmus (zur Konstruktion einer minimalen Menge von funktionalen Abhangigkeiten, die zu aquivalent ist) 1. Ersetze durch aquivalentes nichtredundantes 0. 2. Bestimme alle Aquivalenzklassen von E 0. E X Y !U E X Z!V E X Z , so Ist (Y ! U ) 6= (Z ! V ) und Y ! Ersetze Y ! U und Z ! V durch Z ! UV E 0( ) 0 mit 3. Durchlaufe 0 ( ) mit Durchlaufe 0 ( ) mit Durchlaufe 4. Gebe das so ver anderte 0 aus. zu 1. Initialisiere 0 := 0 F ur jedes { Bilde ( 0)+ := Linclosure( X!Y 2 Ist } X Y (X 0)+, so 0 := X , 0 n (X ! Y )) 0 n (X ! Y ) Wir wollen nun den Zeitaufwand fur diesen Schritt abschatzen. Die Lange der Eingabe sei n, damit hat Linclosure() den Aufwand O(n). Diese Funktion wird fur jedes 2 aufgerufen, also haben wir hier einen Aufwand von O(j j n). Das Ersetzen der Abhangigkeiten hat einen Aufwand von O(j j). Wir erhalten also einen Gesamtaufwand fur Schritt 1 von O(j j n). zu 2. Wir bilden eine Matrix M mit so vielen Zeilen, wie linke Seiten von Abhangigkeiten vorhanden sind, und so vielen Spalten, wie Abhangigkeiten vorhanden sind. Die Eintrage m(X; U ! V ) sind folgendermaen deniert U X+ m(X; U ! V ) := 10;; falls sonst. Dann ist X U aquivalent zu Es existieren V , Z mit m(X; U ! V ) = 1 und m(U; X ! Z ) = 1. In diesem Schritt mu zur Konstruktion der Matrix j j-mal Linclosure() aufgerufen werden, der Aufwand betragt daher O(j j n). zu 3. Wesentlicher Schritt ist hier der Test auf Y ! Z Betrachte jedes E (X ) und jedes Y ! U 2 E (X ) Bilde (Y 00)+ := Linclosure(Y , n E (X )) Modiziere dabei Linclosure() dahingehend, da auch fur die 2 E (X ) die Funktion count() berechnet wird, also 0 =) Ist = R ! S , so ist R (Y 00)+: Ist dann Z (Y 00)+ dann gilt Y ! Z . Es werden also nur Abhangigkeiten in n E (X ) benotigt, um Y ! Z zu folgern, das heit Y ! Z . count( ) = 65 Fur jedes Y ! U wird einmal der modizierte Linclosure()-Algorithmus aufgerufen, damit ist der Aufwand O(j j n). Da der Aufwand fur das Ersetzen wieder O(j j) ist, haben wir fur den Schritt 3 einen Gesamtaufwand von O(j j n) Ist minimal, so sind die Abhangigkeiten moglicherweise noch um einzelne Attribute rechts oder links zu verkurzen. Es ist jedesmal zu prufen, ob die bisherige Menge von Abhangigkeiten aquivalent ist zu der, die durch das Ersetzen einer Abhanigkeit durch eine verkurzte entsteht. Fur jedes A, das an irgendeiner Reduktion einer Abhangigkeit auftritt, ist jeweils Linclosure() zu rufen, damit betragt dafur der Aufwand O(n2). Ist minimal und reduziert, so kann man manchmal trotzdem noch ein kurzeres 0 nden. Beispiel Sei A = fA; B; C; D; E g und = fA ! B; B ! A; AC ! DE; BD ! C g. Es ist A B und wir erhalten Weiter ist AC BD und A1 = fA; Bg und A2 = fA; B; C; D; Eg und Man kann hier B nicht aus A2 entfernen. 1 = fA ! B; B 2 = fAC ! Ag: ! ABCDE; BD ! ABCDE g: Wahlt man jedoch das zu aquivalente 0 = fA ! B; B ! A; AC ! DE; AD ! C g, erhalt man hier A02 = fA; C; D; E g und 02 = fAC ! ACDE; AD ! ACDE g: Die Ursache hierfur ist, da die Schlussel von S2 (A2; 2 ) geschickt gewahlt wurden. Erinnerung Ist X ! Z , X Z , so lat sich in Z ! U das Z durch X ersetzen ( dabei minimal). Algorithmus Fur jedes Xi ist (Xi)+ zu bilden, die grote Menge von Attributen, die von Xi direkt abhangig ist. Xi ! Zi () Zi (Xi)+ Ist Zi (Xi)+ , und jZi j minimal, so ersetze Xi durch Zi . Denition Seien X1; : : :; Xk ; Y A und R eine Relation auf A. R erfullt (X1; : : :; Xk ) ! Y , wenn gilt Fur alle i, j erfullt R die Abhangigkeit Xi ! Xj Fur alle i erfullt R die Abhangigkeit Xi ! Y (X1; : : :; Xk ) ! Y heit zusammengesetzte funktionale Abhangigkeit. Zu jeder Klasse E (X ) = fX1 ! Y1 ; : : :; Xk ! Yk g bilde (X1; : : :; Xk ) ! k [ i=1 Yi ; dann bilden die zu einer Menge von funktionalen Abhangigkeiten gebildeten zusammengesetzten funktionalen Abhangigkeiten eine ringformige Menge. 66 Beispiel Sei = fA ! BC; B ! AD; AE ! I; BE ! IJ g, dann haben wir die ringformige Menge f(A; B) ! ABCD; (AE; BE ) ! IJ g: Fur das zu aquivalente 0 = fA ! AB; AB ! B; B ! ACD; AE ! IJ g erhalten wir f(A; AB; B) ! CD; (AE ) ! IJ g: Hier ist die Abhangigkeit AB ! B redundant, wir entfernen sie und erhalten f(A; B) ! CD; (AE ) ! IJ g: Denition Eine ringformige Menge heit nichtredundant, wenn keine Abhangigkeit mehr entfernt werden kann. Sie heit reduziert, wenn kein Attribut auf der linken Seite auf eine rechte Seite verschoben werden kann und auf keiner rechten Seite mehr ein Attribut weggelassen werden kann. Beispiel Es sei = fB1 B2 ! A; D1D2 ! B1 B2 ; B1 ! C1; B2 ! C2; D1 ! A; D2 ! A; AB1 C2 ! D2; AB2 C1 ! D1g Wegen (B1 B2 )+ = (D1D2)+ = A ist B1 B2 D1D2. Wir erhalten die ringformige Menge f(B1B2 ; D1D2) ! A; (B1) ! C1; (B2) ! C2; (D1) ! A; (D2) ! A; (AB1 C2) ! D2 ; (AB2C1) ! D1 g Wegen (D1) ! A kann man aus der Abhangigkeit (B1B2 ; D1D2 ) ! A das Attribut A entfernen. Wir konnen also (B1 B2 ; D1D2) ! A durch (B1 B2 ; D1D2 ) ! ; ersetzen. Zweiter Synthesealgorithmus 1. Ersetze die Menge von funktionalen Abhangigkeiten durch eine reduzierte minimale ringformige Menge, die zu aquivalent ist. 2. Fur alle (X1; : : :; Xk ) ! Y konstruiere Si = S (Ai ; i ) wobei Ai = und k [ j =1 Xj [ Y i = fX1 ! Ai ; : : :; Xk ! Ai g; das heit die Xi sind ausgezeichnete Schlussel von Si . 3. Falls kein Ai einen Schlussel fur S (A; ) enthalt, so ist ein weiteres Schema fur einen Schlussel hinzuzunehmen, das heit Sm = S (X; ;), wobei X Schlussel ist. (3. wird benotigt, um einen verlustlosen Verbund zu garantieren.) Der Zeitaufwand fur diesen Algorithmus betragt O(n2), wobei n die Lange der Eingabe ist. Satz Durch den zweiten Synthesealgorithmus entsteht eine Zerlegung in Schemata Si in 3NF. 67 Beweis Es sei Si zu (X1; : : :; Xk ) ! Y gebildet. Sei angenommen, da dieses Si nicht in 3NF ist. Sei also X ! Z ! A, X Schlu ssel von Si, Z 6! X , A 2= Z und A 2= X . Bilde einen Ableitungsgraphen fur Z ! A. Dieser verwendet kein U ! V 2 E (X ), denn sonst X ! Z ! U ! X , also Z ! X im Widerspruch zu unserer Annahme. Bilde 0 , indem A aus Y entfernt wird. Z ! A ist bezuglich 0 ableitbar, da zur Ableitung von Z ! A kein Xi ! Y benutzt wurde. Da Z k [ i=1 Xi [ Y ist X ! Z und Xi ! Z fur alle i ableitbar, damit ist in 0 die Abhangigkeit Xi ! A ableitbar. Wir haben also 0 gezeigt, also kann nicht reduziert gewesen sein. Bemerkung k Xi [ Y ist der Schlu nicht moglich. Falls Z 6 i=1 Beispiel Sei A = fA; B; C g und = fA ! B; B ! C; C ! B g. Wir zerlegen in A1 = fA; Bg 1 = fA ! Bg A2 = fB; C g 2 = fB ! C; C ! Bg Es gilt A ! C ! B und B 2= fC; Ag sowie C 6! A, also ist bei S (A1; 1) eine verdeckte transitive S Abhangigkeit gegeben, das heit eine transitive Abhangigkeit uber verschiedene Tabellen. Da jedoch B C , ist in den Schemata keine Redundanz vorhanden. Um die Frage nach der Allgemeingu ltigkeit dieser letzten Feststellung beantworten zu konnen, brauchen wir die sogenannten Mehrwertigen Abhangigkeiten. Mehrwertige Abhangigkeiten Beispiel Gegeben sei die Tabelle Vorlesung Informatik Informatik Informatik Mathematik Mathematik Lehrer Kohl Kohl Kohl Gauss Gauss Stunde Mo 8-10 Di 8-10 Mi 18-19 Di 10-11 Mi 10-11 Raum H1 H2 H7 H3 H3 Student Vogel Vogel Vogel Hinz Hinz Hinz mochte aber auch Informatik horen. Alle Tupel bei Vogel konnen ubernommen werden, wobei 68 Vogel durch Hinz zu ersetzen ist. Wir erhalten die Tabelle Vorlesung Informatik Informatik Informatik Mathematik Mathematik Informatik Informatik Informatik Lehrer Kohl Kohl Kohl Gauss Gauss Kohl Kohl Kohl Stunde Mo 8-10 Di 8-10 Mi 18-19 Di 10-11 Mi 10-11 Mo 8-10 Di 8-10 Mi 18-19 Raum H1 H2 H7 H3 H3 H1 H2 H7 Student Vogel Vogel Vogel Hinz Hinz Hinz Hinz Hinz Denition Sei R eine Relation auf A und X; Y A. Dann erfullt R die mehrwertige Abhangigkeit X !! Y genau dann, wenn fur alle t; s 2 R mit sjX = tjX ein u 2 R existiert mit ujX = sjX , ujY = tjY und ujA (X [Y ) = sjA (X [Y ). Im Beispiel ist X !! Y mit X = fVorlesungg und Y = fStunde; Raumg erfullt. Bemerkung Erfullt R die mehrwertige Abhangigkeit X !! Y , so folgt unmittelbar aus der Denition auch X !! A (X [ Y ). Bemerkung Erfullt R die funktionale Abhangigkeit X ! Y , so auch die mehrwertige Abhangigkeit X !! Y . Ist Z Y und erfullt R die mehrwertige Abhangigkeit X !! Y , so braucht R nicht X !! Z zu erfullen. Satz Sei A = X [ Y [ Z mit X; Y; Z paarweise disjunkt. Dann erfullt R die mehrwertige Abhangigkeit X !! Y genau dann, wenn R = X [Y (R) ./ X [Z (R), das heit, wenn ein verlustloser Verbund bezuglich (X [ Y ) und (X [ Z ) vorliegt. Beweis \)" Per denition erfullt. \(" X [Y (R) und X [Z (R) haben die Attributmenge X als Verbundattribute. Es sind also nur Tupel zu betrachten, die auf X ubereinstimmen. Seien dazu t; s 2 R mit sjX = tjX . Die Menge R = X [Y (fsg) ./ X [Z (ftg) enthalt u mit ujX = sjX = tjX und ujY = sjY sowie ujZ = tjZ . Wird also eine solche mehrwertige Abhangigkeit erkannt, so kann zerlegt werden! Erinnerung (Test auf verlustlosen Verbund bei funktionalen Abhangigkeiten) R erfullt R = X [Y (R) ./ X [Z (R) dann, wenn X ! Y oder X ! Z gilt. Falls neben funktionalen Abhangigkeiten mehrwertige Abhangigkeiten erfullt sein mussen, so gilt diese Aussage nicht mehr. Beispiel In der Tabelle X Y Z a : : :a b : : :b a : : :a a : : :a a : : :a b : : :b 69 brauchen die mehrwertigen Abhangigkeiten nicht erfullt zu sein. Auch wenn durch funktionale Abhangigkeiten keine Zerlegung mehr moglich ist, kann durch mehrwertige Abhangigkeiten eine weitere Verfeinerung der Zerlegung moglich sein. Denition 4NF Sei eine Menge von funktionalen und mehrwertigen Abhangigkeiten auf A. Ein Relationenschema S = S (A; ) ist in 4NF genau dann, wenn aus X !! Y 2 + mit Y 6 X , X [ Y 6= A und Y 6= ; folgt, da X einen Schlussel fur S enthalt. Ziel des Folgenden wird es sein, einen Zerlegungsalgorithmus zu einer Zerlegung in 4NF-Schemata zu nden. Satz Ist S in 4NF, so auch in BCNF. Beweis Sei S in 4NF, aber nicht in BCNF. Dann existiert X ! Y 2 + , wobei X keinen Schlussel von S enthalt. Dann erfullt jedes R 2 S mit X ! Y auch X !! Y nach fruherer Bemerkung. Da 4NF vorliegt, mu X einen Schlussel enthalten im Widerspruch zur Annahme. Beispiel Sei A = fA1 ; A2g und = f; !! fA1 gg. R erfullt dann ; !! fA1 g genau dann, wenn R = fA1 g (R) ./ fA2 g(R) = fA1 g (R) fA2 g (R): Es gibt aber Schemata, die in BCNF aber nicht in 4NF sind. Beispiel Gegeben sei die Tabelle Angestellter Hilbert Hilbert Turing Turing Pythagoras Hilbert Hilbert Kind Hilda Hilda Peter Peter Peter Jochen Jochen Gebiet Mathematik Physik Informatik Mathematik Mathematik Mathematik Physik in dem keine nichttriviale Abhangigkeit erfullt wird. Das hierzu gebildete Schema ist also in BCNF, aber es liegt keine 4NF vor, da fAngestellterg !! fKindg gilt, und fAngestellterg kein Schlussel ist. Wir erganzen nun den Zerlegungsalgorithmus in BCNF- zu einem Zerlegungsalgorithmus in 4NFSchemata. Statt zu testen, ob X ! Y existiert, wobei X keinen Schlu ssel enthalt, teste, ob X !! Y existiert, wobei X keinen Schlussel enthalt. Wenn ja, so kann das entsprechende Schema S (Ai; i ) zerlegt werden in S (Ai1; i1) und S (Ai2; i2 ), wobei Ai1 = X [ Y und Ai2 = Ai1 Y gilt. Weiterhin ist ij = Aij ( i ) fur j = 1; 2. 70 Denition Sei S = S (A; ) und B A mit einer Menge von funktionalen und mehrwertigen Abhangigkeiten. Die Abhangigkeit = X !! Y 2 vererbt auf B die Abhangigkeit B ( ) = X !! Y \ B; falls X B wahr Weiter setzt man sonst. B ( ) = fB ( ) j 2 + g: Bemerkung Erfullt R die mehrwertige Abhangigkeit = X !! Y und ist X B, so erfullt B (R) auch B ( ). In einer gegebenen Tabelle streicht man einfach die Spalten, die nicht zu B gehoren. Um entscheiden zu konnen, ob eine gegebene mehrwertige Abhangigkeit X !! Y in + liegt, ist eine ahnliche Konstruktion wie der zur Berechnung der Hulle bei funktionalen Abhangigkeiten mit dem Linclosure-Algorithmus erforderlich. Beachte Aus X !! Y und Z = Y folgt nicht X !! Z . A hnlich wie die Armstrong-Axiome gibt es auch hier ein Axiomensystem, das es erlaubt, zu entscheiden, welche mehrwertigen Abhangigkeiten logisch impliziert werden. Fur alle W; X; Y; Z A gilt Es gilt immer X !! X . X !! Y impliziert X [ Z !! Y . X !! Y und X !! Z impliziert X !! Y [ Z . X !! Y und X !! Z impliziert X !! Y \ Z . X !! Y und Y !! Z impliziert X !! Z Y . X !! Y und Y [ W !! Z impliziert X [ W !! Z (Y [ W ). X !! Y und Z = A fX; Y g impliziert X !! Z . (M 1) (M 2) (M 3) (M 4) (M 5) (M 6) (M 7) Weiterhin gelten noch die beiden sogenannten Koppelungsaxiome X ! Y impliziert X !! Y . X !! Y , Z ! W , W Y und Y \ Z = ; impliziert X ! W . (C 1) (C 2) Satz Diese Axiome sind korrekt und vollstandig. Beispiel Sei A = fA; B; C; D; E g und = fA !! BC; DE !! C g. Dann impliziert die mehrwertige Abhangigkeit AD !! BE , denn aus A !! BC folgt mittels (M7) A !! DE . Zusatzlich haben wir DE !! C , dies liefert mittels (M5) A !! C , hieraus folgt mit (M2) AD !! C und mittels (M7) schlielich AD !! BE . 71 Es soll nun exemplarisch (M3) bewiesen werden Sei R eine Relation die X !! Y und X !! Z erfullt. Seien t1 ; t2 2 R mit t1 jX = t2 jX . Verwende X !! Y , das heit es existiert ein t3 2 R mit t1 jX = t2 jX = t3 jX , t3 jY = t1 jY und t3 jV = t1 jV mit V := A n (X [ Y ). Verwende nun X !! Z , das heit zu t1 und t3 existiert ein t4 2 R mit t4 jX = t1 jX , t4 jZ = t1 jZ und t4 jW = t3 jW mit V := A n (X [ Z ). Es ist t1 jX = t2 jX t4 jZ = t1 jZ t4 jY \W = t3 jY \W = t1 jY also t4 jY [Z = t1 jY [Z " " Schlielich haben wir noch Def : v: t4 t3 jY t2 jU = t3 jU = t4 jU ; " U V " U W wobei U = A n (Y [ Z ) ist. Statt alle MVD's aufzulisten, stelle Bausteine zur Verfugung, aus denen diese kombiniert werden konnen. Satz Sei eine Menge aus funktionalen und mehrwertigen Abhangigkeiten und X; Y A. Genau dann wird X !! Y von impliziert, wenn Y durch die Vereinigung ausgewahlter Elemente der Abhangigkeitsbasis von X bezuglich gebildet wird. Dabei wird die Abhangigkeitsbasis von X bezuglich folgendermaen erhalten. 1. Bilde eine Menge G, die aus allen Mengen Y besteht, die als rechte Seite einer Abhangigkeit U !! Y auftreten, wenn man (M2) und (M7) auf anwendet. 2. Solange G noch nicht aus disjunkten Teilmengen besteht, ersetze Z1 und Z2 mit Z1 \ Z2 6= ; durch Z1 n Z2, Z2 n Z1 und Z1 \ Z2 . Beispiel zur Zerlegung in 4NF Sei A = fVorlesung; Lehrer; Raum; Student; Stundeg und = ffVorlesungg ! fLehrerg; fStundeRaumg ! fVorlesungg fStunde; Lehrerg ! fRaumg; fStunde; Stundentg ! fRaumg fVorlesungg !! fStunde; Raumgg Der einzige Schlussel ist fStunde; Studentg. Vorlesung ist kein Schlussel, daher ist die 4NF verletzt. Wir zerlegen in A1 = fVorlesung; Stunde; Raumg A2 = fVorlesung; Lehrer; Studentg A1 ist in 4NF und Schlussel sind fVorlesung; Stundeg und fStunde; Raumg. Hingegen ist Vorlesung ! Lehrer 2 2 und Vorlesung kein Schl ussel von S2 (A2 ; 2) und damit ist A2 nicht in 4NF. Wir zerlegen A2 weiter und erhalten A21 = fVorlesung; Lehrerg A22 = fVorlesung; Studentg 72 Hier ist 21 = fVorlesung ! Lehrerg und 22 = ; (das heit A22 ist Schlussel) und beide Schemata sind in 4NF. A21 enthalt ein Attribut weniger als im alten Beispiel. Problem Wie sieht ein Synthesealgorithmus fur MVD's aus und auf welche Normalform sollen und konnen MVD's gebracht werden? Sind eventuelle Zerlegungen abhangigkeitserhaltend? Strategie Verwende Synthesealgorithmus fur die funktionalen Abhangigkeiten. Bei der Schlusselmenge prufe, ob dort mehrwertige Abhangigkeiten vorliegen und zerlege damit weiter. Idee Die mehrwertigen Abhangigkeiten bestehen meist, wenn Informationen unabhangig voneinander sind und nur zufallig einige Attribute in mehreren Rollen auftreten. Es kann vorkommen, da auf B A eine mehrwertige Abhangigkeit gilt, obwohl auf A keine mehrwertigen Abhangigkeiten existieren. Solche mehrwertigen Abhangigkeiten heien eingebettet. Beispiel BerichtNr 1 2 3 4 Projekt Amalfi Amalfi Silberpfeil Silberpfeil Angestellter Schmidt Hinz Schmidt Hinz Abteilung Fertigung Fertigung Fertigung Fertigung Jeder Angestellte einer Abteilung ist an jedem Projekt der Abteilung beteiligt, das heit es gilt Abteilung ! ! Angestellter auf fProjekt; Abteilung; Angestellterg. Wir hatten bisher, da R = A1 (R) ./ A2 (R) genau dann gilt, wenn die mehrwertige Abhangigkeit A1 \ A2 !! A1 n A2 gilt. Hingegen ist mit mehrwertigen Abhangigkeiten keine Aussage uber die Gultigkeit von R = A1 (R) ./ A2 (R) ./ : : : ./ Ak 1 (R) ./ Ak (R) moglich. Wir denieren deshalb eine neue Form von Abhangigkeiten. Denition Sei A = m m A und R eine Relation auf A. Dann erfullt R die Verbundabhangigkeit ./ A genau i=1 i i=1 i S dann, wenn gilt m (R): R = i./ =1 Ai Beispiel Sei R das folgende Schema Vertreter Hinz Hinz Hinz Kunz Kunz Schmidt Produkt Staubsauger Mixer F ohn Staubsauger Heizofen Heizofen 73 Firma AEG AEG Siemens AEG IBM Sonnenschein Wir erhalten folgende Projektionen Vertreter Hinz Hinz Hinz Kunz Kunz Schmidt R1 Produkt Staubsauger Mixer F ohn Staubsauger Heizofen Heizofen Vertreter Hinz Hinz Hinz Kunz Kunz Schmidt R2 Firma AEG AEG Siemenz AEG IBM Sonnenschein Produkt Staubsauger Mixer F ohn Staubsauger Heizofen Heizofen R3 Firma AEG AEG Siemenz AEG IBM Sonnenschein Hier ist keiner der moglichen Verbunde zweier Schemata verlustlos, denn R1 ./ R2 3 (Hinz; Staubsauger; Siemenz) 2= R R1 ./ R3 3 (Kunz; Heizofen; Sonnenschein) 2= R R2 ./ R3 3 (Kunz; Mixer; AEG) 2= R; jedoch gilt R = R1 ./ R2 ./ R3. Dabei erfullt R keine nichttriviale mehrwertige Abhangigkeit. Wir konnen Regeln aufstellen, die sicherstellen, da jedes R zu dieser Attributmenge, die Verbundabhangigkeit erfullt Arbeitet ein Vertreter fur zwei Firmen gleichzeitig, so durfen diese Firmen kein Produkt gleichzeitig anbieten. Wir zeigen nun, da diese Regel eine Verbundabhangigkeit impliziert. Sei also R in R1, R2 und R3 zerlegt und erfulle die Regel. Sei (a; b; c) 2 R1 ./ R2 ./ R3 , also (a; b) 2 R1, das heit (a; b; c0) 2 R mit einem c0. Weiter ist (b; c) 2 R2, das heit (a0; b; c) 2 R mit einem a0 und schlielich (a; c) 2 R3, das heit (a; b0; c) 2 R mit einem b0. Es genugt nun wegen R1 ./ R2 ./ R3 R zu zeigen, da (a; b; c) 2 R gilt. Wir haben, da b von c und c0 hergestellt wird und, da a fur c und c0 gleichzeitig arbeitet, dies liefert uns nach der Regel unmittelbar c = c0 und damit (a; b; c) 2 R. Wenn ein Vertreter ein Produkt verkauft und der Vertreter fur eine Firma arbeitet, die dieses Produkt herstellt, so verkauft er dieses Produkt fur diese Firma. Die mehrwertige Abhangigkeit X !! Y ist Spezialfall einer Verbundabhangigkeit. Der Zerlegungsalgorithmus in 4NF ist zu erweitern auf alle vorkommenden Verbundabhangigkeiten. Denition 5NF Sei S = S (A; ) mit einer Menge von funktionalen Abhangigkeiten und Verbundabhangigkeiten und seien X1 ; : : :; Xr die Schlussel von S . Dann ist S in 5NF genau dann, wenn jede Verbundabha ngigkeit in + bereits von den Schlusselabhangigkeiten Xi ! A impliziert wird. Beispiel Beispieldaten wie oben Das Beispielschema A = fVerteter; Produkt; Firmag A1 = fVertreter; Produktg A2 = fVertreter; Firmag A3 = fProdukt; Firmag 3 erfullt die Verbundabha ngigkeit i./ A und keine echte Teilmenge von A ist Schlussel des Schemas. =1 i Dies aber bedeutet, da die Verbundabhangigkeit nicht von den Schlu sselabhangigkeiten impliziert wird, das aber heit, da die 5NF verletzt wird. 3 Wir versuchen nun durch eine Zerlegung bezuglich i./ A Redundanz zu vermieden. =1 i 74 Regel Wenn ein Verteter fur eine Firma arbeitet, so bietet er auch jedes Produkt dieser Firma an. Einfugen von x neuen Vertretern fur y neue Firmen mit je z Produkten Es werden x beziehungsweise y beziehungsweise z neue Tupel in die Tabellen R1, R2 und R3 eingefugt. In R ergeben sich dadurch maximal x y + x z + y z neue Tupel. Test auf Implikation einer Verbundabhangigkeit durch Schlusselabhangigkeiten n S (A; ) habe die Schlussel X1 ; : : :; Xr und die Verbundabhangigkeit = i./ A. =1 i Test auf Implikation von durch X1 ! A; : : :; Xr ! A Sei T = fA1 ; : : :; An g. Ersetze Y; Z durch Y [ Z , falls fur ein i Xi und Y; Z 2 T die Inklusion Xi Y \ Z gilt und wiederhole diesen Schritt solange, bis sich T nicht mehr andert. Ist T = fAg, dann wird logisch impliziert. (Es gilt sogar \genau dann, wenn"). Beweis fur Korrektheit Benutze den Test auf Verlustlosen Verbund. Bilde dazu eine Tabelle T mit Zeilen A1 ; : : :; Am und Spalten A1 ; : : :; An und mit Eintragen Aj 2 Ai T (Ai; Aj ) = ab falls i sonst Ist Xi Al \ Ap , so werden bei der Gleichsetzung der Eintrage im Algorithmus fur den Test auf verlostlosen Verbund die Eintrage in den Spalten aus Al [Ap fur Al und Ap auf a gesetzt. Falls durch Iteration eine Tafel mit nur a's in einer Zeile entsteht, liegt ein verlustloser Verbund vor, das heit wird impliziert. 1. Bestimmung eines Schlussels Setze X = A. Durchlaufe X mit A und teste, ob (X n fAg)+ X . Falls ja, so entferne A, das heit setze X = X n fAg. Wiederhole dies, bis sich X nicht mehr andert. 2. Sei K die Menge der bekannten Schlussel. Ist K 2 K und L ! R 2 , so bilde Z = (K n R) [ L Bestimme mit 1. in Z enthaltene Schlu ssel. Bezogen auf die Anzahl der Schlussel ist dies ezient. Satz m Sei B A und = i./ A eine Verbundabhangigkeit auf A. =1 i Falls fur jedes A 2 A n B genau ein i existiert mit A 2 Ai , so impliziert auf B die Verbunm dabhangigkeit i./ (A \ B). =1 i Das bedeutet, da der Zerlegungsalgorithmus in 4NF sich zu einem Zerlegungsalgorithmus in 5NF erweitern lat. Bemerkung Ist S in 5NF, so auch in 4NF. 75 Beweis Sei S in 5NF und 0 = fX1 ! A; : : :; Xr ! Ag. Sei X !! Y 2 + mit X !! Y nichttrivial, so wird X !! Y auch von 0 impliziert. Berechne zu X die Abhangigkeitsbasis bezuglich 0 . Da 0 nur funktionale Abhangigkeiten enthalt, brauchen nur die Armstrong-Axiome verwendet werden. Also wird X + = Linclosure(X; 0) gebildet. Wir wissen, da Y X + ist. X = X (0) X (1) : : : X + wird durch Verwendung von Abhangigkeiten U ! V 2 0 gebildet. Es existiert folglich eine funktionale Abhangigkeit U ! V 2 mit U X . Da U ! V 2 0 liegt, ist U Schlussel. Es liegt also 4NF vor. Der Chase-Proze Denition Sei A = fA1; : : :; An g und = f ai; bi j i 2 IN g ein Alphabet. Ein Tableau T ist eine Menge von Tupeln t: A ! mit folgenden Eigenschaften Falls t(Ai ) = aj fur alle t 2 T gilt, so ist i = j , das heit die i-te Spalte enthalt hochstens ai 's, und t1 (Ai ) = 6 t2(Aj ) fur alle t1; t2 2 T , falls i =6 j , das heit kein Symbol aus tritt in verschiedenen Spalten auf. Die Menge T ) = f t(A) j A 2 A; t 2 T g Bild( heit die Menge der auftretenden Symbole. Jedes : Bild(T ) ! m [ i=1 D(Ai ) mit (t(A)) 2 D(A) fur alle A mit t(A) 2 Bild(T ) deniert eine Relation (T ) uber A. Es folgt t(A) 2 D(A). Jedes c 2 Bild(T ) wird durch (c) ersetzt. Denition Sei R eine Relation uber A. Wir denieren die Menge T (R) durch T (R) = f((a1); : : :; (an)) j (T ) Rg: Beispiel Gegeben sei die Relation R durch R A1 A2 A3 A4 1 2 1 2 4 3 4 3 A1 a1 b3 a1 A2 b1 a2 b5 und das Tableau T durch 76 T 5 5 5 6 8 7 7 7 A3 a3 a3 a3 A4 b2 b4 a4 Sei a1 a2 a3 a4 b1 b2 b3 b4 b5 1 3 5 7 dann erhalten wir 4 8 2 7 4 (T ) A2 A3 A4 A1 1 2 1 4 3 4 5 5 5 8 7 7 und damit (T ) R. Betrachte nun 0 b1 b2 b3 b4 b5 a1 a2 a3 a4 2 4 5 7 damit erhalten wir A1 2 1 2 3 7 1 8 3 0(T ) A2 A3 A4 3 4 3 5 5 5 7 8 7 das heit 0(T ) R. Schlielich erhalt man A1 1 2 1 1 1 2 2 Denition Sei A = Satz T (R) A2 A3 A4 3 4 4 4 3 3 3 5 5 5 5 5 5 6 7 7 8 7 8 7 7 m A . Dann bezeichnet T fA1 ;:::;Am g die Starttafel fur den Test auf verlustlosen Verbund. i=1 i S m (R) denieren dieselbe Abbildung. TfA1 ;:::;Amg (R) und i./ =1 Ai Beweis Siehe Test auf verlustlosen Verbund. Denition Seien T1 und T2 Tableaus uber A. Dann ist T1 T2 genau dann, wenn T1(R) T2(R) fur alle R uber A ist. Es ist T1 T2 genau dann, wenn T1 T2 und T2 T1 ist. 77 Satz Sei A = mi=1 Ai = kj=1 Bj Dann sind aquivalent S S m k (R) j./ (R) fur alle R uber A (i) i./ =1 Ai =1 Bj (ii) TfA1 ;:::;Am g TfB1;:::;Bk g (iii) Fur alle i existiert j mit Ai Bj oder anders geschrieben fA1; : : :; Am g fB1 ; : : :; Bk g. m k (R) folgt R = j./=1 Bi (R) (iv) Aus R = i./ =1 Ai Beweis (i) , (ii) Siehe voriger Satz. m k (R). Dann ist R j./ (R). \" gilt immer. (i) ) (iv) Sei R = i./ =1 Ai =1 Bj (iv) ) (i) Sei m dann ist (R); R0 := j./ =1 Aj U A m m m (R) = i./ (R) ./ ./ i=1 Ai =1 Ai j =1 Aj m (R0) = i./ =1 Bi = R0 ; also erfullt R0 die Voraussetzungen von (iv). Somit ist m k (R) = R0 = i./ (R0): R i./ =1 Ai =1 Bi k an. Dies liefert Wir wenden i./ =1 Bi k k k (R0) : ./ ./ ( R ) ./ B B i i j =1 Bj i=1 i=1 Schlielich erhalten wir k k m 0) = R0 = ./ (R): ./ ( R ) ./ ( R B B i i i=1 i=1 j =1 Aj (i) ) (iii) Fur alle R gelte m k (R) i./ (R): ./ i=1 Ai =1 Bi Wir konstruieren nun ein R, das fur den Beweis nutzlich ist. Seien dazu t1 ; : : :; tk Tupel mit A 2 Bi ti(A) = 01 falls sonst. Dann gilt nach der Denition des Verbundes k (R): t0 := (0; : : :; 0) 2 i./ =1 Bi 78 Nach der Voraussetzung gilt somit auch m (R): t0 2 i./ =1 Ai Damit existiert fur alle Ai ein tj 2 R mit Ai (tj ) = Ai (t0 ) = (0; : : :; 0)Ai : Somit haben wir Ai Bj , da R nur aus t1 ; : : :; tk besteht. k (R). (iii) ) (i) Exitiere nun fur alle i ein j mit Ai Bj . Sei R eine Relation uber A und t 2 j./ =1 Bj Dann existieren t1 ; : : :; tk 2 R mit Bj (t) = Bj (tj ) fur alle j: Da zu jedem i ein j existiert mit Ai Bj , haben wir also, da zu jedem i ein tj 2 R existiert mit Ai (t) = Ai (tj ): Dann ist aber m (R): t 2 i./ =1 Ai Beispiel Seien A1 = fA1; A2g, A2 = fA2; A3g, A3 = fA3; A4g, B1 = fA1 ; A2; A3g und B2 = fA3; A4g gegeben. Dann gilt fA1 ; A2; A3g fB1; B2g. Bemerkung Die Aussagen des Satzes gelten auch wenn \" beziehungsweise \" durch \" beziehungsweise \=" ersetzt werden. Beispiel Seien A1 = fA1; A2; A3g A2 = fA1; A4g B1 = fA1; A2; A3g B2 = fA3; A4g Dann gilt fA1 ; A2; A3g fB1; B2; B3g. Wir haben dann A3 = fA1; A3; A4g B3 = fA1; A3; A4g: TfB1 ;B2 ;B3 g A2 A3 A4 6= a2 a3 b1 b3 a3 a4 b4 a3 a4 Nach dem Satz denieren die Tableaux aber dieselbe Abbildung T (R). Jeweils das zweite Tupel hat nur dort Eintrage a, bei denen auch bereits ein anderes Tupel ebenfalls Eintrage a besitzt, das heit A2 A3 beziehungsweise B2 B3. Alle Informationen zu Tupeln A1 a1 a1 a1 TfA1 ;A2 ;A3 g A2 A3 A4 a2 a3 b1 b2 b3 a4 b4 a3 a4 A1 a1 b2 a1 uber A2 sind bereits bei Tupeln, die uber A3 deniert sind vorhanden. Damit sind diese Tupel entbehrlich. 79 Denition t1 2 T subsummiert t2 2 T genau dann, wenn fur alle A gilt t2 (A) = a =) t1 (A) = a: Weiter denieren wir o n sub(T ) := t 2 T es exisiert kein t0 2 T , das t subsummiert : Es werden also die subsummierten Tupel gestrichen. Schlielich denieren wir TfA1 ;:::;Am g TfB1;:::;Bk g genau dann wenn sub(TfA1 ;:::;Am g ) = sub(TfB1;:::;Bk g ) gilt. Denition Sei V die Menge der Variablen von T und V 0 die Menge der Variablen von T 0. T 0 enthalt T genau dann, wenn eine Funktion : V ! V 0 mit folgenden Eigenschaften existiert a) Ist (v ) = so gilt fur alle Spalten A von T bzw. T 0: Steht v in der Spalte A von T , so steht auch das in der Spalte A von T 0 . b) Ist v = ai , so ist auch = ai . c) Es ist (T ) T 0. Es werden also den Variablen von T statt fester Werte die Variablen von T 0 zugeordnet. Beispiel Sei T das Tableau A1 a1 b3 b4 A2 A3 A4 a2 b1 b2 a2 a3 b2 b5 a3 a4 Sei eine Abbildung mit (ai) = ai fur alle i und (b1) = a3 , (b2) = b1, (b3) = a1 (b4) = b2 und (b5) = a2. Dann ist (T ) das Tableau A1 A2 A3 A4 a1 a2 a3 b1 a1 a2 a3 b1 gestrichen, da doppelt b2 a2 a3 a4 Satz T 0 enthalt T genau dann, wenn T > T 0 gilt. Es werden nun zusatzliche Abhangigkeiten berucksichtigt. R S (A; ) werde betrachtet, das heit alle betrachteten R erfullen . Denition Wir denieren T1 T2 genau dann wenn fur alle R 2 S (A; ) T1 (R) = T2 (R) gilt. Tableaux werden durch aquivalente ersetzt, wobei berucksichtigt wird, welche Abhangigkeiten gelten. Der Test auf verlustlosen Verbund startet mit einem Tableau und ersetzt dieses schrittweise durch neue Tableaux, die bei Betrachtung der vorliegenden Abhangigkeiten dazu aquivalent sind. 80 Regeln fur das Ersetzen von Tableaux durch aquivalente unter Berucksichtigung von Abhangigkeiten 1. Eine Regel X ! Y erlaubt bei Tupeln, die auf X ubereinstimmen, die Eintrage auf Y gleich- zusetzen. Dabei werden wenn moglich b's durch a's ersetzt. Ist bi mit bj gleichzusetzen, so wahle bmin(i;j ) als neuen Eintrag. m 2. Eine Regel i./ A erlaubt Tupel zu erzeugen. Sind t1; : : :; tm 2 T und ist fur i und j ti (Ai \ =1 i Aj ) = tj (Ai \ Aj ), so fuge in T das Tupel t ein, das fur alle i t(Ai) = ti(Ai) erfullt. (Sind die ti verbindbar, so mu das durch den Verbund entstehende Tupel in der Relation liegen.) Es gilt: Erfullt R eine Abhangigkeit 2 , so ist T (R) = T 0(R), wobei T 0 aus T durch Anwenden der zugehorigen Regel 1. oder 2. entsteht. Beispiel fur Verbundregel Wir wollen fur das Tableau A1 t1 ! a1 t2 ! a1 t3 ! b3 A2 b1 a2 a2 A3 b2 b3 b3 A4 a4 b4 a4 ./fA1 A2; A2A3; A3A4 g anwenden. Die Tupel t2 , t2 und t3 sind verbindbar, daher mussen wir das Tupel t4 einfugen. Die Tupel t3 , t3 und t2 waren somit naturlich auch verbindbar. Wir erhalten das Tableau A1 A2 A3 A4 t1 ! a1 b1 b2 a4 t2 ! a1 a2 b3 b4 t3 ! b3 a2 b3 a4 t4 ! a1 a2 b3 a4 Das Tupel t4 ist korrekt, da t4 jA1 A2 = t2 jA1 A2 , t4 jA2 A3 = t2 jA2 A3 und t4 jA3 A4 = t3 jA3 A4 ist. Bilde nun ./fA1A2 A4 ; A1A3 A4 g, dann sind die Tupel t1 und t4 verbindbar, und wir fugen das Tupel t5 ein t1 ! t2 ! t3 ! t4 ! t5 ! Es gilt Der Chase-Proze A1 a1 a1 b3 a1 a1 A2 b1 a2 a2 a2 b1 A3 b2 b3 b3 b3 b3 A4 a4 b4 a4 a4 a4 t5 jA1A2 A4 = t1 jA1 A2 A4 und t5 jA1 A3 A4 = t4 jA1 A3 A4 : Sei eine Menge von funktionalen und Verbundabhangigkeiten. Sei T ein Tableau uber A. Eine Folge T = (T0; T1; : : :; Tr ) von Tableaux mit folgenden Eingenschaften 1. Fur alle i gilt Ti 6= Ti+1 2. Fur alle i entsteht Ti+1 aus Ti durch Anwenden einer Regel 1. oder 2. fur das Ersetzen von Tableaux. 3. Tr lat sich durch Anwenden keiner -Regel fur 2 mehr verandern. heit Chase-Folge . 81 Satz (ohne Beweis) Es gilt Jede Chase-Folge ist endlich. Jede Chase-Folge zum gleichen T und endet beim gleichen Tr. (Church-Rosser-Eigenschaft) Test auf X ! Aj 2 + ( enthalt neben funktionalen auch Verbundabhangigkeiten) Als Starttableau wird X z }| { A1 Ai Ai+k Aj An TX = a1 ai ai+k aj an b1 ai ai+k bl br verwendet. Wende dann auf TX den Chase-Proze an. Sei TX das letzte Folge-Glied. Genau dann gilt X ! Aj 2 + , wenn in der Spalte von Aj in TX nur aj steht. Der Beweis hierzu ist trivial. Beispiel Sei A = fA; B; C; Dg und = fA ! D; ./ fABC; CDgg. Wird dann mit X = fB; C g und Y = fDg die funktionale Abhangigkeit X ! Y impliziert? Die Tabelle TX A B C D a1 a2 a3 a4 b1 a2 a3 b2 wird durch Anwenden des Join-Operators zu A a1 b1 a1 b1 B a2 a2 a2 a2 C a3 a3 a3 a3 D a4 b2 b2 a4 und wegen der funktionalen Abhangigkeit A ! D ergibt sich mit Regel 1. a4 = b2 und damit die Tabelle A B C D a1 a2 a3 a4 b1 a2 a3 a4 impliziert also fB; C g ! fDg. Folgerung Sei eine Menge von Verbundabhangigkeiten und X ! Y werde von Y X. Beweis impliziert. Dann ist Chase startet mit TX , wobei fur A 2 Y und A 2= X in der Spalte von A in der zweiten Zeile b steht. Verbundabhangigkeiten liefern aber nur neue Tupel, verursachen aber keine Gleichsetzungen, was den Widerspruch liefert. 82 Berechnung einer Abhangigkeitsbasis fur mehrwertige Abhangigkeiten X !! Y Sei eine Menge von funktionalen Abhangigkeiten und Verbundabha ngigkeiten. Sei X; Y A und X + \ Y = ;. Dann gilt: impliziert X !! Y genau dann, wenn chase (TX ) eine Zeile tY mit a-Eintragen genau auf X + [ Y enthalt. Beweis \)" Um zu zeigen, da X !! Y gilt, verwende den Test auf verlustlosen Verbund. Setze Z = A (X + [ Y ) und wahle A1 = X + [ Z und A2 = X [ Y . Es ergibt sich tA1 tA2 TfA1;A2 g Y Z a1 : : :ai b1 : : :br ai+r+1 : : :an a1 : : :ai ai+1 : : :ai+r br+1 : : :bs X+ und durch den Chase-Proze X+ Y Z tA1 a1 : : :ai ? ai+r+1 : : :an tA2 a1 : : :ai ai+1 : : :ai+r ? Behauptung TfA1;A2 g ) enthalt eine Zeile, die nur aus a's besteht. chase( Beweis Verwende die Voraussetzung, da X+ TX A X+ a1 : : :ai ai+1 : : :an a1 : : :ai c1 : : :cl durch den Chase-Proze zu tY X+ Y Z a1 : : :ai ai+1 : : :ai+k ck : : :cl wird. Wenn in einer Relation zwei Tupel existieren, die auf X ubereinstimmen, so enthalt diese Relation, falls sie genugt, auch das Tupel tY . Deshalb kann man durch eine geeignete Abbildung : Var(TX ) ! Var(TfA1 ;A2 g ) mit (ta) = tA2 und (tX ) = tA2 die a's und c's von TX so abbilden, da geeignete Tupel einer Relation entstehen, die T genugt. Da chase(TfA1 ;A2 g den Abhangigkeiten aus genugt, mu auch (tY ) darin enthalten sein. (tY ) besteht aber nur aus a's, deshalb enthalt es auch auf X + nur a's. Da (ta ) = tA2 ist (aj ) = aj fur Aj 2 Y , was bedeutet, da (tY ) auf Y auch nur a's enthalt. 83 Wegen (tX ) = tA2 werden die c-Eintrage ebenfalls zu a's. Dies aber bedeutet, da (tY ) auf Z und somit auf ganz A nur a's enthalt. \(" Man nimmt an, impliziere X !! Y . Sei dann ohne Beschrankung der Allgemeinheit ./ fX + [ Y; X [ Z g 2 . Betrachte chase(TX ), wobei wir zuerst ./ fX + [ Y; X [ Z g anwenden und so die neue Tabelle X Y Z a a : : :a a : : :a TX = tta aa :: :: :a :a b b : : :b b : : :b X t a : : :a a a : : :a b : : :b erhalten. Auf Z konnen durch funktionale Abhangigkeiten keine b's durch a's ersetzt werden, da Verbundabha ngigkeiten nur neue Zeilen erzeugen. Das aber heit, da t unverandert bleibt. Folgerung Zu X erhalt man aus chase (TX ) sofort alle mehrwertigen Abhangigkeiten der Form X !! Y . Bilde Abhangigkeitsbasis durch den bereits fruher beschriebenen Algorithmus. Beispiel Sei = ffB g ! fC g; ./ fABC; CDE gg und X = fB g. Die Tabelle TX A B C D E a1 a2 a3 a4 a5 b1 a2 b2 b3 b4 wird wegen der funktionalen Abhangigkeit B ! C zu A B C D E a1 a2 a3 a4 a5 b1 a2 a3 b3 b4 und diese wird durch Anwenden des Join-Operators zu A a1 b1 a1 b1 B a2 a2 a2 a2 C a3 a3 a3 a3 D a4 b3 b3 a4 E a5 b4 b4 a5 mit X + = fB; C g. Es ergeben sich schlielich die Abhangigkeiten X ! X + , fB g !! fAg und fBg !! fD; E g. Denition Nullwerte Nullwerte sind nicht existierende oder nicht bekannte Werte. Wir haben bereits fruher den \Platzhalter" betrachtet, der vom aueren Verbund benutzt wird. Das Problem dabei war bisher, da nicht assoziativ ist. Als Ausweg fuhrt man nun induzierte Nullwerte i ein. Wie verwendet man nun diese Nullwerte? 84 Man fuhrt eine sogenannte Universalrelation : R ! (R1; : : :; Rm) mit Ri = Ai (R) ein, speichert die Ri lokal, macht alle Updates lokal und hot, da kein Widerspruch auftritt. Man versucht, eine abhangigkeitserhaltende Zerlegung und einen verlustlosen Verbund zu erhalten. Wenn die Universalrelationsbedingung gilt, so ist die Projektion bijektiv. Bei Nullwerten ist die Universalrelationsbedingung verletzt, da zum Beispiel fur R1 A B C a1 b1 c1 a2 b2 c2 und TX A B D E a1 b1 d1 e1 fA;B;C g(R1 ./ R2) 6= R1 gilt, das heit, es gehen Informationen verloren. Allgemein wird bei zusatzlichen Tupeln durch die Verbundbildung Information vernichtet. Welche Informationen sind aus einer Datenbank ableitbar, wenn unvollstandige Daten gespeichert sind? Ersetze in dieser Situation den Verbund durch den Chase-Proze. 1. Setze jedes Tupel eines jeden Ri durch paarweise verschiedene Nullwerte auf die gesamte Attributmenge fort. 2. Interpretiere die echten Werte als a's und die Nullwerte als b's und fuhre den Chase-Proze durch. 3. Entferne subsumierte Tupel. Folgerung Alle Tupel in der entstehenden Tafel, die keine Nullwerte enthalten, bilden exakt den Verbund der Ri. Ist X A, so sei Xt (T ) die Menge der Tupel aus T , die auf X keinen Nullwert haben, das heit, die als Abbildung auf X eingeschrankt, total sind. Das hochgestellte t steht dabei fur total. Xt (T ) enthalt die uber X vorhandenen Informationen. Beispiel Gegeben seien die Tabellen A B C D 1 1 1 2 C G D E F 1 1 1 1 1 D E F B 1 und 1 1 B C F 85 1 sowie die funktionalen Abhangigkeiten DEF ! B und BC ! F . Es resultiert die Tabelle T A B C D E F G 1 1 1 2 1 2 3 4 5 1 1 1 1 1 6 1 7 1 1 1 8 mit 5 = 1 wegen DEF ! B und 2 = 1 wegen BC ! F . Es ergibt sich also t ABCDF (T ) A B C D F 1 1 1 2 1 Da 4 und 6 nicht ersetzt wurden, erhalt man nur die erste Zeile als totales Tupel, was man durch den Verbund nicht erreicht hatte! Verfugbare Systeme Es gibt keine Speicherung indizierter Nullwerte. Es gibt keinen Chase-Proze. Es werden zu den einzelnen Schemata Primarschlussel eingegeben. Auf Schlusseln sind Nullwerte verboten. Es gibt keine Prufung, ob eine Universalrelation existiert. Ziel Die Ri sollen moglichst unabhangig voneinander geandert werden konnen. Frage Wo werden durch eine A nderung eines Tupels Folgeanderungen notig? enthalte stets nur funktionale und Verbundabhangigkeiten. X A. A nderung betree Eintrage auf X . Der Chase-Proze liefert Gleichsetzungen, das heit Abanderung von Eintragen und evtl. Konikte nur auf X + . Fremdschlusselbedingung Die Forderung Ri ./ + Rj Aj Ai heit Fremdschlusselbedingung. Sie wird von einigen verfugbaren Systemen unterstutzt. Versicherungbeispiel Gegeben seien die folgenden funktionalen Abhangigkeiten fSchadensNrg ! fVersNr; Schadenshoheg fVersNrg ! fKundenNr; Sparteg fKundenNrg ! fName; Anschrift; Agentg fAgentg ! fBezirk; Chef; Statusg; aus denen man die Schemata Si (Ai ; i) mit i = 1; 2; 3; 4 erhalt. 86 Fremdschlusselbedingung Ein neuer Agent darf eingetragen werden ohne Nebenbedingung. Ein Kunde darf nur eingetragen werden, wenn ein zugehoriger Agent existiert (A4 A+3 ). Eine Versicherungsnummer darf nur eingetragen werden, wenn Kundennummer und Agent existieren. Ein Schaden darf nur eingetragen werden, wenn Versicherungsnummer, Kundennummer und Agent existieren. Beantwortung von Anfragen Zu X A werden alle Tupel aus Xt (T ) gebraucht, wobei T durch den Chase-Proze entstand. T habe genau auf X keine Nullwerte. Dann gilt t 2 Xt A ./X + Rj j Beweis t wurde vom Chase-Proze aus Tupeln ti 2 Ri gebildet. Auerhalb von X + hat t nur Nullwerte. Daher hat jedes ti auerhalb von X + nur Nullwerte. Es ist Ai X +. Da auf X + die darauf totalen Tupel durch den Verbund erhalten werden folgt die Behauptung. Die allgemeine Anfrage wird beantwortet durch Xt [ ./ Rj : + X Y Aj Y Denition Der Verbund wobei jS1 i=1 ( ((R1 ./ R2) ./ R3) ./ ./ Rn 1 ) ./ Rn ; Ai einen Schlussel von Sj (Aj ; j ) enthalt, heit Erweiterungsverbund. Beim Erweiterungverbund werden die Zwischenergebnisse von der Tupelzahl her nie groer. Beispiel Seien die folgenden beiden Tabellen gegeben Angestellter Otto Max Geschichte Arbeitgeber fr uherer Job Post Brieftr ager M ullabf uhr Straenreiniger Angestellter Ferdinand Otto fr uheres Gehalt 20000 30000 Fehlzeiten Krankheit Sonderurlaub 12 2 10 7 Jedesmal ist Angestellter Schlu ssel. Hier ist die Fremdschlusselbedingung sinnlos. Denition Sei A = n n genau eine Verbundabha ngigkeit j./ Ai und auf jedem Ai eine =1 j =1 funktionale Abhangigkeit Xi ! Ai mit 1. (R1; : : :; Rn) 2 S1 (A1 ; 1) Sm (Am ; m ) =) chasef ./n Ai g erfullt . S Ai. Es gibe in ist Xt i=1 l (E ), wobei i=1 X i jedes Ei ein Erweiterungsverbund ist. 2. Fur alle X = Gelten diese Bedingungen, so heien S1 (A1 ; 1); : : :; Sm (Am ; m ) unabhangig. S 87 Denition (S1; : : :; Sm ) erfullt die Eindeutigkeitsbedingung, wenn folgendes gilt: Ist A 2 A+i , so gibt es genau ein Aj mit der Eigenschaft, da Ai einen Schlussel K von Sj enthalt und A 2 Aj n K ist. Sj fugt dem Aj das Attribut A hinzu. Wichtig: Das Attribut kann nur auf eine Weise zu dem Schema hinzugefu gt werden. Satz Falls die Eindeutigkeitsbedingung gilt, sind die Schemata unabhangig. Beispiel .KreditNrKunde Buchung . KontoNr Ausweg Rollenattribute: Kreditkunde, Sparkunde. Sei X A1 [ A2 (R1 ./ R2) Es existiere ein A3 A+1 . Falls in R3 2 S3 (A3 ; 3) keine Tupel sind, die mit einem Tupel aus R1 ./ R2 verbindbar waren, wird dieses Tupel durch einen weiteren Verbund mit R3 vernichtet. Bilde minimalen Erweiterungsverbund, das heit minimal mit der Eigenschaft, da die bereits vorhandenen Attribute X umfassen. Um eine Anfrage zu X zu beantworten geht man nun wie folgt vor: Projiziere alle minimalen Erweiterungsverbunde, die zu X gebildet sind, auf X und gebe deren Vereinigung aus. t Algorithmus zur Berechnung von X chasef ./n Aig TfA1;:::;Ang(R) (das heit X -totale Projektion i=1 der Datenbank) (1) Sei V = fAi j X A+i g (2) Solange Ai ; Aj 2 V existieren, so da die Attributmenge zum minimalen Erweiterungsverbund von Aj bezuglich X das Ai enthalt, entferne Ai aus V . (3) Bilde zu jedem Aj 2 V den minimalen Erweiterungsverbund Ej von Aj bezuglich X . S (4) Berechne Aj 2V Xt (Ej ) Beispiel Gegeben seien die Attributmengen A1 = fOrt; Abteilung; Projektg A2 = fAbteilung; Projekt; Chefg A3 = fOrt; Chef; Gruppenleiterg mit den Abhangigkeiten fOrt; Abteilungg ! fProjektg fAbteilung; Projektg ! fChefg fOrt; Chefg ! fGruppenleiterg: Sei X = fOrt; Chefg. Gesucht ist Xt . 88 Der minimale Erweiterungverbund von A1 , der X umfasst ist A1 ./ A2 , der minimale Erweiterungsverbund von A3 , der X umfasst ist A3 und X A+3 . Bilde also Xt (R1 ./ R2) [ Xt (R3). Dies ist das gesuchte Ergebnis. 89 A Literatur zur Vorlesung Informatik III [1] T. Harder, Implemtierung von Datenbanksystemen, Hanser (1978), ISBN 3-446-12549-3. [2] D. Maier, The theory of relational databases, Pitman (1983), ISBN 0-914894-42-0. [3] K. Mehlhorn Sorting and Searching, Springer 1984. [4] G. Schlageter/W. Stucky Datenbanksysteme: Konzepte und Modelle, Teubner Stuttgart (1983), ISBN 3-519-12339-8. [5] J. Ullmann Principles of Databases and Knowledge-Base Systems I,II, Computer Science Press 1988/89. [6] G.Vossen Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme, AddisonWesley (1987), ISBN 3-925118-64-0. [7] C.C. Yang Relational databases, Prentice-Hall, Englewood Clis (1986), ISBN 0-13-771858-6-025. [8] R.Heuer Objektorientierte Datenbanken. 90