510 likes | 617 Views
Reflexive Datenbanken. Dr. Klaus Peters. Geboren 1962, 1988 Mathematik-Studium, Humboldt-Universität 1990 Promotion 1990-1994 Lehre und Forschung in Berlin, Bonn, Wuppertal
E N D
Reflexive Datenbanken Dr. Klaus Peters
Geboren 1962, • 1988 Mathematik-Studium, Humboldt-Universität • 1990 Promotion • 1990-1994 Lehre und Forschung in Berlin, Bonn, Wuppertal • 1994-1995 Institut für Biochemie der HU; Design, Implementierung und Test diskreter geometrischer Algorithmen zur Untersuchung der räumlichen Struktur von Proteinen Biographie (1/3)
1996-1998 Chefredakteur des Lexikons der Mathematik; Konzeption zur Erstellung des Lexikons, Auswahl der Stichwörter; Koordination der Themen, Autoren und Zuarbeiten • 1998-2009 DResearch GmbH; Beratung, Management und Software–Entwicklung; verantwortlicher Entwickler des Teilprojektes Installation und Update der @vantage Plattform und @vantage Komponenten auf SUN Clustersystemen und verteilten Systemen; Softwareverwaltungs- und Softwareausliefungssysteme Biographie (2/3)
Seit 2009 DResearch GmbH; Entwicklung von Webapplikationen im eGovernment-Bereich; Installation, Konfiguration, Dokumentation, Entwicklung von automatischen Testumgebungen, Anwender-Schulungen für eGovernment-Projekte, Weiterentwicklung einer Bezahlplatform für sächsische Behörden und Gemeinden Seit 2009: Vorlesung zu Mathematik 1, 2 und 3 an der HTW für den Bachelor-Studiengang Computer Engineering Homepage: http://home.htw-berlin.de/~peterskl E-Mail: peterskl@htw-berlin.de Biographie (3/3)
Modellierung und Beschreibung von Beziehungen zwischen Entitäten gleichen Typs Modellierung und Beschreibung von rückbezüglichen Beziehungen Motivation r Entität s
Wo treten solche Reflexionen in der Praxis auf? Welche Arten von Reflexionen gibt es? Welche Probleme gibt es bei reflexiven Beziehungen? Wie werden sie in einem DBMS abgebildet? Wie werden Abfragen programmiert, die mit dem vorhandenen SQL nicht abgebildet werden können? Fragestellungen
Wer ist der Vorgesetzte eines Mitarbeiters? • Welcher Bearbeiter vertritt wen? • Welches ist die nächste Haltestelle eines Busses? • Welche Vorlesungen sind für eine Vorlesungen Voraussetzung? • Wie können solche Beziehungen modelliert werden? Beispiele
Definition: Ein (gerichteter) Graph ist ein Paar (E,K) (E – Ecken/Knoten), K- Kanten/Verbindungen), wobei K eine Menge Paaren von Ecken ist: KEE. Für eine Ecke heißen diejenigen Kanten, die diese Ecke als erstes Element haben, ausgehende Kanten, die anderen heißen eingehende Kanten. Graphen
A B D C E Beispiel für Graphen
Definition: Ein Baum ist ein zusammenhängender Graph ohne Kreise, beim dem genau eine Ecke (die Wurzel) nur ausgehende Kanten hat und alle anderen Ecken genau eine eingehende haben. Bäume
A E F C D B G H Beispiel für Bäume
Definition: Eine Liste ist ein Baum, beim dem jeder Knoten nur maximal eine ausgehende Kante hat. Jeder Knoten hat maximal einem Vorgänger und maximal einen Nachfolger. Listen
C A B D Beispiel für Listen
Die Beziehung „Vorgesetzter“ • Die Ausgangsdaten (Tabelle „Mitarbeiter“):
5. Andreas Schröder 2. Clara Meier 1. Peter Müller 3. Thomas Lehmann 6. Beate Heinrich 4. Hans Schulze Die Beziehung „Vorgesetzter“ als Baum
… als Datenbanktabelle Die zusätzliche Spalte „Vorgesetzter“ stellt einen Schlüssel auf die Tabelle selbst dar: mc:c-Beziehung
Die Beziehung „Vertreter Für“ • Die Ausgangsdaten (Tabelle „Bearbeiter“):
2. Clara Meier 5. Andreas Schröder 3. Thomas Lehmann 6. Beate Heinrich 4. Hans Schulze 1. Peter Müller Die Beziehung „Vertreter Für“ als Graph
Die zusätzliche Spalte „VertreterFuer“ realisiert die c:c Beziehung als Schlüssel auf sich selbst. …als Datenbanktabelle
DIE BEZIEHUNG „NÄCHSTE HALTESTELLE“ • Die Ausgangsdaten (Tabelle „Stationen“):
2. Badstraße 3. Schlossstraße 4. Seeallee 1. Nordbahnhof DIE BEZIEHUNG „NÄCHSTE HALTESTELLE“ als Liste
Die zusätzliche Spalte „naechsteStation“ realisiert als Schlüssel auf sich selbst die c:c-Beziehung. Als Datenbanktabelle
Die Beziehung „benötigte Vorlesung“ • Die Ausgangsdaten (Tabelle „Vorlesungen“):
4. Differential-rechnung 1. Zahlen 2. Folgen 3. Reihen Die Beziehung „benötigte Vorlesung“als Graph
Die Abhängigkeit zwischen den Vorlesungen wird als mc:mc-Beziehung durch eine zusätzliche Tabelle mit zwei Schlüsseln auf die Vorlesungstabelle realisiert. Beziehung „Vorlesung“
Eine reflexive Datenbank ist eine Datenbank, bei der wenigstens eine Tabelle (reflexive Tabelle) eine Beziehung auf sich selber hat. Definition
Relation zwischen gleichartigen Entitäten Abfragen werden schnell zu Ketten von Abfragen Zyklen sind möglich Modellierender Graph kann unzusammenhängend sein Ketten von Abfragen könnten schwierig zu beantworten sein Problem der reflexiven Datenbanken
Wer ist der Chef einer Abteilung? Welche Mitarbeiter muss ich maximal vertreten? Wird eine bestimmte Haltstelle vor einer anderen angefahren? Welche Vorlesungen sind insgesamt Voraussetzungen für eine bestimmte Vorlesung? Abfragen
Kartesisches Produkt WITH-Klausel IN-Klausel START WITH … CONNECT BY-Klausel Nützliche SQL-Statements
…als Graph 11 1 12 2 3 7 4 5 6 8 9 10 • Abfrage: Wer ist der oberste Chef in der Abteilung vom Mitarbeiter Engel?
SELECT ma1.name, ma2.name chef FROM Ma ma1, Ma ma2 WHERE ma1.vorgesetzter = ma2.id; NAME Chef ----------------- Albrecht Kurz BeierAlbrecht Conrad Lorenz DietzBeier Engel Beier Fischer Beier Gericke Conrad Holz Conrad Ingold Engel Junge Engel LorenzKurz Kartesisches Produkt
WITH n AS(SELECT ma1.name, ma2.name chef FROM Ma ma1, Ma ma2 WHERE ma1.vorgesetzter=ma2.id) SELECT name, chef FROM n ORDER BY chef; NAME CHEF -------- -------- Beier Albrecht Fischer Beier Dietz Beier Engel Beier Holz Conrad Gierke Conrad Ingold Engel Lorenz Kurz Albrecht Kurz Conrad Lorenz WITH-Klausel
Mit der IN-Klausel können wir nur eine endliche Tiefe des Baumes erfassen. IN-Klausel • SELECT name,id,vorgesetzter FROM Ma WHERE idIN • (SELECT vorgesetzter FROM Ma WHERE id='5'); • NAME ID VORGESETZTER • ----- -- ------------ • Beier 2 1 • SELECT name,id,vorgesetzter FROM Ma WHERE idIN • (SELECT vorgesetzter FROM Ma WHERE idIN • (SELECT vorgesetzter FROM Ma WHERE id='5')); • NAME ID VORGESETZTER • -------- -- ------------ • Albrecht 1 11
SQL> select lpad(' ',level+1)||name name, id from ma start with id='5' connect by prior vorgesetzter=id; NAME ID ------------ -- Engel 5 Beier 2 Albrecht 1 Kurz 11 START WITH …CONNECT by-Klausel (1/2)
SELECT level, name, sys_connect_by_path(name,'/') name_path FROM ma WHERE id = '5' CONNECT BY NOCYCLE PRIOR id=vorgesetzter order by level; LEVEL NAME NAME_PATH ----- ----- -------------------------- 1 Engel /Engel 2 Engel /Beier/Engel 3 Engel /Albrecht/Beier/Engel 4 Engel /Kurz/Albrecht/Beier/Engel START WITH …CONNECT by-Klausel (2/2) • Nicht jedes DBMS unterstützt solche Befehle.
Abfragen über Programmiersprachen realisieren (Java, C#, VBA, PLSQL) Rekursivität wird benötigt. Abbruchkriterien einfügen Programme
public Knoten getWurzelInAbt(Mitarbeiter m, longid) { Knoten k = m.getKnoten(id); Abteilung a = k.getAbteilung(); if(k.getVorgesetzter() == null || b.getKnoten(k.getVorgesetzer).getAbteilung() != a) { return k; } else { returngetWurzelInAbt(m, m.getKnoten(k.getVorgesetzter).getId(); } } Wer ist der Chef einer Abteilung?
public Knoten[] getAlleVertretene(Bearbeiter b, longid) { Knoten k0 = b.getKnoten(id); k=k0; Knoten[] vertretene = null; while (k.getVertreterFuer()!=null && k.getVertreterFuer() != k0) { k=k.getVertreterFuer(); vetretene.add(k); } returnvetretene; } Welche Mitarbeiter muss ich maximal vertreten?
public Boolean isNachfolgendeHS(Stationen s, long id1, long id2) { Knoten k1 = s.getKnoten(id1); Knoten k2 = s.getKnoten(id2); Knoten k = k1; while (k.getNaechsteHS()!= null && k.getNaechsteHS()!= k2) { k=k.getNaechsteHS(); }; return (k == k2) } Wird eine bestimmte Haltstelle nach einer anderen angefahren?
public Knoten[] getAlleBenoetigteV(Vorlesungen v, longid) { Knoten[] alleBenoetigteV = null; Knoten[] benoetigteV = v.getBenoetigtFuer(id); if ( benoetigteV !=null ) { alleBenoetigteV.addListUnique(benoetigteV); for (i=0; i<benoetigteV.size(); i++) { alleBenoetigteV.addListUnique( getAlleBenoetigteV(v, benoetigteV[i].getId))); } returnalleBenoetigteV; Welche Vorlesungen sind insgesamt Voraussetzungen für eine bestimmte Vorlesung?
Kann man in den Beispielen auf die Reflexivität verzichten? Was sind die Vorteile? Was sind die Nachteile? Wie würde man ein komplexes Liniennetz mit mehreren Stationen und mehreren Buslinien realisieren? Fragen
reflexive relations can be modelled by graphs (trees or lists or nets) reflexive relations lead to chains of request chains of request are mapped to find paths from one node of the graph to another node modelling graph may contain cycles or may be not connected SummaRy 1/2
reflexive relations can be represented in the database via additional key columns (one-to-many or one-to-one many-to many relations) SQL statements support reflexive relations for chains of requests recursivity and abort conditions are necessary For more complicate request we have to use program interfaces Summary 2/2