Rückblick: Datenbankentwurf Entity-Relationship-Modell für konzeptuellen Entwurf Entitytypen (entity types) (z.b. Studenten) Beziehungstypen (relationships) (z.b. hören) Attribute beschreiben Gegenstände oder Beziehungen Schlüssel identifizieren Gegenstände eindeutig Kardinalitäten charakterisieren Beziehungstypen 1:1-, 1:N- (N:1-), N:M-Beziehungstypen 38
2.2 Relationales Modell Relationales Modell (auch: Relationenmodell) als das Datenmodell hinter den heute vorherrschenden relationalen Datenbanksystemen (RDBMS) vorgeschlagen im Jahr 1970 durch Edgar F. Codd [2], der u.a. dafür den A. M. Turing Award gewonnen hat mengenorientierte Verarbeitung von Daten, die in sogenannten Relationen (Tabellen) gespeichert werden Quelle: http://amturing.acm.org Studenten MatrNr Vorname Name Semester 13765 Moritz Müller 1 18877 Peter Parker 7 18879 Marty McFly 3 39
Wertebereiche Wertebereiche (auch: Domäne) (domain) können alle Mengen sein, die nur atomare Werte enthalten, z.b. ganze Zahlen (integer) Kommazahlen (float oder real) Zeichenketten (string) Datentypen wie z.b. Datumsangaben, die eine eigene Struktur haben (Tag, Monat, Jahr) sind also nicht erlaubt (später: RDBMSs erlauben jedoch solche Datentypen) 40
Relationen Relation R ist Untermenge des kartesischen Produkts (Kreuzprodukts) von n Wertebereichen D 1,, D n R D 1... D n Beispiel: Relation Studenten mit vier Komponenten (Matrikelnummer, Vorname, Name und Semester) Studenten integer string string integer Ein Element der Relation R heißt (n-stelliges) Tupel Beispiel: (13765, Moritz, Müller, 1) als Tupel in Studenten 41
Attribute und Schlüssel Komponenten werden zur besseren Identifikation benannt Attribute einer Relationen setzen sich zusammen aus je einem Attributnamen A i (z.b. MatrNr) einem Wertebereich dom(a i ) (z.b. integer) Attributnamen einer Relationen müssen eindeutig sein Jede Relation verfügt über einen Schlüssel, d.h. eine Menge von Attributen, die Tupel eindeutig identifizieren 42
Relationen Relationen werden nach folgendem Muster spezifiziert R : {[ A 1 : D 1,...,A n : D n ]} dabei werden alle Schlüsselattribute unterstrichen Beispiel: Relation Studenten Studenten : [ MatrNr : integer, Vorname : string, Name : string, Semester : integer ] mit eindeutig identifizierendem Schlüsselattribut MatrNr 43
Relationen als Tabellen Relationen meist als Tabellen in RDBMSs bezeichnet mit Attributen als Spalten der Tabelle mit Tupeln als Zeilen der Tabelle Beispiel: Relation Studenten Studenten MatrNr Vorname Name Semester 13765 Moritz Müller 1 18877 Peter Parker 7 18879 Marty McFly 3 mit vier Attributen und drei Tupeln 44
Ausprägung vs. Schema Unterscheidung zwischen Ausprägung (konkreten Daten) und Schema (Attributnamen A i mit Domänen D i ) Schema der Relation sch(r) ist die Menge aller Attribute sch(r) ={A 1,...,A n } dom(a i ) bezeichnet die Domäne des Attributs A i dom(a i )=D i 45
2.3 Relationale Entwurfstheorie Wie können wir ein konzeptuelles Modell in Form eines Entity-Relationship-Diagramms in ein Relationenschema übersetzen? Welche Eigenschaften hat ein gutes Relationenschema und wie können wir diese erreichen? 46
2.3.1 Übersetzung eines konzeptuellen Modells Wie können wir ein konzeptuelles Modell in Form eines Entity-Relationship-Diagramms in Relationen übersetzen? Jetzt: Initiale Übersetzung von Entitytypen und Beziehungstypen in möglichst wenige Relationen Danach: Weitere Optimierung des Relationenschemas anhand von Normalformen zur Vermeidung von Redundanzen und Anomalien 47
ER-Diagramm für Hochschule MatrNr VorlNr Vorname Name Studenten N N hören M M Vorlesungen N SWS Titel Semester prüfen lesen Note PersNr Vorname Assistenten N arbeiten für 1 1 1 Professoren Name Tätigkeit PersNr Fach Vorname Name 48
Entitytypen als Relationen Jeder Entitytyp wird zu eigener Relation mit entsprechenden Attributen und Schlüssel Beispiel: Für unser ER-Diagramm Hochschule erhalten wir Studenten : [ MatrNr : integer, Vorname : string, Name : string, Semester : integer ] Vorlesungen : [ VorlNr : integer, SWS : integer, Titel : string ] Professoren : [ PersNr : integer, Vorname : string, Name : string, Fach : string ] Assistenten : [ PersNr : integer, Vorname : string, Name : string, Tätigkeit : string ] 49
Beziehungstypen als Relationen Jeder Beziehungstyp wird zu eigener Relation übernimmt Schlüsselattribute verbundener Entitytypen, diese werden dann als Fremdschlüssel bezeichnet eigene Attribute des Beziehungstyps bleiben erhalten evtl. ist eine Umbenennung von Attributen notwendig Beispiel: Beziehungstyp prüfen wird zur Relation prüfen : [ MatrNr : integer, VorlNr : integer, PersNr : integer, Note : integer ] Schlüssel der Relation ist von der Kardinalität des Beziehungstyps abhängig 50
N:M-Beziehungstypen als Relationen Schlüssel der Relation zu einem N:M-Beziehungstyp beinhaltet übernommene Attribute aus allen Fremdschlüsseln Beispiel: Studenten hören Vorlesungen hören : [ MatrNr : integer, VorlNr : integer ] Wäre nämlich nur eines der übernommenen Attribute im Schlüssel, könnte jeder Student nur eine Vorlesung hören (bei MatrNr) bzw. jede Vorlesung könnte nur von einem Studenten besucht werden (bei VorlNr) 51
1:N-Beziehungstypen als Relation Schlüssel der Relation zu einem 1:N-Beziehungstyp beinhaltet übernommene Attribute aus dem Fremdschlüssel des rechten Entitytyps E 2 Beispiel: Professoren lesen Vorlesungen lesen : [ PersNr : integer, VorlNr : integer ] Wären nämlich beide der übernommenen Attribute (PersNr und VorlNr) im Schlüssel, könnte eine Vorlesung von mehreren Professoren gelesen werden 52
N:1-Beziehungstypen als Relationen Schlüssel der Relation zu einem N:1 Beziehungstyp beinhaltet übernommene Attribute aus dem Fremdschlüssel des linken Entitytyps E 1 Beispiel: Assistenten arbeiten für Professor arbeitenfür : [ AssPersNr : integer, ProfPersNr : integer ] In diesem Fall ist eine Umbenennung der übernommenen Attribute notwendig, da beide ursprünglich gleich heißen 53
1:1-Beziehungstypen als Relationen Schlüssel der Relation zu einem 1:1-Beziehungstyp beinhaltet übernommene Attribute aus dem Fremdschlüssel nur eines Entitytyps (E 1 oder E 2 ) Beispiel: Kennzeichen gehören zu Fahrzeug gehörtzu : [ Kennzeichen: integer, FahrzeugNr : integer ] gehörtzu : oder [ Kennzeichen: integer, FahrzeugNr : integer ] Dies garantiert jedoch nicht die Integrität unserer Daten; mehr zum Thema Datenintegrität später 54
Umsetzung der Generalisierung PersNr, Vorname, Name Mitarbeiter ist-ein ist-ein Tätigkeit Assistenten Professoren Fach 55
Umsetzung der Generalisierung Jeder Entitytyp wird zu eigener Relation Relation des Obertyps enthält gemeinsame Attribute Relationen der Untertypen enthalten eigene Attribute alle Relationen haben gemeinsamen Schlüssel Beispiel: Assistenten und Professoren als Mitarbeiter Mitarbeiter : [ PersNr : integer, Vorname : string, Name : string ] Professoren : [ PersNr : integer, Fach : string ] Assistenten : [ PersNr : integer, Tätigkeit : string ] 56
Eliminierung von Relationen Beschriebene Vorgehensweise führt zu vielen Relationen Relationen aus 1:N-, N:1- und 1:1-Beziehungstypen (nicht jedoch N:M) können eliminiert werden, hierbei gilt: Nur Relationen mit gleichem Schlüssel zusammenfassen! 57
Eliminierung von Relationen (1:N) Bei 1:N-Beziehungstypen werden der Schlüssel des linken Entitytyps sowie eventuelle Attribute des Beziehungstyps in Relation des rechten Entitytyps aufgenommen Beispiel: Professoren lesen Vorlesungen lesen : [ PersNr : integer, VorlNr : integer ] Vorlesungen : [ VorlNr : integer, SWS : integer, Titel : string ] wird zu Vorlesungen : [ VorlNr : integer, SWS : integer, Titel : string, PersNr : integer ] 58
Eliminierung von Relationen (N:1) Bei N:1-Beziehungstypen werden der Schlüssel des rechten Entitytyps sowie eventuelle Attribute des Beziehungstyps in Relation des linken Entitytyps aufgenommen Beispiel: Assistenten arbeiten für Professoren Assistenten : [ PersNr : integer, Vorname : string, Name : string, Tätigkeit : string ] arbeitenfür : [ AssPersNr : integer, ProfPersNr : integer ] wird zu Assistenten : [ PersNr : integer,..., ProfPersNr : integer, ] 59
Eliminierung von Relationen (1:1) Bei 1:1-Beziehungstypen werden der Schlüssel des linken (rechten) Entitytyps sowie eventuelle Attribute des Beziehungstyps in Relation des rechten (linken) Entitytyps aufgenommen Beispiel: Kennzeichen gehören zu Fahrzeugen Kennzeichen : [Kennzeichen:integer,...] gehörtzu : [ Kennzeichen: integer, FahrzeugNr : integer ] wird zu Kennzeichen : [ Kennzeichen: integer,..., FahrzeugNr : integer, ] 60
Eliminierung von Relationen (1:1) Beispiel: Kennzeichen gehören zu Fahrzeugen gehörtzu : [ Kennzeichen: integer, FahrzeugNr : integer ] Fahrzeuge : [ FahrzeugNr : integer,...] wird zu Fahrzeuge : [ FahrzeugNr : integer,..., Kennzeichen : integer, ] 61
Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme Eine Einführung, De Gruyter Oldenbourg, 2013 (Kapitel 3) [2] E. F. Codd: A Relational Model of Data for Large Shared Data Banks, CACM 13(6), 1970 [3] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 4 & 5) 62