Informationssysteme / Datenbankabfragen Thomas Mohr I N F O R M A T I K K Agenda T I Datenbanken – Wozu? A Abfragesprachesprache SQL R M Verwaltung MySQL / MariaDB O Datenbankmodellierung F Themenvernetzung (DB-Zugriff, etc.) I N Ausblick 2 1 I N F O R M A T I K Informationssysteme 3 Was ist ein Informationssystem ? I K • Ein Informationssystem kann auf formalisierte Fragen eines Anwenders Antworten aus einer gegebenen Datenmenge geben A T Komponenten eines Informationssystems: R Erfassung O Speicherung F M Informationssystem Analyse Datenbanksystem DBS Datenbankmanagementsystem N DBMS, z.B. MySQL Darstellung I Datenbank (Datenbasis) Datenbank (Datenbasis) 4 2 Ein Ausgangspunkt im Unterricht… I K • Schüler führen eine Internet-Recherche durch: „Städte in Deutschland – Einwohner, geografische Lage“ A T Schüler nutzen ein Informationssystem Schüler stellen automatisch Informationen unterschiedlich dar N F O R M Mainz 196.000 50° Nord 8° 16‘ Ost Landau 43000 49,19 8,12 I Listen Name Einwohner Breite Länge Mainz 199000 50 8 Landau 43000 49 8 Tabellen Tabellen bieten schon „von Hand“ Vorteile: leichter zu ergänzen (neue Spalte) Summenzeile … 6 Motivation - Datenbank I K • Idee: Sammlung der gefundenen Städte in einem Tabellenblatt (OpenOffice Calc / MS Excel) auf einem zentralen Laufwerk T Es treten typische Probleme auf: I N F O R M A Es kann immer nur ein Benutzer die Datei öffnen. Daten können von jedem geändert / gelöscht werden. Keinerlei Konsistenzprüfung der eingegebenen Daten. Abhilfe: Nutzung eines Datenbanksystems… MS Access ist in dieser Hinsicht schon ungeeignet. 7 3 Software-Architekturen: „Standalone“-Programm K • z.B. O R M A T I selbst programmierte Schülerdatei in Delphi programmierte Übersicht von Länderinformationen PC I N F Anwendungsprogramm 8 Software-Architekturen: „Standalone“-Programm K • Vorteile • Nachteile Daten meist nur vom erzeugenden Programm zu lesen Erweiterungen aufwändig Immer wieder gleiche Probleme (z.B. Datumsformat) O R M A T I Übersichtlichkeit (?) Schnell zu programmieren nur eine Programmiersprache PC I N F Anwendungsprogramm 9 4 • z.B. Outlook und Exchange-Server „einfache“, datenbank-basierte Schülerverwaltung Anwendungsprogramm Anwendungsprogramm Client I N F O R M A T I K Software-Architekturen - Client-Server (Datenbank)Server Server 10 • z.B. Outlook und Exchange-Server „einfache“, datenbank-basierte Schülerverwaltung Anwendungsprogramm Client I N F O R M A T I K Software-Architekturen - Client-Server (Datenbank)Server Server 11 5 Datenbank übernimmt „Standardaufgaben“ Daten zentral vorhanden Erweiterungen relativ einfach • Nachteile (für mehrere Benutzer / Programme) Installation von Software auf allen Clients notwendig Weitere „Sprache“ zum Datenbankzugriff Anwendungsprogramm Client I N F O R M I T • Vorteile A K Software-Architekturen - Client-Server (Datenbank)Server Server 12 • Eine moderne 3-schichtige Webarchitektur… T I K Software-Architekturen – Webarchitektur A Client Anwendungsprogramm Webserver (z.B. Apache und PHP) Server I N F O R M Webclient (Browser) Datenbankserver (z.B. MySQL) Server 13 6 • Eine moderne 3-schichtige Webarchitektur… T I K Software-Architekturen – Webarchitektur A Client Webserver (z.B. Apache und PHP) Server I N F O R M Webclient (Browser) Datenbankserver (z.B. MySQL) Server 14 • Vorteile Keine Installation von zusätzlicher Software beim Client • Nachteile http-Protokoll ohne Sessionverwaltung T I K Software-Architekturen – Webarchitektur A Client Webserver (z.B. Apache und PHP) Server I N F O R M Webclient (Browser) Datenbankserver (z.B. MySQL) Server 15 7 • Viele (Web-) Clients teilen sich die Dienste eines Webservers, der wiederum auf einen Datenbankserver zurückgreift. In kleinen Systemen können Web- und Datenbankserver auf dem gleichen Rechner sein. A T I K Typische Hardware-Verteilung F O R M Clients I N Webserver Datenbankserver 16 • Alle drei Schichten sind auf einem Rechner! A T I K … und zum Testen / für die Fortbildung? Internet Explorer Client Webserver Webserver Datenbankserver Apache I N F O R M Clients Datenbankserver MySQL MariaDB 17 8 I K Das andere Extrem – eine Web Farm T Load Balancer M A Application Server Farm R je 4 Prozessoren O HACMP Fail-Over FailOver DB Server 32 GByte RAM 32 GByte RAM I N F Production DB Server FDDI Switch 2,4 TByte 18 K • Hierarchische Datenbanken Die Datenelemente sind baumartig miteinander verbunden • Vernetzte Datenbanken Die Datenelemente sind mit Zeigern zu einem Netz miteinander verbunden I N F O R M A T • Man unterscheidet verschiedene Arten von Datenbanken: I Arten von Datenbanken • Beide Formen waren vor allem bei Großrechnern im Einsatz und werden zunehmend von relationalen Datenbanken abgelöst 19 9 • Relationale Datenbanken Die Daten werden in Form von Tabellen gespeichert Zwischen den Tabellen werden Beziehungen aufgebaut (Relationen) A T I K Arten von Datenbanken Attribut (Spalte, Merkmal) Name Datenwert (Attributwert) Name Einwohner Breite Laenge Land Berlin Mainz Paris Speyer 3458763 184752 2181300 50600 52,52 50,00 48,86 49,31 13,41 8,27 2,35 8,43 Deutschland Deutschland Frankreich Deutschland F O R M Ort I N Attributklasse Datensatz (Tupel) • Empfehlung: 20 Einheitliche Begriffe nutzen, nicht zu nah an der mathematischen Betrachtung (Relationenalgebra) • Atomare Werte Ein Wert für ein Attribut in einem Datensatz soll atomar sein. nur einfache Werte keine Listen Nicht atomarer Datenwert I N F O R M A T I K Daten in Tabellen 21 10 • Relationale Datenbanken – typische Vertreter Oracle IBM (DB/2) Microsoft SQL Server (Access ?) Informix MySQL/MariaDB OpenSource PostGreSQL I N F O R M A T I K Arten von Datenbanken 22 Strukturierte Speicherung von Daten Verteilter, gleichzeitiger Zugriff mehrerer Benutzer / Programme Verwaltung von Zugriffsrechten R M A T I K Was bietet mir eine Datenbank? ACID – Prinzip (Idee: Analogie zu Bank-Transaktionen) Atomicity • Transaktionen (Änderungen an der Datenbank) werden ganz oder gar nicht durchgeführt. N F O Consistency • Eine Transaktion führt wieder zu einem konsistenten (gültigen) Zustand der Datenbank. Isolation • Transaktionen beeinflussen sich nicht gegenseitig. I Durability 23 • Eine Transaktion ist dauerhaft gespeichert, auch gegen Systemabstürze gesichert. Im Unterricht gut durch Rollenspiele zu veranschaulichen. 11 • A – Atomicity • Bsp.: Ein Kontosystem mit nicht überziehbaren Konten Bob überweist Alice 500 €. Die Transaktion bricht nach der Abbuchung von Bobs Konto ab. O R M A T I K ACID-Prinzip Alice F Bob I N 700 € 500 € 300 € 200 € Die Transaktion darf nur „ganz oder gar nicht“ stattfinden. Konkret: Das Geld darf unterwegs nicht „verschwinden“ 24 • C – Consistency • Bsp.: Bob will Alice 1000 € überweisen. Die Transaktion überzieht sein Konto, was nicht erlaubt ist. O R M A T I K ACID-Prinzip Alice F Bob 1000 € 300 € 1300 € I N 700 € -300 € 25 Jede Transaktion muss die Datenbank in einem konsistenten (den definierten Regeln entsprechenden) Zustand hinterlassen. (insbesondere bei der Konsistenz von Schlüsselbeziehungen, s.u.) 12 • I – Isolation • Bsp.: Bob überweist Alice 400 € und gleichzeitig an Carol 500 €. Jede Transaktion für sich ist in Ordnung, zusammen überziehen sie das Konto. O R M A T I K ACID-Prinzip Bob Alice F Carol 500 € 600 € 700 € 400 € -200 € 300 € 700 € I N 100 € 26 Jede Transaktion muss so ablaufen, dass parallel ablaufende Transaktionen sie nicht stören können. (zumindest logisch nacheinander ablaufen – serialisierbar) Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL / MariaDB Datenbankmodellierung Themenvernetzung (DB-Zugriff, etc.) Ausblick I N F O R M A T I K Agenda 27 13 • An der Schnittstelle nach außen bietet das Datenbanksystem (DBS) Sprachen für folgende Zwecke: I K Sprachen zur Datenbankverwaltung • Bei relationalen DBS ist dies alles in der Sprache SQL vereint. Beschränkung in der Schule im Wesentlichen auf Abfragesprache. GF - Lehrplan I N F O R M A T Datenabfrage und -manipulation (DML) Verwaltung der Datenbank und Definition der Datenstrukturen (DDL) Berechtigungssteuerung (DCL) 28 • Starten Sie den Datenbankserver und den Webserver I N F O R M A T I K MySQL/MariaDB – Jetzt wird es (endlich) praktisch… • Das Datenbanksystem bietet einen Service für andere Rechner an Die Windows-Firewall kann dies melden. Der Port muss freigegeben werden. 29 14 • Administration von MySQL/MariaDB funktioniert selbst schon am einfachsten über den Browser (oder Admin-Button in Control Panel) Webarchitektur http://localhost/phpmyadmin T I K Die erste Datenbank importieren A Browser R M Client Webserver N F O Apache I MySQL MariaDB Datenbankserver 30 • Legen Sie eine neue Datenbank „terra1“ an. • Wechseln Sie zur Datenbank (links), wählen Sie den Punkt „Importieren“ und suchen die Datei „terra1.sql“ I N F O R M A T I K Die erste Datenbank importieren 31 15 • Klicken Sie auf „Struktur“: u.a. wird die Tabelle „ort“ angezeigt. Lassen Sie sich den Inhalt der Tabelle anzeigen. I N F O R M A T I K Die erste Tabelle… Tipp: Ändern Sie die Einstellungen von phpmyadmin, so dass nur die Icons angezeigt werden! 32 • 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. A T I K Abfragen mit SQL SELECT FROM WHERE ORDER [Spalten] [Tabelle] [Bedingung] BY [Attribute]; I N F O R M • Syntax einer (einfachen) SQL-Abfrage: • Die WHERE- und die ORDER BY-Klausel sind optional. 33 16 SELECT Name, Einwohner, Land FROM ort WHERE Einwohner > 1000000 ort Name Einwohner Breite Laenge Land Berlin Mainz Paris Speyer … 3458763 184752 2181300 50600 … 52,52 50,00 48,86 49,31 … 13,41 8,27 2,35 8,43 … Deutschland Deutschland Frankreich Deutschland … F O R M T Millionenstädte ? A I K Datenbankzugriff mit SQL - Ein erstes Beispiel I N Ergebnistabelle Name Einwohner Land Berlin Paris … 3458763 2181300 … … Deutschland Frankreich 36 • Bedingungen mit Textattributen: Name = 'Paris' Name LIKE 'P%' Name LIKE 'A_len' (Potsdam, Peine, Pirmasens) (Aalen, Ahlen) A T I K SQL – WHERE Stufe=7 Stufe<>7 Stufe<7 Stufe>7 Stufe<=7 Stufe>=7 Stufe BETWEEN 7 AND 10 (gleich 7) (ungleich 7) (kleiner 7) (größer 7) (kleiner gleich 7) (größer gleich 7) (zwischen 7 und 10) I N F O R M • Bedingungen mit Zahlattributen: 37 17 • Vergleich auf Nullwert (kein Attributwert angegeben): Breite IS NULL • Logische Verknüpfungen: NOT (Land='Deutschland') (Land nicht Deutschland) (Land='Deutschland') AND (Einwohner>100000) (Millionenstädte in Deutschland) (Land='Deutschland') OR (Land='Schweiz') (Orte in Deutschland und Schweiz) I N F O R M A T I K SQL – WHERE 38 • Das Abfrageergebnis kann sortiert werden: SELECT FROM WHERE ORDER [Spalten] [Tabelle] [Bedingung] BY [Attribute]; • Die Sortierung geschieht nach dem angegebenen Attribut. • Bei mehreren Sortierattributen wird nach dem zweiten (dritten...) sortiert, sobald die Werte des ersten (zweiten...) identisch sind. • Absteigende Sortierung mit DESC I N F O R M A T I K SQL – ORDER BY • Beispiele: SELECT * FROM ort ORDER BY Name SELECT * FROM ort ORDER BY Land, Einwohner DESC 39 18 • Bearbeiten Sie in inf-schule die Aufgaben 2-8 unter http://inf-schule.de/information/datenbanksysteme/terra/relationaledb/uebungen I N F O R M A T I K Übungen 1 40 • Beispieltabelle T I K Übungen 1 • Geben Sie alle Länder aus: Name, Einwohner, Hauptstadt Sortierung nach Einwohner absteigend SELECT Name, Einwohner, Hauptstadt FROM land ORDER BY Einwohner DESC N F O R M A Nicht atomare Datenwerte I • Welche Länder haben zwischen 10 und 100 Mio. Einwohner? Absteigend nach Einwohner sortiert WHERE Einwohner BETWEEN 10 AND 100 ORDER BY Einwohner DESC 41 19 6. Welche Länder haben einen „Arm“ oder ein „Bein“ im Namen? WHERE Name like '%bein%' OR Name like '%arm%' 8. Welche Länder liegen in Asien und Australien? WHERE Kontinent='Asien' OR Kontinent='Australien' I N F O R M A T I K Übungen 1 42 A T I K Hilfsfunktionen • Wichtig sind vor allem Funktionen zur Manipulation von Strings und Datumsangaben, z.B. DATEDIFF(D1, D2) NOW() … Differenz (Tage) Aktuelle Zeit/Datum (SELECT CURDATE()) CONCAT(S1,S2,…) LOWER(),UPPER() CHAR_LENGTH() MID(str,pos,len) TRIM(s), LTRIM, RTRIM … Verbinden von Strings In Groß-/Kleinbuchstaben umwandeln Länge in Zeichen String ausschneiden Abschneiden von Leerzeichen • Weitere Funktionen online in der Hilfe zu MySQL! I N F O R M • Wichtige Stringfunktionen SQL ist hier nicht standardisiert Die Funktionen sind bei anderen DBS oft unterschiedlich 43 20 • Ausgabe der Länder in folgender Form: CONCAT(UPPER(Name),' - ',Hauptstadt) AS Land, round(Einwohner) AS "Mio. Einwohner" Spalten können mit „AS“ umbenannt werden I N F O R M A T I K Nutzen der Hilfsfunktionen 44 • Wozu dient die Spalte LNR in der Land-Tabelle ? • … ein anderes Beispiel: Suche nach der Hauptstadt „Berlin“ Man benötigt noch das Land als Suchhilfe. Suche nach der Hauptstadt „Washington“ I N F O R M A T I K Exkurs: Primärschlüssel 45 Selbst das Land reicht als Suchhilfe nicht aus. 21 • Jeder Datensatz wird durch einen Schlüssel (Primärschlüssel) eindeutig identifiziert. Der Schlüssel kann aus mehreren Attributen zusammengesetzt werden. ist minimal, d.h. es kann kein Attribut weggelassen werden. • Oft wird ein zusätzliches, eindeutiges Schlüsselattribut hinzugefügt, z.B. eine Landeskennung wird meist durch Unterstreichung gekennzeichnet. 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 I N F O R M A T I K Relationale Datenbank – Aufbau Schlüsselattribut 46 • Welche Länder gibt es in Europa mit mehr als 20 Mio Einwohner? WHERE Kontinent = 'Europa' AND Einwohner > 20 I N F O R M A T I K Fehler in Daten Frankreich?? Problem: Europa wird unterschiedlich geschrieben! Lösung: Auslagerung in eine eigene Tabelle 47 22 • 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 F O R M A T I K Relationale Datenbanken – Beziehungen I N 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 48 Schlüsselattribut aus Kontinent 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 I N F O R M A T I K Relationale Datenbanken – Beziehungen 49 Primärschlüssel aus Kontinent • 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. 23 • Müssen in SQL Daten aus mehreren Tabellen entnommen werden, so werden sog. „Joins“ gebildet. I K SQL – einfache Joins T Die Abarbeitung eines Joins in mehreren Schritten kann an folgendem Beispiel veranschaulicht werden: M A • Es sollen alle Länder mit ihren Kontinenten ausgegeben werden, die mehr als 10 Mio. Einwohner haben. 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 I N F O R Land 50 1. Cross-Join („jede Zeile mit jeder“) Land SELECT * FROM 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 I N F O R M A T I Kontinent K SQL – einfache Joins 51 LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … 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 24 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 I N F O R M A I 2. Einschränken auf „passende“ Datensätze. T K SQL – einfache Joins 52 LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … 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 2. Einschränken auf „passende“ Datensätze (2). T I K SQL – einfache Joins I N F O R M A 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 53 LNR Name Einwohner KNR KNR Name DK DK DK D D D IND IND IND … Dänemark Dänemark Dänemark Deutschland Deutschland Deutschland Indien Indien Indien … 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 25 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 IND … Deutschland Indien … 81.34 761.00 … EU AS … EU AS … Europa Asien Name Einwohner Name Deutschland Indien … 81.34 761.00 … Europa Asien … I N F O R M A T I K SQL – einfache Joins 54 In der Realität versucht das DBMS, durch „geschicktes“ Vorgehen die Datenmenge schon früher zu reduzieren. • Bearbeiten Sie in inf-schule die Aufgaben unter http://inf-schule.de/information/datenbanksysteme/terra/datenverknuepfen/uebungen I N F O R M A T I K Übungen 2 55 26 • Aufgabe 2 Warum wäre das Attribut "Name" ein möglicher Primärschlüssel für die Schüler-Tabelle? Was ist im Moment ein möglicher Primärschlüssel der Noten-Tabelle? Was ist der Fremdschlüssel in der Noten-Tabelle? I N F O R M A T I K Übungen 2 56 4. Welche Länder liegen in Asien? Name und Einwohner Länder Sortierung nach Einwohnerzahl absteigend T I K Übungen 2 land.Name, land.Einwohner kontinent, land kontinent.KNR = land.KNR BY land.Einwohner DESC 5. Orte in Europe mit mehr als 1 Mio. Einwohner SELECT FROM WHERE AND AND AND ORDER land.Name, ort.Name AS "Stadt", ort.Einwohner kontinent, land, ort kontinent.Name = 'Europa' kontinent.KNR = land.KNR land.LNR = ort.LNR ort.Einwohner > 1000000 BY ort.Einwohner DESC I N F O R M A SELECT FROM WHERE ORDER 57 27 • In welchen Kontinenten gibt es Länder mit mehr als 100 Mio. Einwohner? I K Duplikate... kontinent.Name land, kontinent land.KNR = kontinent.KNR land.Einwohner > 100 R Lösung: DISTINCT-Anweisung F Problem: Es werden Duplikate angezeigt O M A T SELECT FROM WHERE AND I N SELECT FROM WHERE AND DISTINCT kontinent.Name land, kontinent land.KNR = kontinent.KNR land.Einwohner > 100 58 • Es sollen nun die wichtigsten Orte der Länder gespeichert werden. • Wie sieht eine solche Ländertabelle aus? Es wird eine neue Tabelle „Ort“ angelegt mit einem Fremdschlüssel auf „Land“. Ort Land ONR Name … LNR LNR Name … KNR BANGAL GOETTI KARLSR KOPENH Bangalore Göttingen Karlsruhe Kopenhagen … … … … IND D D DK DK D IND RWA Dänemark Deutschland Indien Rwanda … … … … EU EU AS AF I N F O R M A T I K Erweiterung der Datenbank Schlüsselattribut aus Land 59 28 • Ein erstes „E/R-Modell“ (Entity/Relationship) eigentlich intuitiv zu lesen!? A T I K Bisheriges „Schema“ der Datenbank Teil von M Land Ort O R Hauptstadt N F Teil von Hatten Sie die Stelle in der Datenbank terra3, an der die „Hauptstadt“ abgespeichert ist, gefunden? I Kontinent 60 • Soll in SQL auf eine Tabelle mehrfach zugegriffen werden, so kann dies mit Alias-Namen geschehen: Es sollen alle Städte mit mehr als 1 Mio. Einwohner ausgegeben werden; dabei auch das zugehörige Land mit Hauptstadt. logische Struktur: Ort Teil von Land Hauptstadt Ort I N F O R M A T I K SQL – Tabellen-Alias SELECT FROM WHERE AND AND o.Name AS Stadt, l.Name AS Land, hs.Name Ort o, Land l, Ort hs o.LNR = l.LNR Der Alias-Name für l.HauptONR = hs.ONR Land ist nicht o.Einwohner>10000000 notwendig (verkürzt die Abfrage) 61 29 • Es sollen Flüsse gespeichert werden. Flüsse fließen durch Orte. Manche Orte werden von mehreren Flüssen durchflossen (z.B. Koblenz) • Wie sieht die Tabelle für die Flüsse aus? Fluss Ort FNR Name Laenge ONR ONR Name ELB MEK MOS RHE Elbe Mekong Mosel Rhein 1144 4500 544 1320 HAMBUR PHNOMP KOBLEN KOBLEN GOETTI KARLSR KOBLEN KOPENH Göttingen Karlsruhe Koblenz Kopenhagen I N F O R M A T I K Erweiterung der Datenbank Problem: Für Flüsse müssen beliebig viele Orte eingetragen werden. 62 • Es sollen Flüsse gespeichert werden. Flüsse fließen durch Orte. Manche Orte werden von mehreren Flüssen durchflossen (z.B. Koblenz) • Wie sieht die Tabelle für die Flüsse aus? Fluss Ort FNR Name Laenge ONR Name FNR ELB MEK MOS RHE Elbe Mekong Mosel Rhein 1144 4500 544 1320 GOETTI KARLSR KOBLEN KOPENH Göttingen Karlsruhe Koblenz Kopenhagen LEI RHE RHE I N F O R M A T I K Erweiterung der Datenbank Problem: Für Orte müssen mehrere Flüsse eingetragen werden. 63 Lösung: Auslagerung der Zuordnung in eine eigene Tabelle 30 Flüsse fließen durch Orte. Manche Orte werden von mehreren Flüssen durchflossen (z.B. Koblenz) Zuordnungstabelle mit Schlüsseln aus beiden Haupttabellen. F O R M I T • Es sollen Flüsse gespeichert werden. A K Erweiterung der Datenbank Fluss Ort FNR Name Laenge ONR Name ELB MEK MOS RHE Elbe Mekong Mosel Rhein 1144 4500 544 1320 GOETTI KARLSR KOBLEN KOPENH Göttingen Karlsruhe Koblenz Kopenhagen I N Stadtfluss FNR ONR ELB RHE RHE MOS HAMBUR KOBLEN KARLSR KOBLEN 64 I K Struktur der Datenbank terra4 T 1 Teil von n Ort A Land 1 1 n R Teil von O M n Hauptstadt 1 F m Kontinent Fluss I N durchfließt 65 31 • Bearbeiten Sie in inf-schule die Aufgaben unter http://inf-schule.de/information/datenbanksysteme/terra/beziehungstabelle/uebungen I N F O R M A T I K Übungen 3 66 1. Welche Orte liegen an der Saar ? 3. SELECT FROM WHERE AND AND AND AND ORDER O F N I 67 SELECT FROM WHERE AND AND o.Name ort o, o.ONR sf.FNR f.Name stadtfluss sf, fluss f = sf.ONR = f.FNR = 'Saar' Welche Orte durchfließt der Rhein in Rheinland-Pfalz? Ordnung nach Rheinkilometer R M A T I K Übungen 3 ort.Name, stadtfluss.KM ort, stadtfluss, fluss ort.Landesteil='Rheinland-Pfalz' ort.ONR = stadtfluss.ONR stadtfluss.FNR = fluss.FNR fluss.Name = 'Rhein' stadtfluss.KM IS NOT NULL BY stadtfluss.KM 4. Welche Länder durchfließt die Donau? SELECT FROM WHERE AND AND AND DISTINCT fluss f, f.Name = f.FNR = sf.ONR = o.LNR = l.Name stadtfluss sf, ort o, land l 'Donau' sf.FNR o.ONR l.LNR 32 K Bsp.: Wie viele Städte sind in Europa pro Land verzeichnet? SELECT o.ONR, l.Name FROM Ort o, Land l WHERE o.LNR = l.LNR AND l.KNR = 'EU‘ ORDER BY l.Name I N F O R M A T • Manchmal müssen die Ergebnisse einer Anfrage gruppiert und verrechnet werden. I Gruppieren von Ergebnissen ONR Name AALBOR KOPENH BERLIN DUESSE MAINZ TALLIN Dänemark Dänemark Deutschland Deutschland Deutschland Estland Selbst zählen??? NEIN! 68 K Bsp.: Wie viele Städte sind in Europa pro Land verzeichnet? SELECT l.Name, COUNT(*) AS Anzahl FROM Ort o, Land l WHERE o.LNR = l.LNR AND l.KNR = 'EU‘ GROUP BY l.Name ORDER BY l.Name I N F O R M A T • Manchmal müssen die Ergebnisse einer Anfrage gruppiert und verrechnet werden. I Gruppieren von Ergebnissen ONR Name Name Anzahl AALBOR KOPENH BERLIN DUESSE MAINZ TALLIN Dänemark Dänemark Deutschland Deutschland Deutschland Estland Dänemark Deutschland Estland 2 3 1 2 3 1 69 33 • Bearbeiten Sie in inf-schule die Aufgaben 1 - 3 unter http://inf-schule.de/information/datenbanksysteme/terra/aggregation/uebungen I N F O R M A T I K Übungen 4 70 1. Wie viele Orte liegen in Frankreich? I K Übungen 4 COUNT(*) land, ort ort.LNR = land.LNR land.Name = 'Frankreich' A T SELECT FROM WHERE AND M GROUP BY entfällt, wenn „nur“ gezählt wird. In welchen Staaten liegen Megacities (mehr als 1 Mio. Einwohner)? Ausgabe: Anzahl der Städte pro Land! I N F O R 3. SELECT FROM WHERE AND GROUP ORDER land.Name, COUNT(*) AS Anzahl land, ort land.LNR = ort.LNR ort.Einwohner>1000000 BY land.Name BY Anzahl DESC 71 34 3. Wie viele Einwohner haben die Länder pro Kontinent im Schnitt? SELECT FROM WHERE GROUP ORDER k.Name AS Kontinent, AVG(l.Einwohner) AS Schnitt Kontinent k, Land l k.KNR = l.KNR BY k.Name Weitere BuiltInBY k.Name Funktionen: MAX, MIN, SUM,… 4. Welche Städte liegen an mehr als einem Fluss? O R M A T I K Übungen 4 o.Name, COUNT(*) AS Anzahl Ort o, StadtFluss sf o.ONR = sf.ONR BY o.Name COUNT(*)>1 BY o.Name I N F SELECT FROM WHERE GROUP HAVING ORDER 72 K Struktur der kompletten Datenbank „miniterra“ I Sprache T n benachbart m m 1 Teil von n Land n Ort 1 Hauptstadt 1 n F O R M A gesprochen n durchfließt m 1 I N Teil von Kontinent 73 Fluss 1 mündet n 35 • Welche Städte liegen an mehr als einem Fluss? Welche Flüsse sind es jeweils? SELECT FROM WHERE AND AND o.Name, f.Name Ort o, StadtFluss sf1, Fluss f o.ONR = sf1.ONR f.FNR = sf1.FNR EXISTS (SELECT NULL FROM StadtFluss sf2 WHERE sf1.FNR<>sf2.FNR AND sf2.ONR=o.ONR) ORDER BY o.Name R M A T I K Für Experten… O • Welche Länder grenzen an Deutschland? l1.Name, l2.Name Nachbarland n, Land l1, Land l2 (n.LNR1='D' OR n.LNR2='D') l1.LNR = n.LNR1 l2.LNR = n.LNR2 I N F SELECT FROM WHERE AND AND 74 • Welche Länder grenzen an Deutschland? Geben Sie nur die Nachbarländer aus! SELECT FROM WHERE AND AND ORDER IF(l1.LNR='D',l2.Name, l1.Name) AS "Direkte Nachbarn" Nachbarland n, Land l1, Land l2 (n.LNR1='D' OR n.LNR2='D') l1.LNR = n.LNR1 l2.LNR = n.LNR2 ACHTUNG: BY "Direkte Nachbarn" Nicht genormt! R M A T I K Für Experten… SELECT FROM WHERE AND fc.Name Fluss fp, Fluss fc fp.FNR = fc.ZielFNR fp.Name = 'Rhein' I N F O • Welche Flüsse münden in den Rhein? Selbstreferenz der Tabelle Fluss 75 36 • SQL bietet noch einige weitere (hier nicht behandelte) Möglichkeiten: OUTER JOINS: • Es werden beim Join auch Datensätze angezeigt, die keinen „Join-Partner“ finden. • Bsp.: Alle Städte sollen ausgegeben werden und zwar (wenn vorhanden) mit ihren Flüssen. Behandlung von leeren Feldern (NULL-Werten) … I N F O R M A T I K u.v.m. 76 Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL/MariaDB Datenbankmodellierung Themenvernetzung (DB-Zugriff, etc.) Ausblick I N F O R M A T I K Agenda 77 37 K MySQL arbeitet nach der Installation ohne Schutz des Administrators • Jeder kann auf alle Datenbanken zugreifen und diese verändern Mehrere Schüler sollen sich einen Datenbankserver „teilen“, dabei sich aber nichts gegenseitig „kaputtmachen“ • Die Rechte können sehr fein vergeben werden, am Wichtigsten sind: SELECT: INSERT/UPDATE/DELETE: CREATE/ALTER/…: Benutzer kann Tabellen auslesen Tabelleninhalte dürfen verändert werden Tabellenstruktur darf verändert werden I N F O R M A T • In einem Datenbanksystem müssen Rechte für verschiedene Benutzer verwaltet werden: I Verwaltung des Datenbanksystems 78 • Der Administrator (root) für die Datenbank hat alle Rechte und muss geschützt werden. • phpMyAdmin in Browser starten Menüpunkt „Benutzerkonten“ Benutzer „root - localhost“ auswählen und bearbeiten I N F O R M A T I K MySQL – Passwort für Administrator ändern 79 38 Button „Passwort ändern“ Beim nächsten Aufruf von phpMyAdmin ist die Eingabe des neuen Passworts notwendig N F O R M A T I K MySQL – Passwort für Administrator ändern I oder einfacher - direkt per SQL-Befehl: SET password = PASSWORD('HierMussEinGutesPasswortRein') 80 • Anmeldetyp für phpMyAdmin ändern Ins Verzeichnis xampp\phpmyadmin wechseln. Datei config.inc.php mit Notepad++ oder Wordpad öffnen. (oder über Control Panel öffnen) I N F O R M A T I K MySQL – Passwort für Administrator ändern 81 39 • Anmeldetyp für phpMyAdmin ändern Zeile $cfg['Servers'][$i]['auth_type'] = ‘config'; ändern auf = 'cookie'; Bei der nächsten Anmeldung (Browser einmal zuvor schließen!) ist die Eingabe von Benutzer (root) und Passwort notwendig I N F O R M A T I K MySQL – Passwort für Administrator ändern 82 • Über den Reiter „Benutzerkonten“ können weitere Benutzer angelegt und Rechte auf den Datenbanken vergeben werden z.B. für einen zentralen Datenbankserver sollen pro Schülergruppe „exklusive“ Datenbanken zur Verfügung gestellt werden • Oder einfacher… gleich noch etwas SQL lernen: M A T I K Benutzer / Rechte vergeben CREATE USER Schueler1@localhost IDENTIFIED BY 'meinPasswort'; CREATE DATABASE dbSchueler1; I N F O R Da phpmyadmin immer lokal auf dem Server läuft… GRANT ALL PRIVILEGES ON dbSchueler1.* TO Schueler1@localhost; 83 40 • Einem Benutzer können aber auch Rechte (z.B. nur Leserecht) auf zentralen Datenbanken wie terra vergeben werden: GRANT SELECT ON terra.* TO Schueler1@localhost; • … oder auch entzogen werden: REVOKE SELECT ON terra.* FROM Schueler1@localhost; I N F O R M A T I K Benutzer / Rechte vergeben 84 • Jetzt kann der Benutzer über http://Rechnername/phpmyadmin oder über http://IP-Adresse/phpmyadmin vom Schulnetzwerk auf den Server zugreifen. Problem: Neues Rechte-System in aktuelleren XAMPP-Versionen Manuelles Anpassen der Konfigurationsdatei httpd-xampp.conf nötig. I N F O R M A T I K Problem: XAMPP-Rechte 85 41 • Im Verzeichnis \xampp\apache\conf\extra findet sich die Konfigurationsdatei httpd-xampp.conf evtl. Sicherungskopie anlegen! Im letzten Abschnitt muss der Zugriff wieder erlaubt werden, indem das Verbot „auskommentiert“ wird. I N F O R M A T I K Anpassen der Konfigurationsdatei httpd-xampp.conf 86 Danach muss der Webserver mit XAMPP Control Panel neu gestartet werden. Dies ist die „quick and dirty“-Methode ohne Beachtung eines Sicherheitskonzepts Die Anpassung ist für ein „öffentliches“ System im Internet absolut ungeeignet! 1. Schützen Sie den Administrator-Zugang für ihren mySQL-Server wie zuvor beschrieben. 2. Legen Sie einen Benutzer „ifb“ und Passwort „Speyer“ an. Dieser soll die Leserechte (SELECT) auf der Datenbank „terra“ erhalten. 3. Passen Sie die Konfigurationsdatei httpd-xampp.conf an. 4. Versuchen Sie, mit diesem Benutzer auf die Datenbank des Nachbarn / der Nachbarin zuzugreifen. I N F O R M A T I K Übung: Benutzer anlegen 87 42 • Zur Vereinfachung existiert ein PHP-Skript, das eine erste Umgebung für den Unterricht einrichtet: Verzeichnis terra_install in das htdocs-Verzeichnis des XAMPP-Pakets kopieren. http://localhost/terra_install aufrufen. • Das Skript legt die Datenbanken terra1…4 und miniterra an. erzeugt Benutzerkonten und Datenbanken für die Schüler mit entsprechenden Rechten. I N F O R M A T I K Skript zur Anlage der Datenbanken 88 Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Themenvernetzung (DB-Zugriff, etc.) Ausblick I N F O R M A T I K Agenda 89 43 K Ein neues Informationssystem… Anforderungskatalog T I Schulverwaltung Die Benutzer können eine Liste aller Lehrer mit ihrem Dienstkürzel abrufen. • Für jede Klasse ist eine Liste der durchgeführten Klassenfahrten mit dem leitenden Lehrer ersichtlich. • StD L. Lämpel übernimmt dieses Jahr die 7a als Klassenleiter. Die Klasse kann das im Internet schon in den Ferien erfahren. • Eine Suche ist möglich über Klassenstufe, Lehrer oder Fach. • StR A. Kribich hat sich fortgebildet und darf ab diesem Jahr neben Mathematik und ev. Religion auch Informatik unterrichten. Die Fachschaftsliste muss aktualisiert werden. • Nachdem LiA Sch. Merz in Rente gegangen ist, geht die Fachbereichsleitung in Sport an OStR‘ G. Lenk. I N F O R M A • 90 • Um ein Informationssystem zu erstellen, muss ein Ausschnitt der realen Welt („Miniwelt“) im Computersystem erfasst werden. I K Modellbildung O • StD L. Lämpel übernimmt dieses Jahr die 7a als Klassenleiter. Die Klasse kann das im Internet schon in den Ferien erfahren. F • Eine Suche ist möglich über Klassenstufe, Lehrer oder Fach. • … ? I R Datenmodell • Die Benutzer können eine Liste aller Lehrer mit ihrem Dienstkürzel abrufen. N M A T Miniwelt 91 Unstrukturierte Informationen über die Miniwelt Repräsentation der Informationen als strukturierte Daten 44 • Um aus einer Beschreibung einer Miniwelt das Datenmodell einer Datenbank abzuleiten, bietet es sich an, zunächst ein grafisches Konzept der Daten zu erstellen. Text I N F O R M A T I K Modellbildung Externe Sicht Konzeptionelle Sicht Internes Modell (z.B. relationales Datenmodell) 92 R M A T I K Konzeptionelles Modell – E/R-Diagramme • E/R-Diagramme dienen dazu, das konzeptionelle Modell des Informationssystems zu erstellen. Es werden zwei Konstrukte verwendet: Entitätstypen Beziehungstypen (Relationships) • Eine Entität ist ein bestimmtes Objekt der realen Welt oder unserer Vorstellung • Entitäten mit gleichen Eigenschaften werden zu Entitätstypen zusammengefasst Symbol: Rechteck I N F O z.B. eine Person, ein Gegenstand, ein Ereignis Lehrer 93 45 K Entität: Entitätstyp: T • Beispiel Entitätstyp: I E/R-Diagramme - Entitätstyp Kürzel: Name: Vorname: Titel: Lä Lämpel Ludwig StD Kürzel: Name: Vorname: Titel: Kr Kribich Alfred StR Kürzel: Name: Vorname: Titel: Le Lenk Gertrud OStR' Entitätstyp „Lehrer“ I N F O R M A Primärschlüssel: Lehrer Lämpel, Kürzel Lä Menge aller Lehrer mit den Merkmalen Vorname, Nachname, Kürzel, … Kürzel (?) (oder ein künstlicher Schlüssel) 3 Entitäten 94 • Gleichartige Beziehungen zwischen Entitäten werden als ein Beziehungstyp zwischen den Entitätstypen definiert. Symbol: Raute • Beispiel: Ein Lehrer führt Klassenfahrten durch. Kuerzel: Name: Lä Lämpel Stufe: Teil: 8 a Kuerzel: Name: Kr Kribich Stufe: Teil: 11 M1 Kuerzel: Name: Me Merz Stufe: Teil: 12 m3 Beziehungen I N F O R M A T I K E/R-Diagramme - Beziehungstyp 95 Lehrer Klassenfahrt Klasse Entitätstyp Beziehungstyp Entitätstyp 46 K Modellierung ist oft nicht eindeutig, es gibt je nach Ansicht mehrere sinnvolle Modelle für eine Miniwelt. A T • Die Beziehung „Klassenfahrt“ könnte man auch als eigenen Entitätstyp modellieren. I Modellierung oft nicht eindeutig Klasse O R M Lehrer nimmt teil Klassenfahrt I N F führt durch 96 • Die Eigenschaften aller Entitäten und Beziehungen eines Entitätstyps bzw. eines Beziehungstyps werden mit Hilfe von Attributen erfasst. Symbol: Ellipse • Beispiel: R M A T I K E/R-Diagramme - Attribute Lehrer Klasse F O Klassenfahrt Name Datum N Kürzel Stufe Teil identifizierend I Vorname Ziel Anzahl beschreibend 97 47 • Ein Beziehungstyp wird durch die Kardinalität genauer bezeichnet: T 9a Name: Müller Vorname: Yvonne Name: 9b Name: Meier Vorname: Jan Name: 10d Name: Dietz Vorname: Nicole Name: Seiler Vorname: Manfred O R Name: A 1:n- Beziehung am Beispiel: Klassenzuordnung der Schüler M I K E/R-Diagramme – Kardinalität Schüler I N F Klasse 98 1 Klasse n Schüler angehören Ein Schüler gehört einer Klasse an. Einer Klasse gehören mehrere Schüler an. • n:m – Beziehung am Beispiel: Kurszuordnung von Schülern in der MSS T LK: ja Name: Müller Vorname: Yvonne A Fach: Deutsch LK: ja Name: Meier Vorname: Jan Fach: Englisch LK: ja Name: Dietz Vorname: Nicole R Fach: Mathe M I K E/R-Diagramme – Kardinalität Name: Seiler Vorname: Manfred Schüler Kurs n besucht m Schüler I N F O Kurs Ein Kurs hat mehrere Schüler. Ein Schüler nimmt an mehreren Kursen teil. 99 48 • Die Kardinalitäten (1:1, 1:n, n:m) geben nur an, wie viele Entitäten maximal miteinander verbunden sind. 1 Klasse angehören n Schüler Bsp.: Ein Schüler ist maximal einer Klasse zugeordnet. Einer Klasse sind maximal n Schüler zugeordnet. • Die Kardinalität kann zusätzlich eingeschränkt werden. N F O R M A T I K E/R-Diagramme – Kardinalität 1 Klasse angehören Schüler [8,30] I [1,1] n Bsp.: Eine Klasse hat minimal 8 und maximal 30 Schüler. 100 • Beziehungen können auch auf dem gleichen Entitätstyp gelten, Selbstbeziehung oder Reflexive Beziehung. Bsp.: Heirat T I K E/R-Diagramme – Reflexive Beziehungstypen Vorname: Klaus Name: Bach Vorname: Stefan Name: Meier Vorname: Sabine R Name: Hurtig Vorname: Hans Personen N F Name: Bach-Meier Vorname: Petra O M A Name: Meier 1 Heirat I Personen oder n:m ? 1 101 49 • Im ersten Teil wurde eine bestehende Datenbank sukzessive erweitert und vor allem in mehrere Tabellen zerlegt, um Redundanzen zu vermeiden. • Dieser Prozess kann in der sog. „Normalisierung“ formalisiert werden. Das Relationenschema wird dabei in die erste, zweite, dritte usw. Normalform überführt. Immer mehr Redundanzen werden vermieden. Immer mehr Tabellen sind notwendig (und Anfragen werden komplexer). Prozess wird in der Realität nur bis zu einem gewissen Grad durchlaufen. Weitergehendes mit Beispielen in: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank) I N F O R M A T I K Normalisierung von relationalen Schemata 103 K Für jeden Entitätstyp eine Tabelle T • Transformation von Entitätstypen I Transformation E/R-Modell in relationales Schema E/R-Modell M A Schüler Name R SNR Schueler I SNR 104 Name Vorname Relationales Schema N F O Vorname 50 • Transformation von 1:n-Beziehungstypen Fremdschlüssel wird auf Seite der „Kind“-Klasse hinzugefügt (kann, aber muss nicht der Name des Primärschlüssels sein). 1 n angehören Schüler Name KNR SNR Stufe O R M Klasse E/R-Modell A T I K Transformation E/R-Modell in relationales Schema N Klasse Schueler Stufe SNR Name Vorname KNR I KNR 105 Relationales Schema F Vorname • Transformation von n:m-Beziehungstypen Einfügen eines Fremdschlüssels nicht möglich Separate Tabelle mit zwei Fremdschlüsseln n besucht m Schüler Name KNR Stufe SNR Fehlstunden O R M Kurs E/R-Modell A T I K Transformation E/R-Modell in relationales Schema Kurs I KNR 106 Besucht Stufe KNR Schueler SNR Fehlst. SNR Name Vorname Relationales Schema N F Vorname 51 • Transformation von 1:1-Beziehungstypen z.B. das separate Speichern von sensiblen Daten zu Personen Separate Tabelle, wobei dort Primärschlüssel auch Fremdschlüssel ist. 1 1 Zusatzdaten SchülerPrivat Vorname SNR Konfession SNR Name O R M Schüler E/R-Modell A T I K Transformation E/R-Modell in relationales Schema Schueler Name Vorname SNR Konfession Herkunft I SNR SchuelerPrivat 107 Relationales Schema N F Herkunft • DBDesigner4 http://fabforce.net/dbdesigner4/ • MySQL Workbench http://www.mysql.com/downloads/workbench/ A T I K Tools für E/R-Diagramme Mogwai ER-Designer http://sourceforge.net/projects/mogwai/ TOAD Data Modeler TOAD für MySQL http://toadformysql.com/index.jspa I N F O R M • Ungetestet: • Oder doch einfach mit Office-Programmen… 109 52 „Schule“ • Es werden alle LehrerInnen mit ihren Namen, Vornamen, Kürzeln und Dienstgrad erfasst. • Die Benutzer können im Internet eine Liste der Klassen mit ihren KlassenleiterInnen einsehen. • Es ist eine Suche nach den Fachschaften der Schule möglich. Dabei werden auch alle LehrerInnen angezeigt, die der Fachschaft angehören. I N F O R M A I • Erstellen Sie ein E/R-Modell und dann das relationale Schema. T K Aufgaben 110 I T • In der Bibliothek müssen Bücher erfasst werden. Eine Suche ist möglich über Sachgebiet, Autor, Titel, Erscheinungsort und –jahr, Verlag. M • Bei der Suche wird eine Liste aller verfügbaren Verlage vorgeblendet. R • Leser, die Bücher ausleihen wollen, müssen sich zuvor registrieren. • Für ein Buch kann herausgefunden werden, ob es zur Zeit ausgeliehen ist und von wem. • Um Schäden nachvollziehen zu können, können alle vorherigen Ausleiher ermittelt werden. • Bei zu langer Ausleihe erfolgt eine Mahnung an den Leser. Das muss vermerkt werden. I O A „Bibliothek“ F • Erstellen Sie ein E/R-Modell und dann das relationale Schema. N K Bibliothek … Anforderungskatalog 111 53 K Anfragen an die Bibliothek-Datenbank • Eine Datenbank für das Schema kann fertig importiert werden! N F O R M A T I (Bibliotheks-DB_latin.sql) 1. Welche Bücher sind bei einem Verlag aus München erschienen? (214 Ergebnisse) 2. Welche Jugendbücher sind zur Zeit von welchem Leser ausgeliehen? Geben Sie den Buchtitel, den Lesernamen und das Datum der Ausleihe aus! (7 Ergebnisse) 3. Wie viele Bücher existieren zu jedem Sachgebiet? Geben Sie die Sachgebiete nach Anzahl absteigend sortiert aus. 4. Wie viele Bücher aus jedem Sachgebiet sind zur Zeit ausgeliehen? I (Kinder: 14) 5. Welche Leser haben zur Zeit Bücher ausgeliehen? (49 Ergebnisse, Achtung Duplikate?) 112 I • Dr. Mager (kurz Ma) behandelt am 21.2.2005 den Patienten Willi Schäfer (Patientennummer 3012). Im Rahmen dieser Behandlung werden die folgenden Leistungen erbracht: Beratung, symptombezogene Untersuchung, Schutzimpfung. Jede dieser Leistungen ist über eine Nummer identifizierbar und kostet eine bestimmte Gebühr. • Frau Dr. Hurtig (kurz Hu) wird am Sonntag (27.2.2005) zu einem Notfall gerufen. Patient Manfred Achilles ist beim Fußballspiel eine Sehne gerissen. In der Untersuchung vor Ort wird das Bein ruhig gestellt und der Patient ins Krankenhaus eingewiesen. • Herr Dr. Alzheimer (kurz Al) besucht regelmäßig seine Patientin Paula Stein im Altenheim. Diese Untersuchung gilt als Vorsorgemaßnahme. I N F O R M A „Arztpraxis“ T K Arztpraxis … Anforderungskatalog 113 54 I • Bei der Registrierung muss der Benutzer sich einen eindeutigen Benutzernamen auswählen und seine email-Adresse hinterlegen. • Benutzer legen Gruppen an, denen weitere Benutzer beitreten können. • Ein Benutzer sieht in einer Übersicht, mit welchen anderen Benutzern er Freundschaften unterhält. • Ein persönliches Blog erlaubt einem Benutzer, regelmäßig sein Leben mit anderen zu teilen. • Ein Benutzer wird rechtzeitig an Events erinnert, an denen er teilnimmt. I N F O R M A „Wer-kennt-wen“ T K Wer kennt wen? - Anforderungskatalog 114 Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Themenvernetzung (DB-Zugriff, etc.) Ausblick I N F O R M A T I K Agenda 115 55 K über Werkzeuge (z.B. Excel) über selbst erstellte Programme I N F O R M A T • Grafische Auswertung der Datenbank (z.B. Anzahl der Länder pro Kontinent) I Vernetzung des Themas - Auswertungen 116 • Umrechnung Breiten/Längen-Angaben in Bildschirmkoordinaten I N F O R M A T I K Vernetzung des Themas - Koordinatensystem 117 56 • Problem: „Verfolgen eines Flusslaufes“ von der Quelle zum Meer z.B. Spree Nordsee T I K Vernetzung des Themas - Grenzen von SQL • Hier werden iterative Strukturen benötigt, die SQL (als mengenorientierte Sprache) im Standard nicht bietet. F Spree Weser Rhein Fulda Werra Main Anknüpfung an Programmierung Python, PHP, Delphi, Java Havel Aller O R M A Elbe N Mosel Neckar Donau I Inn Isar 118 • Problem: „Verfolgen eines Flusslaufes“ vom Meer zu den Zuflüssen z.B. Nordsee Nordsee T I K Vernetzung des Themas - Grenzen von SQL R M A Elbe Havel Aller Beispiel für eine (elegante?) rekursive Programmierung Spree Weser Rhein O Fulda Werra F Main Neckar Donau Inn I N Mosel Isar 119 57 • Grundlegende Schritte jedes Datenbankzugriffs am Beispiel Python und der Bibliothek mysql.connector: I K Zugriff auf MySQL über Python 1. Verbindung mit dem Datenbanksystem aufbauen con = mysql.connector.connect( host = 'localhost', user = 'root', password = 'sql', database = 'terra') F O R M A T # http://dev.mysql.com/downloads/connector/python/ import mysql.connector N I Ergebnis der Verbindung ist eine Variable (Handle), mit der auf die Verbindung zugegriffen werden kann. Fehler sollten (gerade hier) abgefangen (PHP-Konstrukt „or die“) und ausgegeben werden. In manchen Fällen (z.B. PHP) kann die Datenbank erst in einem zweiten Schritt ausgewählt werden. 120 2. Abfrage ausführen cursor = con.cursor() SQLBefehl = 'SELECT Name, Einwohner FROM kontinent' cursor.execute(SQLBefehl) T I K Zugriff auf MySQL über Python Ergebnis ist eine Variable (Handle), mit der auf das Resultat der Anfrage zugegriffen werden kann. R M A 3. Ergebnisse ausgeben O Grundlegendes Problem I N F • Programmiersprachen sind iterativ • relationale Datenbanken (und damit SQL) sind mengenorientiert Speicherung und „Durchlaufen“ der Ergebnisse notwendig 4. Freigabe der Handles cursor.close() con.disconnect() 121 58 • Ausgabe der Ergebnisse cursor.fetchone() liefert eine komplette Zeile des Ergebnisses als Tupel Nach der letzten Zeile wird None zurückgegeben M A T I K Zugriff auf MySQL über Python Iteration über alle Zeilen des Ergebnisses row=cursor.fetchone() while (row!=None): print(row[0], row[1]) row = cursor.fetchone () I N F O R Auslesen und Speichern einer Ergebniszeile Zugriff auf eine Spalte der Ergebniszeile 122 • In Delphi kann der Zugriff auf Datenbanken mittels Borland Database Engine (BDE) bzw. dbExpress erfolgen. Problem: Ab Delphi 5 ist die Datenbankunterstützung nur in der Professional-Version enthalten. • Units, die einen einfachen Datenbankzugriff erlauben MySQLDirect (http://www.sourceforge.net/projects/directsql) Einsteiger-Tutorial dazu: http://www.delphi-treff.de/tutorials/ I N F M R Lösung: Verzicht auf Borland-Datenbank-Komponenten und Verwendung freier Zugriffssoftware O A T I K MySQL in Delphi 123 59 • Anknüpfungspunkt: www.schober.de I N F O R M A T I K Datenschutz 124 • Ein Blick ins Bundesdatenschutzgesetz: (http://bundesrecht.juris.de/bdsg_1990/ ) I N F O R M A T I K Datenschutz 125 60 • Datenbank-basierte Umfrage in der Schule Wie können durch Verknüpfen (eigentlich harmloser) Daten neue Informationen gewonnen werden? I N F O R M A T I K Vernetzung des Themas - Datenschutz 126 Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Themenvernetzung (DB-Zugriff, etc.) Ausblick I N F O R M A T I K Agenda 127 61 • Weitere Möglichkeiten von SQL Outer Joins (z.T. auf inf-schule.de in gbuch-Datenbank) Sub-Selects • Verändern der Datenbankinhalte mit SQL INSERT / DELETE / UPDATE R M A T I K Ausblick - Was hätte man noch alles behandeln können? • Verändern der Datenbankstruktur über Anweisungen I N F O Data Definition Language (DDL) • Datenbank-Management Zugriffsbeschleunigung über Indizes Verwaltung der physischen Speicherung • storage engine InnoDB für MySQL • Sicherung der Datenbank • u.v.m. 128 K Software / Links • XAMPP T I http://www.xampp.org • Deutsche MySQL Seite M A http://www.mysql.de/ • MySQL Workbench • PHP-Dokumentation (mit MySQL Funktionen) http://www.php.net/download-docs.php • Connectors (Python, Java, …) für MySQL http://www.mysql.de/downloads/connector/ I N F O R http://www.mysql.com/downloads/workbench/ 129 62 I K Software / Links • Material zur MySQL-Verwendung von Klaus Merkert http://www.hsg-kl.de/faecher/inf/material/datenbanken/mysql/index.php http://www.hsg-kl.de/faecher/inf/datenbanken/postgres/index.php A T • Material zu PostgreSQL von Klaus Merkert http://oszhdl.be.schule.de/gymnasium/faecher/informatik/datenbanken/in dex.htm • u.v.m. I N F O R M • Material zu DB allgemein von OSZ Handel, Berlin 130 Fragen I N F O R M A T I K Informationssysteme / Datenbankabfragen 131 63 • Schema zur Beispieldatenbank „schulverwaltung.sql“ I K Schemata der Beispieldatenbanken Name A T LNR Vorname FNR n unterrichtet m Faecher M Lehrer Fach R n F O Klassenleiter N m I Klassen KStufe KBuchstabe Saal 132 • Schema zur Beispieldatenbank „bibliothek.sql“ BuchNr Autor … zurueck n A T I K Schemata der Beispieldatenbanken Ausleihe LeserNr m Nachname … Leser M Buecher … 1 R n F Verlag Ist Teil von 1 Leserprivat I 1 N O gibt heraus VNR Name Ort LeserNr Geschlecht … 133 64 • Schema zur Beispieldatenbank „wm2006.sql“ I K Schemata der Beispieldatenbanken Ort T 1 A n Team1 n Begegnung Datum Team2 1 F O R M n Ergebnis 1 1 Schiedsrichter N Team n I 1 1 134 1 Land • WM-Datenbank als UML-Diagramm I K Schemata der Beispieldatenbanken Ort T ONR M TNR2 Name Sitze ONR A TNR1 Begegnung SNR Datum TNR TNR Team 135 Schiedsrichter Trainer LNR TNR in Team ist Primär- und Fremdschlüssel Name Vorname LNR TNR I N F O R Ergebnis Land LNR Name Einwohner Kontinent 65 I T • Bei der Registrierung muss der Benutzer sich einen eindeutigen Benutzernamen auswählen und seine emailAdresse hinterlegen. M • Benutzer legen Gruppen an, denen weitere Benutzer beitreten können. R • Ein Benutzer sieht in einer Übersicht, mit welchen anderen Benutzern er Freundschaften unterhält. • Ein persönliches Blog erlaubt einem Benutzer, regelmäßig sein Leben mit anderen zu teilen. • Ein Benutzer wird rechtzeitig an Events erinnert, an denen er teilnimmt. I N F A „Wer-kennt-wen“ O K Wer kennt wen? - Anforderungskatalog 136 • Grundlegende Schritte jedes Datenbankzugriffs am Beispiel PHP: 1. Verbindung mit dem Datenbanksystem aufbauen $link = mysql_connect($Host, $Benutzer, $Passwort) or die("DB-Verbindung unmöglich: " . mysql_error()); M A T I K Zugriff auf MySQL über PHP Ergebnis der Verbindung ist eine Variable (Handle), mit der auf die Verbindung zugegriffen werden kann. Fehler sollten (gerade hier) abgefangen (PHP-Konstrukt „or die“) und ausgegeben werden. N F O R I 2. Datenbank auswählen mysql_select_db($Datenbank) or die("Auswahl Datenbank unmöglich: " . mysql_error()); 137 66 Abfrage ausführen $result = mysql_query($SQLText) or die("Anfrage fehlgeschlagen: " . mysql_error()); 4. Grundlegendes Problem F O • Programmiersprachen sind iterativ • relationale Datenbanken (und damit SQL) sind mengenorientiert Speicherung und „Durchlaufen“ der Ergebnisse notwendig Für das Abrufen der Ergebnisse gibt es drei wesentliche Varianten: I N i. ii. iii. 5. 138 Ergebnis ist eine Variable (Handle), mit der auf das Resultat der Anfrage zugegriffen werden kann. Ergebnisse ausgeben R M A I 3. T K Zugriff auf MySQL über PHP Array Assoziatives Array Objektorientiert Freigabe der Handles (kann entfallen) mysql_free_result($result); mysql_close($link); • Ausgabe der Ergebnisse als Array mysql_fetch_array liefert eine komplette Zeile des Ergebnisses als Array (Alternative: mysql_fetch_row) Nach der letzten Zeile wird FALSE zurückgegeben A T I K Zugriff auf MySQL über PHP Schleife über alle Zeilen des Ergebnisses while ($arrRow = mysql_fetch_array($result)) { echo "$arrRow[0] : $arrRow[1]"; } I N F O R M Auslesen und Speichern einer Ergebniszeile als Array Zugriff auf eine Spalte der Ergebniszeile 139 67 Informationssysteme / Datenbankabfragen Thomas Mohr I N F O R M A T I K 68