Organisatorisches SQL Normalisierung Datenbanken Unit 11: Erstellen u. Ändern von Datenbanken und Tabellen Verbindung von Java auf Datenbanken Ronald Ortner 13. VI. 2017 Ronald Ortner Organisatorisches SQL Normalisierung Organisatorisches morgen Abschlusstest UE (Gruppe 1: 14:45–16:00, Gruppe 2: 16:00–17:15 ) Nächste Woche am 21. Juni finden beide Übungsgruppen gleichzeitig statt (16–17:30 Uhr im RWZ HS): Besprechung weiterer Normalisierungsbeispiele VO-Abschlussprüfung am 28. Juni, 10–12 Uhr im Zeichensaal (Anmeldung über MU Online) alte Prüfung online Nächste Woche letzte VO: - NoSQL-Einführung (Florian Heber) - XML-Einführung (Martin Antenreiter) Ronald Ortner Organisatorisches SQL SQL Fragen zum Abschlusstest? Erstellen und Ändern von Datenbanken und Tabellen Verbindung von Java auf Datenbanken SQL Injections Prepared Statements Ronald Ortner Normalisierung Organisatorisches SQL Normalisierung Indexstrukturen auf Datenbanken Sucht man in Tabelle Zeilen mit bestimmtem Wert in Spalte, muss man sich im schlimmsten Fall alle Zeilen ansehen. Indexstrukturen auf Tabellen helfen durch Vorsortierung, sodass Abfragen schneller ausgeführt werden können. Verschiedene Indexstrukturen: Index Sequential Access Method (ISAM) B-Bäume B+ -Bäume Hashing Bitmap Indizes Ronald Ortner Organisatorisches SQL Normalisierung Indexstrukturen auf Datenbanken Verschiedene Indexstrukturen: Index Sequential Access Method (ISAM) B-Bäume B+ -Bäume Hashing Bitmap Indizes Der Performancegewinn von Abfragen sowie der Performanceverlust von Änderungen hängen von der verwendeten Indexstruktur ab. In SQL hat man entsprechend je nach verwendeter Variante die Wahl zwischen verschiedenen Indextypen. Ronald Ortner Organisatorisches SQL Normalisierung Index Sequential Access Method (ISAM) Lineares Durchsuchen aller Daten ist ineffizient. ISAM legt zunächst für jeden Datensatz einen eindeutigen Schlüssel fest. Anschließend werden einige Schlüsselwerte für den Index festgelegt. Sowohl Index als auch Daten sind jeweils bzgl. des Index sortiert. Damit muss bei Suchen eines Datensatzes zunächst nur der Index durchsucht werden. (Für Details zu anderen Indexstrukturen siehe die Folien von Alois Kemper.) Ronald Ortner Organisatorisches SQL Normalisierung Java Persistence API Alternative für Java-SQL Verbindung: Java Persistence API: kann Objekte direkt in Datenbank schreiben Es gibt objektrelationale Metadaten für Beziehungen zwischen Tabellen (als Java Annotation bzw. als xml Datei hinterlegt) in eigener Java Persistence Query Language (JPQL) kann auf Objekte abgefragt werden Ronald Ortner Organisatorisches SQL Normalisierung PL/SQL Prozeduren in SQL: Neben einzelnen Abfragen lassen sich in SQL auch Prozeduren schreiben. z.B. bieten PL/SQL (Oracle) oder MySQL Prozeduren u.a.: Verzweigungen Schleifen Rückgabewert Einbetten von Abfragen in den Code Cursor -Schleifen über die Zeilen der Ergebnistabelle einer Abfrage Ronald Ortner Organisatorisches SQL Normalisierung Normalisierung: Weiteres Beispiel Entwerfen Sie eine Datenbank einer Ticketagentur für Pop-/Rock-Konzerte. Für jedes Konzert sollen die spielenden Bands, das Datum und die Beginnzeit, das Land, die Stadt sowie der Veranstaltungsort gespeichert werden. Weiters soll der Ticketpreis hinterlegt werden, wobei Sie davon ausgehen können, dass dieser für jedes Konzert einheitlich ist. Für jeden Kunden sollen Name und Adresse gespeichert werden sowie wieviele Tickets für welches Konzert bestellt wurden. Ronald Ortner Organisatorisches SQL Normalisierung Normalisierung: Tickets für Konzerte Manchmal bekommt man kein gutes Schema, wenn man die Normalformen der Reihe nach durchgeht. Beispiel: Ticket_no∗ . . . Concert_no . . . Es gibt folgende FDs und MVDs: Ticket_no → Concert_no Ticket_no →→ Band Concert_no →→ Band Ronald Ortner Band∗ . . . Organisatorisches SQL Normalisierung Normalisierung: Tickets für Konzerte Manchmal bekommt man kein gutes Schema, wenn man die Normalformen der Reihe nach durchgeht. Beispiel: Ticket_no∗ . . . Concert_no . . . Band∗ . . . Es gibt folgende FDs und MVDs: Ticket_no → Concert_no Ticket_no →→ Band Concert_no →→ Band Der Dekompositionsalgorithmus für 4NF auf die letzte MVD angewandt gibt ein gutes Datenbankschema. Ronald Ortner Organisatorisches SQL Normalisierung Verallgemeinerter Dekompositionsalgorithmus für 4NF Gegeben: Relation R, Menge F von MVDs Wir wollen: Zerlegung R1 , . . . , Rn in 4NF Verallgemeinerter Dekompositionsalgorithmus: Initialisiere Z := {R}; while (es gibt Ri in Z , das nicht in 4NF) do 1 Finde MVD α →→ β in Ri mit α ∩ β = ∅ und α 6→ Ri . 2 Zerlege Ri in Ri1 := α ∪ β und Ri2 := Ri − β. 3 Ersetze Ri in Z durch Ri1 und Ri2 , d.h. Z := (Z − {Ri }) ∪ {Ri1 , Ri2 }. (Nachdem jede Relation in 4NF auch in BCNF ist, gibt es Fälle, wo eine 4NF Zerlegung nicht abhängigkeitserhaltend ist.) Ronald Ortner Organisatorisches SQL Normalisierung Normalisierung: Tickets für Konzerte Beispiel: Ticket_no∗ . . . Concert_no . . . Band∗ . . . Es gibt folgende FDs und MVDs: Ticket_no → Concert_no Ticket_no →→ Band Concert_no →→ Band Achtung: Wählt man eine andere FD/MVD für Zerlegung erhält man ein schlechteres Datenbankschema. (Zur Erinnerung: 4NF ist nicht immer abhängigkeitserhaltend, sodass es einen Unterschied machen kann, welche FD für Zerlegung gewählt wird!) Ronald Ortner