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

Datenbanken