Datenbanksysteme - Zugriff mit SQL

Download Report

Transcript Datenbanksysteme - Zugriff mit SQL

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
O
Datenbankmodellierung
F
Zugriff auf Datenbanken (PHP & Co.)
I
N
Ausblick
2
Software-Architekturen: „Standalone“-Programm
K
• z.B.
O
R
M
A
T
I
 selbst programmierte Schülerdatei
 in Delphi programmierte Übersicht der WM-Begegnungen
I
N
F
Anwendungsprogramm
3
PC
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
•
I
N
F
Anwendungsprogramm
4
PC
Software-Architekturen - Client-Server
K
• z.B.
R
M
A
T
I
 Outlook und Exchange-Server
 „einfache“, datenbank-basierte Schülerverwaltung
Client
I
N
F
O
Anwendungsprogramm
Anwendungsprogramm
(Datenbank)Server
Server
5
Software-Architekturen - Client-Server
K
• z.B.
R
M
A
T
I
 Outlook und Exchange-Server
 „einfache“, datenbank-basierte Schülerverwaltung
Client
I
N
F
O
Anwendungsprogramm
(Datenbank)Server
Server
6
Software-Architekturen - Client-Server
 Datenbank übernimmt
„Standardaufgaben“
 Daten zentral vorhanden
 Erweiterungen relativ einfach
I
T
Vorteile
A
K
•
Nachteile
 Installation von Software auf
allen Clients notwendig
 Weitere „Sprache“ zum
Datenbankzugriff
R
M
(für mehrere Benutzer / Programme)
•
Client
I
N
F
O
Anwendungsprogramm
(Datenbank)Server
Server
7
Software-Architekturen – Webarchitektur
A
T
I
K
• Eine moderne 3-schichtige Webarchitektur…
(Browser)
R
M
Webclient
Client
Server
I
N
F
O
Anwendungsprogramm
Webserver (z.B. Apache und PHP)
Datenbankserver
(z.B. MySQL)
Server
8
Software-Architekturen – Webarchitektur
A
T
I
K
• Eine moderne 3-schichtige Webarchitektur…
(Browser)
O
R
M
Webclient
Client
(z.B. Apache und PHP)
Server
I
N
F
Webserver
Datenbankserver
(z.B. MySQL)
Server
9
•
Vorteile
•
 Keine Installation von
zusätzlicher Software beim Client
Nachteile
 http-Protokoll ohne
Sessionverwaltung
Webclient
Client
(Browser)
Webserver
(z.B. Apache und PHP)
Server
I
N
F
O
R
M
A
T
I
K
Software-Architekturen – Webarchitektur
Datenbankserver
(z.B. MySQL)
Server
10
• 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
Webserver
I
N
F
O
R
M
Clients
Datenbankserver
11
• 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
12
MySQL
K
Das andere Extrem – eine Web Farm
T
I
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
13
• Ein Informationssystem kann auf formalisierte Fragen eines
Anwenders Antworten aus einer gegebenen Datenmenge geben
 Komponenten eines Informationssystems:
A
T
I
K
Was ist ein Informationssystem ?
R
Speicherung
I
N
F
Erfassung
O
M
Informationssystem
14
Datenbanksystem
DBS
Datenbankmanagementsystem
DBMS, z.B. MySQL
Analyse
Darstellung
Datenbank
(Datenbasis)
Datenbank
(Datenbasis)
I
N
F
O
R
M
A
T
I
K
Was ist ein Informationssystem ?
15
• 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
• 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
I
N
F
O
R
M
A
T
I
K
Arten von Datenbanken
• Beide Formen waren vor allem bei Großrechnern im Einsatz und
werden zunehmend von relationalen Datenbanken abgelöst
16
• Relationale Datenbanken
 Die Daten werden in Form von Tabellen gespeichert
 Zwischen den Tabellen werden Beziehungen aufgebaut (Relationen)
Attribut (Merkmal)
Attributwert (Datenwert)
Begegnung
Team1
Team2
Datum
Ergebnis
Deutschland
Polen
Deutschland
Ecuador
Costa Rica
Ecuador
Polen
Costa Rica
9.6.2006
9.6.2006
14.6.2006
16.6.2006
4:2
0:2
1:0
3:0
Datensatz (Tupel)
Attributklasse
I
N
F
O
R
M
A
T
I
K
Arten von Datenbanken
 Objektrelationale Datenbanken
• erweitern die relationalen Datenbanken und objektorientierte Funktionen
(z.B. Vererbung)
17
I
N
F
O
R
M
A
T
I
K
Arten von Datenbanken
18
• Relationale Datenbanken – typische Vertreter






Oracle
IBM (DB/2)
Microsoft SQL Server (Access ?)
Informix
MySQL
OpenSource
PostGreSQL
O
R
M
A
T
I
K
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
I
N
F
 Isolation
19
• Transaktionen beeinflussen sich nicht gegenseitig
 Durability
• Eine Transaktion ist dauerhaft gespeichert, auch gegen Systemabstürze
gesichert
Datenbanken – Wozu?
Abfragesprachesprache SQL
Verwaltung MySQL
Datenbankmodellierung
I
N
F
O
R
M
A
T
I
K
Agenda
20
Zugriff auf Datenbanken (PHP & Co.)
Ausblick
• Starten Sie den Datenbankserver und den Webserver
I
N
F
O
R
M
A
T
I
K
MySQL – Jetzt wird es (endlich) praktisch…
21
• Das Datenbanksystem bietet einen Service für andere Rechner an
 Die Windows-Firewall kann dies melden.
Der Port muss freigegeben werden.
• Die Administration von MySQL funktioniert selbst schon am
einfachsten über den Browser
 Webarchitektur
T
I
K
Die erste Datenbank importieren
A
Browser
R
M
Client
Webserver
N
F
O
Apache
I
MySQL
22
Datenbankserver
http://localhost/phpmyadmin
• Legen Sie eine neue Datenbank „wm-stufe1“ an.
I
N
F
O
R
M
A
T
I
K
Die erste Datenbank importieren
23
• Wählen Sie den Punkt „Importieren“ und suchen die Datei
„wm-stufe1.sql“
I
N
F
O
R
M
A
T
I
K
Die erste Tabelle…
24
• Klicken Sie auf „Struktur“: Die Tabelle „begegnung“ wird
angezeigt.
• Lassen Sie sich den Inhalt der Tabelle anzeigen.
• 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. Nummer der Begegnung
 wird meist durch Unterstreichung gekennzeichnet.
Begegnung
BNR
Team1
Team2
Datum
Ergebnis
A1
A2
A3
A4
Deutschland
Polen
Deutschland
Ecuador
Costa Rica
Ecuador
Polen
Costa Rica
9.6.2006
9.6.2006
14.6.2006
16.6.2006
4:2
0:2
1:0
3:0
I
N
F
O
R
M
A
T
I
K
Relationale Datenbank – Aufbau
Schlüsselattribut
25
• 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:
26
• Die WHERE- und die ORDER BY-Klausel sind optional.
• Eine Projektion schränkt die Abfrage hinsichtlich der Attribute ein
(die Spalten der resultierenden Tabelle):
SELECT
FROM
WHERE
ORDER
[Spalten]
[Tabelle]
[Bedingung]
BY [Attribute];
• Die darzustellenden Spalten der Tabelle müssen durch Kommata
getrennt angegeben werden; * steht für „alle Spalten“.
I
N
F
O
R
M
A
T
I
K
SQL – SELECT und FROM
27
• Beispiele:
 SELECT * FROM Begegnung;
 SELECT Team1 FROM Begegnung;
 SELECT Team1, Team2 FROM Begegnung;
• Eine Selektion schränkt die Abfrage hinsichtlich der Datensätze ein
(die Zeilen der resultierenden Tabelle):
SELECT
FROM
WHERE
ORDER
[Spalten]
[Tabelle]
[Bedingung]
BY [Attribute];
• Die Abfrage enthält alle Datensätze, welche die angegebene
Bedingung erfüllen.
I
N
F
O
R
M
A
T
I
K
SQL – WHERE
28
• Beispiele:
 SELECT * FROM Begegnung WHERE (Team1='Deutschland')
 SELECT * FROM Begegnung WHERE (Datum>='2006-07-01')
 SELECT Team1, Team2, Ergebnis
FROM Begegnung
WHERE (Team1='Deutschland')
T
I
K
Veranschaulichendes Beispiel
A
Team1
Team2
Ort
Ergebnis
A1
A2
A3
F4
Deutschland
Polen
Deutschland
Brasilien
Costa Rica
Ecuador
Polen
Australien
München
Gelsenkirchen
Dortmund
München
4:2
0:2
1:0
2:0
I
N
F
O
R
BNR
M
Begegnung
29
Ergebnistabelle
Team1
Team2
Ergebnis
Deutschland
Deutschland
Costa Rica
Polen
4:2
1:0
• Bedingungen mit Textattributen:
 Team1='Deutschland'
 Team1 LIKE 'P%'
 Name LIKE “M_ller“
(Schmitt)
(Paraguay, Polen, Portugal)
(Müller, Muller, Miller, Maller)
A
T
I
K
SQL – WHERE
I
N
F
O
R
M
• Bedingungen mit Zahlattributen:
30







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)
• Vergleich auf Nullwert (kein Attributwert angegeben):
SNR IS NULL
• Logische Verknüpfungen:
 NOT (Name='Schmitt')
(Name nicht Schmitt)
R
M
A
T
I
K
SQL – WHERE
 (Ort='Berlin') AND (Datum<'2006-07-01')
I
N
F
O
(Spiele in Berlin vor Juli 2006)
31
 (Team1='Deutschland') OR (Team2='Deutschland')
(Deutschland spielt als erstes oder zweites Team)
• 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 Begegnung ORDER BY Datum
 SELECT * FROM Begegnung ORDER BY Ort, Datum DESC
32
•
Öffnen Sie das SQL-Fenster
1. Geben Sie alle Begegnungen aus!
SELECT *
FROM Begegnung
I
N
F
O
R
M
A
T
I
K
Die ersten SQL Befehle
33
2. Geben Sie alle Begegnungen aus:


Datum, Name der Teams und Ergebnis
Sortierung nach Datum absteigend
SELECT Datum, Team1, Team2, Ergebnis
FROM Begegnung
ORDER BY Datum DESC
3. An welchen Spielen war Deutschland beteiligt?
WHERE Team1='Deutschland' OR
Team2='Deutschland'
4. Welche Spiele fanden zwischen dem 10.6.2006 und 15.6.2006
statt?

Absteigend nach Datum sortiert
WHERE Datum BETWEEN '2006-06-10' AND '2006-06-15'
ORDER BY Datum DESC
F
Lösung: Konvertierung mit Datumsfunktion für die Ausgabe
I
Problem: Datumsformat unterscheidet sich vom deutschen Format
N
O
R
M
A
T
I
K
Aufgaben, Datenbank: wm-stufe1
34
SELECT Team1, Team2, DATE_FORMAT(Datum,'%d.%m.%Y')
FROM ...
• Wichtig sind vor allem Funktionen zur Manipulation von Strings
und Datumsangaben, z.B.
 DATEDIFF(D1, D2)
 NOW()
 …
Differenz (Tage)
Aktuelle Zeit/Datum
(SELECT CURDATE())
• Wichtige Stringfunktionen






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
A
T
I
K
Hilfsfunktionen
SQL ist hier nicht standardisiert
 Die Funktionen sind bei anderen DBS oft unterschiedlich
35
5. Geben Sie die Spiele in folgender Form aus:
CONCAT(UPPER(LEFT(Team1,3)),'-',UPPER(LEFT(Team2,3)),': ',Ergebnis) AS Spiel,
DATE_FORMAT(Datum,'%d.%m.%Y') AS 'Wann'
Spalten können mit „AS“ umbenannt werden
6. Welche Spiele fanden in München statt?
WHERE Ort='München'
F
O
R
M
A
T
I
K
Aufgaben, Datenbank: wm-stufe1
I
N
Problem: München wird unterschiedlich geschrieben!
36
Lösung: Auslagerung in eine eigene Tabelle
• Begegnung und Ort werden in zwei getrennten Tabellen
gespeichert und über eine Beziehung miteinander verknüpft.
• Zur Verknüpfung dient ein Ortskürzel, das als Fremdschlüssel in
Begegnung gespeichert wird.
BNR
A1
M
A
T
I
K
Relationale Datenbanken – Beziehungen
Polen
Deutschland
Brasilien
Team2
Costa Rica
Ecuador
Polen
Australien
Ort
München
Gelsenkirchen
Dortmund
München
F
O
R
A2
A3
F4
Team1
Deutschland
I
N
Begegnung
Ort
BNR
Team1
Team2
ONR
ONR
Name
A1
A2
A3
F4
Deutschland
Polen
Deutschland
Brasilien
Costa Rica
Ecuador
Polen
Australien
MUE
GEL
DOR
MUE
MUE
GEL
DOR
München
Gelsenk.
Dortmund
37
Schlüsselattribut aus Ort
• Zwischen den Tabellen bestehen Beziehungen (Relationen)
Master
PKey
Detail
Data
FKey
PKey
Data
I
N
F
O
R
M
A
I
 z.B. Spielort der Begegnung
T
K
Relationale Datenbanken – Beziehungen
• 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 Stadiongröße) lassen sich
meist mit geringem Aufwand realisieren.
 Die Struktur lässt flexiblere Abfragen zu.
38
• 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:
I
N
F
O
R
M
A
• Es sollen alle Begegnungen ausgegeben werden, die in Stadien mit mehr
als 60.000 Sitzplätzen gespielt wurden.
39
Begegnung
Ort
BNR
Team1
Team2
ONR
ONR
Name
Sitze
A1
A2
A3
F4
GER
POL
GER
BRA
CRC
ECU
POL
AUS
MUE
GEL
DOR
MUE
MUE
GEL
DOR
München
Gelsenk.
Dortmund
66000
52000
65000
1. Cross-Join („jede Zeile mit jeder“)
Begegnung
SELECT *
FROM Begegnung, Ort
BNR
Team1
Team2
ONR
A1
A2
A3
F4
GER
POL
GER
BRA
CRC
ECU
POL
AUS
MUE
GEL
DOR
MUE
ONR
Name
Sitze
MUE
GEL
DOR
München
Gelsenk.
Dortmund
66000
52000
65000
I
N
F
O
R
M
A
T
I

Ort
K
SQL – einfache Joins
40
BNR Team1
Team2
ONR
ONR
Name
Sitze
A1
A1
A1
A2
A2
A2
GER
GER
GER
POL
POL
POL
CRC
CRC
CRC
ECU
ECU
ECU
MUE
MUE
MUE
GEL
GEL
GEL
MUE
GEL
DOR
MUE
GEL
DOR
München
Gelsenk.
Dortmund
München
Gelsenk.
Dortmund
66000
52000
65000
66000
52000
65000
F4
F4
BRA
BRA
AUS
AUS
MUE
MUE
MUE
GEL
München
Gelsenk.
66000
52000
…
…
…
…
…
…
…
I


Es dürfen nur die Zeilen genommen werden, für die die „Begegnung“
und die „Ort“ Tabelle Daten des gleichen Ortes enthalten.
Dies wird durch die sog. „Join-Bedingung“ erreicht.
SELECT *
FROM Begegnung, Ort
WHERE Begegnung.ONR = Ort.ONR
I
N
F
O
R
M

T
2. Einschränken auf „passende“ Datensätze.
A
K
SQL – einfache Joins
41
BNR Team1
Team2
ONR
ONR
Name
Sitze
A1
A1
A1
A2
A2
A2
GER
GER
GER
POL
POL
POL
CRC
CRC
CRC
ECU
ECU
ECU
MUE
MUE
MUE
GEL
GEL
GEL
MUE
GEL
DOR
MUE
GEL
DOR
München
Gelsenk.
Dortmund
München
Gelsenk.
Dortmund
66000
52000
65000
66000
52000
65000
F4
F4
BRA
BRA
AUS
AUS
MUE
MUE
MUE
GEL
München
Gelsenk.
66000
52000
…
…
…
…
…
…
…
2. Einschränken auf „passende“ Datensätze (2).


T
I
K
SQL – einfache Joins
I
N
F
O
R
M
A

Es sollen nur Spielorte mit mehr als 60000 Sitzen gezeigt werden.
Momentan würde auch „Gelsenkirchen“ ausgegeben werden.
Also muss eine weitere Bedingung erfüllt sein:
SELECT *
FROM Begegnung, Ort
WHERE Begegnung.ONR = Ort.ONR
AND Ort.Sitze > 60000
42
BNR Team1
Team2
ONR
ONR
Name
Sitze
A1
A1
A1
A2
A2
A2
GER
GER
GER
POL
POL
POL
CRC
CRC
CRC
ECU
ECU
ECU
MUE
MUE
MUE
GEL
GEL
GEL
MUE
GEL
DOR
MUE
GEL
DOR
München
Gelsenk.
Dortmund
München
Gelsenk.
Dortmund
66000
52000
65000
66000
52000
65000
F4
F4
BRA
BRA
AUS
AUS
MUE
MUE
MUE
GEL
München
Gelsenk.
66000
52000
…
…
…
…
…
…
…
3. Einschränken auf gesuchte Spalten.


BNR Team1
Team2
ONR
ONR
Name
Sitze
A1
F4
…
CRC
AUS
…
MUE
MUE
…
MUE
MUE
…
München
München
…
66000
66000
…
Team1
Team2
Name
GER
BRA
…
CRC
AUS
…
München
München
…
GER
BRA
…
I
N
F
O
M
Nur bestimmte Spalten werden ausgegeben.
SELECT Begegnung.Team1, Begegnung.Team2, Ort.Name
FROM Begegnung, Ort
WHERE Begegnung.ONR = Ort.ONR
AND Ort.Sitze > 60000
R
A
T
I
K
SQL – einfache Joins
43
In der Realität versucht das
DBMS, durch „geschicktes“
Vorgehen die Datenmenge
schon früher zu reduzieren.
1. Geben Sie alle Begegnungen mit dem Ort der Austragung aus:


T
I
K
Aufgaben, Datenbank: wm-stufe2
Datum, Name der Teams und Name des Orts
Sortierung nach Datum absteigend
Datum, Team1, Team2, Ort.Name
Begegnung, Ort
Ort.ONR=Begegnung.ONR
BY Datum DESC
R
M
A
SELECT
FROM
WHERE
ORDER
2. Wo fanden Spiele mit deutscher Beteiligung statt?
Name und Sitzplätze der Stadien
SELECT DISTINCT
Name, Sitze
Name, Sitze
FROM Begegnung, Ort
WHERE Ort.ONR=Begegnung.ONR
AND ( Begegnung.Team1='Deutschland'
OR Begegnung.Team2='Deutschland')
I
N
F
O

Problem: Es werden Duplikate angezeigt
Lösung: DISTINCT-Anweisung
44
• Es sollen nun auch die Trainer der Teams gespeichert werden.
 Um Duplikate zu vermeiden, wird eine Tabelle der Teams angelegt.
 Es werden zwei Fremdschlüssel in der Tabelle Begegnung benötigt.
BNR
Team1
Team2
ONR
A1
A2
A3
F4
Deutschland
Polen
Deutschland
Brasilien
Costa Rica
Ecuador
Polen
Australien
MUE
GEL
DOR
MUE
I
N
F
O
R
M
A
T
I
K
Relationale Datenbanken – Beziehungen
45
Begegnung
Team
BNR
TNR1
TNR2
ONR
A1
A2
A3
F4
GER
POL
GER
BRA
CRC
ECU
POL
AUS
MUE
GEL
DOR
MUE
TNR
Name
Trainer
GER
POL
CRC
ECU
…
Deutschland
Polen
Costa Rica
Ecuador
Klinsmann
Janas
Guimaraes
Suarez
• Soll in SQL auf eine Tabelle mehrfach zugegriffen werden, so kann
dies mit Alias-Namen geschehen:
 Alle Begegnungen mit ihren Teams und Trainern
I
N
F
O
R
M
A
T
I
K
SQL – Tabellen-Alias
46
 SELECT B.Datum,
T1.Name, T1.Trainer,
T2.Name, T2.Trainer
FROM Begegnung B, Team T1, Team T2
WHERE B.TNR1=T1.TNR
AND B.TNR2=T2.TNR
Der Alias-Name für
Begegnung ist
nicht notwendig
(verkürzt die
Abfrage)
• Es werden nun Spalten mit gleichen Namen ausgegeben
 Spaltennamen können umbenannt werden.
I
N
F
O
R
M
A
T
I
K
SQL – Spaltennamen
47
 SELECT B.Datum,
T1.Name AS Team1, T1.Trainer AS Trainer1,
T2.Name AS Team2, T2.Trainer AS Trainer2
FROM Begegnung B, Team T1, Team T2
WHERE B.TNR1=T1.TNR
AND B.TNR2=T2.TNR
I
K
Komplette Struktur der Datenbank
Ort
T
ONR
A
TNR1
M
TNR2
Name
Sitze
ONR
Begegnung
SNR
Datum
TNR
TNR
Team
48
Schiedsrichter
Trainer
LNR
TNR
LNR
I
N
F
O
R
Ergebnis
TNR in Team ist
Primär- und
Fremdschlüssel
Land
LNR
Name
Einwohner
Kontinent
Name
Vorname
K
Komplette Struktur der Datenbank als E/R-Diagramm
Ort
T
I
1
n
Begegnung
n
M
A
n
Datum
Team2
R
Team1
Ergebnis
1
1
F
1
Schiedsrichter
n
I
Team
N
O
1
1
49
Land
1
1. Welche Teams kommen aus Ländern, die weniger als 10 Mio.
Einwohner haben?
SELECT Land.Name, Land.Einwohner * 1000000 AS Einwohnerzahl,
Team.Trainer
FROM Team, Land
WHERE Team.TNR = Land.LNR
Rechenoperationen
AND Land.Einwohner<10
sind erlaubt.
2. Geben Sie alle Begegnungen aus


Teamnamen, Schiedsrichter, Ergebnisse
nach Datum geordnet
I
N
F
O
R
M
A
T
I
K
Aufgaben, Datenbank: wm-stufe4
50
SELECT B.Datum, T1.Name, T2.Name,
S.Name, S.Vorname, B.Ergebnis
FROM Begegnung B, Schiedsrichter S, Land T1, Land T2
WHERE B.SNR = S.SNR
AND B.TNR1 = T1.LNR
AND B.TNR2 = T2.LNR
Der Join kann direkt
ORDER BY B.Datum
auf das Land erfolgen,
da von Team nichts
benötigt wird.
3. Geben Sie alle Begegnungen aus

Teamnamen, Ergebnis, Schiedsrichter und Kontinent des
Schiedsrichters
I
N
F
O
R
M
A
T
I
K
Aufgaben, Datenbank: wm-stufe4
51
SELECT B.Datum, T1.Name, T2.Name,
S.Name, S.Vorname, LS.Name, LS.Kontinent,
B.Ergebnis
FROM Begegnung B, Schiedsrichter S,
Land T1, Land T2,
Land LS
WHERE B.SNR = S.SNR
AND B.TNR1 = T1.LNR
AND B.TNR2 = T2.LNR
AND S.LNR = LS.LNR
ORDER BY B.Datum
Die Tabelle Land wird
nun sogar dreimal
benötigt.
• Manchmal müssen die Ergebnisse einer Anfrage gruppiert und
verrechnet werden.
 Es sollen
werden.
 SELECT
FROM
WHERE
ORDER
die Kontinente und die Anzahlen der Teams ausgegeben
Team.TNR, Land.Kontinent
Team, Land
Team.TNR = Land.LNR
BY Land.Kontinent
I
N
F
O
R
M
A
T
I
K
Gruppieren von Ergebnissen
52
TNR
Kontinent
KOR
JPN
IRN
AUS
PAR
Asien
Asien
Asien
Australien
Südamerika
ARG
Südamerika
Selbst zählen???
NEIN!
• Manchmal müssen die Ergebnisse einer Anfrage gruppiert und
verrechnet werden.
 Es sollen
werden.
 SELECT
FROM
WHERE
GROUP
ORDER
die Kontinente und die Anzahlen der Teams ausgegeben
Land.Kontinent, COUNT(*)
Team, Land
Team.TNR = Land.LNR
BY Land.Kontinent
BY Land.Kontinent
I
N
F
O
R
M
A
T
I
K
Gruppieren von Ergebnissen
53
TNR
Kontinent
Kontinent
Anzahl
KOR
JPN
IRN
AUS
PAR
Asien
Asien
Asien
Australien
Südamerika
ARG
Südamerika
Asien
Australien
Südamerika
3
1
2
3
1
2
1. Geben Sie die Anzahl an Spiele pro Kontinent aus!
SELECT
FROM
WHERE
T.TNR)
AND
GROUP
COUNT(*) as Anzahl, L.Kontinent
Begegnung B, Team T, Land L
(B.TNR1 = T.TNR OR B.TNR2 =
T.TNR = L.LNR
BY L.Kontinent
2. In welchen Stadien hat Deutschland wie oft gespielt?
SELECT
FROM
WHERE
AND
GROUP
O.Name, COUNT(*)
Begegnung B, Ort O
(B.TNR1='GER' OR B.TNR2='GER')
B.ONR=O.ONR
BY O.Name
I
N
F
O
R
M
A
T
I
K
Aufgaben, Datenbank: wm-stufe4
3. Wie viele Sitze haben die Stadien im Schnitt, maximal und
minimal?
SELECT ROUND(AVG(Sitze)), MAX(Sitze), MIN(Sitze)
FROM Ort
54
4. Welche Schiedsrichter kommen aus Ländern, die keine Teams
stellen?
I
K
Aufgaben, Datenbank: wm-stufe4
S.Name, S.Vorname, L.Name, L.Kontinent
Schiedsrichter S, Land L
S.LNR = L.LNR
NOT EXISTS
( SELECT NULL FROM Team T WHERE T.TNR=L.LNR)
ORDER BY L.Kontinent, S.Name
O
R
M
A
T
SELECT
FROM
WHERE
AND
5. Welche Spiele wurden von einem Schiedsrichter aus dem gleichen
Kontinent gepfiffen?
Geben Sie auch die Ländernamen der Teams aus.
I
N
F

55
SELECT
FROM
WHERE
AND
AND
AND
AND
LT1.Name, LT2.Name, B.Ergebnis, S.Name, LS.Name, LS.Kontinent
Begegnung B, Schiedsrichter S, Land LS, Land LT1, Land LT2
B.SNR
= S.SNR
S.LNR
= LS.LNR
LT1.LNR = B.TNR1
LT2.LNR = B.TNR2
( LT1.Kontinent = LS.Kontinent OR LT2.Kontinent = LS.Kontinent )
Datenbanken – Wozu?
Abfragesprachesprache SQL
Verwaltung MySQL
Datenbankmodellierung
I
N
F
O
R
M
A
T
I
K
Agenda
56
Zugriff auf Datenbanken (PHP & Co.)
Ausblick
• In einem Datenbanksystem müssen Rechte für verschiedene
Benutzer verwaltet werden:
• Jeder kann auf alle Datenbanken zugreifen und diese verändern
 Mehrere Schüler sollen sich einen Datenbankserver „teilen“, dabei
sich aber nichts gegenseitig „kaputtmachen“
I
N
F
O
R
M
T
 MySQL arbeitet nach der Installation ohne Schutz des Administrators
A
I
K
Verwaltung des Datenbanksystems
57
• 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
I
N
F
O
R
M
A
T
I
K
MySQL – Passwort für Administrator vergeben
58
• 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';
• phpMyAdmin in Browser starten
 Menüpunkt „Rechte“
 Benutzer „root“ auswählen und bearbeiten
I
N
F
O
R
M
A
T
I
K
MySQL – Passwort für Administrator vergeben
59
 Passwort eingeben und speichern
 Beim nächsten Aufruf von phpMyAdmin ist die Eingabe des Passworts
notwendig
I
N
F
O
R
M
A
T
I
K
Benutzer / Rechte vergeben
60
• Ü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
I
N
F
O
R
M
A
T
I
K
Benutzer / Rechte vergeben
61
• 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
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 „wm-stufe4“
erhalten.
I
N
F
O
R
M
A
T
I
K
Benutzer anlegen
62
3. Versuchen Sie, mit diesem Benutzer auf die Datenbank des
Nachbarn / der Nachbarin zuzugreifen.
Datenbanken – Wozu?
Abfragesprachesprache SQL
Verwaltung MySQL
Datenbankmodellierung
I
N
F
O
R
M
A
T
I
K
Agenda
63
Zugriff auf Datenbanken (PHP & Co.)
Ausblick
Schulverwaltung
T
I
K
Ein neues Informationssystem… Anforderungskatalog
A
•
•
•
•
N
F
O
R
M
•
I
•
64
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.
• Um ein Informationssystem zu erstellen, muss ein Ausschnitt der
realen Welt („Miniwelt“) im Computersystem erfasst werden.
I
N
F
O
R
M
A
T
I
K
Modellbildung
65
Miniwelt
Datenmodell
• 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
?
Repräsentation der
Informationen als
strukturierte Daten
• 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
66
Externe
Sicht
Konzeptionelle
Sicht
Internes
Modell
(z.B. relationales
Datenmodell)
• 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
I
N
F
O
R
M
A
T
I
K
Konzeptionelles Modell – E/R-Diagramme
Lehrer
67
• Beispiel Entitätstyp:
 Entität:
 Entitätstyp:
Lehrer Lämpel, Kürzel Lä
Menge aller Lehrer mit den Merkmalen Vorname,
Nachname, Kürzel, …
 Primärschlüssel: Kürzel (?) (oder ein künstlicher Schlüssel)
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'
I
N
F
O
R
M
A
T
I
K
E/R-Diagramme - Entitätstyp
68
Entitätstyp
„Lehrer“
3 Entitäten
• 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
69
Lehrer
Klassenfahrt
Klasse
Entitätstyp
Beziehungstyp
Entitätstyp
• 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
I
N
F
O
R
M
A
T
I
K
Modellierung oft nicht eindeutig
70
führt
durch
Klassenfahrt
nimmt
teil
• 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
Name
I
N
F
O
Klassenfahrt
Stufe
Teil
identifizierend
Vorname
beschreibend
71
Datum
Kürzel
Ziel
Anzahl
• 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
72
1
Klasse
n
angehören
Schüler
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.
73
• Die Kardinalitäten (1:1, 1:n, n:m) geben nur an, wie viele
Entitäten maximal miteinander verbunden sind.
Klasse
1
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
I
Klasse
1
[1,1]
angehören
n
Schüler
[8,30]
 Bsp.: Eine Klasse hat minimal 8 und maximal 30 Schüler.
74
• 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
I
Personen
oder n:m ?
75
1
1
Heirat
• Die Ist-Beziehung gibt an, dass ein Entitätstyp eine Spezialisierung
eines anderen Entitätstyps darstellt.
 Bsp.: „Lehrer“ spezialisiert „Person“
Name
Vorname
Person
Generalisierungstyp
R
M
A
T
I
K
E/R-Diagramme – Ist-Beziehung
ist
Schüler
Lehrer
Spezialisierungstypen
N
F
O
ist
I
Klasse
• Die Spezialisierungstypen erben die Attribute des
Generalisierungstyps.
76
Titel
• 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.
I
N
F
O
R
M
A
T
I
K
Normalisierung von relationalen Schemata
 Weitergehendes mit Beispielen in:
http://de.wikipedia.org/wiki/Normalisierung
77
K
 Für jeden Entitätstyp eine Tabelle
T
• Transformation von Entitätstypen
I
Transformation E/R-Modell in relationales Schema
E/R-Modell
Name
SNR
R
M
A
Schüler
Schueler
I
SNR
78
Name
Vorname
Relationales Schema
N
F
O
Vorname
• 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).
n
angehören
Schüler
KNR
Name
SNR
Stufe
O
R
M
Klasse
1
E/R-Modell
A
T
I
K
Transformation E/R-Modell in relationales Schema
Klasse
I
KNR
79
Schueler
Stufe
SNR
Name
Vorname
KNR
Relationales Schema
N
F
Vorname
• Transformation von n:m-Beziehungstypen
 Einfügen eines Fremdschlüssels nicht möglich
 Separate Tabelle mit zwei Fremdschlüsseln
besucht
m
Schüler
Name
KNR
Stufe
SNR
Fehlstunden
O
R
M
Kurs
n
E/R-Modell
A
T
I
K
Transformation E/R-Modell in relationales Schema
Kurs
I
KNR
80
Besucht
Stufe
KNR
SNR
Schueler
Fehlst.
SNR
Name Vorname
Relationales Schema
N
F
Vorname
• 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.
Zusatzdaten
1
SchülerPrivat
Vorname
SNR
Konfession
SNR
Name
O
R
M
Schüler
1
E/R-Modell
A
T
I
K
Transformation E/R-Modell in relationales Schema
Schueler
I
SNR
81
Name
SchuelerPrivat
Vorname
SNR Konfession
Herkunft
Relationales Schema
N
F
Herkunft
• Transformation der Ist-Beziehung
 Separate Tabelle, ähnlich der 1:1-Beziehung
M
A
Vorname
Name
Konfession
SNR
Schulart
Person
I
SNR
82
Schueler
Name
Vorname
SNR Schulart Konfession
Relationales Schema
N
F
O
R
PNR
Schüler
ist
Person
E/R-Modell
T
I
K
Transformation E/R-Modell in relationales Schema
• DBDesigner4
http://fabforce.net/dbdesigner4/
• Ungetestet:
 Mogwai ER-Designer
(http://sourceforge.net/projects/mogwai/)
 TOAD Data Modeler
 TOAD für MySQL (Beta)
http://www.toadsoft.com/toadmysql/Overview.htm
I
N
F
O
R
M
A
T
I
K
Tools für E/R-Diagramme
83
• Oder doch einfach mit Office-Programmen…
I
•
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
„Schule“
T
• Erstellen Sie ein E/R-Modell und dann das relationale Schema.
A
K
Aufgaben
84
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.
•
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
N
F
A
„Bibliothek“
R
• Erstellen Sie ein E/R-Modell und dann das relationale Schema.
O
K
Bibliothek … Anforderungskatalog
85
•
Eine Datenbank für das Schema kann fertig importiert werden!
(Bibliotheks-DB_latin.sql)
O
R
M
A
T
I
K
Anfragen an die Bibliothek-Datenbank
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!
I
N
F
(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?
(Kinder: 14)
5. Welche Leser haben zur Zeit Bücher ausgeliehen?
(49 Ergebnisse, Achtung Duplikate?)
86
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
87
Datenbanken – Wozu?
Abfragesprachesprache SQL
Verwaltung MySQL
Datenbankmodellierung
I
N
F
O
R
M
A
T
I
K
Agenda
88
Zugriff auf Datenbanken (PHP & Co.)
Ausblick
•
Grundlegende Schritte jedes Datenbankzugriffs in 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
89
mysql_select_db($Datenbank)
or die("Auswahl Datenbank unmöglich: " . mysql_error());
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.
90
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);
 mysql_fetch_array liefert eine komplette Zeile des Ergebnisses
als Array (Alternative: mysql_fetch_row)
 Nach der letzten Zeile wird FALSE zurückgegeben
A
I
• Ausgabe der Ergebnisse als Array
T
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
91
• 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
A
T
I
K
Zugriff auf MySQL über PHP
Schleife über
alle Zeilen
des Ergebnisses
while ($arrRow = mysql_fetch_array($result))
{
echo "$arrRow[Team1] : $arrRow[Team2]";
}
I
N
F
O
R
M
Auslesen und Speichern einer
Ergebniszeile als Array
Zugriff auf eine Spalte der Ergebniszeile
92
• Ausgabe der Ergebnisse als Objekt
 mysql_fetch_object liefert eine komplette Zeile des Ergebnisses
als Objekt
 Nach der letzten Zeile wird FALSE zurückgegeben
A
T
I
K
Zugriff auf MySQL über PHP
Schleife über
alle Zeilen
des Ergebnisses
while ($oRow = mysql_fetch_object($result))
{
echo "$oRow->Team1 : $oRow->Team2";
}
I
N
F
O
R
M
Auslesen und Speichern einer
Ergebniszeile als objekt
Zugriff auf eine Spalte der Ergebniszeile
93
K
Zugriff auf MySQL über PHP
• Weitere interessante Funktionen:
T
I
 mysql_num_rows($result)
• Gibt die Anzahl der Zeilen (Datensätze) im Ergebnis aus.
 mysql_num_fields($result)
M
A
• Gibt die Anzahl der Spalten im Ergebnis aus.
 mysql_field_name($result, 0)
• Name eines Feldes im Ergebnis.
I
N
F
O
R
 mysql_affected_rows()
94
• Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL
Operation wie z.B. DELETE, UPDATE
• Vereinfachung:
 Herstellen der Verbindung / Datenbankauswahl in eine separate
Include-Datei, die immer wieder verwendet werden kann.
• include "_DBVerbindung.inc";
1. Erstellen Sie php-Anzeigeseiten für die Datenbank wm-stufe4.
Verwenden Sie dazu Abfragen aus dem SQL-Teil.
2. Erstellen Sie eine Abfrage, bei der der Spielort eingegeben
werden kann (HTML-Formular). Es werden dann alle
Begegnungen an diesem Ort ausgegeben.
3. Erweiterung zu 2. : Die Liste der
verfügbaren Orte wird vorgeblendet.
I
N
F
O
R
M
A
T
I
K
PHP und Datenbanken – Aufgaben
95
4. Geben Sie die Begegnungen aus.
Es sollen Links in jeder Spalte sein, die eine Sortierung
erlauben.
• 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.
O
• Units, die einen einfachen Datenbankzugriff erlauben
 Einsteiger-Tutorial dazu: http://www.dsdt.info/tutorials/
I
N
M
R
 Lösung: Verzicht auf Borland-Datenbank-Komponenten und
Verwendung freier Zugriffssoftware
F
A
T
I
K
MySQL in Delphi
96
 MySQLDirect (http://www.sourceforge.net/projects/directsql)
• 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
(http://mysql.org/downloads/connector/)
F
ODBC
Client
I
Anwendungsprogramm
N
O
R
M
A
T
I
K
MySQL mit ODBC „anzapfen“
(Datenbank)Server
97
Server
I
N
F
O
R
M
A
T
I
K
MySQL mit ODBC „anzapfen“
98
• 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_wm-stufe1.dsn öffnen.
I
N
F
O
R
M
A
T
I
K
ODBC-Zugriff am Beispiel Excel 2003
99
 Diese Datei kann für eigene Zwecke
leicht mit einem Editor angepasst werden.
Datenbanken – Wozu?
Abfragesprachesprache SQL
Verwaltung MySQL
Datenbankmodellierung
I
N
F
O
R
M
A
T
I
K
Agenda
100
Zugriff auf Datenbanken (PHP & Co.)
Ausblick
• Weitere Möglichkeiten von SQL
 Outer Joins
 Sub-Selects
 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
I
N
F
O
M
• Datenbank-Management
R
A
T
I
K
Ausblick - Was hätte man noch alles behandeln können?
• Verändern der Datenbankstruktur über Anweisungen
 Data Definition Language (DDL)
• u.v.m.
101
• XAMPP
 http://www.apachefriends.org/de/xampp.html
• Deutsche MySQL Seite
 http://www.mysql.de/
(englisch: http://mysql.com/)
• MySQL Gui Tools
 http://www.mysql.de/downloads/gui-tools/
• PHP-Dokumentation (mit MySQL Funktionen)
 http://www.php.net/download-docs.php
N
F
O
R
M
A
T
I
K
Software / Links
I
• Connectors (ODBC, JDBC, …) für MySQL
102
 http://www.mysql.de/downloads/connector/
• Material zur MySQL-Verwendung von Klaus Merkert
 http://www.hsgkl.de/faecher/inf/material/datenbanken/mysql/index.php
I
N
F
O
R
M
A
T
I
K
Software / Links
103
• Material zu DB allgemein von OSZ Handel, Berlin
 http://oszhdl.be.schule.de/gymnasium/faecher/informatik/datenbank
en/index.htm
• u.v.m.
• Schema zur Beispieldatenbank „schulverwaltung.sql“
LNR
Name
A
T
I
K
Schemata der Beispieldatenbanken
Vorname
n
M
Lehrer
FNR
Klassenleiter
F
O
R
n
N
m
I
Klassen
KStufe
104
KBuchstabe
Saal
unterrichtet
m
Fach
Faecher
• 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
105
Name
Ort
LeserNr
Geschlecht
…