10. Datenbank

Werbung
10. DatenbankDesign
Objektrelationale Abbildung
10. Datenbank Design
1
Eigenschaften einer Datenbank
Persistenz
Daten gehen bei Programmende nicht verloren
Zuverlässigkeit
Konsistenz, Integrität, Unversehrtheit, Effizienz
Unabhängigkeit
Eigene Programmiersprache, eigenes System
Abstraktion
Kommunikation über Schnittstelle
Datenschutz
Kein unberechtigter Zugriff
Mehrfachbenutzung
Die Hauptaufgabe einer Datenbank besteht darin, Daten so lange
zu speichern bis diese explizit überschrieben oder gelöscht
werden. Also auch über das Ende (ev. sogar der Lebenszeit)
einer Applikation hinaus.
Die Daten müssen konsistent (vollständig und widerspruchsfrei),
integer (unverfälscht, sicher), unversehrbar (geschützt vor
absichtlicher oder unabsichtlicher Veränderung) gespeichert
werden und effizient wieder lesbar sein.
Um die Langlebigkeit der Daten zu gewähren, muss die
Verwaltung der Daten unabhängig von den benutzenden
Applikationen geschehen (Programmiersprache). Ausserdem
will der Applikationsentwickler sich nicht um die technischen
Details der Datenbank kümmern müssen, sondern auf einer
höheren, abstrakten Schnittstelle auf die DB zugreifen können.
Die Daten der Datenbank müssen vor unberechtigtem Zugriff
geschützt werden können, anderseits soll aber jeder
berechtigte Anwender (ev. auch mehrere gleichzeitig) auf die
Daten zugreifen können.
10. Datenbank Design
2
Datenbankmodell
Eigenschaften der Datenelemente
Typ, Länge, Wertebereich, …
Struktur
Tabellenstruktur, Schlüssel, Beziehungen
Konsistenz-Bedingungen
Eindeutigkeit/Vorhandensein von Werten
Ein Datenbankmodell ist die theoretische Grundlage für eine
Datenbank und bestimmt, auf welche Art und Weise Daten in
einem Datenbanksystem gespeichert und bearbeitet werden
können.
Jedem Datenbanksystem muss darum ein Datenbankmodell
zugrunde liegen, in welchem die DB Struktur (Tabellen), die
Typen der Elemente, die Konsistenzbedingungen, … festgelegt
sind.
10. Datenbank Design
3
Relationales DB-System
RDBS basiert auf Relationen
Wird in Tabellen abgebildet
Einfach und flexibel
Attribute/Felder/
Spalten
Name der Tabelle/Relation
Book
Id
Title
Year
1
XML kurz und gut
2006
2
XML für Einsteiger 2002
3
…
Tupel/
Zeilen
Relationale Datenbanksysteme sind sehr einfach und flexibel und
darum heute die am häufigsten benutzten DB Systeme.
Ihr Nachteil ist allerdings, dass sie die OO-Konzepte nicht eins zu
eins abbilden können.
10. Datenbank Design
4
Objektrelationale Abbildung
Zusammenhang zwischen OO-Klassen und RDBTabellen
ORM
???
???
???
???
???
Objektorientierte Programmiersprachen kapseln Daten und
Verhalten in Objekten, relationale Datenbanken hingegen
legen Daten in Tabellen ab. Ausserdem stellt nicht jede Menge
von Tabellen eine relationale Datenbank dar.
Die beiden Paradigmen OO und RDB sind grundlegend
verschieden. Es braucht darum einen Mechanismus, wie man
eine Abbildung zwischen Klassen(-Strukturen) und relationalen
Tabellen finden kann.
ORM: object-relational mapping
10. Datenbank Design
5
DB Normalformen
Eine DB mit redundanten Daten ermöglicht, dass
bei Daten-Änderungen die mehrfach enthaltenen
Daten inkonsistent werden.
Anomalien, Widersprüche
Speicherplatz-Verschwendung
Redundanzen vermeiden durch Normalisierung
Das Ausmass, in denen ein Datenbankschema
gegen Anomalien gefeit sein kann
erste, zweite, dritte, ... Normalform
Damit eine Menge von Tabellen (ein Datenbankschema) eine
brauchbare Relationale Datenbank darstellt, müssen einige
Regeln erfüllt sein. Diese sind bekannt unter dem Begriff DB
Normalformen.
10. Datenbank Design
6
Erste Normalform
Jedes Attribut der Relation muss einen atomaren
Wertebereich haben.
Zusammengesetzte oder geschachtelte
Wertebereiche sind nicht erlaubt.
Kein Attributwertebereich kann in weitere
(sinnvolle) Teilbereiche aufgespaltet werden
Beispiel: Adresse darf nicht als Attribut verwendet werden,
sondern muss in PLZ, Ort, Straße und Hausnummer
aufgeteilt werden.
10. Datenbank Design
7
Erste Normalform
Verletzung der ersten Normalform
Publikation aus Verlag, Kürzel und Jahr
Mehrere Autoren (mit Reihenfolge)
ID BookTitle
Published
Author
1
XML kurz und gut
O'Reilly
(ORe:2006)
1. Simon St. Laurent
2. Michael Fitzgerald
2
Einstieg in XML
Galileo
(GaC: 2011)
1. Helmut Vonhoegen
3
Java und XML
Galileo
(GaC: 2009)
1. Michael Scholz
2. Stephan Niedermeier
Keine Selektion oder Sortierung nach Erscheinungs-Jahr
möglich
Autoren können nicht einfach aufgelistet werden.
Die (geordnete Liste der) Autoren darf nicht in ein einzelnes Feld
abgespeichert werden. Das Erscheinungsjahr ist in dieser
Form nicht vernünftig abfragbar.
10. Datenbank Design
8
Erste Normalform
Mögliche Lösung
Id
BookTitle
Publisher PTLA Year A-Nr Firstname Name
1
XML kurz
und gut
O'Reilly
ORe
2006
1
Simon
St. Laurent
1
XML kurz
und gut
O'Reilly
ORe
2006
2
Michael
Fitzgerald
2
Einstieg in
XML
Galileo
GaC
2011
1
Helmut
Vonhoegen
3
Java und
XML
Galileo
GaC
2009
1
Michael
Scholz
3
Java und
XML
Galileo
GaC
2009
2
Stephan
Niedermeier
Diese Lösung hat allerdings immer noch Schwächen: Wir haben
jetzt Buch 1 und 3 doppelt in der Datenbank. Ausserdem ist es
schwierig zu prüfen, ob die Autorennummern (A-Nr) eindeutig
(und vollständig) sind.
10. Datenbank Design
9
Zweite Normalform
Eine Relation ist in der zweiten Normalform, wenn
die erste Normalform gilt und kein NichtschlüsselAttribut voll funktional abhängig von einer echten
Teilmenge eines Schlüsselkandidaten ist.
Das heisst: Von einer beliebigen Teil-Menge von
Attributen (Spalten), die keine Schlüsselfunktion
haben, kann nicht auf den Wert anderer Attribute
geschlossen werden.
10. Datenbank Design
10
Zweite Normalform
Verletzung der zweiten Normalform
Id
BookTitle
Publisher PTLA Year A-Nr Firstname Name
1
XML kurz
und gut
O'Reilly
ORe
2006
1
Simon
St. Laurent
1
XML kurz
und gut
O'Reilly
ORe
2006
2
Michael
Fitzgerald
2
Einstieg in
XML
Galileo
GaC
2011
1
Helmut
Vonhoegen
3
Java und
XML
Galileo
GaC
2009
1
Michael
Scholz
3
Java und
XML
Galileo
GaC
2009
2
Stephan
Niedermeier
Die Spalten Id und A-Nr bilden einen (Primär-) Schlüssel.
Buchtitel, Publisher und Year sind von der Id abhängig, nicht
aber von der Nummer des Autors.
Die Id des Buchs identifiziert vollständig die Spalten Buchtitel,
Publisher und PTLA, das heisst, diese sind vom zweiten
Schlüssel unabhängig. Damit wird aber die zweite Normalform
verletzt.
Der zweite Schlüssel A-Nr identifiziert zusätzlich (nur noch) den
Namen des Autors.
10. Datenbank Design
11
Zweite Normalform
Mögliche Lösung
Book
Id BookTitle
Publisher
PTLA Year
1
XML kurz und gut
O'Reilly
ORe
2006
2
Einstieg in XML
Galileo
GaC
2011
3
Java und XML
Galileo
GaC
2009
In der Book Tabelle
haben wir jetzt nur
noch den PrimärSchlüssel Id von
welchem alle
Spalten abhängig
sind.
Author B-Id A-Nr Firstname Name
B-Id und A-Nr bilden
zusammen einen PrimärSchlüssel, von welchem
die beiden anderen
Spalten abhängig sind.
1
1
Simon
St. Laurent
1
2
Michael
Fitzgerald
2
1
Helmut
Vonhoegen
2
2
Michael
Scholz
3
1
Stephan
Niedermeier
B-Id ist jetzt in der Autoren-Tabelle ein Fremdschlüssel, welcher
auf den Primärschlüssel der Book-Tabelle verweist. Ausserdem
bilden jetzt B-Id und A-Nr zusammen einen Primärschlüssel für
die Autoren-Tabelle.
Allerdings ist auch hier noch keine Redundanzfreiheit
gewährleistet. Ein Autor, welcher mehrere Bücher geschrieben
hat, wird in dieser Darstellung mehrfach aufgelistet.
10. Datenbank Design
12
Dritte Normalform
Die dritte Normalform ist erfüllt, wenn sich das
Relationen-Schema in der zweiten Normalform
befindet, und kein Nichtschlüsselattribut von
einem Schlüsselkandidaten transitiv abhängt.
Ein Nichtschlüsselattribut darf also nicht von einer
Menge von Nichtschlüsselattributen, sondern nur
direkt von einem Primärschlüssel abhängig sein.
10. Datenbank Design
13
Dritte Normalform
Verletzung der dritten Normalform:
Book
Id BookTitle
Publisher
PTLA
Year
1
XML kurz und gut
O'Reilly
ORe
2006
2
Einstieg in XML
Galileo
GaC
2011
3
Java und XML
Galileo
GaC
2009
Die Spalte PTLA hängt direkt von der Spalte Publisher ab.
Beim Ändern des Publishers müsste auch die PTLA Spalte
geändert werden.
PTLA ist unabhängig von der Book Id und hängt allein vom
Publisher ab. Publisher ist aber kein Schlüsselattribut für Buch.
Darum ist hier die dritte Normalform verletzt.
10. Datenbank Design
14
Dritte Normalform
Mögliche Lösung
Book
Id
BookTitle
Publisher
Year
1
XML kurz und gut
1
2006
2
Einstieg in XML
2
2011
3
Java und XML
2
2009
Publisher
Author
Id
B-Id
Firstname
Name
1
1
Simon
St. Laurent
2
1
Michael
Fitzgerald
3
2
Helmut
Vonhoegen
4
3
Michael
Scholz
5
3
Stephan
Niedermeier
Id Publisher
PTLA
1
O'Reilly
ORe
2
Galileo
GaC
Durch Auslagern der Publisher in eine eigene Tabelle ist PTLA
direkt vom Primärschlüssel des Publishers abhängig, d.h. die
dritte Normalform ist gewährleistet.
Die Autoren-Tabelle enthält hier einen Fremdschlüssel auf die
Buch-Tabelle. Dies funktioniert hier gut, da jeder Autor nur
einem Buch zugeordnet ist. Um einem Autor mehrere Bücher
zuzuordnen, bräuchte es eine separate Assoziations-Tabelle
(siehe Folie weiter hinten).
10. Datenbank Design
15
Objekt-Relationale
Abbildung
Abbilden von Klassen und
Relationen
10. Datenbank Design
16
Abbilden von Klassen
Operationen werden nicht abgebildet.
Atomare Attribute erscheinen als Spalte in der
Tabelle mit (möglichst) demselben Typ
Die Tabelle wird um einen Primär-Schlüssel
ergänzt
Course
10. Datenbank Design
Id
Name
Nr
Start
End
State
1
Java
10
3
12.1.2011
2.7.2011
finished
2
XML
41
3.10.201
0
1.1.2011
cancelle
d
3
OOAD
12
15.2.2011
9.8.2011
finished
17
Abbilden von Vererbung
Es gibt verschiedene Möglichkeiten,
Generalisierungs-Hierarchien abzubilden
Abbilden der ganzen Hierarchie auf nur eine
Tabelle
Abbilden nur der konkreten Klassen auf je eine
Tabelle
Abbilden jeder Klasse auf je eine separate Tabelle
10. Datenbank Design
18
Abbilden auf nur eine Tabelle
Person
Id
Type
Name
Address
DateOfBirt
h
State
1
TN
Hans Muster
103
12.1.1985
null
2
DZ
Gabi Blau
41
Null
partTime
3
TN
Willi Grau
12
15.2.1990
null
Teilnehmer
Dozent
Dieser Ansatz ist zwar sehr einfach, der Zugriff auf die Daten ist
schnell, da alle Daten in der gleichen Tabelle liegen. Weitere
Subklassen sind einfach einzufügen, es müssen nur die
entsprechenden Spalten angefügt werden.
Der Ansatz hat aber den Nachteil dass viele der Attribute auf null
gesetzt werden müssen (alle, welche im speziellen Subtyp
nicht vorkommen). Ausserdem sind bei einer Änderung
innerhalb der Hierarchie (z.B. Ergänzen einer Klasse um ein
weiteres Attribut) immer alle Objekte der Hierarchie betroffen.
Dieser Ansatz ist geeignet für Hierarchien geringer Tiefe mit
wenig verschiedenen Klassen.
Die Spalte Type enthält den eigentlichen Datentyp, hier also
entweder Teilnehmer oder Dozent. Person kann als Type
vorkommen, ausser wenn die Basisklasse abstrakt (oder ein
Interface) ist.
10. Datenbank Design
19
Abbilden jeder konkreten Klasse
auf je eine Tabelle
Dozent
Teilnehmer
Id
Name
Address
1
Hans Muster
103
12.1.2011
2
Willi Grau
12
15.2.2011
Id
Name
1
Gabi
Blau
Address
41
State
partTime
DateOfBirt
h
Hier wird jede konkrete Klasse auf eine separate Tabelle
abgebildet. Jede Tabelle hat einen eigenen Primär-Schlüssel
(Id). Auch hier ist der Zugriff effizient, da jeder Zugriff nur eine
Tabelle betrifft. Der Nachteil ist, dass bei einer Änderung der
abstrakten Oberklasse (hier Person) alle davon betroffenen
Tabellen geändert werden müssen.
Dieser Ansatz ist daher am ehesten geeignet, wenn die
Basisklasse nur wenig Attribute besitzt.
10. Datenbank Design
20
Abbilden jeder Klasse auf je eine
Tabelle
Dozent
Person
Id
Name
1
Hans Muster
103
2
Gabi Blau
41
3
Willi Grau
12
Id
P-Id
State
1
2
partTime
Address
Teilnehmer
Id
P-Id
DateOfBirth
1
1
12.1.2011
2
3
15.2.2011
Dieser Ansatz entspricht am besten dem Objektorientierten
Konzept. Änderungen in der Basisklasse hat keine
Änderungen in den „abgeleiteten“ Tabellen zur Folge. Neue
Attribute in den Subklassen betreffen nur die eigene Tabelle.
Der Nachteil ist, dass sehr viele Tabelle entstehen und die
Abfragen aufwändiger werden, da bei dieser Variante die
Informationen in verschiedenen Tabellen liegen.
10. Datenbank Design
21
Abbilden von Assoziationen
Unterscheiden nach Multiplizität
1:1
1:n
n:m
Assoziationen einer Relationalen DB sind immer
bidirektional.
Je nach Multiplizität der Assoziation wählen wir eine andere Art
der Abbildung.
Im Gegensatz zum Objektorientierten Modell können wir in einer
DB immer beide Richtungen einer Assoziation finden. Je nach
Realisierung brauchen wir einfach eine andere SQL-Abfrage.
10. Datenbank Design
22
Abbilden einer 1:1 Assoziation
Stundenplan
Id
Weekday
StartTime
EndTime
1
Monday
8:30
16:30
2
Course
Id
Name
Stundenplan_F
K
1
Java
1
… …
2
Oder integriert:
Course
Id
Name Weekday
StartTime
EndTime
1
Java
8:30
16:30
Monday
2
1:1 Assoziationen können durch Verschmelzen der Informationen
in eine einzige Tabelle abgebildet werden. Dies ist die
kompakteste und effizienteste Umsetzung.
Falls man das nicht möchte, kann die Assoziation mit Hilfe eines
Fremdschlüssels realisiert werden. Bei der gerichteten
Assoziation von Course zu Stundenplan bietet sich ein
Fremdschlüssel Stundenplan_FK in der Course Tabelle an.
Das umgekehrte (Fremdschlüsssel Course_FK in StundenplanTabelle) wäre aber genau so möglich.
Die SQL Abfrage für die Wochentage aller Kurse wäre dann etwa
select c.Name, s.Weekday from Stundenplan s, Course c
where c.Stundenplan_FK = s.Id
10. Datenbank Design
23
Abbilden einer 1:n Assoziation
Dozent
Id
Name
Address
1
Josef Muster
…
2
Course
Id
Name Dozent_FK … …
1
Java
1
2
Bei einer 1:n Assoziation wird der Fremdschlüssel in die Klasse
eingefügt, welche die Multiplizität 1 hat. Hier: jeder Kurs hat
(nur) einen Dozenten, Dozenten können mehrere Kurs halten.
10. Datenbank Design
24
Abbilden einer n:m Assoziation
Course
Teilnehmer
Id
Name
1
Hans Muster
DateOfBirth …
Id
Name … …
1
Java
2
XML
2
Course_ Teilnehmer Course_FK Teilnehmer_FK
2
Assoziations-Tabelle
1
Zum Abbilden einer n:m Assoziation benötigen wir eine
zusätzliche Tabelle für die Tupel der Fremdschlüssel.
Course_Teilnehmer ist eine sogenannte Assoziations-Tabelle
(associative table).
10. Datenbank Design
25
Abbilden eines Koordinators
Dozent
Course
Teilnehmer
Id
Name
1
Hans Muster
DateOfBirth …
Id
Name … …
1
Java
2
XML
2
Registrierung
Course_FK Teilnehmer_FK
2
1
State
active
Die Koordinator-Klasse verbindet (indirekt) zwei Klassen durch
eine n:m Assoziation, trägt aber zusätzliche Informationen (hier
ein state-Attribut). Auch diese wird mit einer
Assoziationstabelle (mit zusätzlichen Spalten für die
Koordinator-Attribute) realisiert.
10. Datenbank Design
26
Reflexive Assoziation
Bsp: Stückliste
Folder
Id
Name Date
Folder_FK … …
1
root
10.1.2008
null
2
usr
1.12.2008
1
3
bin
1.12.2008
1
… …
Zum Abbilden einer reflexiven (rekursiven) Assoziation kann ein
Fremdschlüssel benutzt werden, welcher auf den
Primärschlüssel der eigenen Tabelle zeigt. Dieser ist für die
Root-Elemente der Hierarchie leer (null).
10. Datenbank Design
27
Herunterladen