Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informationssysteme / Datenbankabfragen

Ähnliche Präsentationen


Präsentation zum Thema: "Informationssysteme / Datenbankabfragen"—  Präsentation transkript:

1 Informationssysteme / Datenbankabfragen
Thomas Mohr

2 Agenda Datenbanken – Wozu? Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick

3 Informationssysteme

4 Was ist ein Informationssystem ?
Ein Informationssystem kann auf formalisierte Fragen eines Anwenders Antworten aus einer gegebenen Datenmenge geben Komponenten eines Informationssystems: Informationssystem Erfassung Speicherung Analyse Darstellung Datenbanksystem DBS Datenbank (Datenbasis) Datenbankmanagementsystem DBMS, z.B. MySQL

5 Was ist ein Informationssystem ?
Datenbasis / Datenbank Menge von Daten, die aus Sicht der Systembetreiber in irgendeiner Weise als zusammengehörig betrachtet werden. Angereichert um weitere Daten, die das DBMS zur Erfüllung seiner Aufgaben benötigt, bilden sie eine Datenbank (DB). Datenbankverwaltungssystem (DBMS) Softwareprodukte für die dauerhafte, integre und anwendungsunabhängige Speicherung und Verwaltung von großen, mehrfachbenutzbaren integrierten Datenbasen Datenbanksystem Ein Datenbanksystem (DBS) besteht aus einem DBMS und einer oder mehreren Datenbanken Informationssystem Ein Informationssystem erweitert die Datenbank um eine Reihe von Werkzeugen zur Abfrage, Darstellung, Transformation und Analyse von Daten

6 Ein Ausgangspunkt im Unterricht…
Schüler führen eine Internet-Recherche durch: „Nachbarländer Deutschlands – Fläche, Einwohner, Hauptstadt“ Nutzung eines Informationssystems Unterschiedliche Darstellung der Informationen

7 Software-Architekturen: „Standalone“-Programm
z.B. selbst programmierte Schülerdatei in Delphi programmierte Übersicht von Länderinformationen Darstellung Anwendungsprogramm „Logik“ Datenbasis PC Beispiel – Länderinfos aus Delphi heraus als Datei abgelegt.

8 Software-Architekturen: „Standalone“-Programm
Vorteile Übersichtlichkeit (?) Schnell zu programmieren nur eine Programmiersprache Nachteile Daten meist nur vom erzeugenden Programm zu lesen Erweiterungen aufwändig Immer wieder gleiche Probleme (z.B. Datumsformat) Darstellung Anwendungsprogramm „Logik“ Datenbasis PC

9 Software-Architekturen - Client-Server
z.B. Outlook und Exchange-Server „einfache“, datenbank-basierte Schülerverwaltung Darstellung Anwendungsprogramm „Logik“ Datenbasis Darstellung Anwendungsprogramm „Logik“ Client Server (Datenbank)Server Datenbasis

10 Software-Architekturen - Client-Server
z.B. Outlook und Exchange-Server „einfache“, datenbank-basierte Schülerverwaltung (Datenbank)Server Datenbasis Server Client Darstellung Anwendungsprogramm „Logik“ Datenbankzugriff aus Delphi heraus (Client-Server)

11 Software-Architekturen - Client-Server
Vorteile Datenbank übernimmt „Standardaufgaben“ Daten zentral vorhanden (für mehrere Benutzer / Programme) Erweiterungen relativ einfach Nachteile Installation von Software auf allen Clients notwendig Weitere „Sprache“ zum Datenbankzugriff Darstellung Anwendungsprogramm „Logik“ Client Server (Datenbank)Server Datenbasis

12 Software-Architekturen – Webarchitektur
Eine moderne 3-schichtige Webarchitektur… Client Webclient (Browser) Darstellung Server Darstellung Anwendungsprogramm „Logik“ Webserver (z.B. Apache und PHP) „Logik“ Datenbankserver (z.B. MySQL) Datenbasis Server

13 Software-Architekturen – Webarchitektur
Eine moderne 3-schichtige Webarchitektur… Darstellung Client Webclient (Browser) „Logik“ Webserver (z.B. Apache und PHP) Server Miniterra-Datenbank aus PHP heraus. Datenbasis Datenbankserver (z.B. MySQL) Server

14 Software-Architekturen – Webarchitektur
Vorteile Keine Installation von zusätzlicher Software beim Client Nachteile http-Protokoll ohne Sessionverwaltung Darstellung Client Webclient (Browser) „Logik“ Webserver (z.B. Apache und PHP) Server In realen Systemen werden heute meist noch mehr Schichten unterteilt, z.B. eine eigene Schicht für die Prozesslogik (z.B. Geschäftsprozesse in SAP) Datenbasis Datenbankserver (z.B. MySQL) Server

15 Typische Hardware-Verteilung
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. Datenbankserver Webserver Clients Hardware-Anforderungen an Webserver und Datenbankserver sehr unterschiedlich. Datenbankserver benötigt vor allem viel Hauptspeicher und Plattenplatz, Webserver vor allem Rechenstärke (PHP-Interpretation).

16 … und zum Testen / für die Fortbildung?
Alle drei Schichten sind auf einem Rechner! Datenbankserver Webserver Clients Internet Explorer Client Webserver Datenbankserver Apache MySQL

17 Das andere Extrem – eine Web Farm
Load Balancer Application Server Farm je 4 Prozessoren HACMP Fail-Over Production DB Server FailOver DB Server HACMP - High Availability Cluster Multi-Processing FDDI - Fibre Distributed Data Interface Shark - Tiger Shark is a parallel file system for IBM's AIX Operating System 32 GByte RAM 32 GByte RAM FDDI Switch 2,4 TByte

18 Man unterscheidet verschiedene Arten von Datenbanken:
Hierarchische Datenbanken Die Datenelemente sind baumartig miteinander verbunden Vernetzte Datenbanken Die Datenelemente sind mit Zeigern zu einem Netz miteinander verbunden Beide Formen waren vor allem bei Großrechnern im Einsatz und werden zunehmend von relationalen Datenbanken abgelöst Bsp. für hierarchische Datenbanken: Information Management System (IMS) ist ein Informationssystem der Firma IBM. Es ist heute noch bei Banken und Versicherungen weit verbreitet, vor allem der Transaktionsmonitor (IMS/DC), der auch Schnittstellen via MQSeries, TCP/IP und Java bietet. Bsp.: für vernetzte Datenbanken: CODASYL (COnference on DAta SYstems Languages) CODASYL entstand in den USA aus einem Treffen 1959, von Computerbesitzern bei Regierung, Militär und Privatwirtschaft, sowie Computerherstellern und anderen Interessierten, mit dem Zweck, über die Entwicklung einer gemeinsamen Programmiersprache zu beraten, die in kompatibler Weise auf Computern der verschiedenen Hersteller funktionieren sollte.

19 Relationale Datenbanken
Arten von Datenbanken Relationale Datenbanken Die Daten werden in Form von Tabellen gespeichert Zwischen den Tabellen werden Beziehungen aufgebaut (Relationen) Objektrelationale Datenbanken erweitern die relationalen Datenbanken und objektorientierte Funktionen (z.B. Vererbung) Attribut (Merkmal, Spalte) Attributwert (Datenwert) Datensatz (Tupel) Attributklasse Land Name Einwohner Hauptstadt Kontinent Dänemark Kopenhagen Europa Deutschland Berlin Europa Indien Delhi Asien Rwanda Kigali Afrika

20 Relationale Datenbanken – typische Vertreter
Arten von Datenbanken Relationale Datenbanken – typische Vertreter Oracle IBM (DB/2) Microsoft SQL Server (Access ?) Informix MySQL PostGreSQL OpenSource Einen wesentlichen Fortschritt erzielte in den 1960er und 1970er Jahren Edgar F. Codd mit seiner Forschungsarbeit am IBM Almaden Research Center. Codd entwickelte die Grundlagen des ersten experimentellen relationalen Datenbanksystems System R. Die Berkeley Group folgte mit Ingres und der Abfragesprache QUEL. Oracle (damals noch unter den Firmennamen SDL und RSI) verwertete die Ergebnisse des System R und führte SQL zum kommerziellen Erfolg. IBM folgte mit SQL/DS und DB2. Die relationalen Datenbanksysteme verdrängten in den 1980ern die hierarchischen und netzwerkartigen Systeme und der Großteil der Behörden, Konzerne, Institute und mittelständischen Unternehmen stellte seine IT auf Datenbanksysteme um. Während in den 1990ern wenige kommerzielle Hersteller von Datenbank-Software faktisch den Markt beherrschten (namentlich IBM, Informix, Microsoft mit SQL Server und Oracle), erlangen in den 2000ern die Open-Source-Datenbankmanagementsysteme eine immer größere Bedeutung. Vor allem MySQL und PostgreSQL erzielten signifikante Marktanteile. Als Reaktion bieten die führenden kommerziellen Hersteller gebührenfreie Versionen ihrer Datenbank-Software an. Software-AG: Adabas Früher dBase (von Ashton Tate, dann von Borland gekauft): Dateibasiertes DBS mit eigener Zugriffssprache, später auch SQL-Unterstützung

21 Was bietet mir eine Datenbank?
Strukturierte Speicherung von Daten Verteilter, gleichzeitiger Zugriff mehrerer Benutzer / Programme ACID – Prinzip Atomicity Transaktionen (Änderungen an der Datenbank) werden ganz oder gar nicht durchgeführt Consistency Eine Transaktion führt wieder zu einem konsistenten (gültigen) Zustand der Datenbank Isolation Transaktionen beeinflussen sich nicht gegenseitig Durability Eine Transaktion ist dauerhaft gespeichert, auch gegen Systemabstürze gesichert Atomarität  Konten-Buchungsbeispiel Konsistenz  Definierte Bedingungen, Regeln werden eingehalten Isoliertheit Dauerhaftigkeit

22 Agenda Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick Datenbanken – Wozu? Datenbanken – Wozu? Abfragesprachesprache SQL

23 MySQL – Jetzt wird es (endlich) praktisch…
Starten Sie den Datenbankserver und den Webserver Das Datenbanksystem bietet einen Service für andere Rechner an Die Windows-Firewall kann dies melden. Der Port muss freigegeben werden.

24 Die erste Datenbank importieren
Die Administration von MySQL funktioniert selbst schon am einfachsten über den Browser Webarchitektur Datenbankserver Webserver Client Browser Apache MySQL

25 Die erste Datenbank importieren
Legen Sie eine neue Datenbank „terra1“ an. Wählen Sie den Punkt „Importieren“ und suchen die Datei „terra1.sql“

26 Die erste Tabelle… Klicken Sie auf „Struktur“: Die Tabelle „land“ wird angezeigt. Lassen Sie sich den Inhalt der Tabelle anzeigen.

27 Relationale Datenbank – Aufbau
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. LNR Name Einwohner Hauptstadt Kontinent DK Dänemark 5.16 Kopenhagen Europa D Deutschland Berlin Europa IND Indien 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)

28 SQL = Structured Query Language.
Abfragen mit 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.

29 SQL – SELECT und FROM Eine Projektion schränkt die Abfrage hinsichtlich der Attribute ein (die Spalten der resultierenden Tabelle): SELECT [Spalten] FROM [Tabelle] WHERE [Bedingung] ORDER BY [Attribute]; Die darzustellenden Spalten der Tabelle müssen durch Kommata getrennt angegeben werden; * steht für „alle Spalten“. Beispiele: SELECT * FROM Land; SELECT Name FROM Land; SELECT Name, Kontinent FROM Land;

30 SQL – WHERE Eine Selektion schränkt die Abfrage hinsichtlich der Datensätze ein (die Zeilen der resultierenden Tabelle): SELECT [Spalten] FROM [Tabelle] WHERE [Bedingung] ORDER BY [Attribute]; Die Abfrage enthält alle Datensätze, welche die angegebene Bedingung erfüllen. Beispiele: SELECT * FROM Land WHERE (Kontinent='Europa') SELECT * FROM Land WHERE (Einwohner>10)

31 Veranschaulichendes 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 Berlin Europa IND Indien Delhi Asien RWA Rwanda Kigali Afrika … … … … … Ergebnistabelle Name Einwohner Kontinent Deutschland Europa Indien Asien … … …

32 Bedingungen mit Textattributen:
SQL – WHERE Bedingungen mit Textattributen: Name = 'Deutschland' Name LIKE 'P%' (Paraguay, Polen, Portugal) Name LIKE 'I_land' (Irland, Island) Bedingungen mit Zahlattributen: Stufe=7 (gleich 7) Stufe<>7 (ungleich 7) Stufe<7 (kleiner 7) Stufe>7 (größer 7) Stufe<=7 (kleiner gleich 7) Stufe>=7 (größer gleich 7) Stufe BETWEEN 7 AND 10 (zwischen 7 und 10)

33 Vergleich auf Nullwert (kein Attributwert angegeben):
SQL – WHERE Vergleich auf Nullwert (kein Attributwert angegeben): LNR IS NULL Logische Verknüpfungen: NOT (Kontinent='Europa') (Kontinent nicht Europa) (Kontinent='Europa') AND (Einwohner<1) (Zwergstaaten in Europa) (Kontinent='Europa') OR (Kontinent='Asien') (Länder in Eurasien)

34 Das Abfrageergebnis kann sortiert werden: SELECT [Spalten]
SQL – ORDER BY Das Abfrageergebnis kann sortiert werden: SELECT [Spalten] FROM [Tabelle] WHERE [Bedingung] ORDER 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 Beispiele: SELECT * FROM Land ORDER BY Name SELECT * FROM Land ORDER BY Kontinent, Einwohner DESC

35 Öffnen Sie das SQL-Fenster
Die ersten SQL Befehle Öffnen Sie das SQL-Fenster Geben Sie alle Länder aus! Geben Sie alle Länder aus: Name, Einwohner, Hauptstadt Sortierung nach Einwohner absteigend SELECT * FROM Land SELECT Name, Einwohner, Hauptstadt FROM Land ORDER BY Einwohner DESC

36 Aufgaben, Datenbank: terra1
Welche Länder liegen in Asien und Australien? Welche Länder haben zwischen 10 und 100 Mio. Einwohner? Absteigend nach Einwohner sortiert WHERE Kontinent='Asien' OR Kontinent='Australien' WHERE Einwohner BETWEEN 10 AND 100 ORDER BY Einwohner DESC

37 Wichtige Stringfunktionen
Hilfsfunktionen Wichtig sind vor allem Funktionen zur Manipulation von Strings und Datumsangaben, z.B. DATEDIFF(D1, D2) Differenz (Tage) NOW() Aktuelle Zeit/Datum (SELECT CURDATE()) Wichtige Stringfunktionen CONCAT(S1,S2,…) Verbinden von Strings LOWER(),UPPER() In Groß-/Kleinbuchstaben umwandeln CHAR_LENGTH() Länge in Zeichen MID(str,pos,len) String ausschneiden TRIM(s), LTRIM, RTRIM Abschneiden von Leerzeichen Weitere Funktionen online in der Hilfe zu MySQL! Achtung: LENGTH() ist die Länge in Bytes! SQL ist hier nicht standardisiert  Die Funktionen sind bei anderen DBS oft unterschiedlich

38 Aufgaben, Datenbank: terra1
Geben Sie die Länder in folgender Form aus: Welche Länder gibt es in Europa mit mehr als 20 Mio Einwohner? CONCAT(UPPER(Name),' - ',Hauptstadt) AS Land, round(Einwohner) AS "Mio. Einwohner" Spalten können mit „AS“ umbenannt werden WHERE Kontinent = 'Europa' AND Einwohner > 20 Frankreich?? Problem: Europa wird unterschiedlich geschrieben! Lösung: Auslagerung in eine eigene Tabelle

39 Relationale Datenbanken – Beziehungen
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 Berlin Europa IND Indien Delhi Asien RWA Rwanda 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

40 Relationale Datenbanken – Beziehungen
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

41 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 EU IND Indien AS RWA Rwanda 6.30 AF Land KNR Name EU Europa AS Asien AF Afrika Kontinent

42 Cross-Join („jede Zeile mit jeder“)
SQL – einfache Joins Cross-Join („jede Zeile mit jeder“) SELECT * FROM Land, Kontinent LNR Name Einwohner KNR DK Dänemark 5.16 EU D Deutschland EU IND Indien 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 EU EU Europa D Deutschland EU AS Asien D Deutschland EU AF Afrika IND Indien AS EU Europa IND Indien AS AS Asien IND Indien AS AF Afrika … … … … …

43 Einschränken auf „passende“ Datensätze.
SQL – einfache Joins 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 EU EU Europa D Deutschland EU AS Asien D Deutschland EU AF Afrika IND Indien AS EU Europa IND Indien AS AS Asien IND Indien AS AF Afrika … … … … …

44 AND Land.Einwohner > 10
SQL – einfache Joins 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 EU EU Europa D Deutschland EU AS Asien D Deutschland EU AF Afrika IND Indien AS EU Europa IND Indien AS AS Asien IND Indien AS AF Afrika … … … … …

45 Einschränken auf gesuchte Spalten.
SQL – einfache Joins 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 EU EU Europa IND Indien AS AS Asien … … … … … Name Einwohner Name Deutschland Europa Indien Asien … … … In der Realität versucht das DBMS, durch „geschicktes“ Vorgehen die Datenmenge schon früher zu reduzieren.

46 Aufgaben, Datenbank: terra2
Geben Sie alle Kontinente mit ihren Ländern aus: Name der Kontinente und Länder Sortierung nach Kontinent absteigend In welchen Kontinenten gibt es Länder mit mehr als 100 Mio. Einwohner? SELECT Kontinent.Name, Land.Name FROM Kontinent, Land WHERE Kontinent.KNR = Land.KNR ORDER BY Kontinent.Name DESC SELECT Kontinent.Name FROM Land, Kontinent WHERE Land.KNR = Kontinent.KNR AND Land.Einwohner > 100 SELECT DISTINCT Kontinent.Name FROM Land, Kontinent WHERE Land.KNR = Kontinent.KNR AND Land.Einwohner > 100 Problem: Es werden Duplikate angezeigt Lösung: DISTINCT-Anweisung

47 Erweiterung der Datenbank
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“. ONR Name … LNR BANGAL Bangalore … IND GOETTI Göttingen … D KARLSR Karlsruhe … D KOPENH Kopenhagen … DK Ort LNR Name … KNR DK Dänemark … EU D Deutschland … EU IND Indien … AS RWA Rwanda … AF Land Schlüsselattribut aus Land Datenbank: terra3.sql

48 Bisheriges „Schema“ der Datenbank
Ein erstes „E/R-Modell“ eigentlich intuitiv zu lesen!? Kontinent Teil von Land Ort Hauptstadt Finden Sie die Stelle in der Datenbank terra3, an der die „Hauptstadt“ abgespeichert ist?

49 Aufgaben, Datenbank: terra3
Geben Sie alle Orte mit ihren Ländern aus: Name der Orte und Länder Sortierung nach Einwohnerzahl absteigend Geben Sie alle Länder mit ihrer Hauptstadt aus! Sortierung nach Kontinent und Land. SELECT Ort.Name, Ort.Einwohner, Land.Name AS Land FROM Ort, Land WHERE Ort.LNR = Land.LNR ORDER BY Ort.Einwohner DESC SELECT Kontinent.Name AS Kontinent, Land.Name, Ort.Name AS Hauptstadt FROM Ort, Land, Kontinent WHERE Ort.ONR = Land.HauptONR AND Land.KNR = Kontinent.KNR ORDER BY Kontinent.Name, Land.Name

50 Der Alias-Name für Land ist nicht notwendig (verkürzt die Abfrage)
SQL – Tabellen-Alias 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: SELECT o.Name AS Stadt, l.Name AS Land, hs.Name FROM Ort o, Land l, Ort hs WHERE o.LNR = l.LNR AND l.HauptONR = hs.ONR AND o.Einwohner> Land Ort Teil von Hauptstadt Der Alias-Name für Land ist nicht notwendig (verkürzt die Abfrage)

51 Erweiterung der Datenbank
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? FNR Name Laenge ELB Elbe 1144 MEK Mekong 4500 MOS Mosel 544 RHE Rhein 1320 Fluss ONR Name GOETTI Göttingen KARLSR Karlsruhe KOBLEN Koblenz KOPENH Kopenhagen Ort ONR HAMBUR PHNOMP KOBLEN Problem: Für Flüsse müssen beliebig viele Orte eingetragen werden.

52 Erweiterung der Datenbank
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? FNR Name Laenge ELB Elbe 1144 MEK Mekong 4500 MOS Mosel 544 RHE Rhein 1320 Fluss ONR Name GOETTI Göttingen KARLSR Karlsruhe KOBLEN Koblenz KOPENH Kopenhagen Ort FNR LEI RHE Problem: Für Orte müssen mehrere Flüsse eingetragen werden. Lösung: Auslagerung der Zuordnung in eine eigene Tabelle

53 Erweiterung der Datenbank
Es sollen Flüsse gespeichert werden. Flüsse fließen durch Orte. Manche Orte werden von mehreren Flüssen durchflossen (z.B. Koblenz) Zuordnungstabelle mit Schlüsseln aus beiden Haupttabellen. FNR Name Laenge ELB Elbe 1144 MEK Mekong 4500 MOS Mosel 544 RHE Rhein 1320 Fluss ONR Name GOETTI Göttingen KARLSR Karlsruhe KOBLEN Koblenz KOPENH Kopenhagen Ort FNR ONR ELB HAMBUR RHE KOBLEN RHE KARLSR MOS KOBLEN Stadtfluss

54 Struktur der Datenbank terra4
1 n Teil von Land Ort Hauptstadt n 1 1 n Teil von durchfließt 1 m Kontinent Fluss

55 Aufgaben, Datenbank: terra4
Welche Orte liegen an der Donau? Welche Länder durchfließt die Donau? Welche Flüsse fließen durch Deutschland? SELECT o.Name FROM Ort o, Stadtfluss sf, Fluss f WHERE o.ONR = sf.ONR AND sf.FNR = f.FNR AND f.Name = 'Donau' SELECT DISTINCT l.Name FROM Land l, Ort o, Stadtfluss sf, Fluss f WHERE l.LNR = o.LNR AND o.ONR = sf.ONR AND sf.FNR = f.FNR AND f.Name = 'Donau' SELECT DISTINCT f.Name, f.Laenge FROM Fluss f, StadtFluss sf, Ort o, Land l WHERE f.FNR = sf.FNR AND sf.ONR = o.ONR AND o.LNR = l.LNR AND l.Name = 'Deutschland'

56 Gruppieren von Ergebnissen
Manchmal müssen die Ergebnisse einer Anfrage gruppiert und verrechnet werden. 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 ONR Name AALBOR Dänemark KOPENH Dänemark BERLIN Deutschland DUESSE Deutschland MAINZ Deutschland TALLIN Estland Selbst zählen??? NEIN!

57 Gruppieren von Ergebnissen
Manchmal müssen die Ergebnisse einer Anfrage gruppiert und verrechnet werden. 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 ONR Name AALBOR Dänemark KOPENH Dänemark BERLIN Deutschland DUESSE Deutschland MAINZ Deutschland TALLIN Estland Name Anzahl Dänemark 2 Deutschland 3 Estland 1 3 1 2

58 Aufgaben, Datenbank: terra4
Wie viele Staaten haben Megacities (> 5 Mio. Einwohner) als Hauptstadt? Zählen Sie die Staaten pro Kontinent! Geben Sie die Kontinente nach der Anzahl absteigend aus. SELECT COUNT(*) FROM Land L, Ort O WHERE O.ONR = L.HauptONR AND O.Einwohner > ORDER BY O.Einwohner DESC GROUP BY entfällt, wenn „nur“ gezählt wird. SELECT K.Name, COUNT(*) AS Anzahl FROM Ort O, Land L, Kontinent K WHERE O.ONR = L.HauptONR AND L.KNR = K.KNR AND O.Einwohner > GROUP BY K.Name ORDER BY Anzahl DESC In 1.) ist die Tabelle Team nicht unbedingt notwendig!

59 Aufgaben, Datenbank: terra4
Wie viele Einwohner haben die Länder pro Kontinent im Schnitt? Welche Städte liegen an mehr als einem Fluss? SELECT k.Name AS Kontinent, AVG(l.Einwohner) AS Schnitt FROM Kontinent k, Land l WHERE k.KNR = l.KNR GROUP BY k.Name ORDER BY k.Name Weitere BuiltIn-Funktionen: MAX, MIN, SUM,… SELECT o.Name, COUNT(*) AS Anzahl FROM Ort o, StadtFluss sf WHERE o.ONR = sf.ONR GROUP BY o.Name HAVING COUNT(*)>1 ORDER BY o.Name In 1.) ist die Tabelle Team nicht unbedingt notwendig!

60 Struktur der kompletten Datenbank „miniterra“
Sprache n gesprochen n m 1 n Teil von benachbart Land Ort Hauptstadt m n 1 1 n Teil von durchfließt m 1 1 Kontinent Fluss mündet n

61 Welche Städte liegen an mehr als einem Fluss?
Für Experten… Welche Städte liegen an mehr als einem Fluss? Welche Flüsse sind es jeweils? Welche Länder grenzen an Deutschland? SELECT o.Name, f.Name FROM Ort o, StadtFluss sf1, Fluss f WHERE o.ONR = sf1.ONR AND f.FNR = sf1.FNR AND EXISTS (SELECT NULL FROM StadtFluss sf WHERE sf1.FNR<>sf2.FNR AND sf2.ONR=o.ONR) ORDER BY o.Name SELECT l1.Name, l2.Name FROM Nachbarland n, Land l1, Land l2 WHERE (n.LNR1='D' OR n.LNR2='D') AND l1.LNR = n.LNR1 AND l2.LNR = n.LNR2

62 Welche Länder grenzen an Deutschland?
Für Experten… Welche Länder grenzen an Deutschland? Geben Sie nur die Nachbarländer aus! Welche Flüsse münden in den Rhein? SELECT IF(l1.LNR='D',l2.Name, l1.Name) AS "Direkte Nachbarn" FROM Nachbarland n, Land l1, Land l2 WHERE (n.LNR1='D' OR n.LNR2='D') AND l1.LNR = n.LNR1 AND l2.LNR = n.LNR2 ORDER BY "Direkte Nachbarn" ACHTUNG: Nicht genormt! SELECT fc.Name FROM Fluss fp, Fluss fc WHERE fp.FNR = fc.ZielFNR AND fp.Name = 'Rhein' Selbstreferenz der Tabelle Fluss

63 SQL bietet noch einige weitere (hier nicht behandelte) Möglichkeiten:
u.v.m. 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) Bsp. der Flüsse: SELECT o.Name, f.Name AS Fluss FROM Ort o LEFT OUTER JOIN (Stadtfluss sf JOIN Fluss f ON f.FNR=sf.FNR) ON o.ONR=sf.ONR ORDER BY o.Name  Besonders kompliziert, da Stadtfluss noch mit einem regulären Join mit Fluss verbunden werden muss.

64 Agenda Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick Datenbanken – Wozu? Abfragesprachesprache SQL Verwaltung MySQL

65 Verwaltung des Datenbanksystems
In einem Datenbanksystem müssen Rechte für verschiedene Benutzer verwaltet werden: 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: Benutzer kann Tabellen auslesen INSERT/UPDATE/DELETE: Tabelleninhalte dürfen verändert werden CREATE/ALTER/…: Tabellenstruktur darf verändert werden Versuch, auf phpMyAdmin des Nachbarrechners zuzugreifen.

66 MySQL – Passwort für Administrator vergeben
Anmeldetyp für phpMyAdmin ändern Ins Verzeichnis xampp\phpmyadmin wechseln. Datei config.inc.php mit Notepad öffnen Zeile $cfg['Servers'][$i]['auth_type'] = ‘config'; ändern auf $cfg['Servers'][$i]['auth_type'] = 'http';

67 MySQL – Passwort für Administrator vergeben
phpMyAdmin in Browser starten Menüpunkt „Rechte“ Benutzer „root“ auswählen und bearbeiten Passwort eingeben und speichern Beim nächsten Aufruf von phpMyAdmin ist die Eingabe des Passworts notwendig Die Benutzertabelle ist (wie auch das komplette Data Dictionary – Liste der Tabellen und Spalten) in der System-Datenbank mysql und INFORMATION_SCHEMA verzeichnet. Kann dort eingesehen werden (NICHTS VERÄNDERN!) Alternative, um Passwort zu ändern: Setzen eines Passworts für den Administrator (root) DOS-Fenster öffnen Ins bin-Verzeichnis von MySQL wechseln, dort: mysqladmin --user=root password MeinNeuesPasswort Ändern des Passworts für den Administrator (root) mysqladmin --user=root --password=PwdAlt password PwdNeu

68 Benutzer / Rechte vergeben
Über den gleichen Dialog können weitere Benutzer angelegt werden 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 Die Datenbank gleich mit dem Benutzer zu erstellen, ist die schnellste Variante. Ansonsten müssen die Rechte DB-spezifisch angelegt werden. Übung: Weiteren Benutzer erstellen, der auf der DB miniterra nur lesen darf. Abmelden (Browser zu) und mit neuem Benutzer anmelden.

69 Benutzer / Rechte vergeben
Soll sich auch der Administrator (root) von anderen Rechnern aus anmelden können, so muss dies separat konfiguriert werden. Bei jedem Benutzer ist angegeben, von welchem Rechner aus eine Anmeldung möglich ist. Menüpunkt „Rechte“ Benutzer „root“ auswählen und bearbeiten

70 Benutzer anlegen Schützen Sie den Administrator-Zugang für ihren mySQL-Server wie zuvor beschrieben. Legen Sie einen Benutzer „ifb“ und Passwort „Speyer“ an. Dieser soll die Leserechte (SELECT) auf der Datenbank „miniterra“ erhalten. Versuchen Sie, mit diesem Benutzer auf die Datenbank des Nachbarn / der Nachbarin zuzugreifen.

71 Agenda Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick Datenbanken – Wozu? Verwaltung MySQL Datenbankmodellierung

72 Ein neues Informationssystem… Anforderungskatalog
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.

73 Modellbildung Um ein Informationssystem zu erstellen, muss ein Ausschnitt der realen Welt („Miniwelt“) im Computersystem erfasst werden. Miniwelt ? Datenmodell Repräsentation der Informationen als strukturierte Daten Die Benutzer können eine Liste aller Lehrer mit ihrem Dienstkürzel abrufen. 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. Unstrukturierte Informationen über die Miniwelt

74 Internes Modell (z.B. relationales Datenmodell)
Modellbildung Um aus einer Beschreibung einer Miniwelt das Datenmodell einer Datenbank abzuleiten, bietet es sich an, zunächst ein grafisches Konzept der Daten zu erstellen. Konzeptionelle Sicht Internes Modell (z.B. relationales Datenmodell) Text Externe Sicht

75 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 z.B. eine Person, ein Gegenstand, ein Ereignis Entitäten mit gleichen Eigenschaften werden zu Entitätstypen zusammengefasst Symbol: Rechteck Statt Entitätstyp auch Entitätsklasse (Entitätsmenge) gebräuchlich  Nähe zur objektorientierten Sicht. Analog: Beziehungstyp auch als Beziehungsklasse. Lehrer

76 E/R-Diagramme - Entitätstyp
Beispiel Entitätstyp: Entität: Lehrer Lämpel, Kürzel Lä Entitätstyp: Menge aller Lehrer mit den Merkmalen Vorname, Nachname, Kürzel, … Primärschlüssel: Kürzel (?) (oder ein künstlicher Schlüssel) Entitätstyp „Lehrer“ Kürzel: Lä Name: Lämpel Vorname: Ludwig Titel: StD 3 Entitäten Kürzel: Kr Name: Kribich Vorname: Alfred Titel: StR Hier kann man auch gut den Begriff „Entitätsmenge“ erklären. Kürzel: Le Name: Lenk Vorname: Gertrud Titel: OStR'

77 E/R-Diagramme - Beziehungstyp
Gleichartige Beziehungen zwischen Entitäten werden als ein Beziehungstyp zwischen den Entitätstypen definiert. Symbol: Raute Beispiel: Ein Lehrer führt Klassenfahrten durch. Kuerzel: Lä Name: Lämpel Beziehungen Stufe: 8 Teil: a Kuerzel: Kr Name: Kribich Stufe: 11 Teil: M1 Kuerzel: Me Name: Merz Stufe: 12 Teil: m3 Lehrer Klassenfahrt Beziehungstyp Klasse Entitätstyp Entitätstyp

78 Modellierung oft nicht eindeutig
Die Beziehung „Klassenfahrt“ könnte man auch als eigenen Entitätstyp modellieren. Modellierung ist oft nicht eindeutig, es gibt je nach Ansicht mehrere sinnvolle Modelle für eine Miniwelt. Lehrer Klasse führt durch nimmt teil Klassenfahrt Unterschied zur vorherigen Lösung: Jetzt können mehrere Klassen an der gleichen Klassenfahrt teilnehmen. Es könnten Klassenfahrten ohne Lehrer stattfinden.

79 E/R-Diagramme - Attribute
Die Eigenschaften aller Entitäten und Beziehungen eines Entitätstyps bzw. eines Beziehungstyps werden mit Hilfe von Attributen erfasst. Symbol: Ellipse Beispiel: Lehrer Klassenfahrt Klasse Name Kürzel Vorname identifizierend beschreibend Datum Ziel Teil Anzahl Stufe

80 E/R-Diagramme – Kardinalität
Ein Beziehungstyp wird durch die Kardinalität genauer bezeichnet: 1:n- Beziehung am Beispiel: Klassenzuordnung der Schüler Name: 9a Name: Müller Vorname: Yvonne Name: 9b Name: Meier Vorname: Jan Name: 10d Name: Dietz Vorname: Nicole Name: Seiler Vorname: Manfred Klasse Schüler 1 n Ein Schüler gehört einer Klasse an. Einer Klasse gehören mehrere Schüler an. Klasse angehören Schüler

81 E/R-Diagramme – Kardinalität
n:m – Beziehung am Beispiel: Kurszuordnung von Schülern in der MSS Fach: Mathe LK: ja Name: Müller Vorname: Yvonne Fach: Deutsch LK: ja Name: Meier Vorname: Jan Fach: Englisch LK: ja Name: Dietz Vorname: Nicole Name: Seiler Vorname: Manfred Kurs Schüler n m Ein Kurs hat mehrere Schüler. Ein Schüler nimmt an mehreren Kursen teil. Kurs besucht Schüler

82 E/R-Diagramme – Kardinalität
Die Kardinalitäten (1:1, 1:n, n:m) geben nur an, wie viele Entitäten maximal miteinander verbunden sind. 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. Bsp.: Eine Klasse hat minimal 8 und maximal 30 Schüler. 1 angehören n Klasse Schüler 1 n Klasse angehören Schüler [8,30] [1,1]

83 E/R-Diagramme – Reflexive Beziehungstypen
Beziehungen können auch auf dem gleichen Entitätstyp gelten, Selbstbeziehung oder Reflexive Beziehung. Bsp.: Heirat Name: Meier Vorname: Klaus Name: Bach Vorname: Stefan Name: Meier Vorname: Sabine Name: Bach-Meier Vorname: Petra Name: Hurtig Vorname: Hans Personen Eine Person heiratet (normalerweise bei Monogamie) eine weitere Person. … im Laufe eines Lebens kann eine Person aber nacheinander mehrere andere Personen heiraten. 1 Personen Heirat 1 oder n:m ?

84 E/R-Diagramme – Ist-Beziehung
Die Ist-Beziehung gibt an, dass ein Entitätstyp eine Spezialisierung eines anderen Entitätstyps darstellt. Bsp.: „Lehrer“ spezialisiert „Person“ Die Spezialisierungstypen erben die Attribute des Generalisierungstyps. Vorname Name Person Generalisierungstyp ist ist Spezialisierungstypen Schüler Lehrer Hier ist die Benennung als „Entitätsklasse“ günstiger. Will man mit den Schülern so weit gehen (oder wurden OO-Konzepte zuvor besprochen), sollte man diesen Begriff vorziehen. Klasse Titel

85 Normalisierung von relationalen Schemata
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:

86 Transformation E/R-Modell in relationales Schema
Transformation von Entitätstypen Für jeden Entitätstyp eine Tabelle Schüler E/R-Modell Relationales Schema Name SNR Vorname Schueler SNR Name Vorname

87 Transformation E/R-Modell in relationales Schema
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). E/R-Modell Relationales Schema Klasse 1 angehören n Schüler Name KNR SNR Stufe Vorname Klasse KNR Stufe Schueler Das Attribut für den künstlichen Fremdschlüssel ist im relationalen Schema in der Regel nicht sichtbar! SNR Name Vorname KNR

88 Transformation E/R-Modell in relationales Schema
Transformation von n:m-Beziehungstypen Einfügen eines Fremdschlüssels nicht möglich Separate Tabelle mit zwei Fremdschlüsseln E/R-Modell Relationales Schema Kurs n besucht m Schüler Name KNR SNR Stufe Fehlstunden Vorname Kurs KNR Besucht Fehlst. SNR Schueler KNR Stufe SNR Name Vorname

89 Transformation E/R-Modell in relationales Schema
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. E/R-Modell Relationales Schema Schüler 1 Zusatzdaten 1 SchülerPrivat Vorname Konfession SNR SNR Name Herkunft Schueler SchuelerPrivat SNR Name Vorname Herkunft Konfession SNR

90 Transformation E/R-Modell in relationales Schema
Transformation der Ist-Beziehung Separate Tabelle, ähnlich der 1:1-Beziehung Person Schüler ist E/R-Modell Relationales Schema Konfession Vorname PNR SNR Name Schulart Person Schueler SNR Name Vorname Konfession Schulart SNR

91 Tools für E/R-Diagramme
DBDesigner4 Ungetestet: Mogwai ER-Designer ( TOAD Data Modeler TOAD für MySQL (Beta) Oder doch einfach mit Office-Programmen…

92 Erstellen Sie ein E/R-Modell und dann das relationale Schema.
Aufgaben Erstellen Sie ein E/R-Modell und dann das relationale Schema. „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.

93 Bibliothek … Anforderungskatalog
Erstellen Sie ein E/R-Modell und dann das relationale Schema. „Bibliothek“ In der Bibliothek müssen Bücher erfasst werden. Eine Suche ist möglich über Sachgebiet, Autor, Titel, Erscheinungsort und –jahr, Verlag. Bei der Suche wird eine Liste aller verfügbaren Verlage vorgeblendet. 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.

94 Anfragen an die Bibliothek-Datenbank
Eine Datenbank für das Schema kann fertig importiert werden! (Bibliotheks-DB_latin.sql) Welche Bücher sind bei einem Verlag aus München erschienen? (214 Ergebnisse) Welche Jugendbücher sind zur Zeit von welchem Leser ausgeliehen? Geben Sie den Buchtitel, den Lesernamen und das Datum der Ausleihe aus! (7 Ergebnisse) Wie viele Bücher existieren zu jedem Sachgebiet? Geben Sie die Sachgebiete nach Anzahl absteigend sortiert aus. Wie viele Bücher aus jedem Sachgebiet sind zur Zeit ausgeliehen? (Kinder: 14) Welche Leser haben zur Zeit Bücher ausgeliehen? (49 Ergebnisse, Achtung Duplikate?) 1. SELECT Buecher.Titel, Buecher.Autor, Verlag.Name FROM Buecher, Verlag WHERE Buecher.VNr=Verlag.VNr AND Verlag.Ort='München' 2. SELECT Titel, Nachname, Vorname, ausgeliehen FROM Ausleihe, Leser, Buecher WHERE Leser.LeserNr=Ausleihe.LeserNr AND Buecher.BuchNr=Ausleihe.BuchNr AND zurueck=0 AND Sachgebiet='Jugend‚ 3. SELECT Sachgebiet, COUNT(*) AS Anzahl FROM Buecher GROUP BY Sachgebiet ORDER BY Anzahl DESC 4. SELECT Sachgebiet, COUNT(*) as Anzahl FROM Buecher, Ausleihe WHERE Buecher.BuchNr=Ausleihe.BuchNr ORDER BY Sachgebiet 5. SELECT DISTINCT Nachname, Vorname FROM Leser, Ausleihe ORDER BY Nachname

95 Arztpraxis … Anforderungskatalog
Dr. Mager (kurz Ma) behandelt am 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 ( ) 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.

96 Agenda Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick Datenbanken – Wozu? Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.)

97 Vernetzung des Themas - Grenzen von SQL
Problem: „Verfolgen eines Flusslaufes“ von der Quelle zum Meer z.B. Spree Hier werden iterative Strukturen benötigt, die SQL (als mengen- orientierte Sprache) im Standard nicht bietet. Anknüpfung an Programmierung PHP, Delphi, Java Rhein Mosel Main Neckar Donau Isar Inn Fulda Werra Weser Elbe Havel Spree Aller Elbe Havel Spree Nordsee

98 Vernetzung des Themas - Grenzen von SQL
Problem: „Verfolgen eines Flusslaufes“ vom Meer zu den Zuflüssen z.B. Nordsee Beispiel für eine (elegante?) rekursive Programmierung Rhein Mosel Main Neckar Donau Isar Inn Fulda Werra Weser Elbe Havel Spree Aller Nordsee Rhein Mosel Main Neckar Fulda Werra Weser Aller Elbe Havel Spree Nordsee

99 Zugriff auf MySQL über PHP
Grundlegende Schritte jedes Datenbankzugriffs in PHP: Verbindung mit dem Datenbanksystem aufbauen 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. Datenbank auswählen $link = mysql_connect($Host, $Benutzer, $Passwort) or die("DB-Verbindung unmöglich: " . mysql_error()); Rückgabewert von mysql_connect: Eine MySQL Verbindungs-Kennung im Erfolgsfall oder FALSE im Fehlerfall. Rückgabewert von mysql_select_db: Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE. In Wirklichkeit ist „or die()“ ein Boolscher Ausdruck. Ist der erste Ausdruck von (exp1 or exp2) schon TRUE, so wird der zweite erst gar nicht ausgewertet … ein übler (aber einfacher) Trick für die Fehlerbehandlung. Alternative: Abfrage des Handles: <?php //Verbindung aufbauen $server = "localhost"; $nutzer = "hsg910"; $kennwort = "geheim"; $db_link = mysql_connect($server,$nutzer,$kennwort); if (!is_null($db_link)) { echo "<p>Verbindung erfolgreich!</p> Handle-ID: $db_link"; } else { echo "<p>keine Verbindung!</p> Handle-ID: $db_link"; }; ?> mysql_select_db($Datenbank) or die("Auswahl Datenbank unmöglich: " . mysql_error());

100 Zugriff auf MySQL über PHP
Abfrage ausführen Ergebnis ist eine Variable (Handle), mit der auf das Resultat der Anfrage zugegriffen werden kann. Ergebnisse ausgeben Grundlegendes Problem 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: Array Assoziatives Array Objektorientiert Freigabe der Handles (kann entfallen) $result = mysql_query($SQLText) or die("Anfrage fehlgeschlagen: " . mysql_error()); Die Freigabe der Handles ist nicht unbedingt notwendig, da diese bei Beenden des php-Skripts sowieso freigegeben werden. $result gibt 0 zurück, wenn es ein Problem mit der Abfrage gab (Alternativ zu „or die()“) mysql_free_result($result); mysql_close($link);

101 Zugriff auf MySQL über PHP
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 Auslesen und Speichern einer Ergebniszeile als Array while ($arrRow = mysql_fetch_array($result)) { echo "$arrRow[0] : $arrRow[1]"; } Schleife über alle Zeilen des Ergebnisses Zugriff auf eine Spalte der Ergebniszeile Beispiel: SprachenArray.php

102 Zugriff auf MySQL über PHP
Ausgabe der Ergebnisse als assoziatives Array mysql_fetch_array liefert auch ein assoziatives Array, d.h. es kann über die Spaltennamen zugegriffen werden. Problem: Spaltennamen müssen eindeutig sein Auslesen und Speichern einer Ergebniszeile als Array Schleife über alle Zeilen des Ergebnisses while ($arrRow = mysql_fetch_array($result)) { echo "$arrRow[Land] : $arrRow[Sprache]"; } Zugriff auf eine Spalte der Ergebniszeile SprachenAssozArray.php Bei Verwendung von foreach für eine Schleife über alle Felder muss beachtet werden, dass mysql_fetch_array eigentlich jedes Spalte doppelt enthält: Einmal indiziert und einmal über Namen zugreifbar. Daher wird jede Spalte bei foreach doppelt ausgegeben. Lösung: mysql_fetch_row verwenden oder mysql_fetch_array mit zusätzlichem Parameter aufrufen: mysql_fetch_array($result, MYSQL_NUM)  nur indiziertes Array mysql_fetch_array($result, MYSQL_ASSOC)  nur assoziatives Array

103 Zugriff auf MySQL über PHP
Ausgabe der Ergebnisse als Objekt mysql_fetch_object liefert eine komplette Zeile des Ergebnisses als Objekt Nach der letzten Zeile wird FALSE zurückgegeben Auslesen und Speichern einer Ergebniszeile als objekt while ($oRow = mysql_fetch_object($result)) { echo "$oRow->Land : $oRow->Sprache"; } Schleife über alle Zeilen des Ergebnisses Zugriff auf eine Spalte der Ergebniszeile Beispiel: SprachenObjekt.php

104 Zugriff auf MySQL über PHP
Weitere interessante Funktionen: mysql_num_rows($result) Gibt die Anzahl der Zeilen (Datensätze) im Ergebnis aus. mysql_num_fields($result) Gibt die Anzahl der Spalten im Ergebnis aus. mysql_field_name($result, 0) Name eines Feldes im Ergebnis. mysql_affected_rows() Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation wie z.B. DELETE, UPDATE Vereinfachung: Herstellen der Verbindung / Datenbankauswahl in einer separaten Include-Datei, die immer wieder verwendet werden kann. include "_DBVerbindung.inc";

105 PHP und Datenbanken – Aufgaben
Erstellen Sie php-Anzeigeseiten für die Datenbank miniterra. Verwenden Sie dazu Abfragen aus dem SQL-Teil. Erstellen Sie eine Abfrage, bei der der Kontinent eingegeben werden kann (HTML-Formular). Es werden dann alle Länder des Kontinents ausgegeben. Geben Sie die Länder mit ihren Kontinenten aus. Es sollen Links in jeder Spalte sein, die eine Sortierung erlauben. Geben Sie den Verlauf eines Flusses bis zur Mündung aus. (Achtung: Rekursion!) Vorlagen verwenden! Beispiel: SQLAbfrage.htm / SQLAbfrageDirekt.php / SortLand.php

106 MySQL in Delphi 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. Lösung: Verzicht auf Borland-Datenbank-Komponenten und Verwendung freier Zugriffssoftware MySQLDirect ( Units, die einen einfachen Datenbankzugriff erlauben Einsteiger-Tutorial dazu: Bei MySQL direct handelt es sich nicht um Komponenten, sondern um Units, die Klassen enthalten, die in einer Anwendung wie gewohnt instanziiert und freigegeben werden müssen. Beispiel: ClientServer.dpr

107 MySQL mit ODBC „anzapfen“
ODBC (Open DataBase Connectivity) ist ein (alter) Standard, um auf Datenquellen (insbesondere Datenbanken) zuzugreifen. gewisse Standardisierung und damit leichtere Portierung auf andere Datenbanksysteme Zugriffsmöglichkeit für verschiedene Programme (Excel, Access, Delphi, …) Muss für MySQL separat installiert werden ( Darstellung Anwendungsprogramm „Logik“ Client ODBC Connector (Datenbank)Server Datenbasis Server

108 MySQL mit ODBC „anzapfen“
Systemsteuerung  Verwaltung  Datenquellen (ODBC)

109 ODBC-Zugriff am Beispiel Excel 2003
In Excel gibt es Probleme mit der erstellten Datenquelle: Ein Zeichen des Charactersets wird abgeschnitten. Lösung: Speicherung der Quelle als dsn-Datei. Daten  Importieren  mysql_Quelle_für_miniterra.dsn öffnen. Diese Datei kann für eigene Zwecke leicht mit einem Editor angepasst werden.

110 Agenda Abfragesprachesprache SQL Verwaltung MySQL Datenbankmodellierung Zugriff auf Datenbanken (PHP & Co.) Ausblick Datenbanken – Wozu? Zugriff auf Datenbanken (PHP & Co.) Ausblick

111 Ausblick - Was hätte man noch alles behandeln können?
Weitere Möglichkeiten von SQL Outer Joins Sub-Selects Datenbank-Management Zugriffsbeschleunigung über Indizes Verwaltung der physischen Speicherung storage engine InnoDB für MySQL Sicherung der Datenbank Verändern der Datenbankinhalte mit SQL INSERT / DELETE / UPDATE Verändern der Datenbankstruktur über Anweisungen Data Definition Language (DDL) u.v.m. QbE… Der Tabellentyp InnoDB muss separat in der Konfigurationsdatei my.cnf (mysql/bin) aktiviert werden: # skip-innodb # muss auskommentiert werden! # Uncomment the following if you are using InnoDB tables innodb_data_home_dir = c:/xampp/mysql/ innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = c:/xampp/mysql/ Bsp. für OuterJoin an schulverwaltung.sql (Fach Spanisch ohne Lehrer): SELECT Fach, COUNT( LNR ) FROM Faecher LEFT OUTER JOIN unterrichtet ON Faecher.FNR=Unterrichtet.FNR GROUP BY Fach ORDER BY Fach

112 PHP-Dokumentation (mit MySQL Funktionen)
Software / Links XAMPP Deutsche MySQL Seite (englisch: MySQL Gui Tools PHP-Dokumentation (mit MySQL Funktionen) Connectors (ODBC, JDBC, …) für MySQL

113 Material zur MySQL-Verwendung von Klaus Merkert
Software / Links Material zur MySQL-Verwendung von Klaus Merkert Material zu DB allgemein von OSZ Handel, Berlin u.v.m.

114 Schemata der Beispieldatenbanken
Schema zur Beispieldatenbank „schulverwaltung.sql“ LNR Name Vorname FNR Fach unterrichtet n m Lehrer Faecher n Klassenleiter m Klassen KStufe KBuchstabe Saal

115 Schemata der Beispieldatenbanken
Schema zur Beispieldatenbank „bibliothek.sql“ BuchNr Autor zurueck LeserNr Nachname Ausleihe n m Buecher Leser n 1 gibt heraus Ist Teil von 1 1 Verlag Leserprivat VNR Name Ort LeserNr Geschlecht

116 Schemata der Beispieldatenbanken
Schema zur Beispieldatenbank „wm2006.sql“ Ort 1 n n Begegnung n Team1 Team2 Datum Ergebnis 1 1 1 Team Schiedsrichter 1 n 1 Land 1

117 Schemata der Beispieldatenbanken
WM-Datenbank als UML-Diagramm Ort ONR Name ONR Sitze TNR1 Begegnung SNR TNR2 Datum Ergebnis TNR TNR Team Schiedsrichter Name Trainer Vorname TNR LNR LNR Land LNR TNR in Team ist Primär- und Fremdschlüssel Name Einwohner Kontinent


Herunterladen ppt "Informationssysteme / Datenbankabfragen"

Ähnliche Präsentationen


Google-Anzeigen