Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Teil I Datenmodelle Kapitel 9: Transformationen.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Teil I Datenmodelle Kapitel 9: Transformationen."—  Präsentation transkript:

1 1 Teil I Datenmodelle Kapitel 9: Transformationen

2 2 Kapitel 9.1: Einführung

3 3 Vier-Stufen-Architektur Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender

4 4 Problemstellungen (1) Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Datenbasen sind oft riesig. Eine Anwendung interessiert sich aber meist nur für einen kleinen Teil der Daten bzw. darf nur auf bestimmte Daten zugreifen. Es wird nur ein Ausschnitt verfügbar gemacht.

5 5 Problemstellungen (2) Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Die Anwendung wünscht sich oft eine problemangepasstere Struktur ihres Ausschnitts für einen bequemeren Zugriff. Der Ausschnitt wird umstrukturiert.

6 6 Beispiel: Zugriffsbeschränkung Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr, LhaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr); Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr, LhaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr); Zulieferer: n Liefern in Lagereinheiten verpackte Artikel, die gelagert und später weiterverkauft werden. n Erste Zulieferergruppe: relation EigenerArtikel(ANr, AName, Menge, Gewicht); relation Liefereinheit(LeNr, ANr, Stückzahl, Gewicht); n Zweite Zulieferergruppe: relation VerpacktIn(AName, Menge, AGewicht, LeNr, Stückzahl, LeGewicht); Zulieferer: n Liefern in Lagereinheiten verpackte Artikel, die gelagert und später weiterverkauft werden. n Erste Zulieferergruppe: relation EigenerArtikel(ANr, AName, Menge, Gewicht); relation Liefereinheit(LeNr, ANr, Stückzahl, Gewicht); n Zweite Zulieferergruppe: relation VerpacktIn(AName, Menge, AGewicht, LeNr, Stückzahl, LeGewicht);

7 7 Problemstellungen (3) Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Jeder Dienstgeber will in der Wahl seines Datenmodells frei (autonom) sein. Die Umstrukturierung kann Abbildungen zwischen Datenmodellen beinhalten. relational objektorientiert XML

8 8 Beispiel: Java 2 Enterprise Edition Dienstnehmer -Behälter Transaktionsdienst Ressourcen- Verwalter Kommunikation (HTTP, IIOP, RMI, JDBC) Persistenzdienst JAFJNDIJDBCJTA J2SE JMS WWW-Behälter JAFJNDIJDBCJTA J2SE JMS Java Servlets Java Server Pages EJB-Behälter JAFJNDIJDBCJTA J2SE JMS Enterprise Java Bean Fremd- Behälter Applet- Behälter J2SE Ressourcen Datenlogik Geschäftsprozess Anwendungs-Dienstgeber Präsentation WWW-Dienstgeber Anwender Dienstnehmer Konnektor RMI-IIOP HTTP RMI-IIOP JDBC NamensdienstSicherheitsdienstNachrichtendienst JDBC

9 9 Problemstellungen (4) Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Mitunter wollen Dienstgeber ihre Daten mit fallweise wählbaren, Dienstgebern, u.a. Datenbanksystemen, austauschen. Die Umstrukturierung kann Abbildungen zwischen Datenmodellen unter Zwischenschalten eines neutralen Datenmodells beinhalten. XML

10 10 Beispiel: Austausch von Daten Anwendungs -Dienstgeber... Middleware Dienstnehmer Datenbank- Dienstgeber andere Dienstgeber... Ressourcen WWW- Dienstgeber... Geschäftsprozess Präsentation Anwender Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); Kunde: n Arbeitet mit ArtikelArt-Objekten Kunde: n Arbeitet mit ArtikelArt-Objekten A001 Anlasser 1 Bosch 2,00 … A001 Anlasser 1 Bosch 2,00 … Export Import

11 11 Grundprinzip der Transformation Ausschnitt z.B. Anwendungs-Db ADB Abbildung v Anwendung Anwendungsschema AS v Weitere Anwendung Quellschema S z.B. für Datenbasis DB Sicht: Bedarfsweise Ausführung Sicht-DB: Virtuelle Datenbasis Materialisierung: Einmalige (Vorab-) Ausführung Materialisierte Sicht: Replizierter Ausschnitt

12 12 Sichten Sichten: Gegeben sei ein Schema S und eine zugehörige Datenbasis DB. Jede Sicht hierauf ist durch ein weiteres Schema AS, ggf. in einem anderen Datenmodell, und eine partielle Abbildung v (= View) definiert. Hierbei legt v die Abbildung von Datenelementen aus DB nach ADB fest mit einer durch die Schemata bestimmten Strukturtransformation. Für einen auf AS arbeitenden Nutzer sieht es so aus, als würde eine dem Schema AS gehorchende Datenbasis ADB real existieren ((virtuelle) Sicht). Transformation: Tatsächlich erzeugt v aus den Daten aus DB für die Dauer der Abfrage eine transiente Kopie. Änderungen erfolgen daher ausschließlich in DB.

13 13 Materialisierung Materialisierung: Bei komplexen Sichtabbildungen v kann das Berechnen der Datenelemente in ADB bei einem Zugriff zu lange dauern. Die Datenbasis ADB wird materialisiert, d.h. die dort vorkommenden Datenelemente werden real erzeugt. Hierbei legt v die Abbildung von Datenelementen aus DB nach ADB fest mit einer durch die Schemata bestimmten Strukturtransformation (materialisierte Sicht). Transformation: v erzeugt aus den Daten aus DB eine dauerhafte Kopie. Bei Datenänderungen sind sowohl DB als auch die betroffenen Daten in ADB anzupassen (Problem der Redundanz!).

14 14 Abgeschlossenheit des Sichtschemas Zwei Schemaelemente stehen in S in Beziehung zueinander. Eines der Element wird in die Sicht übernommen, das andere nicht. Die Beziehung verweist in AS ins Leere… ? v Nicht erlaubt Abbildungen, bei denen im Sichtschema undefinierte Elemente verwendet werden, sind nicht erlaubt. Forderung: Das Sichtschema muss in sich abgeschlossen sein. S AS

15 15 Datenzugriffe über Sicht Die Originaldatenbasis DB macht sich dem Benutzer als Sicht ADB := v(DB) bemerkbar. Bearbeitet der Benutzer einige Daten seiner Sicht mittels einer Operation o, so entsteht ADB' := o(ADB). Tatsächlich müssen diese Bearbeitungsschritte aber im Original durchgeführt werden, da nur hier die Daten real existieren. Das Äquivalent von o ist dort im Allgemeinen eine Folge von Operationen p, die einen neuen Zustand DB' := p(DB) bewirkt. Nach Abschluss der Operationen muss natürlich gelten: ADB' = v(DB') so dass es für den Nutzer aussieht, als wäre o ausgeführt worden. ADBADB' o p vv DBDB' DB ADB v

16 16 Informationserhaltung in Sichten Die Abbildung v heißt informationserhaltend, n wenn es für alle Zustände einer Datenbasis DB n und jede Operation o eines Benutzers auf v(DB) n stets eine Operationsfolge p gibt, so dass gilt: o(v(DB)) = v(p(DB)). ADB ADB' DBDB' Zustände der Sicht-Datenbasis Datenmodell: ADM Zustände der Original-Datenbasis Datenmodell: DM o p v v

17 17 Datenändernde Zugriffe Der Nutzer nimmt auf der Sicht ADB Datenänderungen o vor, so dass sich als neuer Zustand der Sichtdatenbasis ADB' ergibt. Dazu passend müssen die Änderungen p auf der Originaldatenbasis ausgeführt werden. Hierbei ist nicht immer garantiert, … … dass p eindeutig bestimmbar ist. … dass überhaupt ein p existiert. Datenänderungen o, zu denen es kein p mit o(v(DB)) = v(p(DB)) gibt, sind nicht durchführbar. } View-update problem ADBADB' DB DB' o p vv = v(DB) ? Informationserhaltung beim Lesen trivial gegeben wegen o = p = id.

18 18 Leseoperationen Seien DB' und ADB' gelesene Ausschnitte. Übliches Lesen: o(v(DB)) Der Nutzer der Sicht liest zunächst mittels v aus DB. Dann liest er das Zwischenergebnis mit eigenem Operator o. Selten: Das Lesen wird an DB delegiert. Folglich ist p Operationsfolge für Leseoperation o. Es muss dann ebenfalls gelten: o(v(DB)) = v(p(DB)). ADBADB' DB DB' o p vv = v(DB) ?

19 19 Kapitel 9.2: Sichten im relationalen Modell

20 20 Charakterisierung Der Benutzer kann in seiner Sicht ausschließlich auf Relationen operieren, ebenso wie die Originaldatenbasis ausschließlich Relationen enthält. Begriffe: Die virtuellen Relationen heißen Sichtrelation oder kurz Sicht (view). Nicht-Sichtrelationen heißen Basisrelationen. v ist somit eine Abbildung der Form v: (R) (R), mit R die Menge aller (beliebig-stelligen) Relationen. R darf bereits definierte Sichten einschließen. n v lässt sich relationenalgebraisch ausdrücken.

21 21 Illustration Beispiel: Benutzergruppen für Lagerverwaltung: Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr, LhaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr); Lagermanagement: n Arbeitet mit dem vollständigen Datenbestand. relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr, LhaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr); Zulieferer: n Liefern in Lagereinheiten verpackte Artikel, die gelagert und später weiterverkauft werden. n Erste Zulieferergruppe: relation EigenerArtikel(ANr, AName, Menge, Gewicht); relation Liefereinheit(LeNr, ANr, Stückzahl, Gewicht); n Zweite Zulieferergruppe: relation VerpacktIn(AName, Menge, AGewicht, LeNr, Stückzahl, LeGewicht); Zulieferer: n Liefern in Lagereinheiten verpackte Artikel, die gelagert und später weiterverkauft werden. n Erste Zulieferergruppe: relation EigenerArtikel(ANr, AName, Menge, Gewicht); relation Liefereinheit(LeNr, ANr, Stückzahl, Gewicht); n Zweite Zulieferergruppe: relation VerpacktIn(AName, Menge, AGewicht, LeNr, Stückzahl, LeGewicht); EigenerArtikel := ANr,Aname,Menge,Gewicht ( Lieferant=Siemens (ArtikelArt)) Liefereinheit := ANr ( Lieferant=Siemens (ArtikelArt)) LeNr,ANr,Stückzahl,Gewicht (Lagereinheit) VerpacktIn := AName,Menge,AGewicht,LeNr,Stückzahl,LeGewicht ( Lieferant=Bosch (ArtikelArt AGewicht Gewicht ) Lagereinheit LeGewicht Gewicht

22 22 Beispielsichten (1) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse AName AName (ArtikelArt)

23 23 Beispielsichten (2) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 AName ANr ANr,AName (ArtikelArt)

24 24 Beispielsichten (3) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Siemens 10 5 Zündkerzenkabel Zündkerzenstecker Zündspule A013 A014 A015 GewichtLieferant Menge AName ANr Lieferant='Siemens' (ArtikelArt)

25 25 Beispielsichten (4) LH-002 LH-006 LH-004 LH-007 LH-006 LH-003 LH-007 LH-005 LH-003 LH-005 LH-001 LH-004 LH A-001 A-004 A-005 A-017 A-006 A-002 A-015 A-010 A-020 A-008 A-011 A-019 A-012 A-001 A-006 A-015 LEA-04 LEA-02 LEA-01 LEA-05 LEA-02 LEA-03 LEA-05 LEA-01 LEA-02 LEA-04 LEA-01 LEA-02 LEA-01 LEA-04 LEA-02 LE-001 LE-002 LE-003 LE-004 LE-005 LE-006 LE-007 LE-008 LE-009 LE-010 LE-011 LE-012 LE-013 LE-014 LE-015 LE-016 LhNrGewichtStückzah l ANrLeaNrLeNr Lagereinheit LH-006 LH A-017 A-015 LEA-05 LEA-02 LE-004 LE-007 LE-016 LhNrGewichtStückzah l ANrLeaNrLeNr Gewicht>100.0 (Lagereinheit)

26 26 Beispielsichten (5) ArtikelArt Lagereinheit LeGewicht Gewicht Lieferant LEA-04 LEA-03 LEA-02 LEA-01 LEA-02 LEA-04 LEA-01 LEA-05 LEA-02 LEA-05 LEA-02 LE-001 LE-014 LE-006 LE-002 LE-003 LE-005 LE-015 LE-010 LE-008 LE-011 LE-013 LE-007 LE-016 LE-004 LE-012 LE-009 Anlasser Kolben Kurbelwelle Nockenwelle Ölwanne Ventile Ventilfedern Zündkerzen Zündspule Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A-001 A-002 A-004 A-005 A-006 A-008 A-010 A-011 A-012 A-015 A-017 A-019 A-020 LeaNrLeNrANameANrMenge Bosch Mahle Erzberg Mahle Pohlmann Bosch Osram Siemens Erzberg Mahle Erzberg Gewicht Stückzah l LeGewicht LH-001 LH-007 LH-002 LH-004 LH-007 LH-003 LH-005 LH-006 LH-005 LH-006 LH-003 LhNr

27 27 Beispielsichten (6) Lagereinheit Gewicht MaxGewicht LagerhilfsmittelArt Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge Holzpalette Leichte Holzpalette Displaypalette LHA-01 LHA-02 LHA-03 LHA-04 LHA-05 LHA-06 MaxGewicht HöheBreiteLängeLhaNameLhaNr LagerhilfsmittelArt LH-002 LH-006 LH-004 LH-007 LH-006 LH-003 LH-007 LH-005 LH-003 LH-005 LH-001 LH-004 LH A-001 A-004 A-005 A-017 A-006 A-002 A-015 A-010 A-020 A-008 A-011 A-019 A-012 A-001 A-006 A-015 LEA-04 LEA-02 LEA-01 LEA-05 LEA-02 LEA-03 LEA-05 LEA-01 LEA-02 LEA-04 LEA-01 LEA-02 LEA-01 LEA-04 LEA-02 LE-001 LE-002 LE-003 LE-004 LE-005 LE-006 LE-007 LE-008 LE-009 LE-010 LE-011 LE-012 LE-013 LE-014 LE-015 LE-016 LhNrGewichtStückzahlANrLeaNrLeNr Lagereinheit Welche Art von Lagerhilfsmitteln ist zu meiden?

28 28 Löschoperationen (1) ADB ADB' DB DB' o = lösche(aname) p?? v v = AName (ArtikelArt) n Löschen entspricht der relationenalgebraischen Differenz. Dann ergibt sich durch Einsetzen in die Informationserhaltungs-Regel die Forderung AName (ArtikelArt) \ {(aname)} = AName (p(ArtikelArt)) und somit p(ArtikelArt) = ArtikelArt \ {(w, aname, x, y, z)}. n Fragestellung: Wie sind w, x, y und z richtig auszufüllen?

29 29 Löschoperationen (1) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse AName AName (ArtikelArt) n Sei aname = 'Zündkerzen n In ArtikelArt gar kein eindeutiges Tupel, das zu löschen wäre! n Daher: Alle Tupel mit aname = 'Zündkerzen aus der Originalrelation löschen. Ansonsten verschwände 'Zündkerzen' nicht aus der Sicht.

30 30 Löschoperationen (2) ADB ADB' DB DB' o = lösche(anr,aname) p?? v v = ANr,AName (ArtikelArt) Es ergibt sich die Forderung ANr,AName (ArtikelArt) \ {(anr, aname)} = ANr,AName (p(ArtikelArt)) und somit p(ArtikelArt) = ArtikelArt \ {(anr, aname, x, y, z)}.

31 31 Löschoperationen (2) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 AName ANr ANr,AName (ArtikelArt) Ausfüllen eindeutig, da das Schlüsselattribut der Originalrelation in der Sicht vorhanden ist. (Beispiel: anr = 'A-001')

32 32 Löschoperationen (3) ADB ADB' DB DB' o = lösche(anr,aname,menge,lieferant,gewicht) p?? v v = Lieferant='Siemens' (ArtikelArt) n Forderung: Lieferant='Siemens' (ArtikelArt) \ {(anr, aname, menge, lieferant, gewicht)} = Lieferant='Siemens' (p(ArtikelArt)) n Für p ergibt sich: p(ArtikelArt) = ArtikelArt \ {(anr, aname, menge, lieferant, gewicht)}

33 33 Löschoperationen (3) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName ANr ArtikelArt Siemens 10 5 Zündkerzenkabel Zündkerzenstecker Zündspule A013 A014 A015 GewichtLieferant Menge AName ANr Lieferant='Siemens' (ArtikelArt) Keine Probleme, da das Schlüsselattribut der Originalrelation in der Sicht vorhanden ist.

34 34 Löschoperationen (4) ADB ADB' DB DB' o = lösche(lenr,leanr,anr,stückzahl,gewicht,lhnr) p?? v v = Gewicht>100.0 (Lagereinheit) n Forderung: Gewicht>100.0 (Lagereinheit) \ {(lenr,leanr,anr,stückzahl,gewicht,lhnr)} = Gewicht>100.0 (p(Lagereinheit)) n Für p ergibt sich: p(Lagereinheit) = Lagereinheit \ {(lenr,leanr,anr,stückzahl,gewicht,lhnr)}

35 35 Löschoperationen (4) LH-002 LH-006 LH-004 LH-007 LH-006 LH-003 LH-007 LH-005 LH-003 LH-005 LH-001 LH-004 LH A-001 A-004 A-005 A-017 A-006 A-002 A-015 A-010 A-020 A-008 A-011 A-019 A-012 A-001 A-006 A-015 LEA-04 LEA-02 LEA-01 LEA-05 LEA-02 LEA-03 LEA-05 LEA-01 LEA-02 LEA-04 LEA-01 LEA-02 LEA-01 LEA-04 LEA-02 LE-001 LE-002 LE-003 LE-004 LE-005 LE-006 LE-007 LE-008 LE-009 LE-010 LE-011 LE-012 LE-013 LE-014 LE-015 LE-016 LhNrGewichtStückzah l ANrLeaNrLeNr Lagereinheit LH-006 LH A-017 A-015 LEA-05 LEA-02 LE-004 LE-007 LE-016 LhNrGewichtStückzah l ANrLeaNrLeNr Gewicht>100.0 (Lagereinheit) Keine Probleme, da das Schlüsselattribut der Originalrelation in der Sicht vorhanden ist. Selektion ist bei Löschoperationen ein für die Informationserhaltung unkritischer Operator.

36 36 Löschoperationen (5) ADB ADB' DB DB' o = lösche(anr,lenr) p?? v v = ArtikelArt Lagereinheit LeGewicht Gewicht n Forderung: ArtikelArt Lagereinheit LeGewicht Gewicht \ {(anr,lenr)} = p 1 (ArtikelArt) p 2 (Lagereinheit) mit p also Folge aus p 1 und p 2 ((anr,lenr) ist Schlüssel). n Erster Versuch: - p 1 (ArtikelArt) = ArtikelArt \ {(anr)} - p 2 (Lagereinheit) = Lagereinheit \ {(lenr)}

37 37 Löschoperationen (5) ArtikelArt Lagereinheit LeGewicht Gewicht Lieferant LEA-04 LEA-03 LEA-02 LEA-01 LEA-02 LEA-04 LEA-01 LEA-05 LEA-02 LEA-05 LEA-02 LE-001 LE-014 LE-006 LE-002 LE-003 LE-005 LE-015 LE-010 LE-008 LE-011 LE-013 LE-007 LE-016 LE-004 LE-012 LE-009 Anlasser Kolben Kurbelwelle Nockenwelle Ölwanne Ventile Ventilfedern Zündkerzen Zündspule Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A-001 A-002 A-004 A-005 A-006 A-008 A-010 A-011 A-012 A-015 A-017 A-019 A-020 LeaNrLeNrANameANrMenge Bosch Mahle Erzberg Mahle Pohlmann Bosch Osram Siemens Erzberg Mahle Erzberg Gewicht Stückzah l LeGewicht LH-001 LH-007 LH-002 LH-004 LH-007 LH-003 LH-005 LH-006 LH-005 LH-006 LH-003 LhNr Beispiel: anr = 'A-001, lenr = LE-001

38 38 Löschoperationen (5) ADB ADB' DB DB' o = lösche(anr,lenr) p?? v v = ArtikelArt Lagereinheit LeGewicht Gewicht n Forderung: ArtikelArt Lagereinheit LeGewicht Gewicht \ {(anr,lenr)} = p 1 (ArtikelArt) p 2 (Lagereinheit) mit p also Folge aus p 1 und p 2 ((anr,lenr) ist Schlüssel). n Zweiter Versuch: - p 1 (ArtikelArt) = ArtikelArt - p 2 (Lagereinheit) = Lagereinheit \ {(lenr)}

39 39 Löschoperationen (5) ArtikelArt Lagereinheit LeGewicht Gewicht Lieferant LEA-04 LEA-03 LEA-02 LEA-01 LEA-02 LEA-04 LEA-01 LEA-05 LEA-02 LEA-05 LEA-02 LE-001 LE-014 LE-006 LE-002 LE-003 LE-005 LE-015 LE-010 LE-008 LE-011 LE-013 LE-007 LE-016 LE-004 LE-012 LE-009 Anlasser Kolben Kurbelwelle Nockenwelle Ölwanne Ventile Ventilfedern Zündkerzen Zündspule Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A-001 A-002 A-004 A-005 A-006 A-008 A-010 A-011 A-012 A-015 A-017 A-019 A-020 LeaNrLeNrANameANrMenge Bosch Mahle Erzberg Mahle Pohlmann Bosch Osram Siemens Erzberg Mahle Erzberg Gewicht Stückzah l LeGewicht LH-001 LH-007 LH-002 LH-004 LH-007 LH-003 LH-005 LH-006 LH-005 LH-006 LH-003 LhNr Beispiel: anr = 'A-001, lenr = LE-001 Erklärung: Referenzielle Konsistenz von ANr in Lagereinheit bezüglich ArtikelArt im ersten Fall verletzt, im zweiten nicht.

40 40 Löschoperationen (6) ADB ADB' DB DB' o = lösche(lenr,...,gewicht,lhnr,lhanr,...,maxgewicht) p?? v v = Lagereinheit Gewicht MaxGewicht LagerhilfsmittelArt n Forderung: Lagereinheit Gewicht MaxGewicht LagerhilfsmittelArt \ {(lenr,...,gewicht,lhnr,lhanr,...,maxgewicht)} = p 1 (Lagereinheit) Gewicht MaxGewicht p 2 (LagerhilfsmittelArt) n Problem: Keines der Schlüsselattribute der beiden Relationen ist am Join beteiligt.

41 41 Löschoperationen (6) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge Versuch 1: Lösche Tupel aus beiden Relationen (Schlüssel gegeben!) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge Versuch 2: Lösche Tupel aus LagerhilfsmittelArt (Schlüssel gegeben!) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge

42 42 Löschoperationen (6) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge Versuch 1: Lösche Tupel aus beiden Relationen (Schlüssel gegeben!) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge Versuch 3: Lösche Tupel aus Lagereinheit (Schlüssel gegeben!) Displaypalette LHA-05 LHA-06 LEA-05 LE-007 LE-004 LE-007 LhaNameLhaNrLeaNrLeNr A-015 A-017 A-015 ANr Stückzahl Gewicht LH-006 LhNr MaxGewicht HöheBreiteLänge

43 43 Einfügeoperationen (1) ADB ADB' DB DB' o = einfüge(anr,aname) p?? v v = ANr,AName (ArtikelArt) n Forderung: ANr,AName (ArtikelArt) {(anr, aname)} = ANr,AName (p(ArtikelArt)) und somit p(ArtikelArt) = ArtikelArt {(anr, aname, x, y, z)}. n Problem: Keine Belegung für x, y, z bekannt, daher Vorbelegung mit NULL.

44 44 Einfügeoperationen (1) Bosch Mahle Erzberg Mahle Bosch Pohlmann Bosch Osram Siemens Bosch Erzberg Pohlmann Mahle Erzberg Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 GewichtLieferant Menge AName Anr ArtikelArt Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle Ölwanne Pleuel Ventile Ventilfedern Zündkerzen Zündkerzenkabel Zündkerzenstecker Zündspule Zündverteiler Zylinderdichtung Zylinderkopf Zylinderkurbelgehäuse A001 A002 A003 A004 A005 A006 A007 A008 A009 A010 A011 A012 A013 A014 A015 A016 A017 A018 A019 A020 AName Anr ANr,AName (ArtikelArt) A-030 ÖlfilterA-030 Ölfilter NULL NULL NULL Eindeutigkeit in Sicht lässt sich zurückführen auf Eindeutigkeit in Basisrelation

45 45 Einfügeoperationen (2) ADB ADB' DB DB' o = einfüge(aname) p?? v v = AName (ArtikelArt) Forderung: AName (ArtikelArt) {(aname)} = AName (p(ArtikelArt)) und somit p(ArtikelArt) = ArtikelArt {(w, aname, x, y, z)}. n Problem: w = NULL unzulässig wenn ANr key und nur einmal zulässig wenn ANr unique.

46 46 Einfügeoperationen (3) ADB ADB' DB DB' o = einfüge(anr,aname,menge,lieferant,gewicht) p?? v v = Lieferant='Siemens' (ArtikelArt) n Forderung: Lieferant='Siemens' (ArtikelArt) {(anr, aname, menge, lieferant, gewicht)} = Lieferant='Siemens' (p(ArtikelArt)) n Für p ergibt sich: p(ArtikelArt) = ArtikelArt {(anr, aname, menge, lieferant, gewicht)} Problem: Beim Einfügen von Tupeln mit Lieferant 'Siemens' erscheinen diese wegen der Selektionsbedingung nicht in der Sicht.

47 47 Einfügeoperationen (4) ADB ADB' DB DB' o = einfüge(anr,...,lenr,...) p?? v v = ArtikelArt Lagereinheit LeGewicht Gewicht n Forderung: ArtikelArt Lagereinheit LeGewicht Gewicht {(anr,lenr)} = p 1 (ArtikelArt) p 2 (Lagereinheit) n Vermutung für p: - p 1 (ArtikelArt) = ArtikelArt {(anr,...)} - p 2 (Lagereinheit) = Lagereinheit {(lenr,...)}

48 48 Einfügeoperationen (4) n Ist neues Tupel in der Sichtrelation noch nicht vorhanden, so muss zwingend – wegen der referenziellen Konsistenz – ein Tupel in Lagereinheit eingefügt werden. n Hingegen kann geeignetes Tupel bereits in ArtikelArt existieren, muss aber nicht. Falls existent, muss p 1 Eindeutigkeit bzgl. Schlüssel in der Basisrelation durchsetzen. n Falls neues Tupel in der Sichtrelation bereits vorhanden, so muss auch p 2 Eindeutigkeit bzgl. Schlüssel in der Basisrelation durchsetzen.

49 49 Informationserhaltung (1) Fazit: n View Update-Problem: Änderungsoperationen bereiten in komplizierteren Fällen Probleme. n Erwünscht: Systematische Analyse der Randbedingungen, unter denen Änderungen im Hinblick auf Informationserhaltung zulässig sind. Vereinfachende Annahmen: n Ignorieren von Selektionsbedingungen n Betrachtung nur einattributiger Schlüssel n Joins sind stets Equi-Joins Weitere Voraussetzungen: n Kenntnis über Zusammenhänge zwischen den Attributen liegt vor: u Schlüsselfunktion, u Join-Attribute.

50 50 Informationserhaltung (2) Seien R 1,..., R n die Basisrelationen und V = v(R 1,..., R n ) eine auf den R i definierte Sichtrelation. Dann konstruieren wir den Spurgraphen G(V) wie folgt: Für jedes Attribut der Relationen R i wird ein -Knoten eingeführt, und für jedes Attribut von V ein -Knoten. n Zwischen jedem Sichtattribut V.A und seinem definierenden Attribut R i.B in einer der Basisrelationen wird eine bidirektionale Kante zwischen den beteiligten Knoten gezogen. n Für jede (Equi-)Join-Bedingung R i.A = R j.B wird eine bidirektionale Kante zwischen den beteiligten Knoten gezogen. n Für jeden (einattributigen) Schlüssel R i.A werden gerichtete Kanten vom Schlüsselattribut R i.A zu allen anderen Attributen von R i gezogen.

51 51 Informationserhaltung (3) Spurgraph für ANr,AName (ArtikelArt). Spurgraph für AName (ArtikelArt). AName ANrMengeLieferantGewicht ArtikelArt AName ANrMengeLieferantGewicht ArtikelArt

52 52 Informationserhaltung (4) Spurgraph für ArtikelArt Lagereinheit LeGewicht Gewicht AName ANrMengeLieferantGewicht ArtikelArt ANr LeNrLeaNrStückzahlLhNr Lagereinheit Gewicht AName ANrMengeLieferantGewichtLeNrLeaNrStückzahlLhNr LeGewicht

53 53 Informationserhaltung (5) Pfade im Spurgraph: n Seien A und B Knoten in G(V). n Dann ist A v B Pfad in G(V), n falls eine Kante von A nach B existiert n oder es einen Knoten C in G(V) gibt, so dass eine Kante von A nach C verläuft und ein Pfad C v B gefunden werden kann. Pfade für Knotenmengen: n Sei Z Knotenmenge. A v Z ist Pfad in G(V), falls für jedes C Z gilt: A v C. Sichtspur: Sei A -Knoten und B -Knoten in G(V). n A heißt Sichtspur von B, falls A v B und B v A (kurz: A v B).

54 54 Informationserhaltung (6) Spurgraph für ArtikelArt Lagereinheit LeGewicht Gewicht AName ANrMengeLieferantGewicht ArtikelArt ANr LeNrLeaNrStückzahlLhNr Lagereinheit Gewicht AName ANrMengeLieferantGewichtLeNrLeaNrStückzahlLhNr LeGewicht Pfad Sichtspur

55 55 Löschoperationen (1) n Sei V Sichtrelation und X Attributfolge in V. n delete(V, X) sei Löschoperation, wobei für jedes Attribut in X ein Wert spezifiziert wird. n Dann ist delete(V, X) informationserhaltend auf Löschoperationen in den Basisrelationen abbildbar, falls es genau eine Basisrelation R i mit einem Schlüssel K i so gibt, dass K i v X. Es werden dann ausschließlich Tupel aus diesem R i entfernt.

56 56 Löschoperationen (2) Spurgraph für AName (ArtikelArt). delete(V,AName) mit AName = aname. n ANr ist Schlüssel in ArtikelArt. n Es gilt: ArtikelArt.ANr v V.AName. n Die Löschoperation ist also durchführbar. Es werden alle einschlägigen Tupel entfernt. AName ANrMengeLieferantGewicht ArtikelArt AName

57 57 Löschoperationen (3) Spurgraph für ANr, AName (ArtikelArt). delete(V,(ANr,AName)) mit (ANr,AName) = (anr,aname). n Es gilt: ArtikelArt.ANr v (V.ANr, V.AName). n Die Löschoperation ist also gestattet. AName ANrMengeLieferantGewicht ArtikelArt AName ANr

58 58 Löschoperationen (4) Spurgraph für ArtikelArt Lagereinheit LeGewicht Gewicht delete (V,(ANr,LeNr)) mit (ANr,LeNr) = (anr,lenr). n Die beiden möglichen Schlüssel sind ANr in ArtikelArt und LeNr in Lagereinheit. n Nur für LeNr ist die Pfadbedingung erfüllt. n Löschen findet also nur in der Basisrelation Lagereinheit statt. AName ANrMengeLieferantGewicht ArtikelArt ANr LeNrLeaNrStückzahlLhNr Lagereinheit Gewicht AName ANrMengeLieferantGewichtLeNrLeaNrStückzahlLhNr LeGewicht

59 59 Einfügeoperationen (1) n Sei V Sichtrelation und t ein Tupel. n Dann ist insert(V,t) informationserhaltend auf Einfügeoperationen in den Basisrelationen abbildbar, falls folgendes gilt: - Konsistenz - Seiteneffektfreiheit - Eindeutigkeit

60 60 Einfügeoperationen (2) n Sei V Sichtrelation und t ein Tupel. n Dann ist insert(V,t) informationserhaltend auf Einfügeoperationen in den Basisrelationen abbildbar, falls folgendes gilt: - Konsistenz - Seiteneffektfreiheit - Eindeutigkeit Konsistenz: Sei R i Basisrelation. 1.Sind D 1, D 2 Sichtspuren desselben Attributs in R i, dann D 1 ({t}) = D 2 ({t}). 2.In der Menge der R i muss (mindestens ein) Schlüssel K i eine Sichtspur D besitzen, und D ({t}) darf nicht NULL sein. 3.Für jedes R i mit Schlüssel K i und weiterem Attribut A i gilt: Falls D K Sichtspur von K i ist und D A Sichtspur von A i ist, dann gilt für alle s V: Mit D K ({t}) = D K ({s}) folgt D A ({t}) = D A ({s}). Bed. 3 nicht aus dem Schema, sondern erst aus der Datenbasis zu bestimmen.

61 61 Einfügeoperationen (2) R1R1 R2R2 D1D1 D2D2 D K1 D K2 DADA Konsistenzbed. 1 Konsistenzbed. 2 Konsistenzbed. 3 K2K2 K1K1 A

62 62 Einfügeoperationen (3) n Sei V Sichtrelation und t ein Tupel. n Dann ist insert(V,t) informationserhaltend auf Einfügeoperationen in den Basisrelationen abbildbar, falls folgendes gilt: - Konsistenz - Seiteneffektfreiheit - Eindeutigkeit Seiteneffektfreiheit: Für alle Attribute A j von V mit A j ({t}) NULL existiert für jede Basisrelation R i ein Schlüssel K i, so dass K i v {A j }.

63 63 Einfügeoperationen (3) R1R1 R2R2 D1D1 D2D2 D K1 D K2 DADA K2K2 K1K1 A Konsistenzbed. 1 Konsistenzbed. 2 Konsistenzbed. 3 Seiteneffektfreiheit (nur K 2 )

64 64 Einfügeoperationen (4) n Sei V Sichtrelation und t ein Tupel. n Dann ist insert(V,t) informationserhaltend auf Einfügeoperationen in den Basisrelationen abbildbar, falls folgendes gilt: - Konsistenz - Seiteneffektfreiheit - Eindeutigkeit Eindeutigkeit: Jedes Attribut in der Equijoin-Bedingung besitzt eine Sichtspur D j, und D j ({t}) NULL.

65 65 Einfügeoperationen (4) R1R1 R2R2 D1D1 D2D2 D K1 D K2 DADA K2K2 K1K1 A Konsistenzbed. 1 Konsistenzbed. 2 Konsistenzbed. 3 Seiteneffektfreiheit (nur K 2 ) Eindeutigkeit

66 66 Einfügeoperationen (5) Spurgraph für ANr,AName (ArtikelArt). insert(anr, aname). n Konsistenz (Bed. 2) und Seiteneffektfreiheit sind sichergestellt. n Konsistenzbed. 1 und Eindeutigkeitsbedingung entfallen. n Dritte Bedingung für Konsistenz ist zu prüfen: Sie schließt aus, dass ein Tupel mit bereits vorhandenem Schlüssel, aber ansonsten abweichenden Werten eingefügt wird. n In ArtikelArt: insert(anr, aname, NULL, NULL, NULL). AName ANrMengeLieferantGewicht ArtikelArt AName ANr

67 67 Einfügeoperationen (6) Spurgraph für AName (ArtikelArt). insert(aname). n Es wird gegen die zweite Bedingung zur Konsistenz verstoßen: Der Schlüssel ANr besitzt keine Sichtspur. AName ANrMengeLieferantGewicht ArtikelArt AName

68 68 Einfügeoperationen (7) Spurgraph für ArtikelArt Lagereinheit LeGewicht Gewicht insert(aname,anr,menge,lieferant,gew1,lenr,leanr,stückzahl,gew2,lhnr) n Seiteneffektfreiheit ist nicht gesichert: Schlüssel ANr der Basisrelation ArtikelArt leistet nicht die Pfadbedingung. n Somit ist die Einfügeoperation nicht zwingend informationserhaltend. AName ANrMengeLieferantGewicht ArtikelArt ANr LeNrLeaNrStückzahlLhNr Lagereinheit Gewicht AName ANrMengeLieferantGewichtLeNrLeaNrStückzahlLhNr Gewicht

69 69 Kapitel 9.3: Sichten in SQL

70 70 Vereinbarung von Sichten (1) Erzeugen von Sichten: create view view-name [ (attributliste ) ] as sql-ausdruck Löschen von Sichten: drop view view-name Beispiele: create view ArtikelÜbersicht as selectANr, AName fromArtikelArt; create view SiemensArtikel as select fromArtikelArt whereLieferant = 'Siemens'; create view SchwereLagereinheit as select fromLagereinheit whereGewicht > 100.0;

71 71 Vereinbarung von Sichten (2) Beispiele: create view GelagerterArtikel ( ANr, AName, Menge, Lieferant, Gewicht, LeNr, LeaNr, Stückzahl, LeGewicht, LhNr ) selectA.ANr, AName, Menge, Lieferant, A.Gewicht, LeNr, LeaNr, Stückzahl, Le.Gewicht, LhNr fromArtikelArt A, Lagereinheit Le whereA.Anr = Le.ANr; create view UnzulässigeKombination as select fromLagereinheit, LagerhilfsmittelArt whereGewicht MaxGewicht; Selektionen, Projektionen, Join-Operationen, Gruppierung sind allesamt möglich.

72 72 Vereinbarung von Sichten (3) Durch den Anwender parametrisierte Sichten sind nicht möglich. Beispiel: Der für einen Lieferanten nach Stückzahl am häufigsten gelagerte Artikel. Der Parameter Lieferant muss bei Definition der Sicht jeweils ausgefüllt werden, beispielsweise mit Bosch oder Siemens: create view HäufigsterArtikelFürLieferant as selectA.ANr, AName, sum(Stückzahl) fromArtikelArt A, Lagereinheit Le whereA.Anr = Le.ANr andLieferant = 'Lieferant' group by A.ANr having sum(Stückzahl) >= all ( selectsum(Stückzahl) fromArtikelArt A, Lagereinheit Le whereA.Anr = Le.ANr andLieferant = 'Lieferant' group by A.Anr ); SQL-Prozeduren sind nur ein Notbehelf!

73 73 Informationserhaltung Faustregeln für erlaubtes Ändern von Sichten: Die Sicht darf nur aus einer einzigen Basisrelation oder Sicht abgeleitet und nicht geschachtelt sein. Falls die Sicht aus einer anderen Sicht abgeleitet ist, muss diese andere Sicht änderbar sein. Die Sicht darf aus keiner Gruppierung hervorgegangen sein. Die Sicht darf nicht aus einer Duplikateliminierung (distinct) hervorgegangen sein. Kein Attribut darf auf einer Aggregierungsfunktion basieren. Modifizieren von Attributen, die aus einer arithmetischen Operation hervorgehen, und Löschen von Tupeln, die derartige Attribute enthalten, ist nicht erlaubt. Damit werden allerdings auch nach Kapitel 9.2 zulässige Fälle ausgeschlossen.

74 74 Kapitel 9.4: Objektorientierte Sichten auf relationale Daten

75 75 Beispiel: Java 2 Enterprise Edition Dienstnehmer -Behälter Transaktionsdienst Ressourcen- Verwalter Kommunikation (HTTP, IIOP, RMI, JDBC) Persistenzdienst JAFJNDIJDBCJTA J2SE JMS WWW-Behälter JAFJNDIJDBCJTA J2SE JMS Java Servlets Java Server Pages EJB-Behälter JAFJNDIJDBCJTA J2SE JMS Enterprise Java Bean Fremd- Behälter Applet- Behälter J2SE Ressourcen Datenlogik Geschäftsprozess Anwendungs-Dienstgeber Präsentation WWW-Dienstgeber Anwender Dienstnehmer Konnektor RMI-IIOP HTTP RMI-IIOP JDBC NamensdienstSicherheitsdienstNachrichtendienst JDBC objektorientiert (Java) relational

76 76 Dauerhafte Objekte Aus einer objektorientierten Anwendung heraus sollen die Zustandsdaten der Objekte dauerhaft in einem RDBMS hinterlegt werden. Die Sicht braucht (und kann) sich nur ausschließlich struktureller Merkmale bedienen. Das objektorientierte Schema der Anwendung bildet hierbei den Ausgangspunkt, um ein relationales Schema zu generieren. ADBADB' o p vv DBDB' Gegeben: oo-Schema Gesucht: Relationales Schema und v informationserhaltend

77 77 Abbildung Die unterschiedliche Ausdrucksmächtigkeit der beiden Datenmodelle bereitet Probleme bei der Abbildung. Abzubildende Konzepte sind: Objektidentität Objektverweise Mengenkonstruktion Typhierarchien (Vererbung)

78 78 Objekte und Objektidentität n Objekttypen werden in Relationstypen überführt. n Die Menge der Ausprägungen eines Objekttyps bildet dann die (einzige) Relation dieses Relationstyps. n Objektidentitäten definieren die Eindeutigkeit. Da sie nicht sichtbar sind, muss die Abbildung objektidentifizierende Werte erzeugen. u Liegt Extent mit Schlüssel vor, kann der Schlüssel übernommen werden. u Andernfalls müssen künstliche objektidentifizierende Werte als Schlüssel (Surrogat) erzeugt und unter einem zusätzlichen Attribut geführt werden.

79 79 Objekte und Objektverweise Abbildung von Attributen: Atomares Objektattribut wird zu atomarem Attribut des Relationstyps. Attribut mit Objektverweis wird zu Attribut des Relationstyps, das Schlüssel des Tupels aufnimmt, das aus der Abbildung des Verweisobjekts hervorgeht (Fremdschlüssel). Konstruktion des Relationstyps: Ausschließlich atomare Attribute: Jedes Objekt wird zu relationalem Tupel. Ausschließlich atomare und Verweis-Attribute: Jedes Objekt wird zu relationalem Tupel.

80 80 Objektorientiertes Ausgangsschema: class ArtikelArt (key ANr) { ANr: String; AName: String; Menge: Integer; Lieferant: String; Gewicht: Float }; class Lagereinheit (key LeNr) { LeNr: String; LeaNr: LagereinheitArt; ANr: ArtikelArt; Stückzahl: Integer; Gewicht: Float; LhNr: Lagerhilfsmittel }; class LagereinheitArt (key LeaNr) { LeaNr: String; LeaName: String; Länge: Integer; Breite: Integer; Höhe: Integer; MaxGewicht: Float }; Beispiel (1) class Lagerhilfsmittel (key LhNr) { LhNr: String; LhaNr: LagerhilfsmittelArt; Gewicht: Float; LoNr: Lagerort }; class LagerhilfsmittelArt (key LhaNr) { LhaNr: String; LhaName: String; Länge: Integer; Breite: Integer; Höhe: Integer; MaxGewicht: Float }; Relationen: Trivial, da Schlüssel gegeben, Attribute nur atomar oder Verweise. relation ArtikelArt(ANr,AName,Menge,Lieferant,Gewicht); relation Lagereinheit(LeNr,LeaNr,ANr,Stückzahl,Gewicht,LhNr); relation LagereinheitArt(LeaNr,LeaName,Länge,Breite,Höhe,MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr,LhaName,Länge,Breite,Höhe,MaxGewicht);

81 81 class Lagerort (key LoNr) { LoNr: String; LoaNr: LagerortArt; Gewicht: Float }; class LagerortArt (key LoaNr) { LoaNr: String; Länge: Integer; Breite: Integer; Höhe: Integer; MaxGewicht: Float }; class Verträglichkeit (key ANr, LoNr) { ANr: ArtikelArt; LoNr: Lagerort }; Beispiel (2) Relationen: Trivial, da Schlüssel gegeben. Attribute nur atomar oder Verweise relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr);

82 82 Objekte und Mengenkonstruktion Konstruktion des Relationstyps: Mischung aus atomaren und Verweis-Attributen sowie Mengen oder Listen hiervon: Atomare/Verweis-Attribute bilden Relationstyp T R. Bilde für jedes mengenwertige Attribut (ggf. Menge über Tupelstruktur) einen eigenen Relationstyp. Dort bildet das identifizierende Attribut von T R den Fremdschlüssel.

83 83 Beispiel (3) class Punkt ( extent punkte ) { attribute float x; attribute float y; attribute float z; void translation(in Punkt p); }; class Kante { attribute Punkt p1; attribute Punkt p2; void translation(in Punkt p); }; class Fläche { attribute set kanten; relationship set körper inverse Vielflächner::flächen; void translation(in Punkt p); }; class Vielflächner ( extent vielflächner; key vName ) { attribute string vName; relationship set flächen inverse Fläche::körper; void translation(in Punkt p); }; class Quader extends Vielflächner ( extent quader ) { attribute float volume(); }; Punkt (PSurr, x, y, z) Kante (KSurr, PSurr1, PSurr2) Fläche (FSurr) Kanten (KSurr, FSurr) Körper (VName, FSurr) Vielflächner (VName) Flächen (FSurr, VName) (lokaler) Fremdschlüssel Bidirektional: Beschreibt gleichen Sachverhalt

84 84 Punkt (PSurr, x, y, z) Kante (KSurr, PSurr1, PSurr2) Fläche (FSurr) Kanten (KSurr, FSurr) Vielflächner (VName) Körperflächen (VName, FSurr) Beispiel (3)

85 85 Objekte und Mengenkonstruktion Konstruktion des Relationstyps: Sonderfall: Ein einziges, mengen- oder listenwertiges Attribut mit Elementen, die einer der zuvor betrachteten Attributstrukturen folgen: Wende das zutreffende der zuvor betrachteten Verfahren auf die Attributstruktur an. Es werde nunmehr Mengen von Mengen in einer Relation geführt, d.h. die Menge von Mengen wird zu einer Ebene verflacht. Das Surrogatattribut des Objekts kann somit nicht alleine Schlüssel sein.

86 86 n Dem Konzept der Subtypisierung entspricht kein relationales Konstrukt. n Das relationale Modell kennt auch keine Vererbung. n Das Erscheinungsbild der Subtypisierung kann sich also im relationalen Schema nur in gewissen Zusammenhängen innerhalb oder zwischen Relationen (also in der Datenbasis selbst!) widerspiegeln. n Dementsprechend lassen sich auch mehrere Abbildungsregeln angeben. Typhierarchien

87 87 Objektorientiertes Ausgangsschema: class Lagereinrichtung { Nr: String; Art: LagereinrichtungsArt; Gewicht: Float }; class Lagereinheit : Lagereinrichtung { ANr: ArtikelArt; Stückzahl: Integer; LhNr: Lagerhilfsmittel }; class Lagerhilfsmittel : Lagereinrichtung { LoNr: Lagerort }; class Lagerort : Lagereinrichtung { }; Beispiel Lagereinrichtung LagerortLagerhilfsmittelLagereinheit

88 88 Option 1: n Jeder Objekttyp einer Typhierarchie bildet eine eigene Relation. n Jede Relation handelt ihren eigenen Satz von Attributen ab. n Bei allen kommt das Schlüsselattribut aus dem Obertyp hinzu. Abbilden von Typhierarchien (1) Lagereinrichtung LagerortLagerhilfsmittelLagereinheit relation Lagereinrichtung (Nr, Art, Gewicht); relation Lagereinheit(Nr, ANr, Stückzahl, LhNr); relation Lagerhilfsmittel(Nr, LoNr) relation Lagerort(Nr) Bewertung: n Vererbung der Attribute nicht unmittelbar ersichtlich. n Zur Gewinnung der Originalinformation müssen die Werte unter diesen Attributen aus verschiedenen Relationen verbunden werden. n Verbinden nur möglich bei identischen Schlüsselwerten. Daher nur sinnvoll bei Mengeninklusions-Semantik.

89 89 Option 2: n Jeder Objekttyp einer Typhierarchie bildet eine eigene Relation. n Jetzt werden jedoch mit einer Relation sämtliche, also auch die ererbten Attribute aufgenommen. Abbilden von Typhierarchien (2) Lagereinrichtung LagerortLagerhilfsmittelLagereinheit relation Lagereinrichtung (Nr, Art, Gewicht); relation Lagereinheit(Nr, Art, Gewicht, ANr, Stückzahl, LhNr); relation Lagerhilfsmittel(Nr, Art, Gewicht, LoNr) relation Lagerort(Nr, Art, Gewicht) Bewertung: n Jedes Objekt wird in der Relation geführt, die seinem Objekttyp entspricht. n Diese Lösung setzt keine Mengeninklusions-Semantik voraus. Liegt jedoch eine solche vor, so kommt es zu Replikationen und somit zu Redundanzen in den Relationen für die Untertypen.

90 90 Option 3: n Jeder Pfad von der Wurzel zu den Blättern der Hierarchie bildet eine eigene Relation. n Zwangsläufig enthält jede Relation die entlang ihres Pfades beobachteten Attribute. Abbilden von Typhierarchien (3) relation Lagereinheit(Nr, Art, Gewicht, ANr, Stückzahl, LhNr); relation Lagerhilfsmittel(Nr, Art, Gewicht, LoNr) relation Lagerort(Nr, Art, Gewicht) Bewertung: n Diese Lösung fordert eine Mengeninklusions-Semantik in der verschärften Form der Überdeckung. n Vorteilhaft ist, dass alle Attribute jedes Objekts in genau einem einzigen Tupel gehalten werden können und nicht über mehrere Relationen verstreut sind. n Dafür ist andererseits die ursprüngliche Typhierarchie auch nicht mehr erkennbar. Lagereinrichtung LagerortLagerhilfsmittelLagereinheit

91 91 Option 4: Die gesamte Generalisierungshierarchie fällt in einer einzigen Relation für die Wurzel zusammen. Abbilden von Typhierarchien (4) relation Lagereinrichtung(Einrichtungstyp, Nr, Art, Gewicht, LeANr, LeStückzahl, LeLhNr, LhLoNr); Bewertung: n Je nach tatsächlichem Typ des Objekts sind nur bestimmte Attribute mit Werten belegt; die anderen enthalten NULL. n Um nicht aus der Belegung auf die tatsächlichen Typen schließen zu müssen, muss der Relation ein zusätzliches Typ-Attribut beigegeben werden (hier: Einrichtungstyp). n Die Lösung eignet sich ohne und mit Mengeninklusions-Semantik. Im letzteren Fall gibt die Belegung von Einrichtungstyp den speziellsten Typ an. Dann Disjunktheit der Untermengen erforderlich. n Im Vergleich zur zweiten Lösung ist der entstehende Relationstyp allerdings stark aufgebläht. Lagereinrichtung LagerortLagerhilfsmittelLagereinheit

92 92 Operationen Mit der Konstruktion des relationalen Schemas ist gesichert, dass sich alle Objektzustände in der dauerhaften, relationalen Datenbasis wiederfinden. Damit sind die Voraussetzungen geschaffen, dass Änderungen am Objektzustand eindeutig in Änderungen in der Datenbank abgebildet werden können. Objektändernde (und ebenso -lesende) Operatoren sind so zu implementieren, dass sie entsprechende Operationen auf der relationalen Datenbasis ausführen, z.B. unter Verwenden von JDBC.

93 93 Beispiel: Java 2 Enterprise Edition Dienstnehmer -Behälter Transaktionsdienst Ressourcen- Verwalter Kommunikation (HTTP, IIOP, RMI, JDBC) Persistenzdienst JAFJNDIJDBCJTA J2SE JMS WWW-Behälter JAFJNDIJDBCJTA J2SE JMS Java Servlets Java Server Pages EJB-Behälter JAFJNDIJDBCJTA J2SE JMS Enterprise Java Bean Fremd- Behälter Applet- Behälter J2SE Ressourcen Datenlogik Geschäftsprozess Anwendungs-Dienstgeber Präsentation WWW-Dienstgeber Anwender Dienstnehmer Konnektor RMI-IIOP HTTP RMI-IIOP JDBC NamensdienstSicherheitsdienstNachrichtendienst JDBC objektorientiert (Java) relational

94 94 Objektsichten ADBADB' o p vv DBDB' Gegeben: Relationales Schema Gesucht: Objektsicht auf relationale DB (oo-Schema und v informationserhaltend) Vorgehensweise: Definition eines objektorientierten Schemas mit passenden Objekttypen zum Zugriff für die Anwendung. Festlegen der Anfragen, wie die Daten extrahiert und zu Objekten zusammengebaut werden. Festlegen eines Objektidentifikators, der sich aus Attributwerten ergibt (meist Schlüsselattribut). Grundsätze für die Operationen wie zuvor.

95 95 Manuelle Konstruktion Lagermanagement: relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); … Lagermanagement: relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); … create view AV of ArtikelArt with oid(ANr) as select ANr, AName, Menge from ArtikelArt create view AV of ArtikelArt with oid(ANr) as select ANr, AName, Menge from ArtikelArt class ArtikelArt { string AName; float Menge; } class ArtikelArt { string AName; float Menge; } Objekttyp angeben Objektidentität festlegen Attributwerte füllen Erscheinungsbild als Klasse angeben Konstruktion der Ausprägung (Sicht)

96 96 Kanonische Konstruktion (1) Gegeben: n Relationales Schema RS von n Relationstypen: RS = {T R i }, 1 i n. n Für jedes T R i sei K R i ein zugehöriger Schlüssel. Schritt 1: Objekt-Relationstypen: T R i RS ist Objekt-Relationstyp, wenn gilt: n K R i enthält höchstens einen Fremdschlüssel oder n K R i ist insgesamt Fremdschlüssel. K Ri Schritt 2: Beziehungs-Relationstypen: n Alle anderen Relationstypen bilden Beziehungs- Relationstypen.

97 97 Kanonische Konstruktion (2) Schritt 3: Gewinnung von Objekttypen: Jeder Objekt-Relationstyp wird in einen Objekttyp überführt. Jeder Beziehungs-Relationstyp wird in einen Objekttyp überführt. Ausnahme: Es existieren keine Nichtschlüsselattribute und der Schlüssel wird aus zwei Fremdschlüsseln K 1 und K 2 gebildet. Dann kann man dem Objekttyp mit K 1 ein mengenwertiges Attribut mit referenzieller Konsistenz auf den Objekttyp mit K 2 zuschlagen und umgekehrt. Schritt 4: Gewinnung von Objektidentitäten: Besitze ein Objekt unter der Attributfolge K R, die dem Schlüssel des zugrundeliegenden Objekt- oder Beziehungs- Relationstyps T R entspricht, den Wert k. Dann oid := T R.k.

98 98 Schritt 5: Referenzielle Konsistenzen: n Fremdschlüssel in Objekttypen werden durch relationship/inverse gekennzeichnet. Kanonische Konstruktion (3)

99 99 Abbildung: n Schritt 1: Alle Relationen außer Verträglichkeit sind Objekt-Relationen. n Schritt 2: Verträglichkeit ist Beziehungs-Relation. n Schritt 3: Konstruiere Objekttypen zu den Objekt-Relationen. n Schritt 4: Konstruiere Objektidentifikatoren. n Schritt 5: Konstruiere referenzielle Konsistenzen. Lagermanagement: relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); relation LagereinheitArt(LeaNr, LeaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerhilfsmittel(LhNr, LhaNr, Gewicht, LoNr); relation LagerhilfsmittelArt(LhaNr, LhaName, Länge, Breite, Höhe, MaxGewicht); relation Lagerort(LoNr, LoaNr, Gewicht); relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht); relation Verträglichkeit(ANr, LoNr); Beispiel (1)

100 100 Beispiel (2) class ArtikelArt (key ANr) { ANr: String; relationship...inverse...; AName: String; Menge: Integer; Lieferant: String; Gewicht: Float; VertrLoNr: set relationship...inverse...}; class Lagereinheit (key LeNr) { LeNr: String; relationship...inverse...; LeaNr: LagereinheitArt; relationship...inverse...; ANr: ArtikelArt; relationship...inverse...; Stückzahl: Integer; Gewicht: Float; LhNr: Lagerhilfsmittel relationship...inverse...}; class LagereinheitArt (key LeaNr) {... }; class Lagerhilfsmittel (key LhNr) {... }; class LagerhilfsmittelArt (key LhaNr) {... }; class Lagerort (key LoNr) { LoNr: String; relationship...inverse...; LoaNr: LagerortArt; Gewicht: Float }; VertrANr: set relationship...inverse...}; class LagerortArt (key LoaNr) { LoaNr: String; relationship...inverse...; Länge: Integer; Breite: Integer; Höhe: Integer; MaxGewicht: Float };

101 101 Kapitel 9.5: XML-Sichten auf relationale Daten

102 102 Dauerhafte XML-Dokumente Aufgaben: Verwaltung von XML-Dokumenten Unterstützung von Navigation und Suche innerhalb der Dokumente Einzelzugriff auf XML-Elemente im gespeicherten Dokument Ändern bzw. Aktualisieren von Dokumenteninhalten Änderbarkeit einzelner XML-Elemente Alternativen: Natives XML-Datenbanksystem Implementierung auf Datenmodell zugeschnitten Performanzprobleme erst bei großer Anzahl von Dokumenten XML-Datenbanken befinden sich noch in der Entwicklung Nutzung konventioneller Datenbanksysteme Schnell erreichbare Lösung Fehlanpassung der Datenmodelle mit Performanzverlust

103 103 Basis Textdokument (1) Interpretation eines XML-Dokumentes … …als fortlaufenden Text und speichern dieses Textes in einem Attribut einer Relation. Foundations of Databases Serge Abiteboul 1997 Addison Wesley … Foundations of Databases Serge Abiteboul 1997 Addison Wesley … XML Bibliography BibIDPaperList DBLP Fo undations of Databases Serg e Ab iteboul 1997 Addison Wesley … DBLP.xml

104 104 Basis Textdokument (2) Vorteile des Verfahrens: Speichern und Auslesen von beliebigen XML-Dokumenten wird unterstützt. Datenbasis kommt ohne Datenbankschema aus Kein Schema für XML-Dokumente benötigt! Nachteile: Navigation und Suche im gespeicherten XML-Dokument nur möglich, wenn Datenbanksystem spezielle Unterstützung für das Verarbeiten langer Texte bietet. Dokumentstruktur wird nicht berücksichtigt. Lesender oder schreibender Zugriff auf Werte einzelner XML- Elemente nur bedingt möglich. Reine Dokumentenverwaltung

105 105 Basis Dokumentgraph (1) Einbezug der Strukturinformationen, die ein XML-Dokument enthält, in die Speicherung. Interpretation eines XML-Dokuments … …als gerichteter Graph... XML-Elemente und XML-Attribute ergeben die Knoten des Graphen Kanten modellieren die Enthaltensbeziehung Kanten werden mit den Bezeichnern der enthalten Elemente bzw. Attribute gekennzeichnet …und Speichern der Knoten und Kanten in einer Relation.

106 106 Basis Dokumentgraph (2) Foundations of Databases Serge Abiteboul 1997 Addison Wesley … Foundations of Databases Serge Abiteboul 1997 Addison Wesley … XML bib paper o12 id Foundations… title 4 4 author Serge firstname Abiteboul 1997 year Addison… publisher lastname

107 bib paper o12 id Foundations… title 4 4 author Serge firstname Abiteboul 1997 year publisher lastname Addison… Kanten Basis Dokumentgraph (3) Name BeginnZiel/WertIstText bib paper id title author firstname lastname year publisher nein ja nein ja 2 3 o12 Foundations… 4 Serge Abiteboul 1997 Addison… Reihenf Bei Bedarf zusätzliches Attribut, um XML-Attribut und XML-Element unterscheiden zu können

108 108 Basis Dokumentgraph (4) Vorteile Speichern und Auslesen beliebiger XML-Dokumente Einfaches Datenbankschema Generisch, hat daher nichts mit der spezifischen Struktur des XML-Dokuments zu tun Daher für XML-Dokument kein Schema erforderlich Zugriff auf einzelne XML-Elemente möglich Reihenfolge der XML-Elemente rekonstruierbar Nachteile Navigation und Suche innerhalb eines gespeicherten XML- Dokumentes benötigen viele Joins Verlust von Semantik, z.B. Gruppierung von zusammengehörenden Elementen nur operational wieder herstellbar.

109 109 Basis Relationen (1) Aufgaben: Überführen der Struktur des XML-Dokuments in Relationen Unmittelbarer Zusammenhang der beiden Strukturen und Zwang zu relationalem Datenbankschema erfordert auch Datenbankschema für die XML-Dokumente ADBADB' o p vv DBDB' Gegeben: XML-Schema Gesucht: Relationales Schema und v informationserhaltend

110 110 Basis Relationen (2) Für ein XML-Dokument kann ein Schema etwa in Form einer DTD oder eines XML-Schemas existieren. Fehlt es, kann durch heuristische Verfahren eine DTD erzeugt werden. DTD Foundations of Databases Serge Abiteboul 1997 Addison Wesley … Foundations of Databases Serge Abiteboul 1997 Addison Wesley … XML

111 111 Basis Relationen (3) Ausgehend von der DTD wird ein passendes relationales Schema erzeugt, das die Dokumente aufnehmen kann. Es müssen alle erlaubten Dokumente, die der DTD gehorchen, gespeichert werden können: z.B. muss auch für optionale Unterelemente etc. Speicherplatz vorhanden sein. Annahme: Nur Blatt-XML-Elemente enthalten Freitext.

112 112 Direkte Abbildung 1.Idee: XML-Element Relationstyp Für jedes in der DTD definierte XML-Element wird ein Relationstyp mit künstlichem Schlüsselattribut angelegt. Jedes dazugehörige XML-Attribut wird zu einem Attribut dieses Relationstypen. Element-Unterelement-Beziehungen werden mit Hilfe von Fremdschlüsseln modelliert. Jedes Vorkommen eines XML-Elements im Dokument ergibt dann ein Tupel in seiner zugehörigen Relation. Der Ansatz generiert eine Vielzahl von Relationstypen und bewirkt somit eine hohe Fragmentierung der Daten.

113 113 Abbildung mit Gruppierung (1) 2. Idee: XML-Elemente gruppieren Relationstyp Ein in der DTD definiertes XML-Element und seine direkten oder indirekten Unterelemente mit Textinhalt, die jeweils maximal einmal innerhalb des Elements vorkommen, bilden einen Relationstypen mit Attributen. Darf ein Unterelement mehrfach vorkommen, wird für dieses ein neuer Relationstyp angelegt und über einen Fremdschlüssel mit der Relation des umgebenden XML- Elements verknüpft. Entsprechend bei atomaren und mengenwertigen XML- Attributen. Bewirkt Gruppierung von zusammengehörigen Elementen in einem Relationstyp und somit ein kompakteres relationales Schema.

114 114 Abbildung mit Gruppierung 2. Idee: XML-Elemente gruppieren Relationstyp 1. Reduktion der Komplexität einer DTD z.B. vereinfachen 2. Aus der DTD wird ein DTD-Graph generiert, der die 1:1- bzw. 1:n-Beziehungen zwischen XML-Elementen modelliert. 3. Generierung der Relationstypen durch Unterteilung der Graphstruktur.

115 115 Komplexität einer DTD Schritt 1: Reduktion der Komplexität einer DTD Geschachtelte Elementdefinitionen entschachteln z.B. (a|b) a?,b? Folge von Kardinalitäten zusammenfassen z.B. a*? a* Unterelemente gruppieren z.B...., a*,..., a*,......, a*,... Alle + Kardinalitäten werden zu * Die obigen Transformationen bewahren... 1:1- bzw. 1:n-Elementbeziehungen und Optionale Unterelemente Aber: Informationen über Reihenfolge und genau erlaubte Anzahl der Unterelemente kann verloren gehen

116 116 Komplexität einer DTD Im Beispiel wird author+ zu author* Neue DTD beschreibt also eine Obermenge von XML-Dokumenten DTD DTD

117 117 Strukturinformation Schritt 2: Strukturinformationen extrahieren Die neue DTD dient nun als Grundlage für einen gerichteten DTD-Graphen, der die Struktur dieser DTD repräsentiert: Für jedes XML-Element ergibt sich genau ein Knoten im Graph. Für jedes Vorkommen eines XML-Attributs bei einem Element wird ein Knoten angelegt, der mit dem entsprechenden Element-Knoten verbunden ist. Knoten für Element und erlaubte Unterelemente werden durch Kanten verbunden. Ist als Kardinalität bei einem Unterelement * oder ? angegeben oder liegt ein mengenwertiges bzw. optionales XML- Attribut vor, wird die entsprechende Kante mit dem Symbol der Kardinalität markiert. Rekursionen können durch Zyklen im Graph erkannt werden.

118 118 Strukturinformation id bib paper author year publisher age firstname lastname * * * * title DTD-Graph ? ?

119 119 Relationstypen erzeugen Schritt 3: Erzeugen der Relationstypen anhand des DTD-Graph Relationstypen erzeugen für… jeden Knoten mit keiner oder mehr als einer Eingangskante, jeden Knoten unterhalb einer *-Kante und mindestens einen Knoten innerhalb einer Rekursion … und mit Attributen ergänzen: Jedem Relationstypen werden diejenigen Blattknoten als Attribute zugeschlagen, die direkt vom entsprechenden Knoten aus erreichbar sind. Eine dazwischenliegende ?-Kante erlaubt NULL-Werte beim Attribut. Jeder Relationstyp erhält künstlichen Schlüssel, der ein dort gespeichertes XML-Element eindeutig identifiziert. Beziehungen werden über Fremdschlüssel modelliert.

120 120 Relationstypen erzeugen bib paper id author year publisher age firstname lastname * * * * title relation Bib (bibID) relation Author (authorID, paperID, age, firstname, lastname ) ? ? relation Paper (paperID, bibID, id, title, year, publisher)

121 121 Abbildung mit Gruppierung Bewertung Speichert alle XML-Dokumente, die einer DTD folgen. Bewirkt durch die Gruppierung von zusammengehörigen Elementen in einem Relationstyp ein kompakteres relationales Schema. Suche und Navigation innerhalb des Dokuments benötigen wenige Join-Operationen. Ein direkter Zugriff auf die Elemente ist möglich. Anmerkung: Im Gegensatz zu den ersten beiden Ansätzen kann die Struktur der XML-Dokumente nicht mehr direkt aus den Relationen entnommen werden. Das Wissen hierüber steckt in der Abbildungsvorschrift.

122 122 Datenaustausch auf Basis von XML ADBADB' o p vv DBDB' Gegeben: Relationales Schema Gesucht: XML-Sicht auf relationale DB und v informationserhaltend Export und Import von Daten aus bestehender relationaler Datenbasis Selbstbeschreibendes Datenformat bei der Übertragung Keine Preisgabe interner Datenstrukturen

123 123 Export von Daten als XML Vorgehensweise: Zugriff auf das gespeicherte Dokument erfolgt über eine XML-Anfragesprache (etwa XPath oder XQuery). Die Abbildung setzt die Anfrage in SQL um und liest die entsprechenden Daten aus der Datenbasis. Anschließend wird aus den gelesenen Werten das resultierende XML-Dokument zusammengebaut und als Ergebnis der Benutzeranfrage zurückgegeben.

124 124 Anfrageformulierung (1) Zwischensprache RXL (Relational to XML Transformation Language) from ArtikelArt $a where $a.ANr = A-001 construct $a.ANr $a.AName $a.Menge from ArtikelArt $a where $a.ANr = A-001 construct $a.ANr $a.AName $a.Menge From- und where-Klausel wie in SQL Variable $a ist Iterator über ArtikelArt-Tupel construct-Klausel legt Struktur des resultierenden XML-Dokuments fest Anfrage A-001 Anlasser 1 Ergebnis XML

125 125 Anfrageformulierung (1) Zwischensprache RXL (Relational to XML Transformation Language) from ArtikelArt $a where $a.ANr = A-001 construct $a.ANr $a.AName $a.Menge from ArtikelArt $a where $a.ANr = A-001 construct $a.ANr $a.AName $a.Menge Anfrage A-001 Anlasser 1 Ergebnis XML … Bosch Mahle … … Anlasser Kolben Kolbenringe Kurbelwelle Nockenwelle … A-001 A-002 A-003 A-004 A-005 … Lieferant Menge AName ANr ArtikelArt Gewicht

126 126 Anfrageformulierung (2) construct { } construct { } from Lagereinheit $le construct $le.LeNr $le.Stückzahl from ArtikelArt $a construct $a.ANr $a.AName Geschachtelte Anfragen möglich Unabhängige Konstruktion von Elementteilen A-001 Anlasser LE LE … A-001 Anlasser LE LE … XML Gruppierung über IDs

127 127 Objektsichten XML Für den Export von Daten als XML-Dokument genügt meist schon ein automatisches Verfahren: Relationen Objektsicht XML Die Objekttypen geben hierbei die Struktur des resultierenden XML-Dokuments an. Lagermanagement: relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); … Lagermanagement: relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht); relation Lagereinheit(LeNr, LeaNr, ANr, Stückzahl, Gewicht, LhNr); … class ArtikelArt { string ANr; string AName; float Menge; string Lieferant; float Gewicht; } class ArtikelArt { string ANr; string AName; float Menge; string Lieferant; float Gewicht; } class Lagereinheit { string LeNr; LagereinheitArt LeaNr; ArtikelArt ANr; long Stückzahl; float Gewicht; Lagerhilfsmittel LhNr; } class Lagereinheit { string LeNr; LagereinheitArt LeaNr; ArtikelArt ANr; long Stückzahl; float Gewicht; Lagerhilfsmittel LhNr; } Sichtenabbildung

128 128 Auslesen als XML über Objektsichten class ArtikelArt { string ANr; string AName; float Menge; string Lieferant; float Gewicht; } class ArtikelArt { string ANr; string AName; float Menge; string Lieferant; float Gewicht; } class Lagereinheit { string LeNr; LagereinheitArt LeaNr; ArtikelArt ANr; long Stückzahl; float Gewicht; Lagerhilfsmittel LhNr; } class Lagereinheit { string LeNr; LagereinheitArt LeaNr; ArtikelArt ANr; long Stückzahl; float Gewicht; Lagerhilfsmittel LhNr; } … Anlasser 2 Bosch 2,00 2 4,00 … … … Anlasser 2 Bosch 2,00 2 4,00 … … XML Objekttypen werden zu komplexen Elementen Über Navigation erreichbare Objekte einbetten Objektattribute werden zu Unterelementen Beispiel: Auslesen aller Lagereinheiten


Herunterladen ppt "1 Teil I Datenmodelle Kapitel 9: Transformationen."

Ähnliche Präsentationen


Google-Anzeigen