Datenbanken ... und alles was dazugehört Aspekte des Themas Datenbanken Datenmaterial Web-Programmierung HTML+CSS+PHP modellieren Datenbanksprache SQL Ändern Löschen Nutzung Verknüpfen ER-Modell Objekt 1 n Erweitern Objekt Physikal. Speichern Attribute Attribute Auswertung Suchen Datenbank system Sortieren Anforderungen tabellarisch strukturieren implementieren Relationale DB Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) optimieren und normalisieren Datenschutz (Sichten) Mehrbenutzerbetrieb Vermeidung von Redundanzen und Anomalien Konsistenz (logisch korrekt) Zugangsberechtigung Thema Datenbanken • Wie funktionieren Datenbanken? – Was genau sind Datenbanken, bzw. DBS? – Wozu braucht man Datenbanken? – Wie benutzt man Datenbanken? – Wie entwirft man Datenbanken? – Wie vermeidet man Probleme mit Datenbanken? Datenbanken verstehen • ist nicht einfach, weil – Sie eine all-inclusive Lösung für verschiedene Probleme mit der Datenverwaltung sind – Sie für sehr verschiedenen Zwecke benutzt werden können, auf verschiedene Arten – Sie mit so vielen anderen Dingen zusammenhängen, besonders bei online Gebrauch Definition Ein Datenbanksystem (DBS) ist eine Zusammenfassung von strukturierten Daten (Datenbank, DB), die von einer speziellen Software (Data Base Management System, DBMS) verwaltet und über eine definierte Schnittstelle vielen Nutzern oder Anwendungen gleichzeitig und kontrolliert zur Verfügung gestellt werden. Die „strukturierten Daten“ • ... stellt man sich am besten als Regale oder Tabellen vor • In welcher Form die Daten tatsächlich gespeichert sind ist unerheblich, da sie sowieso nur über die Schnittstelle (= mit dem Verwalter reden) zugänglich sind Land LNR Name Einwohner Hauptstadt Kontinent DK D IND RWA … Dänemark Deutschland Indien Rwanda … 5.16 81.34 761.00 6.30 … Kopenhagen Berlin Delhi Kigali … Europa Europa Asien Afrika … Schnittstelle SQL • SQL = Structured Query Language. – Bezeichnet eine Sprache zur Kommunikation mit Datenbanken. – Ist international genormt und wird von vielen DBS verstanden. – Wird im Folgenden zur Formulierung von Abfragen eingesetzt. • Syntax einer (einfachen) SQL-Abfrage: SELECT FROM WHERE ORDER [Spalten] [Tabelle] [Bedingung] BY [Attribute]; • Die WHERE- und die ORDER BY-Klausel sind optional. 7 Datenbankzugriff - Ein erstes Beispiel – SELECT Name, Einwohner, Kontinent FROM Land WHERE Einwohner > 10 Land LNR Name Einwohner Hauptstadt Kontinent DK D IND RWA … Dänemark Deutschland Indien Rwanda … 5.16 81.34 761.00 6.30 … Kopenhagen Berlin Delhi Kigali … Europa Europa Asien Afrika … Länder mit über 10 Mio. Einwohner Ergebnistabelle Name Einwohner Kontinent Deutschland Indien … 81.34 761.00 … Europa Asien … 8 Definition Ein Datenbanksystem (DBS) ist eine Zusammenfassung von strukturierten Daten (Datenbank, DB), die von einer speziellen Software (Data Base Management System, DBMS) verwaltet und über eine definierte Schnittstelle vielen Nutzern oder Anwendungen gleichzeitig und kontrolliert zur Verfügung gestellt werden. Die „Verwaltung“ der Daten (DB + DBMS!) Anwendungen Schnittstelle: Structured Query Language (SQL) Datenbanksystem (DBS) Datenbank Management System (DBMS) Datenbank (DB) Die Fundbüro Analogie Kunden Schnittstelle??? Fundbüro Verwalter Fundstücke Definition Ein Datenbanksystem (DBS) ist eine Zusammenfassung von strukturierten Daten (Datenbank, DB), die von einer speziellen Software (Data Base Management System, DBMS) verwaltet und über eine definierte Schnittstelle vielen Nutzern oder Anwendungen gleichzeitig und kontrolliert zur Verfügung gestellt werden. Einzelbenutzersysteme (z.B. Access) „viele Nutzer und Anwendungen“ Verteilte DBS Mehrbenutzersysteme (z.B. Banken mit Filialen) (z.B. in Unternehmen, Lager & Verkauf) Client-Server DBS (z.B. Internetseiten) Multidatenbanksysteme (z.B. Buchungssysteme) Exkurs: Datenbanken im Internet • Das Internet wird interaktiver: WEB 2.0 • Inhalte (z.B. Text, Bilder, Daten,...) einer Seite werden separat gespeichert, als Datensätze in einem DBS, und erst beim Aufruf der Seite dynamisch (meist per PHP) in ein HTMLGerüst eingebaut • Damit kann der Inhalt einer dynamischen Webseite vom Benutzer abhängig gemacht werden (Identität, Rechte, Verhalten, ...) Benutzen Sie diese Elemente* um mithilfe eines Schaubilds zu erklären, wie ein Gästebuch (online) funktioniert * es müssen nicht alle Elemente benutzt werden, manche werden mehrfach gebraucht Browser Zeitachse WWW-Server Datenbank Server HTML Anfrage PHP Verarbeitung mySQL Auswertung CSS POST/GE T Formulare Darstellung Server Parameterübergabe Client Codeübergabe statische Webseiten dynamische Webseiten Meine Lösung Browser Zeitachse WWW-Server statische Webseiten dynamische Webseiten Browser WWW-Server Datenbank Server WWW-Server Browser weiss, wie man WWW-Server findet, versteht HTML (+ Formulare) & CSS, kümmert sich um die Darstellung, kann Parameter übergeben (POST/GET) Client weiss, wie man mit Datenbank Server spricht, kann Parameter auswerten und PHP verarbeiten, gibt HTML-Code an Browser weiter HTML-Dateien, PHP Server Client kann mySQL Anfragen beantworten und Daten dauerhaft speichern, kümmert sich um die Verwaltung der Daten mySQL Server Forms (HTML) <html><body> <form> <select> <option>Paint</option> d <option>Brushes</option>d <option>Erasers</option> e </select> Quantity: d d <input type="text" /> d e <input type="submit" /> d e </form> </body></html> HTML PHP <html><body> <form action="process.php" method="get"> <select name="item"> <option>Paint</option> <option>Brushes</option> <option>Erasers</option> </select> Quantity: <input name="quantity" type="text" /> <input type="submit" /> </form> </body></html> d d e d d d e d e http://www.mywebsite.ch/process.php?item=##&quantity=##" PHP SQL HTML <html><body> <?php $quantity = $_GET['quantity']; $item = $_GET['item']; $result = mysql_query("SELECT price FROM goods WHERE item=$item") $price = ... echo "You ordered ". $quantity . " " . $item . ".<br />"; echo "Total price: ". $quantity*$price.<br />"; ?> </body></html> Wo wohnen die Daten? Browser Zeitachse WWW-Server Browser WWW-Server statische Webseiten dynamische Webseiten Datenbank Server DBS DBMS DB WWW-Server Browser HTML kann Daten enthalten, alle vom Browser dargestellten Daten müssen letztendlich in HTML eingebunden sein PHP kann Daten enthalten PHP kann auch Daten lokal lesen oder speichern, z.B. CSV, XML die Datenbank ist speziell darauf ausgerichtet Daten zu speichern und zu verwalten Darstellung: statisch Verarbeitung: dynamisch Bereitstellung: persistent Client Dateien, PHP Server Client mySQL Server Definition Ein Datenbanksystem (DBS) ist eine Zusammenfassung von strukturierten Daten (Datenbank, DB), die von einer speziellen Software (Data Base Management System, DBMS) verwaltet und über eine definierte Schnittstelle vielen Nutzern oder Anwendungen gleichzeitig und kontrolliert zur Verfügung gestellt werden. ... „kontrolliert zur Verfügung gestellt“ Datenabstraktion (Data Abstraction) • Die Sichten (view level): – In den Sichten werden Teilmengen der Daten dargestellt. Die Sichten sind auf die Bedürfnisse/Rechte der Benutzer zugeschnitten • Die logische/konzeptionelle Ebene (conceptual level): – Auf dieser Ebene wird mittels eines Datenbankschemas festgelegt, welche Daten abgespeichert sind. • Die physische Ebene (physical level): – Auf dieser Ebene ist beschrieben, wie die Daten auf dem Sekundärspeicher abgelegt sind. Wieder ein Schichtenmodell Anwendungsebene (Sichten) Schnittstelle logische Ebene (Tabellen) Schnittstelle physikalische Ebene (Bits) Anwendung Betriebssystem Hardware Java (Programmierer) Bytecode (JVM) Maschinencode (CPU) Wozu braucht man eigentlich Datenbanken? • Suchen Sie ein Beispiel (z.B. eine Website, eine Organisation, eine Anwendung, etc.), von dem Sie wissen (oder glauben), dass eine Datenbank benutzt wird. • Notieren Sie ihre Vermutungen darüber, warum hier eine Datenbank eingesetzt wird Wozu Datenbanken? • Arbeitsblätter: – Schichten – Anforderungen • Zusammenfassung: – Vorteile von DBS? – Nachteile von DBS? Vorteile von Datenbanksystemen • • • • • • • • • • • Redundanz und Inkonsistenz vermeiden durch die zentrale Datenverwaltung Dauerhafte Speicherung von großen Datenbeständen Effiziente Verwaltung von großen Datenbeständen (Speicherplatz, Zugriffsgeschwindigkeit) Einheitliche Schnittstelle (Anfragesprache) für den Zugriff auf Daten Unterschiedliche Daten können leicht verknüpft und extrahiert werden Mehrere Benutzer oder Anwendungen können gleichzeitig mit Daten arbeiten Integritätsverletzungen werden intern geregelt bzw. vermieden Verschiedenen Benutzern/Anwendungen können verschiedene Zugriffsrechte zugeordnet werden Physische Datenunabhängigkeit, Anwendungen von Modifikationen an der physischen Speicherstruktur nicht betroffen Logische Datenunabhängigkeit, Änderungen an der logischen Datenstruktur beeinflussen Anwendungen nicht Ermöglicht zentrale Strategien gegen Soft- und Hardwareausfälle Nachteile von Datenbanksystemen • nur noch indirekter Zugriff auf Daten • zusätzliche Abstraktionsebene • zusätzlicher Aufwand (Datenbankserver bereitstellen, extra Anfragesprache lernen) • zu grosse Datenbanken sind unpraktisch und unübersichtlich • wenn es doch Probleme gibt, dann aber richtig Wer benutzt ein DBS? und warum (nicht)? • • • • • • • • Amazon? Wikipedia? Ryanair? Ihre Bank? Ein Chat? Ein Blog? Ihr E-mail Client? www.gymburgdorf.ch? • • • • • • iTunes? iPhoto? Picasa? Flickr? Google? Windows? Was für Daten werden in einem DBS verwaltet? • Was ist überhaupt ein Datum? • Welche Datenformate werden unterstützt? • In welcher Form existieren die Daten in der Datenbank? Kunden Fundbüro Verwalter Fundstücke Wie speichert eine Datenbank Daten? Name: Meier Name: Meier Name: Meier Name: Meier Name:Roger Meier Name:Roger Meier Vorname: Vorname: Name: Meier Name:Roger Meier Vorname: Roger Vorname: Name: Meier Name: Roger Meier Vorname: Roger Vorname: Konto:Vorname: 123-4456Konto:Vorname: 123-4456Name:Roger Meier Name: Roger Meier Konto: 123-4456Konto: 123-4456Name: Roger Meier Name: Roger Meier Wert: 1235.12 Vorname: Wert: 1235.12 Vorname: Konto: 123-4456Konto: 123-4456Name: Meier Name: Meier Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger Konto: 123-4456Konto: 123-4456Name: Meier Name: Meier Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Winkel Name: Meier Winkel 2 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Meier Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Name: Meier Name: Moser Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Winkel 2 Wert: Winkel 2 Wert: 1235.12 Vorname: Roger 1235.12 Vorname: Roger 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Winkel 2 Winkel 2 Wert: 1235.12 Vorname: Roger Wert: 1235.12 Vorname: Paul 9887 Oberdorf Adresse: Konto: 123-4456- 9887 Oberdorf Adresse: Konto: 123-4456Winkel 2 Wert: Winkel 2 Wert: 1235.12 1235.12 9887 Oberdorf 9887 Oberdorf Adresse: Konto: 123-4456Adresse: Konto: 123-4456Winkel 2 Winkel 2 Wert: 1235.12 Wert: 1235.12 9887 Oberdorf Adresse: Konto: 123-4456- 9887 Oberdorf Adresse: Konto: 123-144Winkel 2 Wert: Winkel 2 Wert: 1235.12 1235.12 9887 Oberdorf 9887 Oberdorf Adresse: Adresse: Winkel 2 Wert: 1235.12 Winkel 2 Wert: 99877778 9887 Oberdorf 9887 Oberdorf Adresse: Adresse: Winkel 2 Winkel 2 9887 Oberdorf 9887 Oberdorf Adresse: Adresse: Winkel 2 Winkel 2 9887 Oberdorf 9887 Oberdorf Adresse: Adresse: Winkel 2 Winkel 2 9887 Oberdorf 9887 Oberdorf Winkel 2 Winkel 2 9887 Oberdorf 9887 Oberdorf Winkel 2 Landweg 12 9887 Oberdorf 9887 Oberdorf 9887 Oberdorf 9887 Oberdorf 9887 Oberdorf 1554 Gluck Wie speichert eine DB Daten Mechanischer Vorgänger Hüte Nummer: 1445-4556 Nummer: 1445-4556 Nummer: 1445-4556 Nummer: 1445-4556 Nummer: 1445-4556 Bücher Gegenstand: Schlüssel Gegenstand: Schlüssel Nummer: 1445-4556 Gegenstand: Schlüssel Nummer: 1445-4556 Gegenstand: Schlüssel Nummer: Gegenstand: Schlüssel Farbe: Schirme 1445-4556 Farbe: Nummer: 1445-4556 Gegenstand: Farbe: Gegenstand: Schlüssel Nummer: -- Schlüssel 1445-4556 Farbe: -- Schlüssel Gegenstand: Nummer: 1445-4556 Farbe: Funddatum: 12.09.2000 Funddatum: 12.09.2000 Nummer: 14556 Gegenstand: Farbe: -- Schlüssel Funddatum: 12.09.2000 Farbe: Gegenstand: Schlüssel Funddatum: 12.09.2000 Farbe: -- Schlüssel Gegenstand: Funddatum: 12.09.2000 Fundort: Fundort: Bahnhof Art: Bahnhof Farbe: Funddatum: 12.09.2000 Fundort: Bahnhof Funddatum: 12.09.2000 Farbe: - Schlüssel Fundort: Bahnhof Funddatum: 12.09.2000 Farbe: -Fundort: Bahnhof Finder: Hegi Roger Finder: Hegi Roger Farbe: Funddatum: 12.09.2000 Fundort: Bahnhof Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Brandweg Seeweg 12 12 Brandweg Seeweg 12 12 Funddatum: 12.09.2000 Fundort: Bahnhof Finder: Hegi Roger Brandweg Seeweg 12 12 Finder: Hegi Roger Fundort: Bahnhof Brandweg Seeweg 12 12 Finder: Hegi Roger Fundort: Bahnhof Brandweg Seeweg 12 12 9876 Zuchwil 9876 Zuchwil Fundort: Bahnhof Finder: Hegi Roger Brandweg Seeweg 12 12 9876 Zuchwil Brandweg Seeweg 12 12 Finder: Hegi Roger 9876 Zuchwil Brandweg Seeweg 12 12 Finder: Hegi Roger Zuchwil Finder: 9876 Hegi Roger Brandweg Seeweg 12 9876 Zuchwil 9876 Zuchwil Brandweg Seeweg 1212 12 9876 Zuchwil Brandweg Seeweg 12 12 Brandweg 12 9876 Zuchwil 9876 Zuchwil 9876 9876 Zuchwil Zuchwil Wie speichert eine DB Daten Name: Kunz Name: Kunz Vorname: Andy Name: Waldweg Kunz 12 Vorname: Andy Adresse: Name: 9876 Kunz Vorname: Andy Adresse: Waldweg 12 Zuchwil Name: 9876 Kunz Vorname: Andy Adresse: Waldweg 12 Zuchwil Tel.: 145’78’99 Name: Waldweg Kunz 12 Vorname: Andy Adresse: 9876 Zuchwil Tel.: 145’78’99 Geb.: 15.September 1974 Name: 9876 Kunz Vorname: Andy Adresse: Waldweg 121974 Zuchwil Tel.: 145’78’99 Geb.: 15.September Name: 9876 Kunz Vorname: Andy Adresse: Waldweg 12 Zuchwil Tel.: 145’78’99 Geb.: 15.September 1974 Vorname: Andy Adresse: Waldweg 121974 9876 Zuchwil Tel.: 145’78’99 Geb.: 15.September Adresse: Waldweg 121974 9876 Zuchwil Tel.: 145’78’99 Geb.: 15.September 9876 Zuchwil Tel.: 145’78’99 Geb.: 15.September 1974 Tel.: Geb.: Geb.: 145’78’99 15.September 1974 Nummer: 14555 Art:Nummer: Schlüssel 14556 Farbe: Art: - Funddatum: Farbe: 12.09.2000 - Schlüssel 15.September 1974 Fundort: Funddatum:Bahnhof 12.09.2000 Finder: Roger Fundort: HegiBahnhof Finder: Brandweg 12 Hegi Roger 9876Brandweg Zuchwil 12 9876 Zuchwil Elemente einer Tabelle Tabelle, Entitätsmenge Eigenschaftswerte ~ Domain Zeile, Datensatz, Entität Attribute, Eigenschaften Schlüsselattribut , Hauptschlüssel Tabellenname Fundstücke Nummer Art Farbe Funddatum Fundort Finder 14555 Schirm Blau 14556 Schlüssel - 14557 ... ... 08.13.2000 Bus Nr.12 Stalder Roger Wichleren 8779 Neuhausen 09.12.2000 Bahnhof Hegi Roger Brandweg 12 9876 Zuchwil ... ... ... Relationsschema Zeile, Datensatz, Entität Attribute, Eigenschaften Eigenschaftswerte Schlüsselattribut , Hauptschlüssel Tabelle, Entitätsmenge Tabellenname Fundstücke{Nummer, Art, Farbe, Funddatum, Fundort, Finder} Definition einer Tabelle Zeile, Datensatz, Entität Attribute, Eigenschaften Tabelle, Entitätsmenge Eigenschaftswerte Schlüsselattribut , Hauptschlüssel Tabellenname Fundstücke Attribut Beispiel Nummer: 14556 Art: Schlüssel Farbe: - Funddatum: 12.09.2007 Fundort: Bahnhof Finder: Hegi Rütli Brandweg 12 9876 Zuchwil Typ? Schlüssel? Obligatorisch? Extras? Einschränkungen der Eigenschaftswerte Fundstücke Attribut Beispiel Typ? Schlüssel? Obligatorisch? Extras? Nummer: 14556 int ja ja auto incr. Art: Schlüssel char nein ja Farbe: - char nein nein Funddatum: 12.09.2007 date nein nein Fundort: Bahnhof char nein nein Finder: Hegi Rütli Brandweg 12 9876 Zuchwil char nein nein • Warum ist das wichtig? – technisch: Speicherplatz reservieren, etc. – logisch: Fehler vermeiden auto? Übungsaufgabe Buch Attribut Beispiel Typ? Schlüssel? Obligatorisch? Extras? • Sie wollen mithilfe eines DBS eine Anwendung zur Bibliotheksverwaltung erstellen. Definieren Sie eine Tabelle, in die alle wichtigen Eigenschaften der Bücher eingetragen werden können. • Implementieren sie diese Tabelle in phpMyAdmin und tragen sie mindestens 5 Datensätze ein Probleme mit Tabellen • Welche (potentiellen) Probleme sehen Sie mit der untenstehende Tabelle? Fundstücke Anzahl Art Farbe Funddatum Fundort Finder 1 Schirm Blau 4 2 08.13.2000 Bus Nr.12 Roger Stalder 9876 Neuhausen Schlüssel - 09.12.2000 Bahnhof Hegi Roger Brandweg 12 9876 Zuchwil Schrim & Schal 21.05.2009 Hauptbahnhof Hegi Roger Brandweg 12a/7 9876 Zuckwil bunt Schon besser Fundstücke ID Anzahl Art Farbe Funddatum Fundort Vornam Nachname Adresse e 17 1 Schirm Blau 08.13.2000 Bus Nr.12 Roger Stalder 9876 Neuhausen 18 4 Schlüssel - 09.12.2000 Bahnhof Hegi Roger Brandweg 12 9876 Zuchwil 19 1 Schrim bunt 21.05.2009 Hauptbahnho f Hegi Roger Brandweg 12a/7 9876 Zuckwil 20 1 Schal braun 21.05.2009 Hauptbahnho f Hegi Roger Brandweg 12a/7 9876 Zuckwil • Aber was machen wir mit der Redundanz? Relationale Datenbanken Fundstücke{ID, Anzahl, Art, Farbe, Funddatum, Fundort, ↑FinderID} Fundstücke ID Anzahl Art Farbe Funddatum Fundort FinderID 17 1 Schirm Blau 08.13.2000 Bus Nr.12 12 18 4 Schlüssel - 09.12.2000 Bahnhof 7 19 1 Schrim bunt 21.05.2009 Hauptbahnho f 7 20 1 Schal braun 21.05.2009 Hauptbahnho f 7 Fremdschlüssel, verweist auf den Hauptschlüssel einer anderen Tabelle Finder ID Vorname Nachname Strasse Hausnummer Zusatz PLZ 12 Roger Stalder 9876 Neuhausen 7 Roger Hegi Brandweg 12 a/7 Ort 9876 Zuchwil Finder{ID, Vorname, Nachname, Strasse, Hausnummer, Zusatz, PLZ, Ort} SQL-Abfragen mit mehreren Tabellen R S RxS a b c d e a b R.c S.d e 1 2 3 3 7 1 2 3 3 7 4 5 6 5 8 1 2 3 5 8 6 9 1 2 3 6 9 4 5 6 3 7 4 5 6 5 8 4 5 6 6 9 Schreibweise in mySQL: SELECT * FROM R,S WHERE R.c=S.d AND e < 8 mySQL in Kürze: • R x S ist ein Karthesisches Produkt • zusammen mit einer Selektion wird ein Verbund (Join) daraus • sonst gibt es nur noch die Projektion (z.B. SELECT a,e) – Achtung, identische Datensätze werden nur einmal zurückgegeben!!!!! • zusätzliche Selektionen können mit AND angefügt werden SQL-Abfragen mit mehreren Tabellen R S RxS a b c d e a b R.c S.d e 1 2 3 3 7 1 2 3 3 7 4 5 6 5 8 4 5 6 6 9 6 9 RxS mySQL in Kürze: a b R.c S.d e 1 2 3 3 7 null null null 5 8 4 9 5 6 6 SELECT * FROM R JOIN S ON R.c=R.s SELECT * FROM R RIGHT JOIN S ON R.c=R.s • ein JOIN kann auch direkt erzeugt werden – JOIN ... ON ... vermeidet das Erstellen der grossen (Verbund-)Tabelle • die Alternativen RIGHT JOIN und LEFT JOIN – ergeben auch dann eine Zeile, wenn das ON-Attribut auf der anderen Seite leer (NULL) ist • Land und Kontinent werden in zwei getrennten Tabellen gespeichert und über eine Beziehung miteinander verknüpft. • Zur Verknüpfung dient ein Kürzel des Kontinents, das als Fremdschlüssel in Land gespeichert wird. LNR Name Einwohner Hauptstadt Kontinent DK D IND RWA Dänemark Deutschland Indien Rwanda 5.16 81.34 761.00 6.30 Kopenhagen Berlin Delhi Kigali Europa Europa Asien Afrika Land Kontinent LNR Name … KNR KNR Name DK D IND RWA Dänemark Deutschland Indien Rwanda … … … … EU EU AS AF EU AS AF Europa Asien Afrika Schlüsselattribut aus Kontinent • Jeder Datensatz wird durch einen Schlüssel (Primärschlüssel) eindeutig identifiziert. Der Schlüssel – kann aus mehreren Attributen zusammengesetzt sein – ist minimal, d.h. es kann kein Attribut weggelassen werden – wird meist durch Unterstreichung gekennzeichnet. • Um zusammengesetzte Primärschlüssel zu vermeiden wird oft ein zusätzliches, eindeutiges Schlüsselattribut hinzugefügt, z.B. eine Landeskennung oder ID Land LNR Name Einwohner Hauptstadt Kontinent DK D IND RWA Dänemark Deutschland Indien Rwanda 5.16 81.33 761.00 6.30 Kopenhagen Berlin Delhi Kigali Europa Europa Asien Afrika Schlüsselattribut • Zwischen den Tabellen bestehen Beziehungen (Relationen) – z.B. Kontinent eines Landes Master PKey Detail Data FKey PKey Data • Die Verknüpfung erfolgt grundsätzlich dadurch, – dass ein Fremdschlüssel der einen Tabelle – auf den zugehörigen Primärschlüssel der anderen Tabelle zeigt. • Vorteile: Daten werden jeweils nur in einer Tabelle gespeichert. Datenänderungen sind leichter durchzuführen. Strukturänderungen (z.B. das Hinzufügen der Kontinentfläche) lassen sich meist mit geringem Aufwand realisieren. Die Struktur lässt flexiblere Abfragen zu. SQL – einfache Joins • Müssen in SQL Daten aus mehreren Tabellen entnommen werden, so werden sog. „Joins“ gebildet. – Die Abarbeitung eines Joins in mehreren Schritten kann an folgendem Beispiel veranschaulicht werden: • Es sollen alle Länder mit ihren Kontinenten ausgegeben werden, die mehr als 10 Mio. Einwohner haben. Land Kontinent LNR Name Einwohner KNR KNR Name DK D IND RWA Dänemark Deutschland Indien Rwanda 5.16 81.34 761.00 6.30 EU EU AS AF EU AS AF Europa Asien Afrika 1. Cross-Join („jede Zeile mit jeder“) LNR Name Einwohner KNR KNR Name DK D IND RWA Dänemark Deutschland Indien Rwanda 5.16 81.34 761.00 6.30 EU EU AS AF EU AS AF Europa Asien Afrika LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … 5.16 5.16 5.16 81.34 81.34 81.34 761.00 761.00 761.00 … EU EU EU EU EU EU AS AS AS … EU AS AF EU AS AF EU AS AF … Europa Asien Afrika Europa Asien Afrika Europa Asien Afrika Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … Kontinent Land – SELECT * FROM Land, Kontinent 2. Einschränken auf „passende“ Datensätze. – Es dürfen nur die Zeilen genommen werden, für die die „Land“ und die „Kontinent“ Tabelle Daten des gleichen Kontinents enthalten. – Dies wird durch die sog. „Join-Bedingung“ erreicht. – SELECT * FROM Land, Kontinent WHERE Land.KNR= Kontinent.KNR LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … 5.16 5.16 5.16 81.34 81.34 81.34 761.00 761.00 761.00 … EU EU EU EU EU EU AS AS AS … EU AS AF EU AS AF EU AS AF … Europa Asien Afrika Europa Asien Afrika Europa Asien Afrika Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … 2. Einschränken auf „passende“ Datensätze (2). – Es sollen nur Länder mit > 10 Mio. Einwohner gezeigt werden. – Momentan würde auch „Dänemark“ ausgegeben werden. Also muss eine weitere Bedingung erfüllt sein: – SELECT * FROM Land, Kontinent WHERE Land.KNR = Kontinent.KNR AND Land.Einwohner > 10 LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … 5.16 5.16 5.16 81.34 81.34 81.34 761.00 761.00 761.00 … EU EU EU EU EU EU AS AS AS … EU AS AF EU AS AF EU AS AF … Europa Asien Afrika Europa Asien Afrika Europa Asien Afrika Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … 3. Einschränken auf gesuchte Spalten. – Nur bestimmte Spalten werden ausgegeben. – SELECT Land.Name, Land.Einwohner, Kontinent.Name FROM Land,Kontinent WHERE Land.KNR = Kontinent.KNR AND Land.Einwohner > 10 LNR Name Einwohner KNR KNR Name D Deutschland IND Indien … … 81.34 761.00 … EU AS … EU AS … Europa Asien Alternative: Name Einwohner Name Deutschland Indien … 81.34 761.00 … Europa Asien … ... FROM Land JOIN Kontinent ON Land.KNR = Kontinent.KNR http://dev.mysql.com/doc/refman/5.5/en/select.html Goldene Tabellenregeln 1. Es braucht IMMER einen eindeutigen Hauptschlüssel (am besten, Sie nennen ihn immer ID) 2. Nur ein Wert pro Attribut (richtiges Format) 3. Wertemenge einschränken (z.B. mit Eingabemaske) 4. Nur ein Datensatz pro Zeile 5. Redundanz vermeiden Die HTML-Webseite phpMyAdmin kann lokal aufgerufen werden (über IP 127.0.0.1) und stellt ein Interface für die interaktive Datenbankabfrage zur Verfügung – kann auch benutzt werden, um SQL zu lernen XAMPP Browser (www-)Server Datenbank Server (mySQL) (Apache) DBS inklusive PhP DBMS DB Browser Client Dateien, PHP Server Client mySQL Server Arbeitsauftrag • Wenden Sie die goldenen Regeln auf ihre Bibliotheksverwaltung an • Erstellen Sie die daraus entstehenden Tabellen (>=2) in phpMyAdmin und tragen Sie jeweils mindestens fünf Datensätze ein • Benutzen Sie dann den Abfrageeditor, um per mySQL Teilmengen der Daten zu erfragen, z.B – alle Titel eines bestimmten Autors – alle Autoren, von denen nach 2000 ein Buch erschienen ist – ect... • (schnelle) arbeiten Sie mit mindestens drei Tabellen – nehmen Sie beispielsweise an, dass es von einem Buch mehrere Exemplare geben kann Aspekte des Themas Datenbanken Datenmaterial Web-Programmierung HTML+CSS+PHP modellieren Datenbanksprache SQL Ändern Löschen Nutzung Verknüpfen ER-Modell Objekt 1 n Erweitern Objekt Physikal. Speichern Attribute Attribute Auswertung Suchen Datenbank system Sortieren Anforderungen tabellarisch strukturieren implementieren Relationale DB Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) optimieren und normalisieren Datenschutz (Sichten) Mehrbenutzerbetrieb Vermeidung von Redundanzen und Anomalien Konsistenz (logisch korrekt) Zugangsberechtigung Datenbankentwicklung überkorrekt: Systeminformation einholen Was wird hier modelliert? Wozu wird die DB gebraucht? ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Datenmodellierung Ziel: Beschreibung der Struktur großer Datenmengen (Kundendaten, Bibliotheksbestand) Beschrieben werden: - die beteiligten Objekte (Entitäten, Datensätze, ... ) - deren Eigenschaften (Attribute) - sowie die statischen Beziehungen zwischen den Objekten (ist Teil von, ist Chef von, ..) NICHT beschrieben werden: - Abläufe, Datenflüsse oder Interaktionen, zeitliches Verhalten etc. Verschiedene Notationen für ER-Diagramme: " , (!@63$#. )!B* 3!@; 47 * +, 88, 3!6$. !+, (!" , 4A#/. * 4D. #3+#(+!AE(!+6, !" #. , 3: * +, 886, (' 32% !#' /0!C , 33! , $!' 3. , ($/06, +86/0, !2(#A6$/0, !" #($. , 88' 32$A* (: , 3!26>. ?!!" #$!@; 47 *+, 88!C ' (+, !FGHI !B* 3!J , . , (! K0, 3! 63! $, 63, (! L, (MAA, 3. 86/0' 32! NO0, ! @3. 6. P4; , 8#. 6* 3$06Q! 7 * +, 8R! B*(2, $. , 88. ?! <' $! +6, $, : ! 1(' 3+!C , (+, 3!C 6(!' 3$!#' /0!B* (!#88, : !: 6. !+, (!$* 2, 3#33. , 3!K0, 34S * . #. 6* 3!>, A#$$, 3?! ! " #$ % &' (&) ) *+% , +- . *, #/ 01&1% 0, + " 6, !K0, 34S *. #. 6* 3!>, $. , 0. !#' $!+, 3!' 3. , 3!#>2, >68+, . , 3!+(, 6!@8, : , 3. , 3!-T3* . , 39% !+6, !+' (/0! U636, 3!-T#3. , 39!: 6. , 63#3+, (!B, (>' 3+, 3!C , (+, 3?!D6, !>68+, 3!, 63, 3!1(#Q0, 3?! " 6, !@3. 6. V. !$. , 88. !, 63!63+6B6+' , 88!6+, 3. 6A6)6, (>#(, $!W>X, &. !+, (!= 6(&86/04 &, 6. !+#(?!-Y' : !5, 6$Q6, 8!<32, $. , 88. , (!N7 E88, (R% !J (* X, &. !NZ[ Z[ R9! ! @63, !@3. 6. V. !&#33!: , 0(, (, !<. . (6>' . , !0#>, 3?!\ 3. , (#. . (6>' . , !$63+!#' /0! )' 2, 8#$$, 3!-)?5?!&M33. , !+#$!<. . (6>' . !NS #: , R!63!+6, !\ 3. , (#. . (6>' . , ! NL* (3#: , R!' 3+!NS #/03#: , R!#' A2, . , 68. !C , (+, 39! ! @63, !5, )6, 0' 32!B, (>63+, . !)C , 6!@3. 6. V. , 3?!WQ. 6* 3#8!&#33!+, (!1(#+!+, (! 5, )6, 0' 32!-+6, !T#(+63#86. V. 9!>, 6!+, 3!L, (>63+' 32$8636, 3!3* . 6, (. !C , (4 +, 3?! ! ! 5, 6$Q6, 8F! Eine Person kann an, einem " 6, !5, )6, 0' 32!)C 6$/0, 3!+, 3!@3. 6. V. , 3!ND* (. 6: , 3. R!' 3+!N U#2, (>, $. #3+R!C 6(+!+'nur (/0!+6 !5, )6, 4 Ort 0' 32!N6$. !B* (0#3+, 3R!#' $2, +(E/&. ?!7 #3!&M33. , !$#2, 3!N, 63!<(. 6&, geboren 8!+, $!D* (. 6:worden , 3. , $!6$.sein !6: !U#2, (! B* (0#3+, 3R?!" 6, !T#(+63#86. V. !C 6(+!+' (/0!+6, !>, 6+, 3!@ 3!8 63&$!' 3+!(,für /0.mehrere $!B* 3!+, (!5, 4 63$, Ein Ort kann (0 –)6,n) 0' 32!#' $2, +(E/&. ?! Personen der Geburtsort sein Musterlösung Schulszenario Datenbankentwicklung überkorrekt: Systeminformation einholen Was wird hier modelliert? Wozu wird die DB gebraucht? ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Auflösen von n:m-Beziehungen n Flug Nr m gebucht von Datum Flug Nr 1 Name Nr Teil von Datum Kunde n bezahlt Buchung m Buchungsdatum 1 getätig t von Nr Kunde Name Auflösen von n:m-Beziehungen n Flug Nr m gebucht von Datum Flug Nr 1 Name Nr Teil von Datum Kunde n bezahlt Buchung m Buchungsdatum 1 getätig t von Nr Kunde Name In Relationales Modell übersetzen: Flug Nr 1 Teil von Datum n bezahlt Buchung m Buchungsdatum 1 getätig t von Kunde Nr Name • Flug{Fnr, Datum} • Buchung{Bnr, Fnr, Knr, Buchungsdatum, bezahlt} • Kunde{Knr, Name} Und jetzt für das Schulszenario (genauer mit UML) Datenbankentwicklung überkorrekt: Systeminformation einholen Was wird hier modelliert? Wozu wird die DB gebraucht? ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Redundanz vermeiden • Gründe: 1. Speicherplatz sparen 2. Vermeidung von Anomalien 3. Es ist gerade die Grundidee von Relationalen Datenbanken, genau die richtige Art von Information durch die (z.B. mySQL-) Abfrage zusammenzusuchen • Das schrittweise Eliminieren von (potentieller) Redundanz nennt man „normalisieren“, meist werden dabei viele kleine Tabellen aus wenigen grossen erzeugt Welche Arten von Anomalien gibt es? Was ist eine Änderungs-Anomalie? • Falls eine Änderung der Daten vorgenommen werden muss, muss dies an mehreren Stellen in der Relation geschehen, da sonst die Konsistenz bedroht ist. Was ist eine Einfüge-Anomalie? • Ein neuer Datensatz kann erst eingetragen werden, wenn alle X Informationen vorliegen. Falls Nullwerte erlaubt sind, gibt es dann Probleme falls die fehlende Info zum Schlüssel gehört. Was ist eine Lösch-Anomalie? • Wird eine Information aus der Relation entfernt, so gehen mehr Informationen verloren, als gewollt war. Tritt oft auf wenn in einer Relation mehr als eine Entity vertreten ist! Lieferant {ID, LName, LAdresse, Ware, Preis} Anomalien konkret Tabelle: Lieferant {ID, LName, LAdresse, Ware, Preis} Redundanz: Die Adresse wird für jede Ware, die ein Lieferanten liefert, wiederholt Anomalien möglich 1. 2. 3. Änderungs-Anomalie (Potentielle Inkonsistenz) Als Konsequenz der Redundanz kann man die Adresse eines Lieferanten in einem Datensatz verändern, sie aber in anderen Datensätzen unberührt lassen. Auf diese Weise bekommt man zwei verschiedene Adressen für denselben Lieferanten. Einfüge-Anomalien Man kann keine Adresse für einen Lieferanten haben, wenn er nicht mindestens eine Ware liefert. Es ist möglich, in die Ware- und Preiskomponente NULL-Werte für diese Lieferanten einzugeben, dann müsste dieser Datensatz aber gelöscht werden, wenn eine Ware für diesen Lieferanten eingegeben wird. Lösch-Anomalien Invers zu Problem 2 kann es passieren, dass man alle Waren eines Lieferanten löscht, und dadurch auch seine Adresse verliert. Die Lösung: Verteilung auf zwei Tabellen/Relationsschemata: 1. Lieferant {ID, LName, LAdresse} 2. Ware {ID, Ware, Preis, LID} Mit einer vorhergehenden Stufe der Datenmodellierung (ER-Diagramm) wäre dieses Problem vermutlich gar nicht aufgetreten, da klar sein sollte, dass Lieferant und Ware zwei unterschiedliche Entitäten sind! Datenbankentwicklung überkorrekt: Systeminformation einholen Was wird hier modelliert? Wozu wird die DB gebraucht? ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Normalformen (s. datenbanktheorie.pdf, S.31-52) • Erste Normalform (1NF): Alle Merkmalswerte sind atomar (keine Wiederholungsgruppen zugelassen). • Zweite Normalform (2NF): Nichtschlüsselmerkmale sind voll vom Schlüssel abhängig. • Dritte Normalform (3NF): Es bestehen keine transitiven Abhängigkeiten. • Boyce-Codd Normalform (BCNF): Nur Abhängigkeiten vom Schlüssel zugelassen. • Vierte Normalform (4NF): Keine Mehrwertabhängigkeiten. • Fünfte Normalform (5NF): Nur triviale Verbundabhängigkeit. Name AbtNr Abteilung Projekt Müller 5 EDV II (6, MySQL, 50%), (3, DV2010, 50%) Schulze 3 Rechenzentrum (3, DV2010, 100%) 1. Normalform Eine Relation befindet sich in der ersten Normalform, wenn an allen Kreuzungspunkten von Zeilen und Spalten nur atomare Werte auftreten. Ein Datensatz muss durch den Primärschlüssel eindeutig identifizierbar sein. Das Attribut Projekt ist nicht atomar, da es Mehrfachattribut ist. Mehrfachattribute werden in einer eigenen Tabelle ausgelagert. Außerdem fehlt ein Primärschlüssel. Besser: PersNr Name AbtNr Abteilung 123 Müller 5 876 Schulze 3 EDV II Rechenzentrum PersNr ProjNr Projekt Zeit 123 6 MySQL 50% 123 3 DV2010 50% 876 3 DV2010 100% PersNr ProjNr Projekt Zeit 123 6 MySQL 50% 123 3 DV2010 50% 876 3 DV2010 100% 2. Normalform Eine Relation befindet sich in der 2. Normalform, wenn sie sich in der ersten befindet und jedes Nicht-Schlüssel-Attribut funktional abhängig ist vom Gesamtschlüssel, nicht dagegen von Schlüsselteilen. Das Attribut Projekt ist funktional abhängig vom Attribut ProjNr, nicht jedoch von PersNr. Das Attribut Zeit ist dagegen von gesamten Primärschlüssel (PersNr, ProjNr) funktional abhängig. Also nochmal aufteilen: PersNr ProjNr Zeit MySQL 123 6 50% DV2010 123 3 100% 876 3 50% ProjNr Projekt 3 3 PersNr Name AbtNr Abteilung 123 Müller 5 876 Schulze 3 EDV II Rechenzentrum 3. Normalform Eine Relation befindet sich in der 3. Normalform, wenn sie sich in der 2. Normalform befindet und keine funktionalen Abhängigkeiten zwischen NichtSchlüssel-Attributen existieren. Anders ausgedrückt: Die Relation darf keine transitiven Abhängigkeiten aufweisen. Das Attribut Abteilung ist nur indirekt vom Primärschlüssel PersNr abhängig. Vielmehr ist das Attribut Abteilung von der AbtNr abhängig. Also auch hier Aufspaltung in zwei Tabellen: PersNr Name AbtNr AbtNr Abteilung 123 Müller 5 5 EDV II 876 Schulze 3 3 Rechenzentrum Zusammengefasst: Goldene Tabellenregeln 1. Es braucht IMMER einen eindeutigen Hauptschlüssel (am besten, Sie nennen ihn immer ID) 2. 3. 4. 5. Je Datensatz nur ein Wert pro Attribut Wertemenge einschränken (z.B. mit Eingabemaske, Domain) Nur ein Datensatz pro Zeile Redundanz vermeiden (oder liege ich falsch? s. datenbanktheorie.pdf, S. 31-52) Aspekte des Themas Datenbanken Datenmaterial Web-Programmierung HTML+CSS+PHP Datenbanksprache mySQL modellieren Nutzung Objekt n Erweitern Objekt Physikal. Speichern Attribute Attribute Ändern Löschen Verknüpfen ER-Modell 1 Auswertung Suchen Daten bank system Sortieren Anforderungen tabellarisch strukturieren implementieren Relationale DB Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) optimieren und normalisieren Datenschutz (Sichten) Mehrbenutzerbetrieb Vermeidung von Redundanzen und Anomalien Konsistenz (logisch korrekt) Zugangsberechtigung Datenbankentwicklung überkorrekt: Systeminformation einholen Was wird hier modelliert? Wozu wird die DB gebraucht? ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Externes Programm (z.B. PHP) startet Abfragen Scriptsprache (z.B. mySQL) Informationsaustausch mit der Umgebung wertet Ergebnisse aus stellt Ergebnisse dar Software interpretiert und beantwortet Anfragen verwaltet Daten und stellt Konsistenz sicher regelt mögliche Konflikte Schnittstelle mit Benutzer Daten Verschiedene Views umfangreicher persistenter Datenbestand physikalische Speicherung Wie führt man eine Normalisierung durch? (Was ist zu beachten?) • Normalisierung = Sicherstellen, dass die Tabellen keine Redundanzen enthalten (formale Definition, Algebra) • Erste Normalform (1NF): Alle Merkmalswerte sind atomar • Dritte Normalform (3NF): Es bestehen keine transitiven Abhängigkeiten. • • • Was wird hier modelliert? Wozu wird die DB gebraucht? Zweite Normalform (2NF): Nichtschlüsselmerkmale sind voll vom Schlüssel abhängig. • Systeminformation einholen Boyce-Codd Normalform (BCNF): Nur direkte Abhängigkeiten vom Schlüssel zugelassen. Vierte Normalform (4NF): Keine Mehrwertabhängigkeiten. Fünfte Normalform (5NF): Nur triviale Verbundabhängigkeit. ER-Diagramm erstellen Was soll eine Entität im Modell sein? Wie hängen die Entitäten zusammen? Relationales Modell erstellen Attribute festlegen Haupt & Fremdschlüssel festlegen Normalisieren Redundanz vermeiden Anomalien vorbeugen Modell in Datenbank implementieren Wie führt man eine Normalisierung durch? (Was ist zu beachten?) Die beiden wichtigsten Fälle, in denen die 3. Normalform verletzt ist: • Dritte Normalform (3NF): mitarbeiter ID Name Gehaltsklasse Gehalt 1 Müller GK13a 87000 2 Meier GK11b 65000 transitive Abhängigkeit, also auf mehrer Tabellen Auflösen Es bestehen keine transitiven Abhängigkeiten. n Flug Nr Datum gebucht von m Nr n:m Beziehung, also auf mehrer Tabellen Auflösen Kunde Name Wie fügt man Daten in eine DB an einen bestimmten Ort ein (PHP query) ? INSERT INTO tbl_name () VALUES(); z.B.: INSERT INTO tabelleA VALUES(1,2,‘drei‘); INSERT INTO tabelleA (col1,col3) VALUES(1,‘drei‘); • In der Probe wird es nur um das Auslesen (SELECT...) und Aggregieren (COUNT, MEAN, SUM...) von Daten gehen!