Software-Engineering Einführung 7. Übung (04.12.2014) Dr. Gergely Varró, gergely.varro@es.tu-darmstadt.de Erhan Leblebici, erhan.leblebici@es.tu-darmstadt.de Tel.+49 6151 16 4388 ES Real-Time Systems Lab Prof. Dr. rer. nat. Andy Schürr Dept. of Electrical Engineering and Information Technology Dept. of Computer Science (adjunct Professor) www.es.tu-darmstadt.de author(s) of these slides 2014 including research results of the research network ES and TU Darmstadt otherwise as specified at the respective slide 04.12.2014
Besprechung Aufgabenblatt 6 (1/9) Aufgabe 1) Konzepte sollten bekannt und verstanden sein (vgl. c)) Schlüssel (key) Minimale Menge an Attributen, die jede Zeile der Tabelle/jedes Tupel der Relation eindeutig identifizieren minimale identifizierende Attributmenge Spezialfall einer funktionalen Abhängigkeit (vgl. Skript S. 290/291) Primärschlüssel (primary key) Ein (vom DB-Admin) ausgezeichneter Schlüssel (pro Tabelle nur ein PS!!!) Fremdschlüssel (foreign key) Attributliste X in einem Relationenschema R 1, wenn in einem Relationenschema R 2 eine kompatible* Attributliste Y Primärschlüssel ist die Attributwerte zu X in der Relation r 1 (R 1 ) in den entsprechenden Spalten Y der Relation r 2 (R 2 ) enthalten sind Das setzt also voraus, dass bestimmte Werte in r 2 (R 2 ) auch tatsächlich existieren! * gleiche Anzahl an Attributen und passende Wertebereiche 2 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (2/9) und der Vollständigkeit halber Oberschlüssel (Superkey) Beliebige Obermenge eines Schlüssels Ist ebenfalls eine identifizierende Attributmenge Trivialer (Ober-)Schlüssel: alle Attribute eines Relationenschemas Daraus folgt Kann ein Schlüssel über mehrere Attribute definiert sein? Ja! Kann eine Tabelle mehrere Primärschlüssel haben? Nein! In welcher Beziehung stehen Primärschlüssel und Fremdschlüssel zueinander? s. vorangegangene Folie 3 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (3/9) Datenbankentwurf 4 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (4/9) a) Potentielle Kandidaten für Tabellen/Relationen Klassen: Kunde, Provider, Vertragstyp, Adresse Assoziationen: wohnhaftin, ansaessigin, bietetan, ingeschäftsbeziehung Kombinationen aus Klassen und Assoziationen: KundeWohnhaftIn, ProviderAnsaessigIn,... 5 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (5/9) b,d,e) Relationenschema, Primärschlüssel, Fremdschlüssel Adresse = { adressid, strasse, hausnummer, plz, ort } Kunde = { kundenid, vorname, nachname, geburtstag, anschrift } FK: anschrift Adresse.adressID Provider = { providerid, name, kuerzel, firmensitz } FK: firmensitz Adresse.adressID Vertragstyp = { ID, flatrate, unbefristet } bietetan = { anbieter, angebot } FK: anbieter Provider.providerID FK: angebot Vertragstyp.ID ingeschäftsbeziehung = { kunde, typ, provider } FK: kunde Kunde.kundenID FK: typ Vertragstyp.ID FK: provider Provider.providerID 6 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (6/9) c) Verständnisfragen über Schlüssel, Primärschlüssel, Fremdschlüssel Skript 268-269 i. Kann ein Schlüssel über mehrere Attribute definiert sein? Ja. In diesem Fall müssen die Werte der Schlüsselattribute jede Zeile (jedes Tupel) eindeutig identifizieren. ii. Kann eine Tabelle mehrere Schlüssel und/oder mehrere Primärschlüssel haben? Eine Tabelle kann mehrere Schlüssel, aber nur genau einen Primärschlüssel haben. iii. In welcher Beziehung stehen Primärschlüssel und Fremdschlüssel zueinander, und ergeben sich daraus ggf. Existenzabhängigkeiten? Ein Fremdschlüssel einer Tabelle verweist auf den Primärschlüssel einer anderen Tabelle. Eine Wertkombination kann in die Fremdschlüsselattribute erst dann eingetragen werden, wenn dieselbe Wertkombination in den Primärschlüsselattributen der anderen Tabelle schon gespeichert ist. (In der Praxis: Wenn eine Zeile der zweiten Tabelle gelöscht/geändert wird, dann können die zugehörigen Werte der Fremdschlüsselattribute der ersten (abhängigen) Tabelle gelöscht/geändert werden.) 7 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (7/9) f) 8 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (8/9) g) Verletzung lokaler Integritätsbedingungen durch Attributwert außerhalb des Wertebereichs (Domäne/Domain) mehrere Tupel/Zeilen mit identischer Wertebelegung für Schlüsselattribut(e) adressid strasse hausnummer plz ort 0001 Merckstr. 25 64283 Darmstadt 0002 Wilhelm-Leuschner-Str. 2 64347 Griesheim 0003 Dieburgerstr. 255 64287 Darmstadt 0003 Casinostr. 256 64287 Darmstadt Verletzung globaler Integritätsbedingungen durch... Werte von Fremdschlüsselattributen in r 2 (R 2 ) (bezeichnet die Quelle) ohne Entsprechung in r 1 (R 1 ) (bezeichnet das Ziel) kundenid adressid 0005 0005 9 04.12.2014 Software-Engineering - Einführung
Besprechung Aufgabenblatt 6 (9/9) Typische Fehler b) Assoziationen nicht oder nicht vollständig in Relationenschema umgesetzt c) f) Verwechslung Attribute Tupel (Basis)Relation == Tabelle Tupel == Zeile Attribut == Spalte Begriff Schlüssel nicht bekannt Probleme bei Beschreibung Existenzabhängigkeiten Primärschlüssel/Fremdschlüssel Problematik oft nicht erkannt 10 04.12.2014 Software-Engineering - Einführung
Vorstellung Aufgabenblatt 7 3 Aufgaben Themen: SQL DB-Normalisierung Für Interessierte: Themenvorschläge zur Vertiefung MySQL (bekannte SQL-Implementierung) JDBC (Java-Schnittstellen für Datenbankzugriffe) HSQLDB (bietet z.b. In-Memory-DB und passende JDBC-Treiber) 11 04.12.2014 Software-Engineering - Einführung
Aufgabenblatt 7 - Aufgabe 1 Was ist zu tun? Gegebene Relationenschemata mittels SQL definieren Lernziele: SQL als Data Definition Language CREATE [SCHEMA TABLE] 12 04.12.2014 Software-Engineering - Einführung
Aufgabenblatt 7 - Aufgabe 2 Was ist zu tun? Einfache Abfragen über einer Datenbank mit einer Relation mit SQL formulieren Lernziele: SQL als Datenanfragesprache Anfragen mittels SELECT FROM WHERE -Block formulieren können 13 04.12.2014 Software-Engineering - Einführung
Aufgabenblatt 7 - Aufgabe 3 Was ist zu tun? Funktionale Abhängigkeiten identifizieren/definieren Eine gegebene Relation anhand der FDs schrittweise normalisieren 2NF und 3NF herstellen Lernziele: 2NF und 3NF kennen Operationen zum Herstellen der Normalisierungen kennen und ausführen können 14 04.12.2014 Software-Engineering - Einführung
Fragen? 15 04.12.2014 Software-Engineering - Einführung