Dr. Klaus Peters
Geboren 1962, 1988 Mathematik-Studium, Humboldt-Universität 1990 Promotion Lehre und Forschung in Berlin, Bonn, Wuppertal Institut für Biochemie der HU; Design, Implementierung und Test diskreter geometrischer Algorithmen zur Untersuchung der räumlichen Struktur von Proteinen
Chefredakteur des Lexikons der Mathematik; Konzeption zur Erstellung des Lexikons, Auswahl der Stichwörter; Koordination der Themen, Autoren und Zuarbeiten DResearch GmbH; Beratung, Management und Software–Entwicklung; verantwortlicher Entwickler des Teilprojektes Installation und Update Plattform Komponenten auf SUN Clustersystemen und verteilten Systemen; Softwareverwaltungs- und Softwareausliefungssysteme
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:
MotivationModellierungBeispieleAbfragenDiskussionSummary
Modellierung und Beschreibung von Beziehungen zwischen Entitäten gleichen Typs Modellierung und Beschreibung von rückbezüglichen Beziehungen Entität s r
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?
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?
MotivationModellierungBeispieleAbfragenDiskussionSummary
Definition: Ein (gerichteter) Graph ist ein Paar (E,K) (E – Ecken/Knoten), K- Kanten/Verbindungen), wobei K eine Menge Paaren von Ecken ist: K E E. Für eine Ecke heißen diejenigen Kanten, die diese Ecke als erstes Element haben, ausgehende Kanten, die anderen heißen eingehende Kanten.
A A B B D D C C E E
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.
A A E E C C F F D D B B G G H H
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.
A A C C D D B B
MotivationModellierungBeispieleAbfragenDiskussionSummary
PersonalNrNachnameVorname 1MüllerPeter 2MeierClara 3LehmannThomas 4SchulzeHans 5SchröderAndreas 6HeinrichBeate Die Ausgangsdaten (Tabelle Mitarbeiter):
5. Andreas Schröder 3. Thomas Lehmann 1. Peter Müller 6. Beate Heinrich 2. Clara Meier 4. Hans Schulze
Die zusätzliche Spalte Vorgesetzter stellt einen Schlüssel auf die Tabelle selbst dar: mc:c-Beziehung PersonalNrNachnameVornameVorgesetzter 1MüllerPeter5 2MeierClara5 3LehmannThomas4 4SchulzeHans1 5SchröderAndreas 6HeinrichBeate2
PersonalNrNachnameAbteilung 1MüllerNordeuropa 2MeierNordeuropa 3LehmannSüdosteuropa 4SchulzeSüdosteuropa 5SchröderMitteleuropa 6HeinrichSüdosteuropa Die Ausgangsdaten (Tabelle Bearbeiter):
5. Andreas Schröder 3. Thomas Lehmann 1. Peter Müller 6. Beate Heinrich 2. Clara Meier 4. Hans Schulze
PersonalNrNachnameAbteilungVertreterFuer 1MüllerNordeuropa2 2MeierNordeuropa1 3LehmannSüdosteuropa4 4SchulzeSüdosteuropa6 5SchröderMitteleuropa 6HeinrichSüdosteuropa3 Die zusätzliche Spalte VertreterFuer realisiert die c:c Beziehung als Schlüssel auf sich selbst.
DIE BEZIEHUNG NÄCHSTE HALTESTELLE StationsNrStation 1Nordbahnhof 2Badstraße 3Schlossstraße 4Seeallee Die Ausgangsdaten (Tabelle Stationen):
3. Schlossstraße 4. Seeallee 2. Badstraße 1. Nordbahnhof
StationsNrStationnaechsteStation 1Nordbahnhof4 2Badstraße1 3Schloßstraße 4Seeallee3 Die zusätzliche Spalte naechsteStation realisiert als Schlüssel auf sich selbst die c:c-Beziehung.
Die Ausgangsdaten (Tabelle Vorlesungen): VNrVorlesung 1Zahlen 2Folgen 3Reihen 4Differentialrechnung
1. Zahlen 4. Differential- rechnung 2. Folgen 3. Reihen
IdVorlesungnoetigFuer Die Abhängigkeit zwischen den Vorlesungen wird als mc:mc-Beziehung durch eine zusätzliche Tabelle mit zwei Schlüsseln auf die Vorlesungstabelle realisiert. VNrVorlesung 1Zahlen 2Folgen 3Reihen 4Differentialrechnung
Eine reflexive Datenbank ist eine Datenbank, bei der wenigstens eine Tabelle (reflexive Tabelle) eine Beziehung auf sich selber hat.
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
MotivationModellierungBeispieleAbfragenDiskussionSummary
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?
Kartesisches Produkt WITH-Klausel IN-Klausel START WITH … CONNECT BY-Klausel
CREATE TABLE Ma( id NUMBER(10), name VARCHAR2(20), abteilung VARCHAR2(20), vorgesetzter NUMBER(10), PRIMARY KEY (Id), FOREIGN KEY (vorgesetzter) REFERENCES MA);
IDNameAbteilungVorgesetzter 1Albrechta111 2Beiera11 3Conrada112 4Dietza12 5Engela12 6Fischera12 7Gerickea13 8Holza13 9Ingolda15 10Jungea15 11Kurza20 12Lorenza111
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 Beier Albrecht Conrad Lorenz Dietz Beier Engel Beier Fischer Beier Gericke Conrad Holz Conrad Ingold Engel Junge Engel Lorenz Kurz
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
SELECT name,id,vorgesetzter FROM Ma WHERE id IN (SELECT vorgesetzter FROM Ma WHERE id='5'); NAME ID VORGESETZTER Beier 2 1 SELECT name,id,vorgesetzter FROM Ma WHERE id IN (SELECT vorgesetzter FROM Ma WHERE id IN (SELECT vorgesetzter FROM Ma WHERE id='5')); NAME ID VORGESETZTER Albrecht 1 11 Mit der IN-Klausel können wir nur eine endliche Tiefe des Baumes erfassen.
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
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 Engel /Engel 2 Engel /Beier/Engel 3 Engel /Albrecht/Beier/Engel 4 Engel /Kurz/Albrecht/Beier/Engel Nicht jedes DBMS unterstützt solche Befehle.
Abfragen über Programmiersprachen realisieren (Java, C#, VBA, PLSQL) Rekursivität wird benötigt. Abbruchkriterien einfügen
public Knoten getWurzelInAbt(Mitarbeiter m, long id) { Knoten k = m.getKnoten(id); Abteilung a = k.getAbteilung(); if(k.getVorgesetzter() == null || b.getKnoten(k.getVorgesetzer).getAbteilung() != a) { return k; } else { return getWurzelInAbt(m, m.getKnoten(k.getVorgesetzter).getId(); }
public Knoten[] getAlleVertretene(Bearbeiter b, long id) { Knoten k0 = b.getKnoten(id); k=k0; Knoten[] vertretene = null; while (k.getVertreterFuer()!=null && k.getVertreterFuer() != k0) { k=k.getVertreterFuer(); vetretene.add(k); } return vetretene; }
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) }
public Knoten[] getAlleBenoetigteV(Vorlesungen v, long id) { 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))); } return alleBenoetigteV;
MotivationModellierungBeispieleAbfragenDiskussionSummary
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?
MotivationModellierungBeispieleAbfragenDiskussionSummary
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
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
Wo treten solche Reflexionen in der Praxis auf? Bei der Abbildung von Graphen, Bäumen, Listen Welche Arten von Reflexionen gibt es? Es gibt mc:nc-, c:nc- und c:c-Beziehungen Was ist das Problem mit diesen Reflexionen? Rekursion nötig Zyklen erkennen Graph könnte nicht zusammenhängend sein
Wie werden sie in DBMS abgebildet? Durch Schlüssel auf die eigene Tabelle Durch intermediäre Tabellen mit zwei Schlüsseln auf die Tabelle Wie werden Abfragen programmiert, die mit dem vorhandenen SQL nicht abgebildet werden können? Programme müssen rekursiv arbeiten Abbruchkriterien wichtig