Diese HTML-Datei enthält spezielle CSS2-Anweisungen, die für den
Präsentationsmodus des Web-Browsers
Opera erstellt wurden. Sofern sie diesen
Browser benutzen, können sie mit der F11- Taste in diesen Modus (und
wieder zurück) schalten. Die Präsentation wurde für eine Auflösung
von 1024x768 Bildpunkten erstellt.

Datenbanken -
Was ist das?
Distributed Systems Panel, 19. Chaos Communication Congress, Berlin, 2002
- Referent: Markus Schaber, CCC Ulm
- Vortrag ist im HTML-Format online
Inhalt:
- Beispiele für Datenbanken
- Grundlegendes
- Logische Modelle
- Relational, Objektorientiert, Hierarchisch, Netzwerk, Logisch
- Implementierungsaspekte
- Datenstrukturen, Transaktionen
- Zugriff auf Datenbanken
- Kommandozeile, eingebettetes SQL, explizites API
- Datenschutz / Datensicherheit
--> Kurzer, exemplarischer Überblick
Beispiele für Datenbanken
- Adressbuch im Handy
- Kundendatenbank
- Einwohnermelderegister
- Kontobewegungsdatenbank
- Genom-Datenbank
- World Wide Web
- Domain Name System
Grundlegendes
- Trennung von
- Physischem Datenbestand
- Logischer Struktur der Daten
- Verarbeitungslogik
- Benutzeroberfläche
- Designhilfsmittel z. B.
- ER-Diagramme
- Softwaretools
Relationale Datenbanken
- Heute meistverbreitete Datenbankform
- Aufbau aller Daten aus Tabellen
- Mathematische Grundlage: Mengen von Tupeln
- Identifikation über Primärschlüssel
- Verknüpfung über Fremdschlüssel
- Standardisierter Zugriff über SQL
Relationale Datenbanken
Studenten:MatNr
| Name
| Strasse
| Ort
| Telefon
|
|---|
0815
| Maier
| Meyerhofstr. 1
| 89075 Ulm
| 555 1234
|
4711
| Müller
| Mühlberg 42 | 89075 Ulm
| 555 4321 |
Einschreibungen:MatNr
| StudNr
| EinschrDatum
| ExMatDatum
| Studiengang
|
|---|
0815
| 1
| 1. 8. 1999
| 1. 9. 2000
| Mathematik
|
4711
| 1
| 13. 8. 2000
| (null)
| Informatik-D
|
0815
| 2
| 1. 9. 2000
| (null)
| Informatik-B
|
Studiengaenge Studiengang
| Fakultät
| Regeldauer
| Abschlußgrad
|
|---|
Informatik-D
| Informatik
| 9
| Dipl. Inf.
|
Informatik-B
| Informatik
| 6
| Bachelor
|
Mathematik
| Mathe-Wiwi
| 9
| Dipl. Math.
|
Relationale Datenbanken
- Zugriff mengenbasiert
- Keine explizite Navigation (in der Theorie)
- Verknüpfen von Tabellen
- Schnitt und Vereinigung
- Join (Kreuzprodukt)
- Auswahl von Reihen über Selektion
- Auswahl von Spalten über Projektion
- Viele Möglichkeiten zur Anfrageoptimierung
- Konsistenzprüfung durch die Datenbank
Relationale Datenbanken
Probleme:
- Tabellenfelder haben feste Maximalgröße
- z. B. Foto des Studenten soll elektronisch in der Datenbank archiviert werden
- Sehr aufwendige Modellierung bei komplexen, hierarchischen Objekten
- z. B. Student hat mehrere Adressen oder Telefonnummern
- z. B. Studiengang von mehreren Fakultäten gleichzeitig
- Aufwendige Simulation von Polymorphie
- z. B. Person, davon abgeleitet Student, Mitarbeiter, Professor
Relationale Datenbanken
Folgen:
- Explosion der Tabellenanzahl
- Komplexe Abfragen
- Geschwindigkeitsprobleme
- Sonderbehandlung von variablen, großen Objekten (BLOBs)
- Insellösungen und Spezialtricks der Datenbankimplementierer
Relationale Datenbanken
Zukunftsaussichten:
- Bessere, umfassendere Standardisierung
- Erweiterung des Modelles
- Tupel, Listen, Arrays
- Strukturen
- Objektrelationale Systeme
- Vererbung zwischen Tabellen
Objektorientierte Datenbanken
- Basiert auf objektorientierter Programmierung
- Dient als Dauerspeicher in OO-Systemen
- mehr oder weniger Transparent
- Viele verschiedene Systeme
- Oft nur Wrapper für relationale Datenbanken
- Beispiele:
- Oft nur "Storage", keine weitergehende Funktionalität
Hierarchische Datenbanken
- Bekanntestes System: IMS/VS (Seit 1968, von IBM)
- inzwischen stark optimiertes, stabiles System
- komplexes Datenmodell
- kryptischer Zugriff
- mehrere tausend Seiten Systemliteratur
- Datenbank hat Baumstruktur
- Navigation geschieht explizit
- Pro logischer Datenbank eine Wurzel
- Alle Records hängen direkt oder indirekt von den Wurzeln ab
Hierarchische Datenbanken
Beispiel
Hierarchische Datenbanken
- Zugriff über PCB-Sicht (virtueller Layer, kann ausblenden)
- Zugriffssprache DL/1 (data language/one)
- Eingebettet in COBOL, PL/1 und 370/Assembler
- Datenein- und Ausgabe über spezielle Variablen
- Cascading Delete von abhängigen Datenblöcken
- Navigation mittels expliziter Kommandos:
- Gehe zu erstem Kind vom Typ Adresse
- Gehe zu nächstem Kind
- Suche Kind mit Strasse = "Meyerhofstr. 1"
Netzwerk-Datenbanken
- CODASYL-Normierungsbemühungen Ende 60er Jahre
- Aktuelle Implementierungen basieren auf 1978er Vorschlag
- Produkte:
- DMS/100 (UNIVAC)
- IDMS (Cullinet Software)
- DBMS (DEC)
- UDS (Siemens, in Deutschland sehr erfolgreich)
- Basis-Struktur: Verkettete Listen von Records
Netzwerk-Datenbanken
Netzwerk-Datenbanken
- Zugriff ebenfalls über Kommunikationsvariablen
- Navigation explizit
- für jeden Record-Typen "current"-Pointer
- n:n-Verknüpfungen mittels Kett-Records
- Einschreibung im Beispiel erfüllt solche Funktion
Logische Datenbanken
- Direkte Verarbeitung logischer Regeln
- Verarbeitung einer Faktenbasis anhand dieser Regeln
- Datenbanksprache DATALOG (ähnlich PROLOG)
Beispiel:
VaterVon(Hans, Otto).
VaterVon(Otto, Frank).
VaterVon(Otto, Peter).
GrossvaterVon(A, B) :-
VaterVon(A, C), VaterVon(C, B).
Datenstruktur: Hash
- Zugriff in quasi konstanter Zeit
- Datensatznummer errechnet über Hashfunktion
- Lesen, Schreiben und Löschen schnell
- Probleme
- Gute Hashfunktion finden
- Kollisionsbehandlung notwendig
- Reorganisation nötig, wenn Tabelle voll
- Kein sortiertes Lesen möglich
Datenstruktur: Hash
Hash
| Key
| Data
|
|---|
0
| 4711
| Müller, Mühlbergstr. 42....
|
1
|
|
|
2
|
|
|
3
| 0815
| Maier, Meyerhofstr. 1,...
|
4
|
|
|
5
|
|
|
6
|
|
|
Beispiel:
- Schlüssel = Matrikelnummer
- Hashfunktion = mod 7
Datenstruktur: ISAM
|
2. Index- Stufe
|
| 1 |
Aubele |
02 |
| Bebraham |
03 |
| Dietrich |
04 |
| 2 |
Endres |
05 |
| Hans |
06 |
| Kullerer |
07 |
| 3 |
Maier |
08 |
| Müller |
09 |
| Quackera |
10 |
1. Index- Stufe
|
| 01 |
Aalfisch |
Bla |
| Abeler |
Additi |
| -- |
-- |
| 02 |
Aubele |
Blabla |
| Annerman |
Blubb |
| Appelt |
4711 |
(...)
| 05 |
Endres |
000111 |
| Ezmail |
CCC |
| Haarling |
nst |
(...)
| 10 |
Quackera |
sadfax |
| Zirler |
-- |
| -- |
-- |
Daten
|
- Für große Datensatzmengen
- Optimiert für Suche
- Konstante Zugriffszeit
- Mehrstufiger Index
- Seitenbasiert
Beispiel:
2-Stufiger Index
Datenstruktur: ISAM
Vorteile:
- Sequentielles Lesen gut möglich
- Bereichsauswahl gut möglich
- Schnell bei hardwarenaher Seitengröße
Nachteile:
- Reorganisation beizeiten notwendig
- Lücken müssen gelassen werden
- Überlaufbehandlung notwendig
Datenstruktur: B-Baum
- Knoten fester Größe
- Exaktes Regelwerk gewährleistet Balance
- Split, Zusammenfassen, Rotationen
- Füllgrad der Knoten mind. 50% (Ausnahme: Wurzel)

Transaktionen
- Alles-oder-Nichts-Prinzip
- Koppelt zusammengehörende Zugriffe
- Dient der Konsistenzwahrung
- Problematik bei konkurrierenden Zugriffen
- Dirty Read
- Non-Repeatable Read
- Phantom Read
- ANSI/ISO SQL definiert 4 "Isolation Levels"
Zugriff: SQL
- Zugang zu SQL-Datenbanken über Kommandozeileninterface
Beispiel: Adresse eines Studenten
SELECT Name, Strasse, Ort
FROM Studenten
WHERE MatNr = '4711'
Beispiel: Alle aktuellen Einschreibungen
SELECT Name, MatNr
FROM Studenten NATURAL JOIN Einschreibungen
WHERE ExMatDatum = NULL
Zugriff: Embedded SQL
- SQL-Abfragen in "Mutterprogramm" eingebettet
- Verarbeitung mittels Präprozessor
Codebeispiel:
EXEC SQL INCLUDE SQLCA;
main() {
EXEC SQL BEGIN DECLARE SECTION;
int MatNr;
char Name[32];
long Anzahl;
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO dbs98;
EXEC SQL SELECT count(*) INTO Anzahl
FROM Studenten NATURAL JOIN Einschreibungen
WHERE ExMatDatum = NULL;
}
Zugriff: JDBC
- Standard-Schnittstelle für SQL-Zugriff unter Java
- Plugin-Architektur
Codebeispiel:
import java.sql.*;
public class Test {
public static void main( String args[]) {
Class.forName("org.postgresql.Driver");
Connection db = DriverManager.getConnection("jdbc:postgresql:database",
"user", "passwort");
Statement St = db.CreateStatement();
ResultSet rs = st.executeQuery("SELECT * FROM Studenten");
while (rs.next()) {
System.out.println(rs.getString(1))
}
db.close();
}
}
Zugriff: ZODB
- Objektorientierte Datenbank für Python
- Ursprünglich für ZOPE entwickelt
- Verschiedene Backends (File, ODBC, Verteiltes DBS
Codebeispiel
import ZODB
from ZODB import FileStorage, DB
from Persistence import Persistent
storage = FileStorage.FileStorage("/tmp/test-filestorage.fs"); db = DB(storage)
conn = db.open(); dbroot = conn.root(); userdb = dbroot['userdb']
class User(Persistent): pass
X = User(); X.id = "schabi" ; X.first_name = "Markus"; X.last_name = "Schaber"
userdb[X.id] = X
get_transaction().commit()
Datenschutz / Datensicherheit
- Schutz vor unbefugtem Zugriff notwendig
- Beachtung der Datenschutzgesetze
- Beste Sicherheitsstrategie: Daten vermeiden
"Gewährleistung und Begrenzung des Informationsflusses"
Weiterführendes
Ausgelassene Themen - z. B.:
- Datenbankentwurf
- Verteilte Datenbanken
- Indizierung mehrdimensionaler Daten
- Multimedia-Datenbanken
- Wissensbasierte Systeme und Knowledge Management
- Workflow-Management-Systeme
- Recovery nach Crash
- Und vieles andere mehr...
Literatur
- Prof. Peter Dadam: Datenbanksysteme, Skript zur Vorlesung, Fassung WS 2000/2001, Universität Ulm, Fakultät für Informatik
- Gottfried Vossen, Kurt-Ulrich Witte (Hrsg): Entwicklungstendenzen bei Datenbanksystemen, Oldenburg Verlag, München, 1991
- PostgreSQL 7.1 User's Guide und PostgresQL 7.1 Programmer's Guide http://www.postgresql.org/
- Klaus Meyer-Wegener: Multimedia-Datenbanken: Einsatz von Datenbanktechnik in Multimedia-Systemen, Teubner-Verlag, Stuttgart, 1991
- Andrew M. Kuchling, ZODB & ZEO Introduction, http://www.amk.ca/zodb/zodb-zeo.html
Erinnerung: Alles auch online