Datenbanken Unit 3: Das relationale Modell 8. III. 2016
Outline 1 Das ER Modell Zusammenfassung 2 Das Relationale Modell 3 SQL
Organisatorisches Wissensüberprüfung: heute zwei Aufgaben statt nur einer Blindaufgaben vom Übungsblatt: Reklamationsmöglichkeit per E-Mail (Bitte Matrikel- und Aufgabennummer angeben!) Fast richtig (z.b. > statt >=) ist auch falsch!
Zusammenfassung Outline 1 Das ER Modell Zusammenfassung 2 Das Relationale Modell 3 SQL
Zusammenfassung Zusammenfassung letzter Woche Entitäten und Relationen: Entitäten und Entitätstypen Relationen und Relationstypen ER Diagramme Klassifikation binärer Relationstypen: 1 : 1 - Relationen 1 : N - Relationen N : M - Relationen
Outline 1 Das ER Modell Zusammenfassung 2 Das Relationale Modell 3 SQL
Zur Erinnerung Bisher haben wir über folgende Dinge gesprochen: Entitäts- und Relationstypen 1 : 1, 1 : N und N : M Relationen Schlüssel Was hat das mit Datenbanken zu tun? versuchen aus dem ER Modell eine Datenbank zu extrahieren
Die Grundidee des relationalen Modells Im ER Modell haben wir Entitäten, Relationen, und Attribute. Die Grundidee des relationen Modells ist es, die Entitätstypen mit ihren Attributen zu identifizieren, die Entitäten mit ihren Attributwerten zu identifizieren. Im relationalen Model gibt es letztendlich nur Attribute und Relationen.
Wertebereiche (Domänen) Eine Domäne besteht aus möglichen Werten für ein vorgegebenes Attribut. Typische Domänen sind z.b. Zahlen (natürliche, rationale, reelle, etc.) Zeichenketten Datumswerte Wir verlangen typischerweise, dass eine Domäne nur atomare Werte beinhaltet, also insbesondere keine zusammengesetzten Werte, keine strukturierten Werte (z.b. Mengen).
Relationen auf Domänen Definition (Relation) Eine Relation (Tabelle) R zwischen Domänen D 1, D 2,..., D n ist eine Teilmenge des Cartesischen Produkts der Domänen: R D 1 D 2... D n. NB: Das entspricht unserer Definition von Relationen zwischen Entitätstypen.
Zur Erinnerung: Math. Repräsentierung von Relationen Beispiel: Relation lieben : Brad Pitt liebt Angelina Jolie.
Zur Erinnerung: Math. Repräsentierung von Relationen Beispiel: Relation lieben : Brad Pitt liebt Angelina Jolie. Wir sagen: Das Tupel (Brad Pitt, Angelina Jolie) erfüllt die Relation lieben.
Zur Erinnerung: Math. Repräsentierung von Relationen Beispiel: Relation lieben : Brad Pitt liebt Angelina Jolie. Wir sagen: Das Tupel (Brad Pitt, Angelina Jolie) erfüllt die Relation lieben. Allgmein: Wir können eine Relation R mit der Menge aller Tupel von Objekten identifizieren, die die Relation R erfüllen. lieben = { (x, y) x liebt y } = { (Brad Pitt, Angelina Jolie), (Angelina Jolie, Brad Pitt),... }
Mathematische Repräsentation von Relationen lieben = { (x, y) x liebt y }
Mathematische Repräsentation von Relationen lieben = { (x, y) x liebt y } P P, wobei das Cartesische Produkt bezeichnet und P die Menge aller Personen ist. Definition (Relation) Eine Relation R zwischen Entitätstypen E 1, E 2,..., E n ist eine Teilmenge von E 1 E 2... E n. Beispiel: besitzen ist eine Teilmenge von P D, wobei D die Menge aller Dinge ist.
Relationen auf Domänen Definition (Relation) Eine Relation (Tabelle) R zwischen Domänen D 1, D 2,..., D n ist eine Teilmenge des Cartesischen Produkts der Domänen: R D 1 D 2... D n. NB: Das entspricht unserer Definition von Relationen zwischen Entitätstypen. Beispiel: Telefonbuch: Attribute: Name, Adresse, Telefonnummer Telefonbuch String String Integer
Relationen auf Domänen Definition (Relation) Eine Relation (Tabelle) R zwischen Domänen D 1, D 2,..., D n ist eine Teilmenge des Cartesischen Produkts der Domänen: R D 1 D 2... D n. NB: Das entspricht unserer Definition von Relationen zwischen Entitätstypen. Beispiel: Tabelle cia: Attribute: name, region, area, population, gdp Tabelle cia String String Integer Integer Integer
Repräsentation von Entitätstypen im relationalen Modell Entitätstypen werden als Relationen zwischen Domänen (von Attributen) dargestellt. Examples: Studenten: {[Matrnr.:String, Name: String, Semester: integer]} Lehrveranstaltungen: {[Lvanr.:Integer, Name: String, Semesterstunden: Integer]} Länder: {[Name:String, Region: String, Fläche: Integer, Bevölkerung: Integer, BIP:Integer]}
Zur Erinnerung: Schlüssel Definition Schlüssel: Menge von Attributen, die eine Entität eindeutig bestimmen Kandidatenschlüssel: minimaler Schlüssel (ein Schlüssel, aus dem kein Attribut entfernt werden kann im allgemeinen nicht eindeutig) Primärschlüssel: ein beliebig gewählter Kandidatenschlüssel Beispiele: Die Matrikelnummer bestimmt einen Studenten eindeutig. Die Sozialversicherungsnummer bestimmt eine Person eindeutig. Das Kennzeichen, das Land und der Zeitpunkt bestimmen eindeutig ein Auto.
Repräsentation von Relationen im relationalen Modell Relationstypen zwischen Entitätstypen E 1, E 2,..., E n werden repräsentiert als Relationen zwischen den Domänen der Schlüsselattribute der Entitätstypen E 1, E 2,..., E n und den Domänen der Attribute des Relationstyps. Das heißt, wenn Entitätstyp E i die Schlüsselattribute A i1,..., A i,ki (i = 1,... n) hat, und die Relation R E 1 E 2... E n die Attribute A R 1,..., AR k R, dann wird R repräsentiert als D(A 11 ) D(A 1,k1 ) D(A 21 ) D(A n,kn ) D(A R 1 ) D(AR k R ). Die Primärschlüssel des Entitätstyps werden Fremdschlüssel genannt. Fremdschlüssel werden zur Identifizierung von Entitäten verwendet.
Repräsentation von Relationen im relationalen Modell Beispiel: Relation besuchen zwischen Studenten und Lehrveranstaltungen. Der Entitätstyp Student hat das Attribut Matrnr als Primärschlüssel. Der Entitätstyp Lehrveranstaltung hat das Attribut LvaNr als Primärschlüssel. Die Relation besuchen hat als Attribut das Semester, in dem der Student die Lehrveranstaltung besucht.
Repräsentation von Relationen im relationalen Modell Beispiel: Relation besuchen zwischen Studenten und Lehrveranstaltungen. Der Entitätstyp Student hat das Attribut Matrnr als Primärschlüssel. Der Entitätstyp Lehrveranstaltung hat das Attribut LvaNr als Primärschlüssel. Die Relation besuchen hat als Attribut das Semester, in dem der Student die Lehrveranstaltung besucht. Entsprechend benötigen wir die folgenden Attribute, um die Relation besuchen darzustellen: die Matrnr (des Studenten) String, die LvaNr (der Lehrveranstaltung) Integer, das Semester (in dem die Lehrveranstaltung besucht wird) String.
Repräsentation von Relationen im relationalen Modell Beispiel: Entsprechend benötigen wir die folgenden Attribute, um die Relation besuchen darzustellen: die Matrnr (des Studenten) String, die LvaNr (der Lehrveranstaltung) Integer, das Semester (in dem die Lehrveranstaltung besucht wird) String. besuchen: {[Matrnr.:String, LvaNr.:Integer, Semester:String]}
Repräsentation von Relationen im relationalen Modell: Primärschlüssel Der Primärschlüssel der die Relation repräsentierenden Tabelle hängt davon ab, ob die Relation 1 : 1, 1 : N, oder N : M ist (für binäre Relation). Definition (Primärschlüssel einer Tabelle) Der Primärschlüssel ist eine minimale Menge von Attributen, die eine Zeile der Tabelle eindeutig bestimmen. NB: In einer Tabelle mit Attributen A 1,..., A n bilden die Attribute A i1,..., A ik einen Schlüssel, wenn es für i = 1, 2,..., n partielle Funktionen D(A i1 ) D(A ik ) D(A i ) gibt.
Repräsentation von Relationen im relationalen Modell: Primärschlüssel Definition (Primärschlüssel einer Tabelle) Der Primärschlüssel ist eine minimale Menge von Attributen, die eine Zeile der Tabelle eindeutig bestimmen. NB: In einer Tabelle mit Attributen A 1,..., A n bilden die Attribute A i1,..., A ik einen Schlüssel, wenn es für i = 1, 2,..., n partielle Funktionen D(A i1 ) D(A ik ) D(A i ) gibt. Das bedeutet: Legt man die Werte für die Attribute A i1,..., A ik fest, so sind die Wert der anderen Attribute eindeutig bestimmt. D.h. für vorgegebene Werte für die Attribute A i1,..., A ik kann es in der Tabelle nur eine Zeile geben.
Repräsentation von Relationen im relationalen Modell: Zusammenfassung von Tabellen Manchmal lässt sich das Datenbankschema noch verfeinern, indem Tabellen mit demselben Primärschlüssel zusammengefasst werden. 1 : 1- und 1 : N-Relationen mit demselben Primärschlüssel können in einer Tabelle zusammengefasst werden. Beispiel: Lehrveranstaltungen: {[LvaNr., Titel, Semesterstunden]} Professoren: {[Personalnummer, Name, Titel, Raum]} gibt Lehrveranstaltung: {[LvaNr., Personalnummer]}
Repräsentation von Relationen im relationalen Modell: Zusammenfassung von Tabellen Manchmal lässt sich das Datenbankschema noch verfeinern, indem Tabellen mit demselben Primärschlüssel zusammengefasst werden. 1 : 1- und 1 : N-Relationen mit demselben Primärschlüssel können in einer Tabelle zusammengefasst werden. Beispiel: Lehrveranstaltungen: {[LvaNr., Titel, Semesterstunden]} Professoren: {[Personalnummer, Name, Titel, Raum]} gibt Lehrveranstaltung: {[LvaNr., Personalnummer]} Die Information, wer die Lehrveranstaltung gibt, kann als Fremdschlüssel in die Tabelle Lehrveranstaltungen gegeben werden
Repräsentation von Relationen im relationalen Modell: Zusammenfassung von Tabellen Manchmal lässt sich das Datenbankschema noch verfeinern, indem Tabellen mit demselben Primärschlüssel zusammengefasst werden. 1 : 1- und 1 : N-Relationen mit demselben Primärschlüssel können in einer Tabelle zusammengefasst werden. Beispiel: Lehrveranstaltungen: {[LvaNr., Titel, Semesterstunden, Professor]} Professoren: {[Personalnummer, Name, Titel, Raum]}
Repräsentation von Relationen im relationalen Modell: Zusammenfassung von Tabellen Manchmal lässt sich das Datenbankschema noch verfeinern, indem Tabellen mit demselben Primärschlüssel zusammengefasst werden. 1 : 1- und 1 : N-Relationen mit demselben Primärschlüssel können in einer Tabelle zusammengefasst werden. Beispiel: Lehrveranstaltungen: {[LvaNr., Titel, Semesterstunden, Professor]} Professoren: {[Personalnummer, Name, Titel, Raum]} NB: Das funktioniert für N : M-Relationen nicht!
Beispiel: Bücherdatenbank
Beispiel: Bücherdatenbank Wir führen IDs für Autoren, Bücher und Schlagwörter ein. Dann: Je eine Tabelle für jeden Entitätstyp (mit den IDs als Primärschlüssel): Autoren: {[a_id, Name]} Bücher: {[isbn, Titel, Verlag]} Schlagwörter: {[s_id, Schlagwort]} Je eine Tabelle für jede Relation: schreibt: {[a_id, isbn]} hat_schlagwort: {[isbn, s_id, Gewicht]}
Repräsentation von Relationen im relationalen Modell: Vermeidung von NULL-Werten Für Entitäten, die nicht an Relation teilnehmen, müssen oft NULL-Werte eingefügt werden. Repräsentation mit wenigen NULL-Werten ist vorteilhaft.
Beispiel: Studenten und Studienrichtungen
Beispiel: Studenten und Studienrichtungen Je eine Tabelle für jeden Entitätstyp: Studenten: {[Mnr, Name]} Studienrichtungen: {[Stkz, Name]} Je eine Tabelle für jede Relation: Studienrichtungen: {[Mnr, Stkz]} ist Strv: {[Mnr, Stkz]} ist Strv-Vorsitzender: {[Mnr, Stkz]}
Beispiel: Studenten und Studienrichtungen Je eine Tabelle für jeden Entitätstyp: Studenten: {[Mnr, Name]} Studienrichtungen: {[Stkz, Name]} Je eine Tabelle für jede Relation: Studienrichtungen: {[Mnr, Stkz]} ist Strv: {[Mnr, Stkz]} ist Strv-Vorsitzender: {[Mnr, Stkz]} Fassen Tabellen mit gleichen Primärschlüsseln zusammen.
Beispiel: Studenten und Studienrichtungen Zusammenfassen von Tabellen mit gleichem Primärschlüssel ergibt: Tables: Studenten: {[Mnr, Name, Stkz(Strv), Stkz(StrvV) ]} Studienrichtungen: {[Stkz, Name]} studiert: {[Mnr, Stkz]}
Beispiel: Studenten und Studienrichtungen Zusammenfassen von Tabellen mit gleichem Primärschlüssel ergibt: Tables: Studenten: {[Mnr, Name, Stkz(Strv), Stkz(StrvV) ]} Studienrichtungen: {[Stkz, Name]} studiert: {[Mnr, Stkz]} Nich schön: Viele NULL-Einträge in Tabelle Studenten: Die meisten Studenten sind nicht in Strv.
Beispiel: Studenten und Studienrichtungen Tabellen: Studenten: {[Mnr, Name, Stkz(Strv), Stkz(StrvV) ]} Studienrichtungen: {[Stkz, Name]} studiert: {[Mnr, Stkz]} Besser:
Beispiel: Studenten und Studienrichtungen Tabellen: Studenten: {[Mnr, Name, Stkz(Strv), Stkz(StrvV) ]} Studienrichtungen: {[Stkz, Name]} studiert: {[Mnr, Stkz]} Besser: Tabellen: Studenten: {[Mnr, Name]} Studienrichtungen: {[Stkz, Name, StrvV]} Strv: {[Mnr, Stkz]} studiert: {[Mnr, Stkz]}
SQL: Schlechte Angewohnheiten Numerische Werte vs. Strings: SELECT jahr,monat,round((tmax+tmin)/2, 1 ) FROM sowe WHERE jahr <= 1940 AND jahr >= 1920 AND (tmin < 0 or gmin < 0 ) AND sun > 90 funktioniert (leider) in MySQL, Stil nicht empfehlenswert.
SQL: Schlechte Angewohnheiten Numerische Werte vs. Strings: SELECT * FROM sowe WHERE tmin LIKE -% funktioniert (leider) in MySQL, Stil nicht empfehlenswert.
SQL: Schlechte Angewohnheiten Numerische Werte vs. Strings: Ähnlich: Runden auf ganze Millionen über numerische Funktionen, nicht über Stringfunktionen!
SQL-Lesson 3 Heute: Subqueries UNION