... und alles was dazugehört

Slides:



Advertisements
Ähnliche Präsentationen
Einführung "Datenbanksysteme"
Advertisements

ER-Datenmodell und Abfragen in SQL
Datenbankdesign mit ACCESS.
Apache - PHP - MySQL Apache-PHP-MySQL.
Datenbanken Einführung.
(structured query language)
Wieso gibt es diese Unterrichtseinheit?
Basis-Architekturen für Web-Anwendungen
Datenbanken I (0,*) Produkt 3 Karczewski Datenbanken I.
Colibi Bibliothekssystem der Computerlinguistik. Einführung Motivation Was braucht Colibi? Software Datenbankdesign.
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg1/7 Datenbanken werden als Anhäufung von Werten eines Wertebereiches aufgefasst und Datenbankabfragen.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
MySQL Der Einstieg.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Access 2000 Datenbanken.
Datenbanken Einführung Merkmale dateiorientierte Datenverwaltung
Einführung Dateisystem <-> Datenbanksystem
Datenmodellierung - Aufbau einer Datenbank -
Erhard Künzel für Info 9. Klasse: digitale-schule-bayern.de © Erhard Künzel.
Einführung und Überblick
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
SQL-Tutorium Ernst Rodlmayr.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Wir bauen uns eine Webapplikation!
Gegenstand EDV Thema: Informative Webseiten
Datenbanken?.
Erstellen einer Webseitenstatistik mithilfe eines OLAP-Servers
Datenbank.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Grundlagen: Client-Server-Modell
Das Client/Server – Modell und die XAMPP-Distribution
Informationssysteme / Datenbankabfragen
Informationssysteme / Datenbankabfragen
Folgendes kann missbraucht werden: formulare unverschlüsselte login-informationen ungeschützte includes SQL-injection reto ambühler
Datenbanken Dantenbanksystem Data Base System Datenbasis (Daten)
Datenbanken und Datenmodellierung
CGI (Common Gateway Interface)
Allgemeines zu Datenbanken
(D.h. „Hallo MausFans!“ auf Japanisch).
DI (FH) DI Roland J. Graf MSc (GIS) U N I V E R S I T Ä T S L E H R G A N G Geographical Information Science & Systems UNIGIS.
Access Einführung in das Datenbank-Management-System Grundlagen.
Einführung in Datenbankmodellierung und SQL
Freiwillige Feuerwehr der Stadt Perg
verstehen planen bearbeiten
Objekte Objekte sind Elemente, die man mit dem Programm bearbeiten kann. Datei, aufgebaut als Tabelle (Relation) Datensatz, entspricht einer Zeile der.
Einführung in PHP.
Dedizierte Systeme Typo3 Installation Dedizierte Systeme – Typo3 Installation – Christoph Stollwerk IT Zertifikat der Philosophischen Fakultät WS 2008/2009.
Client-Server-Modell
Structured Query Language
Wordpress 4.0 oder: Wie man ein CMS benutzt und administriert.
Datenbanken Verwalten
Datenbanken ... ein Schnelldurchlauf.
HEX-code für die Farbe weiß: #FFFFFF Änderung von Inhalt & Darstellung Inhalt & Darstellung HTML Javascript CSS.
->Prinzip ->Systeme ->Peer – to – Peer
Einführung Dateisystem <-> Datenbanksystem
Termin Festlegung Einführung MySQL Runterladen MySQL, Pentaho Design Studio Betrachtung Pentaho
Datenbanken im Web 1.
Datenbank System (DBS) - Warum?
PHPmyadmin Maya Kindler 6c.
Datenbanken abfragen mit SQL
Wordpress 4.0 oder: Wie man ein CMS benutzt und administriert.
Einführung "Datenbanksysteme"
Kapitel 6: Datenbanksysteme
Datenbanken Eine Einführung Kerstin Fröhlig, HHBK.
Von Wietlisbach, Lenzin und Winter
Datenbanksystem Von Anna und Robin.
Datenbanken Von Zoe und Carem.
Präsentation von Darleen und Michèle
Von Wietlisbach, Lenzin und Winter
(Structured Query Language)
 Präsentation transkript:

... und alles was dazugehört Datenbanken ... und alles was dazugehört

Aspekte des Themas Datenbanken Auswertung Suchen Ändern Löschen Verknüpfen Erweitern Sortieren Datenbank-sprache SQL Datenmaterial Web-Programmierung HTML+CSS+PHP modellieren Nutzung Objekt Attribute ER-Modell 1 n Daten-bank system Physikal. Speichern Anforderungen tabellarisch strukturieren Vermeidung von Redundanzen und Anomalien Datenschutz (Sichten) Mehrbenutzer- betrieb Zugangs- berechtigung Konsistenz (logisch korrekt) implementieren Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) Relationale DB optimieren und normalisieren

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änemark 5.16 Kopenhagen Europa D Deutschland 81.34 Berlin Europa IND Indien 761.00 Delhi Asien RWA Rwanda 6.30 Kigali 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 [Spalten] FROM [Tabelle] WHERE [Bedingung] ORDER BY [Attribute]; Die WHERE- und die ORDER BY-Klausel sind optional. Tabelle anzeigen  SQL wird schon ausgegeben.

Datenbankzugriff - Ein erstes Beispiel SELECT Name, Einwohner, Kontinent FROM Land WHERE Einwohner > 10 Länder mit über 10 Mio. Einwohner Land LNR Name Einwohner Hauptstadt Kontinent DK Dänemark 5.16 Kopenhagen Europa D Deutschland 81.34 Berlin Europa IND Indien 761.00 Delhi Asien RWA Rwanda 6.30 Kigali Afrika … … … … … Ergebnistabelle Name Einwohner Kontinent Deutschland 81.34 Europa Indien 761.00 Asien … … …

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 (DB) Datenbank Management System (DBMS)

Die Fundbüro Analogie Kunden Fundbüro Verwalter Fundstücke Schnittstelle??? Fundbüro Fundstücke Verwalter

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.

„viele Nutzer und Anwendungen“ Einzelbenutzersysteme (z.B. Access) Verteilte DBS (z.B. Banken mit Filialen) Mehrbenutzersysteme (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 HTML-Gerüst eingebaut Damit kann der Inhalt einer dynamischen Webseite vom Benutzer abhängig gemacht werden (Identität, Rechte, Verhalten, ...)

Benutzen Sie diese Elemente 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 Zeitachse HTML Anfrage Browser statische Webseiten PHP Verarbeitung dynamische Webseiten WWW-Server mySQL Auswertung CSS Server Darstellung Datenbank Server POST/GET Client Parameterübergabe Formulare Codeübergabe

Meine Lösung Browser WWW-Server Zeitachse statische Webseiten Browser dynamische Webseiten 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) weiss, wie man mit Datenbank Server spricht, kann Parameter auswerten und PHP verarbeiten, gibt HTML-Code an Browser weiter kann mySQL Anfragen beantworten und Daten dauerhaft speichern, kümmert sich um die Verwaltung der Daten HTML-Dateien, PHP Client Server mySQL Client Server

Forms (HTML) <html><body> <form> <select> <option>Paint</option> <option>Brushes</option> <option>Erasers</option> </select> Quantity: <input type="text" /> <input type="submit" /> </form> </body></html> dde dde dde

HTML  PHP http://www.mywebsite.ch/process.php?item=##&quantity=##" <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> dde dde dde 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? Zeitachse Browser WWW-Server statische Webseiten dynamische Webseiten WWW-Server Datenbank Server DB DBS DBMS 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 Dateien, PHP Client Server mySQL Client 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) logische Ebene (Tabellen) physikalische Ebene (Bits) Schnittstelle Schnittstelle 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? Zusammenfassung: 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? iTunes? Wikipedia? iPhoto? Ryanair? Picasa? Ihre Bank? Flickr? Ein Chat? Google? Ein Blog? Windows? Ihr E-mail Client? www.gymburgdorf.ch?

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? Fundstücke Fundbüro Kunden Verwalter

Wie speichert eine Datenbank Daten? Name: Meier Vorname: Roger Konto: 123-4456-Wert: 1235.12 Adresse: Winkel 2 9887 Oberdorf Name: Moser Vorname: Paul Konto: 123-144-Wert: 99877778 Landweg 12 1554 Gluck

Wie speichert eine DB Daten Mechanischer Vorgänger Hüte Nummer: 1445-4556 Nummer: 1445-4556 Nummer: 1445-4556 Nummer: 1445-4556 Gegenstand: Schlüssel Gegenstand: Schlüssel Nummer: 1445-4556 Bücher Gegenstand: Schlüssel Nummer: 1445-4556 Nummer: 1445-4556 Gegenstand: Schlüssel Farbe: - Farbe: - Gegenstand: Schlüssel Nummer: 1445-4556 Schirme Farbe: - Gegenstand: Schlüssel Nummer: 1445-4556 Gegenstand: Schlüssel Nummer: 1445-4556 Farbe: - Funddatum: 12.09.2000 Gegenstand: Schlüssel Funddatum: 12.09.2000 Farbe: - Nummer: 1445-4556 Funddatum: 12.09.2000 Farbe: - Gegenstand: Schlüssel Nummer: 14556 Farbe: - Gegenstand: Schlüssel Funddatum: 12.09.2000 Fundort: Bahnhof Funddatum: 12.09.2000 Farbe: - Gegenstand: Schlüssel Fundort: Bahnhof Fundort: Bahnhof Funddatum: 12.09.2000 Farbe: - Art: Schlüssel Funddatum: 12.09.2000 Farbe: - Fundort: Bahnhof Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Finder: Hegi Roger Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Farbe: - Farbe: - Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Finder: Hegi Roger Brandweg 12 Seeweg 12 Seeweg 12 Brandweg 12 Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Brandweg 12 Seeweg 12 Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Seeweg 12 Brandweg 12 9876 Zuchwil Brandweg 12 Seeweg 12 Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof 9876 Zuchwil 9876 Zuchwil Seeweg 12 Brandweg 12 Finder: Hegi Roger Finder: Hegi Roger Fundort: Bahnhof Brandweg 12 Seeweg 12 Finder: Hegi Roger Finder: Hegi Roger 9876 Zuchwil 9876 Zuchwil Seeweg 12 Brandweg 12 Finder: Hegi Roger Finder: Hegi Roger 9876 Zuchwil Seeweg 12 Brandweg 12 Finder: Hegi Roger Finder: Hegi Roger 9876 Zuchwil Brandweg 12 Seeweg 12 9876 Zuchwil Seeweg 12 Brandweg 12 9876 Zuchwil Brandweg 12 Brandweg 12 9876 Zuchwil 9876 Zuchwil 9876 Zuchwil

Wie speichert eine DB Daten Nummer: 14555 Art: Schlüssel Nummer: 14556 Name: Kunz Vorname: Andy Adresse: Waldweg 12 9876 Zuchwil Tel.: 145’78’99 Geb.: 15.September 1974 Farbe: - Art: Schlüssel Funddatum: 12.09.2000 Farbe: - Fundort: Bahnhof Funddatum: 12.09.2000 Finder: Hegi Roger Fundort: Bahnhof Brandweg 12 Finder: Hegi Roger 9876 Zuchwil Brandweg 12 9876 Zuchwil

Elemente einer Tabelle Tabelle, Entitätsmenge Zeile, Datensatz, Entität Eigenschaftswerte ~ Domain Attribute, Eigenschaften Schlüsselattribut, Hauptschlüssel Tabellenname Fundstücke Nummer Art Farbe Funddatum Fundort Finder 14555 Schirm Blau 08.13.2000 Bus Nr.12 Stalder Roger Wichleren 8779 Neuhausen 14556 Schlüssel - 09.12.2000 Bahnhof Hegi Roger Brandweg 12 9876 Zuchwil 14557  ...

Relationsschema Tabelle, Entitätsmenge Zeile, Datensatz, Entität Eigenschaftswerte Tabellenname Attribute, Eigenschaften Schlüsselattribut, Hauptschlüssel Fundstücke{Nummer, Art, Farbe, Funddatum, Fundort, Finder}

Definition einer Tabelle Tabelle, Entitätsmenge Zeile, Datensatz, Entität Eigenschaftswerte Attribute, Eigenschaften Schlüsselattribut, Hauptschlüssel Tabellenname Fundstücke Attribut Beispiel Typ? Schlüssel? Obligatorisch? Extras? Nummer: 14556 Art: Schlüssel Farbe: - Funddatum: 12.09.2007 Fundort: Bahnhof Finder: Hegi Rütli Brandweg 12 9876 Zuchwil

Einschränkungen der Eigenschaftswerte Fundstücke Attribut Beispiel Typ? Schlüssel? Obligatorisch? Extras? Nummer: 14556 int ja auto incr. Art: Schlüssel char nein Farbe: - Funddatum: 12.09.2007 date auto? Fundort: Bahnhof Finder: Hegi Rütli Brandweg 12 9876 Zuchwil Warum ist das wichtig? technisch: Speicherplatz reservieren, etc. logisch: Fehler vermeiden

Ü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 08.13.2000 Bus Nr.12 Roger Stalder 9876 Neuhausen 4 Schlüssel - 09.12.2000 Bahnhof Hegi Roger Brandweg 12 9876 Zuchwil 2 Schrim & Schal bunt 21.05.2009 Hauptbahnhof Hegi Roger Brandweg 12a/7 9876 Zuckwil

Schon besser Aber was machen wir mit der Redundanz? Fundstücke ID Anzahl Art Farbe Funddatum Fundort Vorname Nachname Adresse 17 1 Schirm Blau 08.13.2000 Bus Nr.12 Roger Stalder 9876 Neuhausen 18 4 Schlüssel - 09.12.2000 Bahnhof Hegi Brandweg 12 9876 Zuchwil 19 Schrim bunt 21.05.2009 Hauptbahnhof Brandweg 12a/7 9876 Zuckwil 20 Schal braun 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 Schrim bunt 21.05.2009 Hauptbahnhof 20 Schal braun Fremdschlüssel, verweist auf den Hauptschlüssel einer anderen Tabelle Finder ID Vorname Nachname Strasse Hausnummer Zusatz PLZ Ort 12 Roger Stalder 9876 Neuhausen 7 Hegi Brandweg a/7 Zuchwil Finder{ID, Vorname, Nachname, Strasse, Hausnummer, Zusatz, PLZ, Ort}

SQL-Abfragen mit mehreren Tabellen c 1 2 3 4 5 6 S d e 3 7 5 8 6 9 R x S a b R.c S.d e 1 2 3 7 5 8 6 9 4 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 SELECT * FROM R JOIN S ON R.c=R.s R a b c 1 2 3 4 5 6 S d e 3 7 5 8 6 9 R x S a b R.c S.d e 1 2 3 7 4 5 6 9 R x S a b R.c S.d e 1 2 3 7 null 5 8 4 6 9 SELECT * FROM R RIGHT JOIN S ON R.c=R.s mySQL in Kürze: mehr hierzu, Arbeitsblatt erstellen z.B. mySQL Befehle vorgeben und entziffern lassen mySQL Befehle erstelle um bestimmte Zeilen eines Karthesischen Produkts auszugeben... 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änemark 5.16 Kopenhagen Europa D Deutschland 81.34 Berlin Europa IND Indien 761.00 Delhi Asien RWA Rwanda 6.30 Kigali Afrika LNR Name … KNR DK Dänemark … EU D Deutschland … EU IND Indien … AS RWA Rwanda … AF Land KNR Name EU Europa AS Asien AF Afrika Kontinent Beispiel-Datenbank: terra2.sql 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 LNR Name Einwohner Hauptstadt Kontinent DK Dänemark 5.16 Kopenhagen Europa D Deutschland 81.33 Berlin Europa IND Indien 761.00 Delhi Asien RWA Rwanda 6.30 Kigali Afrika Land Schlüsselattribut Primärschlüssel anlegen für Tabelle „land“. Problem: Feld noch leer und kann daher nicht als Primärschlüssel verwendet werden (nicht eindeutig)

Zwischen den Tabellen bestehen Beziehungen (Relationen) z.B. Kontinent eines Landes 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. Master Detail PKey Data FKey PKey Data

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. LNR Name Einwohner KNR DK Dänemark 5.16 EU D Deutschland 81.34 EU IND Indien 761.00 AS RWA Rwanda 6.30 AF Land KNR Name EU Europa AS Asien AF Afrika Kontinent

Cross-Join („jede Zeile mit jeder“) SELECT * FROM Land, Kontinent LNR Name Einwohner KNR DK Dänemark 5.16 EU D Deutschland 81.34 EU IND Indien 761.00 AS RWA Rwanda 6.30 AF KNR Name EU Europa AS Asien AF Afrika Land Kontinent LNR Name Einwohner KNR KNR Name DK Dänemark 5.16 EU EU Europa DK Dänemark 5.16 EU AS Asien DK Dänemark 5.16 EU AF Afrika D Deutschland 81.34 EU EU Europa D Deutschland 81.34 EU AS Asien D Deutschland 81.34 EU AF Afrika IND Indien 761.00 AS EU Europa IND Indien 761.00 AS AS Asien IND Indien 761.00 AS AF Afrika … … … … …

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 Dänemark 5.16 EU EU Europa DK Dänemark 5.16 EU AS Asien DK Dänemark 5.16 EU AF Afrika D Deutschland 81.34 EU EU Europa D Deutschland 81.34 EU AS Asien D Deutschland 81.34 EU AF Afrika IND Indien 761.00 AS EU Europa IND Indien 761.00 AS AS Asien IND Indien 761.00 AS AF Afrika … … … … …

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 Dänemark 5.16 EU EU Europa DK Dänemark 5.16 EU AS Asien DK Dänemark 5.16 EU AF Afrika D Deutschland 81.34 EU EU Europa D Deutschland 81.34 EU AS Asien D Deutschland 81.34 EU AF Afrika IND Indien 761.00 AS EU Europa IND Indien 761.00 AS AS Asien IND Indien 761.00 AS AF Afrika … … … … …

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 81.34 EU EU Europa IND Indien 761.00 AS AS Asien … … … … … Name Einwohner Name Deutschland 81.34 Europa Indien 761.00 Asien … … … Alternative: ... FROM Land JOIN Kontinent ON Land.KNR = Kontinent.KNR

http://dev.mysql.com/doc/refman/5.5/en/select.html

Goldene Tabellenregeln Es braucht IMMER einen eindeutigen Hauptschlüssel (am besten, Sie nennen ihn immer ID) Nur ein Wert pro Attribut (richtiges Format) Wertemenge einschränken (z.B. mit Eingabemaske) Nur ein Datensatz pro Zeile Redundanz vermeiden

XAMPP (www-)Server inklusive PhP 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 Datenbank Server (mySQL) (www-)Server (Apache) inklusive PhP DB DBS DBMS Browser Dateien, PHP Client Server mySQL Client 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 Tabellen vorgeben, genauer definierte Aufgaben stellen Probleme mit Umlauten und Leerzeichen ansprechen

Aspekte des Themas Datenbanken Auswertung Suchen Ändern Löschen Verknüpfen Erweitern Sortieren Datenbank-sprache SQL Datenmaterial Web-Programmierung HTML+CSS+PHP modellieren Nutzung Objekt Attribute ER-Modell 1 n Daten-bank system Datenmodellierung Physikal. Speichern Anforderungen tabellarisch strukturieren Vermeidung von Redundanzen und Anomalien Datenschutz (Sichten) Mehrbenutzer- betrieb Zugangs- berechtigung Konsistenz (logisch korrekt) implementieren Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) Relationale DB optimieren und normalisieren

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

NICHT beschrieben werden: 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:

Aufgabe: Erstellen sie ein ER-Diagramm einer Schule (s Aufgabe: Erstellen sie ein ER-Diagramm einer Schule (s. AB_Datenmodellierung.doc)  Eine Person kann nur an einem Ort geboren worden sein  Ein Ort kann für mehrere (0 – n) 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 Flug gebucht von Kunde Nr Datum Nr Name 1 n m Flug Teil von 1 Buchung getätigt von Kunde Nr Datum Buchungs-datum bezahlt Nr Name

Auflösen von n:m-Beziehungen Flug gebucht von Kunde Nr Datum Nr Name 1 n m Flug Teil von 1 Buchung getätigt von Kunde Nr Datum Buchungs-datum bezahlt Nr Name

In Relationales Modell übersetzen: 1 n Flug Teil von m 1 Buchung getätigt von Kunde Nr Datum Buchungs-datum bezahlt 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: Speicherplatz sparen Vermeidung von Anomalien 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 Ä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: Lieferant {ID, LName, LAdresse} 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 ProjNr Projekt Zeit 123 6 MySQL 50% 3 DV2010 876 100% PersNr Name AbtNr Abteilung 123 Müller 5 EDV II 876 Schulze 3 Rechenzentrum

PersNr ProjNr Projekt Zeit 123 6 MySQL 50% 3 DV2010 876 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 123 6 50% 3 100% 876 ProjNr Projekt 3 MySQL DV2010

PersNr Name AbtNr Abteilung 123 Müller 5 EDV II 876 Schulze 3 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 Nicht-Schlü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 123 Müller 5 876 Schulze 3 AbtNr Abteilung 5 EDV II 3 Rechenzentrum

Zusammengefasst:

Goldene Tabellenregeln Es braucht IMMER einen eindeutigen Hauptschlüssel (am besten, Sie nennen ihn immer ID) Je Datensatz nur ein Wert pro Attribut Wertemenge einschränken (z.B. mit Eingabemaske, Domain) Nur ein Datensatz pro Zeile Redundanz vermeiden wenn Sie die ersten 4 Regeln ernst nehmen, dann haben Sie mindestens eine 2.NF, die fünfte Regel konsequent befolgen ergibt dann BCNF (oder liege ich falsch? s. datenbanktheorie.pdf, S. 31-52)

Aspekte des Themas Datenbanken Auswertung Suchen Ändern Löschen Verknüpfen Erweitern Sortieren Datenbank-sprache mySQL Datenmaterial Web-Programmierung HTML+CSS+PHP modellieren Nutzung Objekt Attribute ER-Modell 1 n Datenbank system Physikal. Speichern Anforderungen tabellarisch strukturieren Vermeidung von Redundanzen und Anomalien Datenschutz (Sichten) Mehrbenutzer- betrieb Zugangs- berechtigung Konsistenz (logisch korrekt) implementieren Tabelle Tabelle Zeilen Spalten Zeilen Spalten (Objekte) (Attribute) Relationale DB optimieren und normalisieren

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 wertet Ergebnisse aus stellt Ergebnisse dar Schnittstelle mit Benutzer Verschiedene Views Daten umfangreicher persistenter Datenbestand physikalische Speicherung Software interpretiert und beantwortet Anfragen verwaltet Daten und stellt Konsistenz sicher regelt mögliche Konflikte Scriptsprache (z.B. mySQL) Informationsaustausch mit der Umgebung

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 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 direkte Abhängigkeiten vom Schlüssel zugelassen. Vierte Normalform (4NF): Keine Mehrwertabhängigkeiten. Fünfte Normalform (5NF): Nur triviale Verbundabhängigkeit. 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

Wie führt man eine Normalisierung durch? (Was ist zu beachten?) Die beiden wichtigsten Fälle, in denen die 3. Normalform verletzt ist: mitarbeiter ID Name Gehaltsklasse Gehalt 1 Müller GK13a 87000 2 Meier GK11b 65000 Dritte Normalform (3NF): Es bestehen keine transitiven Abhängigkeiten. transitive Abhängigkeit, also auf mehrer Tabellen Auflösen Flug gebucht von Kunde n m Nr Datum Name n:m Beziehung, also auf mehrer Tabellen Auflösen

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!