Datenintegration Datenintegration Kapitel 5: Anfrageverarbeitung Michael Hartung in Vertretung von Dr. Andreas Thor Wintersemester 2010/11 Universität Leipzig Institut für Informatik http://dbs.uni-leipzig.de 1 Inhalt • Multidatenbanksprachen am Beispiel von SchemaSQL – Grundlegende Syntax inklusive Zugriff auf Metadaten – Horizontale Aggregation und dynamische Umstrukturierung • Global-as-View (GaV) und Local-as-View (LaV) – GaV: Modellierung und Anfragebearbeitung – LaV: Modellierung – Vergleich • LaV-Anfragebearbeitung – Query Containment – Answering Queries using Views – Quellen mit beschränkten Anfragemöglichkeiten 2 Enge vs. lose Kopplung • Lose Kopplung – Kein festes Schema • Nutzer müssen Semantik der Quellen kennen • Integrierte Sichten helfen – Multidatenbanksprachen • Enge Kopplung – Globales / integriertes / föderiertes Schema • Nutzer stellen Anfrage bzgl. globalem Schema • Nutzer müssen Schema / Semantik der Quellen nicht kennen – Globas-As-View (GaV) – Local-As-View (LaV) 3 User Wdh: Multidatenbanken [VAh] Verteilung • Verteilt, autonom, und „etwas“ heterogen – Keine technische Heterogenität – Keine Datenmodellheterogenität – Schemata können strukturell und semantisch heterogen sein – Verteilte Systeme benutzen gleiche Techniken (RDBMS) – Autonomie bleibt bewahrt, aber Zugriff muss möglich sein (Kommunikationsautonomie) Autonomie Heterogenität • Kein globales Schema → Zugriff über Multidatenbanksprachen • Ziel: Globaler Zugriff auf meherere (lokale) Datenbanken • Verwendung – Beantwortung von Anfragen – Erstellung integrierter Sichten 4 Multidatenbanken: Beispiel • Zwei Universitätsdatenbanken • Ziel: Integrierte Sicht mittels “SQL-Definition” univ-A salInfo category Prof AssocProf Technican Prof AssocProf Technican dept CS CS CS Math Math Math univ-B salInfo category Prof AssocProf Technican CS 55.000 50.000 43.000 salFloor 65.000 50.000 45.000 60.000 55.000 45.000 univ-All salInfo univ univ-A univ-A univ-A univ-A univ-A univ-A univ-B univ-B univ-B univ-B univ-B univ-B Multi-DB Anfrage Math 65.000 55.000 44.000 5 category Prof AssocProf Technican Prof AssocProf Technican Prof AssocProf Technican Prof AssocProf Technican dept CS CS CS Math Math Math CS CS CS Math Math Math salFloor 65.000 50.000 45.000 60.000 55.000 45.000 55.000 50.000 43.000 65.000 55.000 44.000 Multidatenbanksprachen • Anforderungen – – – – – Schemaunabhängigkeit, d.h. Struktur darf nicht Ausdrucksfähigkeit beeinflussen Umstrukturierung, d.h. Anfrageergebnisse müssen neue Struktur erhalten können Verständlichkeit bei hoher Ausdrucksfähigkeit Abwärtskompatibilität mit SQL Implementierbar • Möglichst ohne Veränderung des DBMS – Alle Anfragen müssen in SQL / Programme übersetzbar sein – Effiziente Ausführung • Beispiele – – – – SchemaSQL [Lakshmanan et. al: SchemaSQL – A Language for Interoperability in Relational Multi-database Systems. VLDB'96] FRAQL [Sattler et. al.: Adding Conflict Resolution Features to a Query Language for Database Federations. EFIS’00] MSQL [Grant et. al.: Query Languages for Relational Multidatabases. VLDB Journal ’93] Kommerzielle Implementierungen (z.B. IBM Data Joiner / Information Integrator) 6 Strukturelle Heterogenität • Heterogenität erfordert Ausdrucksmächtigkeit in MultiDB-Sprache Männer( Id, Vorname, Nachname) Frauen( Id, Vorname, Nachname) Person( Id, Vorname, Nachname, männlich?, weiblich?) Person( Id, Vorname, Nachname, Geschlecht) • Vergleich von Modellelementen – Relation vs. Attribut – Attribut vs. Wert – Relation vs. Wert SchemaSQL • Zugriff auf Namen – Relationen – Attribute – Werte • Behandlung unterschiedlicher Verteilung von Attributen – Z.B. Normalisiert vs. Denormalisiert – Fehlende/neue Attribute – Geschachtelt vs. Fremdschlüssel SQL 7 Schema SQL • Erweiterung von SQL • Zugriff auf Tabellen in verschiedenen Schemata • Daten und Metadaten werden gleich behandelt • Umstrukturierungen innerhalb der Anfrage – Daten zu Metadaten und umgekehrt • Dynamische Sicht-Definition – Ergebnisrelation hängt vom Zustand der Datenbank ab • Horizontale Aggregation – Über mehrere Spalten hinweg • Überbrückung struktureller Heterogenität 8 SchemaSQL: Syntax • Grundlegende Syntax wie SQL – SELECT … FROM … WHERE • Deklaration in FROM Klausel durch <range> <var> • Variablen laufen über fünf verschiedene Wertbereichstypen – – – – – -> db-> db::rel-> db::rel db::rel.attr Alle Datenbanknamen der Multidatenbank Alle Relationennamen einer Datenbank db Alle Attributnamen einer Relation rel in db Alle Tupel einer Relation rel in db Alle Werte eines Attributs attr in rel in db • Weiterer Unterschied: Geschachtelte Deklarationen – Spätere Deklarationen referenzieren frühere – In SQL sinnlos 9 Beispiel: Universitätsdatenbanken univ-A salInfo category Prof AssocProf Technican Prof AssocProf Technican univ-B salInfo category Prof AssocProf Technican dept CS CS CS Math Math Math salFloor 65.000 50.000 45.000 60.000 55.000 45.000 CS 55.000 50.000 43.000 Math 65.000 55.000 44.000 • Multidatenbank aus mehreren Universitätsdatenbanken univ-C CS category Prof AssocProf Technican salFloor 60.000 55.000 42.000 • Informationen über Angestellte Math category Prof AssocProf Technican salFloor 70.000 60.000 46.000 • Informationen verteilt auf univ-D salInfo dept Prof AssocProf Technician CS 75.000 60.000 40.000 Math 60.000 45.000 38.000 – univ-A, …, univ-D – Kategorie (category) – Gehalt (salInfo, salFloor) – Abteilung (dept) – Attributwerte – Attributnamen – Relationsnamen 10 Anfragebeispiel 1 univ-A salInfo category Prof AssocProf Technican Prof AssocProf Technican dept CS CS CS Math Math Math univ-B salInfo category Prof AssocProf Technican CS 55.000 50.000 43.000 salFloor 65.000 50.000 45.000 60.000 55.000 45.000 – Alle Abteilungen in univ-A, die Technikern mehr zahlen als gleiche Abteilungen in univ-B – Lösungsweg: • Join zwischen beiden Tabellen (über welches Attribut?) • Selektionen jeweils auf `Technican` • Vergleich der Gehälter – SchemaSQL-Anfrage Math 65.000 55.000 44.000 11 Anfragebeispiel 2 univ-C CS category Prof AssocProf Technican salFloor 60.000 55.000 42.000 Math category Prof AssocProf Technican salFloor 70.000 60.000 46.000 – Alle Abteilungen in univ-C, die Technikern mehr zahlen als gleiche Abteilungen in univ-D – Lösungsweg: • Join zwischen beiden Tabellen (über welches Attribut?) • Selektionen jeweils auf `Technician` • Vergleich der Gehälter – SchemaSQL-Anfrage univ-D salInfo dept Prof AssocProf Technician CS 75.000 60.000 40.000 Math 60.000 45.000 38.000 Tabellenname als Ausgabe SELECT RelC FROM univ-C-> RelC, Geschachtelte univ-C::RelC C, Variablen univ-D::salInfo D WHERE RelC = D.dept AND C.category = `Technician` AND C.salFloor > D.Technician Iteration über Tupel beider Tabellen in univ-C 13 Join zwischen Relationennamen und Attributwert Anfragebeispiel 2: Ausführung (1) univ-C CS category Prof AssocProf Technican Math category Prof AssocProf Technican salFloor 60.000 55.000 42.000 SELECT RelC FROM univ-C-> RelC, univ-C::RelC C, univ-D::salInfo D WHERE RelC = D.dept AND C.category = `Technician` AND C.salFloor > D.Technician RelC D salFloor 70.000 60.000 46.000 C univ-D salInfo dept Prof AssocProf Technician CS 75.000 60.000 40.000 Math 60.000 45.000 38.000 14 Anfragebeispiel 2: Ausführung (2) Kartesisches Produkt RelC C category salFloor CS Prof 60.000 CS Prof 60.000 CS AssoP 55.000 CS AssoP 55.000 CS Techn 42.000 CS Techn 42.000 MATH Prof 70.000 MATH Prof 70.000 MATH AssoP 60.000 MATH AssoP 60.000 MATH Techn 46.000 MATH Techn 46.000 SELECT FROM WHERE AND AND D dept CS MATH CS MATH CS MATH CS MATH CS MATH CS MATH Prof 75.000 60.000 75.000 60.000 75.000 60.000 75.000 60.000 75.000 60.000 75.000 60.000 AssoP 60.000 45.000 60.000 45.000 60.000 45.000 60.000 45.000 60.000 45.000 60.000 45.000 Techn 40.000 38.000 40.000 38.000 40.000 38.000 40.000 38.000 40.000 38.000 40.000 38.000 RelC univ-C-> RelC, univ-C::RelC C, univ-D::salInfo D RelC = D.dept C.category = `Technician` C.salFloor > D.Technician 16 Aggregation in SQL • Aggregationsfunktionen – AVG, COUNT, SUM, MIN, MAX, (STDDEV, VARIANCE, …) • Gruppierung und Aggregation sind vertikal – Aggregation: Werte einer Spalte werden zusammengefasst • Beispiel: Anzahl aller Departments univ-A salInfo category Prof AssocProf Technican Prof AssocProf Technican dept CS CS CS Math Math Math – Gruppierung: Teilmengen von Werten einer Spalte werden zusammengefasst • Beispiel: Durchschnittliches Gehalt pro Category 18 salFloor 65,000 50,000 45,000 60,000 55,000 45,000 SchemaSQL: Horizontale Aggregation • Ziel: Aggregation über Werte mehrerer Spalten – die evtl. in verschiedenen Tabellen liegen • Beispiel 1: Durchschnittliches Gehalt in univ-B pro Kategorie für alle Abteilungen Wird Liste SELECT FROM T.category, AVG(T.D) univ-B::salInfo-> D, univ-B::salInfo T WHERE D <> `category` GROUP BY T.category von Werten Iteration über alle Attribute Iteration über alle Werte • Beispiel 2: Durchschnittliches Gehalt in univ-C pro Kategorie für alle Abteilungen 20 univ-B salInfo category Prof AssocProf Technican CS 55.000 50.000 43.000 Math 65.000 55.000 44.000 univ-C CS category Prof AssocProf Technican salFloor 60.000 55.000 42.000 Math category Prof AssocProf Technican salFloor 70.000 60.000 46.000 SchemaSQL: Blockweise Aggregation • Ziel: Aggregation über einen Block – “Horizontal + Vertikal” • Beispiel 3: Durchschnittliches Gehalt aller Angestellten pro Fakultät univ-D salInfo dept Prof AssocProf Technician CS 75.000 60.000 40.000 Math 60.000 45.000 38.000 faculty dname fname CS MatNat 1 SELECT FROM F.fname, AVG(T.C) univ-D::salInfo-> C, univ-D::salInfo T, Math MatNat 1 Phys MatNat 2 univ-D::faculty F WHERE C <> “dept“ AND T.dept = F.dname Aggregation über eine (Kategorie-) GROUP BY F.fname Liste von (Department-) Listen 22 SchemaSQL: Umstrukturierung • Erstellung integrierter Sichten hilfreich • Anforderungen – Definition eines Output-Schemas (evtl. dynamisch) – Umstrukturierung der Daten • Beispiel: Repräsentation der Daten von univ-B im Schema von univ-A und umgekehrt CREATE VIEW BtoA AS SELECT T.category category, D dept, T.D salFloor FROM univ-B::salInfo-> D, univ-B::salInfo T WHERE D <> `category` CREATE VIEW AtoB::salInfo(category, D) AS SELECT A.category, A.salFloor FROM univ-A::salInfo A, univ-A::A.dept D 23 univ-A salInfo category Prof AssocProf Technican Prof AssocProf Technican dept CS CS CS Math Math Math univ-B salInfo category Prof AssocProf Technican CS 55.000 50.000 43.000 salFloor 65.000 50.000 45.000 60.000 55.000 45.000 Math 65.000 55.000 44.000 Dynamische Schemadefinition: Liste von Werten einer Variable (D) wird zu Spalten d1, d2, …, dn expandiert SchemaSQL: Implementation • Ziele – – – – – Non-intrusive Ausnutzung vorhandener RDBMS Übersetzung von Schema-SQL in Sequenz von (verteilten) SQL Befehlen Optimierung Metadatenverwaltung • Vorgehen (grob) – Phase 1: Variablen instanziieren • Zugriff auf Metadaten durch entsprechende Systemtabellen, welche das Schema (Metadaten) einer Datenbank generisch mit Datensätzen (Instanzdaten) repräsentiert → vergleiche Erstellung eines generischen globalen Schemas – Phase 2: SchemaSQL-Anfrage in (mehrere) SQL-Anfragen umschreiben und auf den instanziierten Variablen ausführen • Senden von “normalen” SQL-Anfragen an die beteiligten DBMS 24 Enge vs. lose Kopplung (Wdh.) • Lose Kopplung – Kein festes Schema • Nutzer müssen Semantik der Quellen kennen • Integrierte Sichten helfen – Multidatenbanksprachen • Enge Kopplung – Globales / integriertes / föderiertes Schema • Nutzer stellen Anfrage bzgl. globalem Schema • Nutzer müssen Schema / Semantik der Quellen nicht kennen – Globas-As-View (GaV) – Local-As-View (LaV) 25 User Problem Peer 1 Anwendung ... Anwendung Peer 3 Wie drückt man die WrapperFunktionalität aus? Peer 4 Peer 2 Mediator Wrapper ... Wrapper Externes Schema ... Externes Schema Komp- ... schema Lokales ... Schema Exportschema Kompschema Lokales Schema Quelle Anwendung ... Anwendung Föderiertes Schema Exportschema ... ... Quelle Wie sieht so ein Mapping aus? Wie drückt man diesen Übergang aus? Wie spezifiziert man Datentransformation? 26 Data Warehouse ETL ... ETL Quelle ... Quelle Problem und Teilprobleme • Gegeben: Zwei heterogene Schemata – Quellschema: Hier sind die Daten – Zielschema: Hiergegen wird die Anfrage gestellt • Teilproblem 1: Beziehungen zwischen Schemata finden – Spezifikation semantisch äquivalenter Zeile in Quell- und Zielschema – Korrespondenzen zwischen Schemaelementen (Mappings) • Teilproblem 2: Anfrage übersetzen – Gegeben Anfrage an Zielschema – Finde semantisch äquivalente Sequenz von Anfragen an Quellschemata – Entfällt bei materialisierten Ansätzen (z.B. Data Warehouse) • Teilproblem 3: Daten von der Quelle zum Ziel transformieren – – – – Gegebene Ergebnisse der Teilanfragen (oder ganzer Datenbestand) Transformation in das Zielschema Anpassung der Werte an Konventionen des Zielschemas Offline (ETL, DWH) oder Online (Föderation) 27 Anfragebearbeitung Benutzeranfrage und Korrespondenzen • Schritt 1: Anfrageplanung – Welche Quellen können / sollen / müssen benutzt werden? – Welche Teile der Anfrage sollen an welche Quelle geschickt werden? • Schritt 2: Anfrageübersetzung Anfrageplan (-pläne) – Übersetzung aus der Sprache der Föderation in die Sprache der Quellen • Schritt 3: Anfrageoptimierung übersetzter Anfrageplan – Finde geeignete Reihenfolge der Ausführung der Teilanfragen – Wer führt was aus (Pushen)? – Wer kann was ausführen (Kompensation)? → Beschränke Anfragemöglichkeiten • Schritt 4: Anfrageausführung Ausführungsplan – Monitoring, Puffern, Cachen – Dynamische Reoptimierung Menge von Ergebnistupeln (pro Ausführungsplan) • Schritt 5: Ergebnisintegration – Duplikaterkennung und Konfliktauflösung 28 Ergebnis der Anfrage Global-as-View vs. Local-as-View • Modellierung strukturell heterogener Quellen in Bezug auf ein globales Schema als Views (Sichten) – Eine Sicht verknüpft mehrere Relationen und produziert eine Relation • Sichten zur Verknüpfung von Schemata – Sicht definiert auf Relationen eines Schemas und produziert eine Relation des anderen Schemas • Global as View – Relationen des globalen Schemas werden als Sichten auf die lokalen Schemas der Quellen ausgedrückt • Local as View – Relationen der Schemas der Quellen werden als Sichten auf das globale Schema ausgedrückt 29 GaV und LaV: Beispiel Lokale Schemata: S1: IMDB(Titel, Regie, Jahr, Genre) S2: MyMovies(Titel, Regie, Genre) S3a: RegieDB(Titel, Regie) S3b: GenreDB(Titel, Jahr, Genre) Globales Schema Film(Titel, Regie, Jahr, Genre) Global as View Local as View CREATE VIEW Film AS Typisches SELECT * FROM IMDB GaV-Merkmal UNION SELECT Titel, Regie, NULL AS Jahr, Genre FROM MyMovies Fehlendes Attribut UNION SELECT RegieDB.Titel, RegieDB.Regie, GenreDB.Jahr, GenreDB.Genre FROM RegieDB, GenreDB WHERE RegieDB.Titel = GenreDB.Titel CREATE VIEW S1 AS SELECT * FROM Film Join über mehrere Quellen CREATE VIEW S2 AS SELECT Film.Titel, Film.Regie, Film.Genre FROM Film 30 GaV: Globale Nebenbedingung Globales Schema NeuerFilm (Titel, Regie, Jahr, Genre) Nebenbedingung: Jahr > 2000 Lokale Schemata: S1: IMDB (Titel, Regie, Jahr, Genre) S2: MyMovies (Titel, Regie, Jahr, Genre) Lokale Schemata: S1: AlleFilmeNett (Titel, Regie, Jahr, Genre) S2: AlleFilmeBöse (Titel, Regie,Genre) CREATE VIEW NeuerFilm AS SELECT * FROM IMDB WHERE Jahr > 2000 UNION SELECT * AS Jahr, Genre FROM MyMovies WHERE Jahr > 2000 CREATE VIEW NeuerFilm AS SELECT * FROM AlleFilmeNett WHERE Jahr > 2000 Globale Nebenbedingung kann modelliert werden UNION SELECT Titel, Regie, NULL AS Jahr, Genre FROM MyMovies WHERE ____ > 2000 32 S2 kann nicht mit globaler Nebenbedingung modelliert werden GaV: Lokale Nebenbedingung CREATE VIEW Film AS Globales Schema Film (Titel, Regie, Jahr, Genre) S1: AlleFilmeNett(Titel, Regie, Jahr, Genre) S2: AlleFilmeBöse(Titel, Regie, Genre) S3: NeueFilmeNett(Titel, Regie, Jahr, Genre) (Nebenbedingung: Jahr > 2000) S4: NeueFilmeBöse(Titel, Regie, Genre) (Nebenbedingung: Jahr > 2000) S5: AktuelleFilme(Titel, Regie, Genre) (Nebenbedingung: Jahr = 2008) SELECT * FROM AlleFilmeNett UNION SELECT Titel, Regie, NULL, Genre FROM AlleFilmeBöse UNION SELECT * FROM NeueFilmeNett WHERE Jahr > 2000 UNION • Eigenschaften – Jede Quelle kann modelliert werden – Jede Sicht exportiert Daten der Quelle – Lokale Nebenbedingung kann nicht immer modelliert werden (S4) 33 SELECT Titel, Regie, NULL, Genre FROM NeueFilmeBöse UNION SELECT Titel, Regie, 2004, Genre FROM AktuelleFilme GaV: Beitrag zum Anfrageergebnis (Beispiel) CREATE VIEW Film AS SELECT * FROM AlleFilmeNett UNION SELECT Titel, Regie, NULL, Genre FROM AlleFilmeBöse UNION SELECT * FROM NeueFilmeNett WHERE Jahr > 2000 UNION SELECT Titel, Regie, NULL, Genre FROM NeueFilmeBöse UNION SELECT Titel, Regie, 2008, Genre FROM AktuelleFilme SELECT * FROM Film WHERE Jahr > 2001 34 Jahr = 2001 Jahr < 1950 GaV: Modellierung • Fehlende Attribute in Quellenschemata durch NULL-Werte ersetzt – Darstellung im Endergebnis hängt von Datenfusionsmethode ab • Nebenbedingungen im globalen Schema können Integration behindern – wenn die Bedingung nicht geprüft werden kann (siehe fehlendes Attribut) • Nebenbedingungen in lokalen Schemata können modelliert werden, wenn – sie auf exportierten Attributen gelten – sie auf globalen Attributen gelten und die Form “Attribut = Konstante” haben • Quellen tragen evtl. nicht zum Anfrageergebnis bei, wenn Nebenbedingung nicht modelliert wurde 36 GaV: Anfrageverarbeitung • Gegeben: – Anfrage an globales Schema, d.h. auf Relationen des globalen Schemas – Für jede globale Relation genau eine Sicht auf lokale Quellen • Gesucht: – Alle Tupel, die die Anfragebedingungen erfüllen – Aber: Daten sind in lokalen Quellen gespeichert • Idee: Ersetze jede Relation der Anfrage durch ihre Sicht (Sichtentfaltung, View Expansion, Query Unfolding) → Geschachtelte Anfrage SELECT * FROM Film Globales Schema Film(Titel, Regie, Jahr, Genre) Lokale Schemata: S1: IMDB(Titel, Regie, Jahr, Genre) S3a: RegieDB(Titel, Regie) S3b: GenreDB(Titel, Jahr, Genre) GaV Film SELECT * FROM ( SELECT * FROM IMDB UNION SELECT RegieDB.Titel, RegieDB.Regie, GenreDB.Jahr, GenreDB.Genre FROM RegieDB, GenreDB 37 WHERE RegieDB.Titel = GenreDB.Titel ) AS Film GaV: Anfrageverarbeitung (Beispiel) Globales Schema Film(Titel, Regie, Jahr, Genre) Programm (Kino, Titel, Zeit) Lokale Schemata: S1: IMDB(Titel, Regie, Jahr, Genre) S3a: RegieDB(Titel, Regie) S3b: GenreDB(Titel, Jahr, Genre) S7: KinoDB (Kino, Titel, Zeit) Anfrage an globales Schema „Alle Filme mit Regie und Zeit, die nach 20 Uhr laufen“ SELECT FROM WHERE AND F.Titel, F.Regie, P.Zeit Film AS F, Programm AS P F.Titel = P.Titel P.Zeit > 20 Uhr SELECT F.Titel, F.Regie, P.Zeit GaV Film FROM ( SELECT * FROM IMDB UNION SELECT RegieDB.Titel, RegieDB.Regie, GenreDB.Jahr, GenreDB.Genre FROM RegieDB, GenreDB WHERE RegieDB.Titel = GenreDB.Titel ) AS F, ( SELECT * FROM KinoDB ) AS P GaV Programm WHERE F.Titel = P.Titel AND P.Zeit > 20 Uhr View Expansion 38 GaV: Anfrageverarbeitung (Ausführung) • Konzeptionell – “Sichten einsetzen” → beliebig tiefe Schachtelungen – Ausführung der Anfragen von innen nach außen und Speicherung in temporären Relationen • Tatsächlich: Optimierungspotential durch Umschreiben der Anfrage • Entschachtelung – Schachtelung wird i.d.R. bei entfernten Quellen belassen – Schachtelung wird i.d.R. bei materialisierten Sicht aufgelöst • Bildung von Teilanfragen in WHERE-Bedingungung – Beispiel (skalare Teilanfrage): Relation MovieDB wird nur benutzt, um einen Wert (Id) zu ermitteln; Anfrageergebnis erhält nur Daten aus Relation RegieDB SELECT FROM WHERE AND Regie RegieDB, MovieDB Titel = ‚Star Wars‘ RegieDB.movieID = MovieDB.ID 39 SELECT Regie FROM RegieDB WHERE movieID = ( SELECT ID FROM MovieDB WHERE Titel = ‚Star Wars‘) GaV und LaV: Beispiel Lokale Schemata: S1: IMDB(Titel, Regie, Jahr, Genre) S2: MyMovies(Titel, Regie, Genre) S3a: RegieDB(Titel, Regie) S3b: GenreDB(Titel, Jahr, Genre) Globales Schema Film(Titel, Regie, Jahr, Genre) Global as View Local as View CREATE VIEW Film AS SELECT * FROM IMDB UNION SELECT Titel, Regie, NULL AS Jahr, Genre FROM MyMovies UNION SELECT RegieDB.Titel, RegieDB.Regie, GenreDB.Jahr, GenreDB.Genre FROM RegieDB, GenreDB WHERE RegieDB.Titel = GenreDB.Titel CREATE VIEW S1 AS SELECT * FROM Film Je ein View pro lokale Relation CREATE VIEW S2 AS SELECT Film.Titel, Film.Regie, Film.Genre FROM Film CREATE VIEW S3a AS SELECT Film.Titel, Film.Regie FROM Film 40 CREATE VIEW S3b AS SELECT Film.Titel, Film.Jahr, Film.Genre FROM Film Warum LaV? • Beispiel: Es gibt in der Welt eine Menge von Filmen, Schauspielern, … • Das globale Schema modelliert diese Welt • Theoretisch steht damit die Extension (d.h. alle Datensätze) fest – Aber niemand kennt sie – Informationsintegration versucht sie herzustellen • Quellen speichern Sichten auf die globale Extension – Also Ausschnitte der realen Welt Globales Schema Schauspieler Film • Nur die können wir verwenden Quelle 2 Quelle 1 41 Quelle 3 LaV: Globale Nebenbedingung Globales Schema NeuerFilm (Titel, Regie, Jahr, Genre) Nebenbedingung: Jahr > 2000 Lokale Schemata: S1: IMDB (Titel, Regie, Jahr, Genre) S2: MyMovies (Titel, Regie, Jahr, Genre) Lokale Schemata: S1: AlleFilmeNett (Titel, Regie, Jahr, Genre) S2: AlleFilmeBöse (Titel, Regie,Genre) CREATE VIEW S1 AS SELECT * FROM NeuerFilm WHERE Jahr> 2000 CREATE VIEW AlleFilmeNett AS SELECT * FROM NeuerFilm WHERE Jahr > 2000 CREATE VIEW S2 AS SELECT * FROM NeuerFilm WHERE Jahr> 2000 Globale Nebenbedingung kann modelliert werden CREATE VIEW AlleFilmeBöse AS SELECT Titel, Regie, Genre FROM NeuerFilm WHERE _____ > 2000 42 S2 kann nicht mit globaler Nebenbedingung modelliert werden LaV: Lokale Nebenbedingung CREATE VIEW S1 AS SELECT * FROM Film Globales Schema Film (Titel, Regie, Jahr, Genre) S1: AlleFilmeNett(Titel, Regie, Jahr, Genre) S2: AlleFilmeBöse(Titel, Regie, Genre) S3: NeueFilmeNett(Titel, Regie, Jahr, Genre) (Nebenbedingung: Jahr > 2000) S4: NeueFilmeBöse(Titel, Regie, Genre) (Nebenbedingung: Jahr > 2000) S5: AktuelleFilme(Titel, Regie, Genre) (Nebenbedingung: Jahr = 2008) • Eigenschaften – Jede Quelle kann modelliert werden – Lokale Nebenbedingung können modelliert werden, dienen jedoch “nur” der Optimierung 43 CREATE VIEW S2 AS SELECT Titel, Regie, Genre FROM Film CREATE VIEW S3 AS SELECT * FROM Film (WHERE Jahr > 2000) CREATE VIEW S4 AS SELECT Titel, Regie, Genre FROM Film (WHERE Jahr > 2000) CREATE VIEW S5 AS SELECT Titel, Regie, Genre FROM Film (WHERE Jahr = 2008) Vergleich: GaV vs. LaV Global-as-View Local-as-View globale Relation lokale Relation Anzahl der Sichten Typischer Aufbau der Sichtdefinition Nebenbedingungen global: lokal: global: lokal: Anfrageumschreibung • Answering Queries using Views • UNION vieler umgeschriebene Anfragen • sehr schwieriges Problem • View Unfolding • 1 große umgeschriebene Anfrage • schwierige Optimierung Flexibilität Hinzufügen neuer Quellen Geeignet für 44 Global-Local-as-View (GLAV) • Kombination GaV und LaV, auch Both-as-View (BaV) G1 = VG1 • GaV: – Globale Relation = Sicht auf lokale Relationen – (Globale Relation ⊇ Sicht auf lokale Relationen) L1 L2 • LaV: G1 – Sicht auf globale Relationen = lokale Relation – Sicht auf globale Relationen ⊇ lokale Relation VL1 = L1 • GLaV: – Sicht auf globale Relationen = Sicht auf lokale Relationen – Sicht auf globale Relationen ⊇ Sicht auf lokale Relationen VG12 VL1 = G1 = VG11 L1 L 46 2 VL2 L2 = VL2 Vergleich: GaV, LaV und GLaV Nebenbedingungen GaV LaV GLaV Probleme bei lokalen NB Probleme bei globalen NB lokale und globale NB können modelliert werden Spezialisierung Konzept im globalen von Konzepten Schema spezieller als im lokalen Schema (ohne dass man eine Einschränkung im lokalen Schema angeben kann) → keine Integration Konzept im lokalen Konzepte können lokal oder Schema spezieller als im global eingeschränkt globalen Schema (ohne werden dass man eine Einschränkung im globalen Schema angeben kann) → keine Integration Techniken der Anfrageplanung Query Containment und Answering Queries using Views (gleich) View Unfolding 47 erst wie bei LaV, dann Unfolfing wie bei GaV LaV-Anfrageverarbeitung • Gegeben: – Anfrage an globales Schema, d.h. auf Relationen des globalen Schemas – Für jede lokale Relation genau eine Sicht auf globales Schema • Gesucht: – Alle Tupel, die die Anfragebedingungen erfüllen – Aber: Daten sind in lokalen Quellen gespeichert. • Idee: Answering Queries using Views – Anfrageumschreibung durch Einbeziehung der Sichten – Kombiniere geschickt die einzelnen Sichten zu einer Anfrage, so dass deren Ergebnis einen Teil der Anfrage (oder die ganze Anfrage) beantworten – Gesamtergebnis ist dann die UNION der Ergebnisse mehrerer Anfrageumschreibungen 48 LaV-Anfrageverarbeitung: Beispiel Globales Schema Kurs (Titel, Dozent, Semester Uni, Typ) Quelle 1: Datenbankkurse CREATE VIEW DB-Kurs AS SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs WHERE Titel LIKE “%Datenbank%” Quelle 2: Vorlesungen der Uni Leipzig CREATE VIEW LE-VL AS SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs WHERE Uni = “Leipzig” AND Typ = “VL” Anfrage 1: Alle Leipziger DB-Kurse SELECT * FROM Kurs WHERE Titel LIKE “%Datenbank%” AND Uni = “Leipzig” Umgeschriebene Anfrage 1 SELECT * FROM DB-Kurs WHERE Uni = “Leipzig” Anfrage 2: Alle Leipziger Kurse SELECT * FROM Kurs WHERE Uni = “Leipzig” Umgeschriebene Anfrage 2 SELECT * FROM DB-Kurs WHERE Uni = “Leipzig” UNION SELECT * FROM49LE-VL Warum nur Quelle 1 verwenden? Vollständige Antwort Warum hier auch Quelle 2 verwenden? Maximale Antwort Was fehlt hier? LaV-Anfrageverarbeitung: Visualisierung Nutzer-Anfrage Nutzer-Anfrage SELECT ??? FROM RelB WHERE ??? SELECT ??? FROM RelA, RelB WHERE ??? Globales Schema RelA RelB LaV RelC = RelA ⋈ RelB RelD = RelB RelC Lokales Schema RelD Lokales Schema Anfrageumschreibung Anfrageumschreibung Umgeschriebene Anfrage Umgeschriebene Anfrage SELECT FROM WHERE UNION SELECT FROM WHERE SELECT ??? FROM RelC WHERE ??? 50 ??? RelD ??? Attr(B) RelC ??? Ein Problem – viele Anwendungen • Anfrageoptimierung unter Verwendung materialisierter Sichten – Welche Sichten helfen bei der Beantwortung einer Datenbankanfrage durch Vorberechnung von Prädikaten? – Nicht immer besser eine materialisiert Sicht zu verwenden (Indizes, Aktualisierung) • Adaptive Erstellung materialisierter Sichten für ein Data Warehouse – Gegeben: Query workload = Menge von Anfragen mit Häufigkeiten – Welche Sichten materialisieren, um Query Workload optimal zu beantworten • Semantisches Caching – Welche Daten im Cache können zur Beantwortung einer Anfrage verwenden? – Welche Daten müssen neu angefragt werden? • Datenintegration: Beantwortung von Fragen an globales Schema ausschließlich unter Verwendung von Sichten auf lokale Quellen – Kann die Anfrage vollständig (extensional) beantwortet werden? – Unterschied zu Anfrageoptimierung: Keine Basistabellen verfügbar 51 Korrespondenzen • Anfragen werden bzgl. ihrer Extension (=Menge der Ergebnistupel) miteinander verglichen – – – – Überlappungsfrei: q1 ∩ q2 = ∅ Inklusion: q1 ⊇ q2 Äquivalenz: q1 ≡ q2 Überlappung: ¬ (q1 ∩ q2 =∅) ∧ ¬ (q1 ⊇ q2) ∧ ¬ (q2 ⊇ q1) • GaV und LaV-Modellierung durch Sichtendefinition mittels Anfragen – Beziehungen (Korrespondenzen) zwischen Anfragen q • Eine Korrespondenz q1 ⊇ q2 heißt – GaV (Global-as-View), wenn q1 (globales Schema) eine einzelne Relation ohne Selektionen oder Joins ist (Typ: Relation ⊇ Anfrage) – LaV (Local-as-View), wenn q2 (lokales Schema) eine einzelne Relation ohne Selektionen oder Joins ist (Typ: Anfrage ⊇ Relation) – Sonst heißt sie GLaV (Global-local-as-view) (Typ: Anfrage ⊇ Anfrage) 52 Query Containment • Gegeben: Anfrage Q und Sichten V1, ..., Vn • Gesucht: Umgeschriebene Anfrage Q‘, die – bei Optimierung unter Verwendung materialisierter Views: äquivalent ist (Q = Q‘). – bei Integration: maximal enthalten ist. • D.h. Q ⊇ Q‘ und es existiert kein Q‘‘ mit Q ⊇ Q‘‘⊇ Q‘ wobei Q‘‘≠ Q‘. • Problem: Wie definiert und testet man Äquivalenz bzw. maximal containment? 53 Query Containment (2) • Query containment (Anfrage-“Enthaltensein“) – Sei S ein Schema. Seien Q und Q‘ Anfragen gegen S. – Eine Instanz von S ist eine beliebige Datenbank D mit Schema S. – Das Ergebnis einer Anfrage Q gegen S auf einer Datenbank D, geschrieben Q(D), ist die Menge aller Tupel, die die Ausführung von Q in D ergibt. – Q‘ ist contained (enthalten) in Q, geschrieben Q‘ ⊆ Q, gdw. Q‘(D) ⊆ Q(D) für jedes mögliche D. • Query equivalence (Anfrageäquivalenz) – Q ist äquivalent mit Q‘, geschrieben Q = Q‘, gdw. Q(D) ⊆ Q‘(D) und Q‘(D) ⊆ Q(D) für jede mögliche Datenbank D. • Es zählt das Ergebnis einer Anfrage, nicht deren Syntax! 54 Query Containment: Beispiele SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs WHERE Titel LIKE “%Datenbank%” AND Uni = “LE” SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs WHERE Titel LIKE “%Datenbank%” SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs JOIN Person ON (Kurs.Dozent = Person.Name) WHERE Titel LIKE “%Datenbank%” SELECT Titel, Dozent, Semester Uni, Typ FROM Kurs WHERE Titel LIKE “%Datenbank%” SELECT Titel, Dozent FROM Kurs WHERE Titel LIKE “%Datenbank%” SELECT Titel, Uni, Typ FROM Kurs WHERE Titel LIKE “%Datenbank%” SELECT Titel, Dozent, Semester Uni FROM Kurs WHERE Typ IN (“VL”, “Praktikum”) SELECT Titel, Dozent, Semester Uni FROM Kurs WHERE Typ IN (“Praktikum”, “Seminar”) 55 Prüfung auf Query Containment • Prüfung von Containment durch Prüfung aller möglichen Datenbanken? – Definition: “... für jedes mögliche D“ → zu komplex! • Prüfung von Containment durch Existenz eines Containment Mapping. – NP-vollständig in |Q|+|Q‘| nach Chandra & Merlin. Optimal implementation of conjunctive queries in relational data bases. ACM Symposium on Theory of Computing, 1977. – Mehrere Algorithmen • Syntaktische Analyse (der Anfrage / View-Definition), um semantische Aussage (“Stets alle Tupel von Q in Q’ enthalten?”) zu treffen – Containment Mapping = Symbolmapping – CM von q2 nach q1 bdeutet, dass q1 ⊆ q2 durch – Idee (intuitiv): Nachweis, dass q1 • nicht mehr Tupel berechnet (mehr Joins, strengere Bedingungen) • nicht weniger Spalten berechnet (evtl. mehr durch andere Projektion) 57 Anfrageplanung mittels Query Containment • Basis: Algorithmus zum Containment zweier Queries • Anfrageplanung “light” – Globale Anfrage q, für deren Beantwortung die Verwendung einer LaVKorrespondenz ausreicht (ohne JOIN) – Menge von Korrespondenzen K (LaV-Korrespondenzen) – Deren globaler Anfrageteil ist eine Menge von Views V – Query-Containment-Test für jedes v ∈ V: Gilt v ⊆ q ? – Die v, für die das zutrifft, berechnen nur korrekte Tupel für q – Ihre Vereinigung ist das (bestmögliche) Ergebnis • Anfrageplanung “real-world” – Einbeziehung mehrerer Korrespondenzen – Answering Queries using Views: Antworten durch Kombination von Views – Welche Views sollen wie miteinander verknüpft werden? 58 Korrespondenzen: LaV-Beispiel • Beispiel: Filmdatenbank – globales und lokale Schema – LaV-Regeln in Datalog-Notation Globales Schema film (titel, typ, regisseur, laenge) schauspieler (schauspieler_name, nationalitaet) spielt (titel, schauspieler_name, rolle, kritik) Datenquelle spielfilme (titel, regisseur, laenge) kurzfilme (titel, regisseur) filmkritiken (titel, regisseur, schauspieler, kritik) us_spielfilme (titel, laenge, schauspieler_name) spielfilm_kritiken (titel, rolle, kritik) kurzfilm_rollen (titel, rolle, schauspieler_name, nationalitaet) Beschreibung Spielfilme mit mind. 80min Länge Kurzfilme; sind max. 10min lang Kritiken zu Hauptdarstellern von Filmen Spielfilme mit US-Schauspielern Kritiken zu Rollen in Spielfilmen Rollenbesetzungen in Kurzfilmen film (T,Y,R,L), L>79, Y=‘Spielfilm’ film (T,Y,R,L), L<11, Y=‘Kurzfilm’ film (T,_,R,_), spielt (T,S,O,K), O=‘Hauptrolle’ film (T,Y,_,L), spielt (T,S,_,_), schauspieler (S,N), N=‘US’, Y=‘Spielfilm’ film (T,Y,_,_), spielt (T,_,O,K), Y=‘Spielfilm’ film (T,Y,_,_), spielt (T,S,O,_), schauspieler (S,N), Y=‘Kurzfilm’ SELECT titel, regisseur, laenge FROM film WHERE laenge>79 AND typ = ‘Spielfilm’ ⊇ ⊇ ⊇ ⊇ ⊇ ⊇ spielfilme (T,R,L) kurzfilme (T,R) filmkritiken (T,R,S,K) us_spielfilme (T,L,S) spielfilm_kritiken (T,O,K) kurzfilm_rollen (T,O,S,N) SELECT f.titel, f.regisseur, s.schauspieler_name, s.kritik FROM film f JOIN spielt s ON (f.titel = s.titel) WHERE s.nationalitaet = ‘US’ 59 LaV: Anfragen • Alle Filme kürzer als 100 Minuten – spielfilme (filtern) und kurzfilme (direkt) und us_spielfilm (filtern) • Alle Filme, die länger als 60 Minuten sind – spielfilme (filtern), us_spielfilm (filtern) • Schauspieler von Hauptrollen in Filmen unter 100 Minuten – – – – SELECT titel, ‘Spielfilm’, regisseur, laenge FROM spielfilm WHERE laenge < 100 UNION SELECT titel, ‘Kurzfilm’, regisseur, NULL FROM kurzfilm UNION SELECT titel, ‘Spielfilm’, NULL, laenge FROM us_spielfilme WHERE laenge<100 spielfilme ⋈ filmkritiken ? Ok, da nur Hauptrollen kritisiert werden spielfilme ⋈ spielfilm_kritiken ? Ok, aber ohne Schauspielernamen spielfilme ⋈ us_spielfilm ? Ok, aber Rolle fehlt spielfilme ⋈ kurzfilm_rollen ? Nutzlos, da JOIN leere Menge ergibt film (T,Y,R,L), L>79, Y=‘Spielfilm’ film (T,Y,R,L), L<11, Y=‘Kurzfilm’ film (T,_,R,_), spielt (T,S,O,K), O=‘Hauptrolle’ film (T,Y,_,L), spielt (T,S,_,_), schauspieler (S,N), N=‘US’, Y=‘Spielfilm’ film (T,Y,_,_), spielt (T,_,O,K), Y=‘Spielfilm’ 60 film (T,Y,_,_), spielt (T,S,O,_), schauspieler (S,N), Y=‘Kurzfilm’ ⊇ ⊇ ⊇ ⊇ ⊇ ⊇ spielfilme (T,R,L) kurzfilme (T,R) filmkritiken (T,R,S,K) us_spielfilme (T,L,S) spielfilm_kritiken (T,O,K) kurzfilm_rollen (T,O,S,N) LaV: Anfrageumschreibung • Prinzipiell: Prüfe jede Kombination an Sichten auf Containment – Unendlich viele Kombinationen, da eine Sicht auch mehrfach in eine Umschreibung eingehen kann. • Verbesserung: Umschreibung mit maximal so vielen Sichten wie Relationen in Anfrage (ist ausreichend) – Beweis: Levy, Mendelzon, Sagiv, Srivastava: Answering Queries Using Views. PODS 1995 – Geschickte Vorauswahl der Sichten: Nutzbarkeit • Frage 1: Wann sind Sichten nutzbar? (informell) – – – – Mindestens eine Relation mit Anfrage gemeinsam Mindestens einige Attribute der Anfrage Prädikate sind schwächer oder gleich (äquivalente Umschreibung) Prädikate sind stärker (contained Umschreibung) • Frage 2: Wann sind Sichten nützlich? – Bei Optimierung mit MVs: Schnellere Ausführung – Bei Integration mit LaV: zusätzliche Tupel, zusätzliche Attribute 61 Beschränkte Quellen • Quellen, die nicht alle Anfragen an ihr Exportschema beantworten können – Webquellen hinter Formularen – Web Services, CORBA, RPC, … – Legacy Systeme • Quellen verlangen bestimmte Bedingungen – SELECT * FROM BOOK ... geht nicht – SELECT * FROM BOOK WHERE AUTHOR like … geht – SELECT * FROM BOOK WHERE TITLE like … geht • Variablen und Bindungen. Ein Attribut … – … heißt frei (f), wenn es in einer Anfrage nicht belegt sein muss (aber sein kann) – … heißt gebunden (b), wenn es in einer Anfrage belegt sein muss – … heißt unbindbar (n), wenn es in einer Anfrage nicht belegt sein darf • Belegung = Selektion der Art „V=c“ oder „V in [c1,…cn]“ – Verallgemeinerung auf andere Prädikate möglich (siehe Literatur) 62 Auswirkungen • Manche Anfragepläne sind nicht mehr ausführbar (SELECT * FROM BOOK) • Pläne sind nicht mehr in jeder Reihenfolge ausführbar order (OID,Title) • keine Einschränkung info (OID,Name,Age,Role) • Suche nach OID oder Name • Beispiel (rechts) – Alle Titel von Filmen, bei denen ein 90jähriger Schauspieler mitspielt – Anfrage: q(T) :- order(O,T), info(O,_,A,_), A=90 • Plan A: “erst info(O,_,A,_), A=90, dann order” – Gut wegen hoher Selektivität der Bedingung – Aber: nicht ausführbar • Plan B: “erst order, dann info, dann A=90” – Schlecht wegen sehr teurem SELECT * FROM ORDER, aber ausführbar – Dann Bindungen von OID “pushen” – Bedingung A=90 erst im Mediator auswerten 63 Binding Patterns • Binding Pattern (BP) = Die Menge der Einschränkungen pro Attribut einer Anfrage order (OID,Title) • Suche nur nach Title info (OID,Name,Age,Role) • Suche nach OID oder Name (nach genau einem) • Beispiel (rechts): order ( On , Tb) • Ist info ( Of , Nf, An, Rn ) korrekt? – Nein, hier auch Anfrage ohne Bindung und Anfrage nach OID und Name möglich • Darstellung durch zwei (i.A. mehrere) Binding Patterns 64 Anfrageplanung mit Binding Patterns • BP müssen während der Planung zunächst nicht beachtet werden – Anfrage q → korrekter Anfrageplan p • Für eine gegebene Ausführungsreihenfolge von p kann man nun testen, ob sie ausführbar ist – Kostenbasierte Optimierung wählt unter allen ausführbaren Reihenfolgen die beste • Beispiel (rechts) – order nur Titelsuche, info wie vorher • Algorithmus: Initialisierung order(On,Tb) info1(On,Nb,An,Rn) info2(Ob,Nn,An,Rn) – Vektor k mit einer Position für jedes Attribut in p – Initialwert: Bindet q eine Variable v, dann “b”, sonst “f” Anfrage: q(T,N) :- order(O,T), info(O,N,A,_), T=“Marnie” Vektor: k [O,T,N,A,R] = 66 Rajaraman, Sagiv und Ullman: Answering Queries using Templates with Binding Patterns. PODS 1995 Anfrageplanung mit Binding Patterns (2) • Analyse jedes Plans p = <q1,…qn> Plan A: order (On, Tb), info1 (On , Nb, An, Rn) n b b n n n • Jedes qi hat ein Binding Pattern bi Plan B: order (O , T ), info2 (O , N , A , R ) • FOR i=1 TO n DO kneu = kalt ◊ bi Init: k = fbfff Plan A1: order, info1 • fbfff ◊ nb___ = bbfff • bbfff ◊ n_bnn (b→n) Plan A2: info1, order • fbfff ◊ n_bnn (f→b) Plan B1: order, info2 • Berechnung der Verknüpfung ◊ – Sei x=kalt[j] und y= bi[j] – j referenziert in beiden Vektoren die gleiche Variable – IF x=„b“ und y=„n“ → Plan nicht ausführbar, da Bindung nicht weitergegeben werden kann – IF x=„f“ und y=„b“ → Plan nicht ausführbar, da notwendige Bindung nicht vorhanden ist Plan B2: info2 , order – kneu[j]=b, wenn Variable zu j in qi exportiert wird, sonst k‘[j]=k[j] 68 Post-Processing info3 (On , Nf, Af, Rf) Plan C1: order, info3 • fbfff ◊ nb___ = bbfff • bbfff ◊ n_fff (b→n) • Mediator kann nicht ausführbare Pläne durch Nachverarbeitung “simulieren” • Übergang: b → n – Bindung kann nicht an Quelle weitergegeben werden • Workaround: – Führe eine Anfrage ohne Bindung aus – Falls im Plan schon eine Bindung entstanden ist, teste diese im Mediator während eines Post-Processings • Auswirkung: „n“ kann wie „f“ behandelt werden – Es entstehen aber teure Pläne ohne Pushen von Selektionen info3 (On , Nf, Af, Rf) Plan C1: order, info3 • fbfff ◊ nb___ = bbfff • bbfff ◊ f_fff = bbfff • Suche mit Titel in order • Hole alle info-Tupel (teuer) • Join (über O) in Mediator 70 Erweiterungen / Weitere BP-Anwendungen • Anhänge (adornments = Verzierungen) – – – – – – f: free = Kann in Anfrage spezifiziert werden, muss aber nicht n: unspecifiable = Kann nicht spezifiziert werden b: bound = Muss spezifiziert werden c[s]: constant = Auswahl aus einer Menge s von Konstanten (free) o[s]: optional = Auswahl aus einer Menge s von Konstanten (bound) Behandlung • Im Prinzip: „c“ wie „b“ und „o“ wie „f“ • Weitere Einschränkungen über die Wertemengen bei „c“ und „s“ möglich • Berechnung von BP einer globalen Relation aus BP der Quellen – Wenn ein Mediator beschränkte Quellen integriert – welchen Beschränkungen unterliegt er dann selber? – Erstellung eines Anfrageformulars im Mediator aus denen der Quellen 71 Zusammenfassung • Multidatenbanksprachen – Lose Kopplung: Nutzer integriert durch Anfragen die mehrere Quellen involvieren – Verwendung u.a. zur Erstellung integrierter Sichten – SchemaSQL: Syntax, horizontale Aggregation und dynamische Umstrukturierung • Global-as-View (GaV) und Local-as-View (LaV) – Enge Kopplung: Anfragebearbeitung durch System auf Basis von Korrespondenzen – Automatische Erstellung von Korrespondenzen → Kap. 6 – Vergleich GaV- und LaV-Modellierung sowie GLaV • LaV-Anfragebearbeitung – Erstellung eines Anfrageplans • Query Containment, Answering Queries using Views – Erstellung eines Ausführungsplans • Binding Patterns für Quellen mit beschränkten Anfragemöglichkeiten – Integration der Ergebnisse → Kap. 7 72