Vorlesung Informatik II Universität Augsburg Sommersemester 2010 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 09. Exkurs: Datenbanken 20.05.2010 1 Motivation Datenbanksysteme als Basis moderner Softwaresysteme Web-basierte Systeme (eBay, Amazon, Expedia, OnlineBanking, B …) Unternehmens-Informationssysteme U (SAP R/3, …) Grundlage vieler Informatik-Berufe Administration, Planung/Entwurf, Entwicklung, Nutzung 20.05.2010 2 Motivation Hohe Herausforderungen Verwaltung V von Daten im Terabyte-Bereich (1 TB = 1000 GB) Viele Nutzer, parallele Anfragen, hohe Verfügbarkeit, Sicherheit, Konsistenz Querbezüge zu anderen Informatikbereichen Modellierung, Datenstrukturen, Sicherheit, Theorie, Betriebssysteme, … 20.05.2010 3 Traditionelle Datenverwaltung Physische Datenabhängigkeit Änderungen an der Struktur der Daten führen zu Änderungen der Anwendungsprogramme. Anwendungsprogramme müssen Struktur der Daten kennen Datenredundanz/-inkonsistenz Anwendungsprogramme/Benutzer haben spezielle Erfordernisse bzgl. der Daten: Dieselben Daten werden in verschiedenen Versionen mehrfach abgespeichert. Änderungen der Daten können zu Inkonsistenzen zwischen verschiedenen Versionen führen. 20.05.2010 4 Traditionelle Datenverwaltung Einbenutzerbetrieb Auf eine Datei kann nur ein Anwendungsprogramm auf einmal zugreifen. Folgerungen: hohe Kosten für die Anpassung von Anwendungsprogrammen Unsicherheit bzgl. der Korrektheit der Daten Effizienzverlust bei Speicherung und Zugriff auf Daten 20.05.2010 5 Datenbanksysteme (DBS) Löse Aufgaben der Beschreibung, des Abspeicherns und des Zugriffs auf Daten aus den Anwendungsprogrammen heraus. Programme Benutzergruppen DBMS (Datenbankmanagementsystem): Verarbeitung von Anfragen, Zugriff auf gespeicherte Daten ( D DD (Data Dictionary) DB1 (Datenbank) ... DBn (Datenbank) DBSD(Datenbanksystem) 20.05.2010 6 DBS Datenbankmanagementsystem D (DBMS) Softwaresystem, das die Definition, Konstruktion (Speichern) und Manipulation (Anfragen, Änderungen, Berichte) von Daten unterstützt. Datenbank Menge der von einem DBMS verwalteten Daten. Sie beschreibt einen wohldefinierten Ausschnitt der realen Welt (Miniwelt). Data Dictionary/Datenbankschema D (DD) Legt die Struktur der Daten fest (bzgl. eines Datenmodells). 20.05.2010 7 DBS Eigenschaften E Redundanz- und Konsistenzkontrolle Datenunabhängigkeit: einheitliche Zugriffs-Schnittstelle auf Daten Schnelle Verarbeitung von DB-Operationen Integrierte Datenspeicherung für verschiedene Anwendungen: Unterstützung von Sichten/Views Mehrbenutzerbetrieb: Unterstützung von Transaktionen und Nebenläufigkeitskontrolle Datensicherheit: Zugriffsverwaltung Datenunversehrtheit: Datenwiederherstellung/Recovery 20.05.2010 8 DBS Kriterien K für den Einsatz eines DBS Anwendungen und Datenstrukturen sind Änderungen unterworfen Mehrere Benutzer/Anwendungen greifen parallel auf die Daten zu Es handelt sich um sehr große Datenmengen Datenverlust (nach technischen Fehlern) soll ausgeschlossen werden Zugriffsverwaltung ist notwendig 20.05.2010 9 Relationales Datenmodell Jedem DBS liegt ein Datenmodell zugrunde: Eigenschaften der Datenelemente Struktur der Datenelemente Konsistenzbedingungen Operationen zum Speichern, Suchen, Ändern Löschen Das am meisten verwendete Datenmodell ist das relationale Datenmodell Jetzt: Informale Einführung in dieses Datenmodell anhand von Beispielen 20.05.2010 10 Relationales Datenmodell Nach dem relationalen Datenmodell kan man sich eine Datenbank als eine Menge von Tabellen vorstellen: Veranstaltung ID 00001 00002 00003 ... Name Informatik 2 Java-Programmierkurs Informatik 1 ... 20.05.2010 Jahr 2009 2009 2010 ... Semester SS SS WS ... 11 Relationales Datenmodell Nach dem relationalen Datenmodell kan man sich eine Datenbank als eine Menge von Tabellen vorstellen: Student Matrikelnummer 1045067 ... Nachname Huber ... Vorname Markus ... ... ... ... Das ist die Sicht des Benutzers Mit der physischen Datenhaltung auf der Festplatte hat das nichts zu ( tun! (siehe Datenbank-Vorlesung) 20.05.2010 12 Relationales Datenmodell Nach dem relationalen Datenmodell kan man sich eine Datenbank als eine Menge von Tabellen vorstellen: Daten werden zeilenweise abgespeichert Mathematisch formal ist eine Tabelle eine Relation (also eine Menge von Tupeln) Spaltennamen heißen auch Attribute – sie repräsentieren Wertemengen Jede Zeile entspricht einem Tupel in dieser Relation Beispiel: (0001,Informatik 2,2009,SS) ∈ Veranstaltung 20.05.2010 13 Relationales Datenmodell Nach dem relationalen Datenmodell kan man sich eine Datenbank als eine Menge von Tabellen vorstellen: Attribute Relationenname Relationenschema Relation Tupel 20.05.2010 14 Modellierung Zur Modellierung von relationalen Datendanken verwendet man i.d.R. ) sog Entity-Relationship-Modelle (ER-Modelle) ER-Modelle sind nicht Teil von UML! ER-Modelle haben konzepzuell eine gewisse Ähnlichkeit zu Klassendiagrammen K (aber nicht grafisch!) Wir werden ER-Modelle hier nicht besprechen (siehe DatenbankVorlesung) V 20.05.2010 15 Objekt-Relationale Abbildung Objekte einer Java-Anwendung lassen sich nicht direkt in einer relationalen Datenbank abspeichern Wir werden im Folgenden andeuten, wie man durch Objekte verwaltete Daten in Tabellen abspeichern kann Objektrelationale Abbildung (Dabei(lernen wir nebenbei etwas über Datenbankmodellierung) (Details( siehe Datenbank-Vorlesung) 20.05.2010 16 Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String Student matrikelnummer name name :String Einwertige Attribute werden Spalten der Tabelle 20.05.2010 17 Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String Student matrikelnummer name 1045678 Huber name :String Objekte werden mit ihren Werten in Zeilen eingetragen 20.05.2010 18 Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Student matrikelnummer :String Student matrikelnummer name 1045678 Huber name :String Objekte werden mit ihren Werten in Zeilen eingetragen In der Tabelle soll eine Spalte identifizierend sein (hier: matrikelnummer) Schlüsselattribut 20.05.2010 19 Objekt-Relationale Abbildung Beispiel: Eine Klasse (einen strukturierten Datentyp) als Tabelle abbilden Vorlesung name jahr Vorlesung ID name jahr semester 00001 Info2 2009 SS semester Falls eine Klasse kein Schlüsselattribut besitzt, wird ein solches hinzugefügt Künstliches Schlüsselattribut (hier: ID) Werte erhält man durch Durchnummerieren. 20.05.2010 20 Objekt-Relationale Abbildung Beispiel: Mehrwertige Attribute als Tabelle abbilden Student Student matrikelnummer name ... studiengang :String [1..*] Studiengang_Student Schlüsselattribut Für jeden Wert eine Zeile matrikelnummer 1045678 1045678 1056904 20.05.2010 studiengang Informatik Physik Mathematik 21 Objekt-Relationale Abbildung Referenzattribut Student ... adresse :Adresse [1] <<datatype>> Adresse strasse plz ... 20.05.2010 22 Objekt-Relationale Abbildung Beispiel: Assoziationen abbilden ?..1 - ?..? – Assoziationen: Referenzattribut Referenzattribut Vorlesung ... ID 0001 Vorlesung ... dozentID 0013 1..* 1..1 dozent Professor Professor ID 0013 name ... ... 20.05.2010 23 Objekt-Relationale Abbildung Beispiel: Assoziationen abbilden ?..* - ?..* - Assoziationen: Eigene Tabelle Vorlesung ID 0001 ... 0..* 1..* Student ... Vorlesung ... Vorlesung_Student vorlesungID matrikelnummer 00001 1045678 Student matrikelnummer ... 1045678 20.05.2010 24 Objekt-Relationale Abbildung Beispiel: Generalisierungen abbilden Möglichkeit 1: Alle Attribute in eine einzige Tabelle unbesetzte Zellen, eine gemeinsame ID, neues Attribut typ <<abstract>> Person name Student Mitarbeiter matnummer persnummer Person ID name matnummer persnummer typ 20.05.2010 25 Objekt-Relationale Abbildung Beispiel: Generalisierungen abbilden Möglichkeit 2: Eigene Tabelle für jede konkrete Klasse eigene ID für jede Klasse Übernahme der Attribute abstrakter Oberklassen Möglichkeit 3: Eigene Tabelle für jede Klasse gemeinsame ID Zuordnung Oberklasse - Unterklasse über diese ID 20.05.2010 26 Objekt-Relationale Abbildung Beispiel: Alle Klassenattribute in eigene Tabelle abbilden Klassenattribute klassenname attributname attributwert Beispiel: Containerklassen zur Objektverwaltung werden nicht abbgebildet, denn die verwalten ja keine eigenen fachlichen Daten 20.05.2010 27 SQL Structured Query Language (SQL): Deklarative Datenbanksprache zur Definition, Manipulation und Abfrage von Daten kann interaktiv als auch eingebettet (in eine Programmiersprache) verwendet werden Einheitliche Schnittstelle für Zugriff auf Datenbanken Jetzt: kurze Einführung mit einfachen Anweisungen am Beispiel 20.05.2010 28 SQL Wichtige Schlüsselwörter: table record, row field, column Relation Tupel Attribut Datentypen ähnlich wie in Programmiersprachen, abhängig vom betrachteten SQL-Standard bzw. DBS 20.05.2010 29 SQL Definition einer Tabelle: Tabellenname create table Vorlesung G ( ID integer not name varchar(30) not jahr char(4) not semester char(2) not dozent integer ); Attribute Datentypen Ganze Zahl (4 Byte) null, null, null, null, Variabler String der Länge <=30 String der Länge 2 not null muss Wert eingetragen sein 20.05.2010 30 SQL Löschen Definition einer Tabelle: drop table Vorlesung 20.05.2010 31 SQL Elementare Datentypen date Kalenderdatum float Gleitkommazahl decimal(n,m) F Festkommazahl (Vorkomma,Nachkomma) boolean Wahrheitswerte true, false array Feld (erst seit SQL-99-Standard) 20.05.2010 32 SQL Einfügen von Tupeln: insert into Vorlesung values (1,‘Informatik 2‘,‘2009‘,‘SS‘,null); Undefinierter Wert für Dozent 20.05.2010 33 SQL Ändern von Tupeln: update Vorlesung set dozentID = 13 where ID = 1; Neuer Wert in einer Spalte Auswahl der Tupel (der Zeilen) nach einer Bedingung 20.05.2010 34 SQL Löschen von Tupeln: delete from Vorlesung where semester = ‘SS‘; Auswahl der Tupel (der Zeilen) nach einer Bedingung 20.05.2010 35 SQL Abfrage von Tupeln: alle Tupel einer Tabelle select * from Vorlesung; Werte aller Spalten ausgeben Die select-Anweisung gibt immer eine Tabelle zurück 20.05.2010 36 SQL Abfrage von Tupeln: mit Auswahl von Tupeln select * from Vorlesung where dozentID is null; Auswahl der Tupel (der Zeilen) nach einer Bedingung 20.05.2010 37 SQL Abfrage von Tupeln: mit Auswahl von Spalten select distinct name,semester from Vorlesung; Keine Duplikate ausgeben Auswahl von Spalten (Kombination mit Tupelauswahl möglich) 20.05.2010 38 SQL Zusammengehörige Daten sind über mehrere Tabellen verstreut? Natürlicher N Verbund von Tabellen (natural join) select distinct Vorlesung.name,Professor.name from Vorlesung,Professor where vorlesung.dozentID = Professor.ID and semester = ‘SS‘; Auswahl von Spalten verschiedener Tabellen Verbundene Tabellen Kombination von AuswahlBedingungen Identifizierung von Tupeln über Bedingung 20.05.2010 39