Das relationale Datenbankmodell

Transcription

Das relationale Datenbankmodell
Das relationale Datenbankmodell
Udo Kelter
10.11.2008
Zusammenfassung dieses Lehrmoduls
Das relationale Datenbankmodell besteht im Kern aus Operationen
wie der Selektion, der Projektion und diversen Verbundoperationen.
Diese werden in der relationalen Algebra zusammengefaßt. Dieses
Lehrmodul stellt diese Operationen vor. Vorab wird die statische
Struktur einer relationalen Datenbank definiert. Aus der Vielzahl
denkbarer Integritätsbedingungen werden hier nur Schlüsselbegriffe
behandelt; wir unterscheiden u.a. Identifikations-, Super-, Fremd-,
Primär- und Sekundärschlüssel.
Vorausgesetzte Lehrmodule:
obligatorisch:
– Datenverwaltungssysteme
Stoffumfang in Vorlesungsdoppelstunden:
1
2.0
Das relationale Datenbankmodell
2
Inhaltsverzeichnis
1 Datenbankmodelle vs. reale Datenbanksprachen
3
2 Die
2.1
2.2
2.3
4
4
6
8
3 Die
3.1
3.2
3.3
3.4
3.5
3.6
Struktur relationaler Datenbanken
Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . .
relationale Algebra
Die Selektion . . . . . . . . . . . . . .
Die Projektion . . . . . . . . . . . . .
Die Mengenoperationen . . . . . . . .
Die Umbenennung . . . . . . . . . . .
Das Kreuzprodukt . . . . . . . . . . .
Verbundoperationen . . . . . . . . . .
3.6.1 Beispiel . . . . . . . . . . . . .
3.6.2 Der natürliche Verbund . . . .
3.6.3 Der Theta-Verbund . . . . . .
3.6.4 Äußere Verbunde . . . . . . . .
3.7 Die Division . . . . . . . . . . . . . . .
3.8 Relationale Vollständigkeit . . . . . . .
3.9 Ausdrücke in der relationalen Algebra
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Schlüssel
4.1 Superschlüssel und Identifizierungsschlüssel . . . . . . .
4.2 Primärschlüssel . . . . . . . . . . . . . . . . . . . . . . .
4.3 Fremdschlüssel . . . . . . . . . . . . . . . . . . . . . . .
4.4 Kriterien für die Festlegung von IdentifizierungsPrimärschlüsseln . . . . . . . . . . . . . . . . . . . . . .
4.5 Weitere Schlüsselbegriffe . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
und
. . .
. . .
Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
11
12
13
14
16
16
18
22
23
23
27
28
29
30
32
33
34
36
37
37
38
c
2008
Udo Kelter
Stand: 10.11.2008
Dieser Text darf für nichtkommerzielle Nutzungen als Ganzes und unverändert in elektronischer oder
gedruckter Form beliebig weitergegeben werden und in WWW-Seiten, CDs und Datenbanken aufgenommen werden. Jede andere Nutzung, insb. die Veränderung und Überführung in andere Formate, bedarf
der expliziten Genehmigung. Die jeweils aktuellste Version ist über http://kltr.de erreichbar.
Das relationale Datenbankmodell
3
Das relationale Datenbankmodell ist eines der drei “konventionellen”
Datenbankmodelle und, gemessen am Entwicklungstempo der Informatik, schon uralt. Es geht auf Arbeiten von E.F. Codd am IBM San
Jose Research Laboratory [Co70] zurück. Seine Entwicklung wurde
maßgeblich von mehreren Prototypen relationaler DBMS beeinflußt,
namentlich dem System R am IBM San Jose Research Laboratory, Ingres an der University of California at Berkeley und Query-by-Example
am IBM T.J. Watson Research Center.
Im Laufe der Jahre wurden sehr umfangreiche formale Grundlagen
des relationalen Datenbankmodells entwickelt, ferner wurden vielfältige Erweiterungen der ursprünglichen Konzepte vorgeschlagen.
In der Praxis ist das relationale Datenbankmodell heute dominierend. Eine Vielzahl kommerzieller oder kostenloser relationaler DBMS
ist verfügbar.
1
Datenbankmodelle vs. reale Datenbanksprachen
Das relationale Datenbankmodell legt zunächst nur zentrale, grundlegende Konzepte fest (s. Begriff Datenbankmodell in [DVS]), nämlich
die Struktur einer Datenbank und lesende Operationen auf dieser
Struktur. Ein praktisch benutzbares System muß zusätzlich viele technische Details festlegen, angefangen bei der Syntax entsprechender
Sprachen und Bedienschnittstellen. Zum Vergleich: das Konzept einer
while-Schleife wird von allen normalen imperativen Programmiersprachen unterstützt, die konkrete Syntax und technische Details können
ganz erheblich differieren (for (..,..,..) { .. } in C; WHILE ...
BEGIN ... END in Modula-2). Neben den Abfragen und Datenänderungen müssen außerdem Funktionen bzw. Sprachkonstrukte zur Definition konzeptueller und interner Schemata, Rechteverwaltung, Administration usw. angeboten werden; das relationale Datenbankmodell
legt diese Bereiche nicht fest. Ähnlich wie Programmiersprachen sind
daher die konkreten Abfragesprachen für relationale Systeme äußerlich sehr verschieden und differieren auch außerhalb der grundlegenden
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
4
Konzepte in vielen technischen Details.
Für die Darstellung der grundlegenden Konzepte braucht man
natürlich dennoch Notationen, also eine Sprache. Die relationale Algebra und die relationalen Kalküle kann man in diesem Sinne als Sprachen ansehen, die nur den Kern des relationalen Datenbankmodells
abdecken und von jeglichem störenden Ballast befreit sind.
2
2.1
Die Struktur relationaler Datenbanken
Tabellen
Die statische Struktur einer relationalen Datenbank kann man informell wie folgt definieren (eine präzisere Definition folgt später):
1. Eine relationale Datenbank besteht aus mehreren Tabellen. Jede
Tabelle hat einen eindeutigen Namen.
2. Eine Tabelle hat eine Menge von Spalten.
3. Eine Spalte hat einen eindeutigen Namen, der im Tabellenkopf
steht, und einen zugeordneten Wertebereich. Statt von einer Spalte reden wir auch von einem Attribut.
4. Der Rumpf (oder “Inhalt”) einer Tabelle enthält beliebig viele Zeilen; jede Zeile enthält in jeder Spalte einen Wert entsprechend dem
Wertebereich der Spalte.
Tabelle: kunden
Kundennummer Kundenname
177177
Meier, Anne
177180
Büdenbender, Christa
185432
Stötzel, Gyula
167425
Schneider, Peter
171876
Litt, Michael
Wohnort
Weidenau
Siegen
Siegen
Netphen
Siegen
Kreditlimit
2000.00
9000.00
4000.00
14000.00
0.00
Abbildung 1: Beispieltabelle
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
5
Als Beispiel betrachten wir eine Tabelle kunden , in der Daten über
die Kunden eines Unternehmens verwaltet sein mögen (s. Bild 1). Die
Spalte Kreditlimit gibt an, wieviele Waren dem Kunden auf Kredit
geliefert werden. Der Sinn der restlichen Spalten ist offensichtlich. Die
Wertebereiche der Spalten sind (von links nach rechts): 1. ganze Zahl,
2. Text, 3. Text, 4. reelle Zahl. Über Längenbeschränkungen der Texte
oder die Genauigkeit der Zahlen machen wir uns an dieser Stelle keine
Gedanken.
Eine Zeile repräsentiert oft eine Entität in der realen Welt, in unserem Beispiel repräsentiert jede Zeile einen Kunden. Wenn die Tabelle
zwei völlig gleiche Zeilen enthalten würde, wäre der gleiche Sachverhalt
doppelt repräsentiert; dies wäre sinnlos, Duplikate von Zeilen werden
daher nicht erlaubt.
Die Spalten enthalten die Beschreibungsmerkmale der repräsentierten Entität. Interessant ist hier die Beobachtung, daß die Reihenfolge
der Spalten unwesentlich ist, die folgende Tabelle ist zu der vorstehenden offenbar äquivalent:
Tabelle: kunden
Wohnort
Kundennummer
Weidenau 177177
Siegen
177180
...
...
Kundenname
Meier, Anne
Büdenbender, Christa
...
Kreditlimit
2000.00
9000.00
...
Eine Zeile können wir daher auch als eine Menge von Attributzuweisungen auffassen, z.B. die erste Zeile als:
Kundennummer = 177177; Wohnort = Weidenau; Kundenname =
”Meier, Anne”; Kreditlimit = 2000.00
Während die Reihenfolge der Attribute aus einer konzeptuellen
Sichtweise irrelevant ist, ist sie für die physische Speicherung i.a. relevant. Beide Sichtweisen müssen aber strikt getrennt werden; Datenbankmodelle definieren nur konzeptuelle Aspekte, die physische Speicherung bleibt hier völlig außer Betracht.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
2.2
6
Relationen
Die Bezeichnung “relational” stammt von mathematischen Begriff einer Relation ab. Eine Relation ist in der Mathematik bekanntlich
definiert als Teilmenge des Kreuzprodukts mehrerer Mengen, i.a.:
R ⊆ D1 × D2 × . . . × Dn
Ein Element einer Relation nennt man Tupel. Den Inhalt der letzten
Tabelle könnte man offenbar als folgende Relation ansehen:
kunden ⊆ string × integer × string × real
Tabellen werden oft als Relationen bezeichnet und umgekehrt, es
gibt aber einen signifikanten Unterschied: Relationen haben kein Äquivalent zum Tabellenkopf. Die “Spalten” einer Relation haben keinen
Namen, sie sind nur anhand ihrer Position benennbar, und ihre Bedeutung muß durch eine separate Definition angegeben werden. Letzteres
leistet ein Relationentyp.
Ein Relationentyp (auch als Relationenschema oder Relationenformat bezeichnet) besteht aus:
– einem Namen, der innerhalb einer Datenbank eindeutig ist
– einer Folge von Attributdefinitionen
Notieren werden wir Relationentypen nach folgendem Muster:
Relationentypname = ( . . . , Attributname, . . . )
wenn die Wertebereiche der Attribute schon anderweitig bekannt sind
oder im Moment nicht interessieren, und als
Relationentypname = ( . . . , Attributname: Wertebereich; . . . )
wenn die Wertebereiche angegeben werden sollen. Als Wertebereiche
der Attribute sind nur elementare Datentypen wie integer, real, date,
string usw. zugelassen, nicht hingegen strukturierte Datentypen wie
Arrays, Tupel, Mengen usw. oder gar Relationen1 .
Unsere erste Version der Kundentabelle führt also zu folgendem
Relationentyp:
1
In erweiterten relationalen Modellen, die wir hier nicht behandeln, können Attribute dagegen strukturierte Typen haben.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
7
Kunden = ( Kundennummer: integer;
Kundenname: string;
Wohnort: string;
Kreditlimit: real )
Wir werden einen Relationentyp oft vereinfachend als Menge (und
nicht Folge) von Attributen ansehen und die Schreibweisen A ∈ R bzw.
R1 ⊆ R2 benutzen, um darzustellen, daß das Attribut A im Relationentyp R vorkommt bzw. daß im Relationentyp R1 nur Attribute aus
dem Relationentyp R2 vorkommen.
Da wir hier den Begriff Typ gebrauchen, sei ein Vergleich mit
den Typen in Programmiersprachen gestattet: ein Relationentyp entspricht in etwa einem Datentyp, der als Menge von Objekten (oder
Records) mit den Attributen gemäß dem Relationentyp definiert ist.
Eine Relation kann man in der Denkwelt von Programmiersprachen
als Variable dieses Typs ansehen.
In Datenbanken ist die strikte Trennung zwischen Typ und Variable wenig sinnvoll, weil es zu jedem Relationentyp immer nur eine
Relation gibt. Daher werden dort immer gleich Relationen definiert,
ihr Typ wird nur implizit mitdefiniert und hat keinen Namen. Für die
Erklärung des relationalen Datenbankmodells werden wir allerdings
wiederholt Relationentypen benötigen, so daß wir auf diesen Begriff
nicht verzichten können.
Bzgl. der Schreibweisen werden wir die Konvention einhalten,
– Namen von Relationen klein zu schreiben
– Namen von Relationentypen und Attributmengen groß zu schreiben
Wenn wir festlegen, daß eine Relation r von Relationentyp R sein
soll, ist wegen des Rückgriffs auf den mathematischen Relationsbegriff
implizit klar,
– daß alle Tupel von r insofern korrekt sind, daß die Werte der einzelnen Attribute aus den passenden Wertebereichen stammen, und
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
8
– daß keine Tupel in r doppelt vorhanden sind (eine Relation ist eine
Menge und keine Multimenge)2 .
Wir werden i.f. Tabellen als Darstellung von Relationen benutzen
und die beiden Begriffe in diesem Sinne synonym verwenden.
2.3
Integritätsbedingungen
Es gibt sehr viele Arten, Integritätsbedingungen in relationalen Datenbanken zu formulieren; es ist ein bißchen Geschmackssache, wieviele davon man zum “Kern” des relationalen Datenbankmodells zählt.
Man kann die Integritätsbedingungen grob wie folgt einteilen:
– Dynamische Integritätsbedingungen schränken die erlaubten
Zustandsübergänge bei Änderungen der Daten ein. Beispielsweise könnte bei einem Attribut Familienstand der Übergang von
verheiratet nach ledig verboten sein. Dynamische Integritätsbedingungen werden wir nicht weiter betrachten.
– Statische Integritätsbedingungen schränken den erlaubten Zustand einer Datenbank weiter ein. Das bekannteste Beispiel sind
(Identifizierungs-) Schlüssel.
Integritätsbedingungen können allenfalls bei Änderungen an den
Daten verletzt werden. Ein DBMS muß daher bei allen ändernden
Operationen entsprechende Prüfungen durchführen und die Operation
ggf. mit einem Fehlercode zurückweisen.
Lesende Operationen sind dagegen überhaupt nicht von Integritätsbedingungen betroffen: diese Operationen arbeiten auf beliebigen Datenbankinhalten, also erst recht auf der Teilmenge der “korrekten”
Datenbankinhalte. Aus diesem Grunde sind Integritätsbedingungen
für die nachfolgende Diskussion der relationalen Algebra nicht erforderlich.
2
Technisch wäre es kein Problem, auch Multimengen zuzulassen. In der Praxis erspart man sich aus Performancegründen oft die Eliminierung von Duplikaten.
Wie schon erwähnt sind aber Duplikate von Tupeln i.a. nicht sinnvoll.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
3
9
Die relationale Algebra
Der Begriff Algebra stammt aus der Mathematik. Eine Algebra ist
definiert durch eine Wertemenge3 und i.a. mehrere Funktionen, die
mit Werten dieser Menge arbeiten. Beispiele für Algebren sind die
reellen Zahlen oder Matrizen zusammen mit den diversen Rechenoperationen. Die Funktionen können beliebig viele Argumente haben und
liefern stets einen Wert aus der Wertemenge zurück. Daher kann man
Funktionsaufrufe schachteln und Ausdrücke konstruieren.
Die relationale Algebra ist eine ganz normale Algebra im vorstehenden Sinn. Als Werte benutzen wir beliebige Relationen. Daß
die entstehende Wertemenge recht groß ist und ganze Relationen als
Argumente oder Resultate etwas schwergewichtig erscheinen mögen,
braucht uns nicht weiter zu stören.
Die relationale Algebra enthält keine Operationen, mit denen man
Relationen erzeugen bzw. löschen und in einer Relation Tupel einfügen,
löschen oder verändern kann. Derartige Operationen müssen in realen Sprachen natürlich vorhanden sein; die relationale Algebra konzentriert sich ausschließlich auf die “lesenden” Operationen und die
Frage, welche Daten man aus einer vorhandenen Datenbank extrahieren kann. Es wird vorausgesetzt, daß die Relationen der Datenbank
schon irgendwie existieren und mit Tupeln gefüllt worden sind. Analog gilt dies für die Relationentypen, also das konzeptuelle Schema der
Datenbank.
Die Operationen der relationalen Algebra entsprechen nicht unzufällig den typischen Aufgaben, die beim Umgang mit Datenbanken
in der Praxis auftreten. Wir stellen sie anschließend einzeln vor.
3.1
Die Selektion
Die Selektion erlaubt es, aus einer vorhandenen Relation r bestimmte
Tupel zu selektieren. Zurückgeliefert wird eine neue Relation, die nur
3
Dies gilt für eine einsortige Algebra. Mehrsortige Algebren arbeiten mit mehreren Wertemengen, die hier als Sorten bezeichnet werden.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
10
die Tupel enthält, die das Selektionskriterium erfüllen. Notiert wird
die Selektion üblicherweise in der Form
σBedingung ( r )
Der griechische Buchstabe sigma (σ) erinnert an das S im Wort Selektion. Das Ergebnis einer Selektion hat den gleichen Relationentyp wie
die Argumentrelation.
Als Beispiel betrachten wir die Menge der Kunden aus der Relation
kunden in Bild 1, deren Kreditlimit größer als 5000 DM ist. Folgender
Ausdruck liefert eine Relation mit genau diesen Kunden:
σKreditlimit>5000.00 ( kunden )
Die entstehende Tabelle ist
Tabelle: σKreditlimit>5000.00 ( kunden )
Kundennummer Kundenname
177180
Büdenbender, Christa
167425
Schneider, Peter
Wohnort
Siegen
Netphen
Kreditlimit
9000.00
14000.00
Im vorstehenden Beispiel trat nur eine sehr einfache Selektionsbedingung auf, die den Wert eines Attributs mit einer Konstanten
verglich. Neben > sind auch die Vergleichsoperatoren <, ≤, ≥, = und
6= möglich. Ferner können so geformte elementare Bedingungen mit
den Booleschen Operatoren (∧, ∨, ¬) und Klammern zu Ausdrücken
zusammengesetzt werden. Die Bedingungen dürfen sich natürlich nur
auf solche Attribute beziehen, die im Typ der Argumentrelation vorkommen.
Übungsaufgabe: Zeigen Sie, daß die und-Verküpfung von zwei Bedingungen durch eine Hintereinanderschaltung von zwei Selektionen
mit den einzelnen Bedingungen ersetzt werden kann, daß also für eine
beliebige Relation r und Bedingungen B1 und B2 gilt:
σB1∧B2 ( r ) = σB1 (σB2 ( r )) = σB2 (σB1 ( r ))
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
3.2
11
Die Projektion
Die Projektion löst das Problem, überflüssige Attribute in den Tupeln
einer Relation zu entfernen. Man projiziert eine Relation auf die Attribute, die man noch beibehalten möchte. Notiert wird die Projektion
üblicherweise in der Form
πAttributmenge ( r )
Der griechische Buchstabe pi (π) erinnert an das Wort Projektion.
Als Beispiel betrachten wir wieder die Relation kunden in Bild
1. Wir möchten jetzt nur noch Kundenname und Wohnort haben, die
beiden anderen Attribute bzw. Spalten sollen “wegprojiziert” werden.
Dies erreichen wir mit folgender Ausdruck:
πKundenname,Wohnort ( kunden )
Die entstehende Tabelle ist:
Tabelle: πKundenname,Wohnort ( kunden )
Kundenname
Wohnort
Meier, Anne
Weidenau
Büdenbender, Christa Siegen
Stötzel, Gyula
Siegen
Schneider, Peter
Netphen
Litt, Michael
Siegen
Das Ergebnis einer Projektion hat i.a. nicht den gleichen Relationentyp wie die Argumentrelation4 . Der Typ der Ergebnisrelation hat
genau die in der Projektion angegebenen Attribute.
Für die formale Definition der Projektion benötigen wir folgende
neue Notation: Sei r eine Relation mit Relationentyp R , t ein Tupel
in r , also t ∈ r , A ⊆ R eine nichtleere Teilmenge der Attribute in
R . Dann bezeichnet t[A] das Tupel, das die Attributwerte für die Attribute in A gemäß t enthält. Mit dieser Notation können wir das
Ergebnis einer Projektion wie folgt definieren:
4
Eine Ausnahme ist lediglich der wenig sinnvolle Sonderfall, daß man auf alle
Attribute der Argumentrelation projiziert.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
12
πA (r) = { t[A] | t ∈ r }
Im vorigen Beispiel hat die Ergebnisrelation genausoviele Tupel
wie die Argumentrelation. Dies ist nicht immer der Fall, wie folgendes
Beispiel zeigt:
πWohnort ( kunden )
Die entstehende Tabelle ist:
Tabelle: πWohnort ( kunden )
Wohnort
Weidenau
Siegen
Netphen
Sie hat nur noch 3 Tupel, denn in der Spalte Wohnort treten nur
3 verschiedene Werte auf. Man betrachte noch einmal die obige Definition der Projektion: πA (r) ist als Menge, nicht als Multimenge
definiert. Zwei verschiedene Tupel t1 , t2 ∈ R , t1 6= t2 , können nach der
Projektion gleich sein und führen daher nur zu einem einzigen Tupel
in der Ergebnisrelation.
Übungsaufgabe: Seien P , Q und R Relationentypen, r eine Relation vom Typ R . Zeigen Sie, daß folgendes gilt:
P ⊆ Q ⊆ R
3.3
⇒
π P (π Q ( r )) = π P ( r )
Die Mengenoperationen
Da Relationen als Mengen von Tupeln definiert sind, sind automatisch
alle Mengenoperationen auf Relationen anwendbar. Voraussetzung ist
natürlich, daß die beteiligten Relationen den gleichen Relationentyp
haben.
Wenn also r1 und r2 Relation vom Typ R sind, dann ist
r1 ∪ r2 die Vereinigung
r1 ∩ r2 der Schnitt
r1 − r2 die Differenz
von r1 und r2 . Das Ergebnis hat wieder den Relationentyp R .
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
13
Als Beispiel betrachten wir wieder die Relation kunden in Bild 1.
Wir suchen jetzt die Kunden, die in Weidenau wohnen oder ein Kreditlimit > 10000 haben. Hierzu definieren wir die Relation k1 wie
folgt:
k1 = σWohnort=“W eidenau′′ ( kunden ) ∪ σKreditlimit=10000 ( kunden )
Das Ergebnis ist:
Tabelle: k1
Kundennummer
177177
167425
Kundenname
Meier, Anne
Schneider, Peter
Wohnort
Weidenau
Netphen
Kreditlimit
2000.00
14000.00
Wir hätten dieses Ergebnis natürlich auch mit der folgenden Definition erzielen können;
k1 = σWohnort=“W eidenau′′ ∨ Kreditlimit=10000 ( kunden )
Übungsaufgabe: Zeigen Sie, daß die oder-Verküpfung von zwei Bedingungen durch eine Vereinigung von zwei Selektionen mit den einzelnen Bedingungen ersetzt werden kann, daß also für eine beliebige
Relation r und Bedingungen B1 und B2 gilt:
σB1∨B2 ( r ) = σB1 ( r ) ∪ σB2 ( r )
3.4
Die Umbenennung
Aus technischen Gründen benötigen wir für die folgenden Operationen
eine Hilfsoperation, mit der man Attribute umbenennen kann. Sei r
eine Relation vom Typ R und A ∈ R , B ∈
/ R . Dann ist
ρA →B (r )
eine Relation mit dem gleichen “Inhalt” wie r , aber einem Typ, bei
den das Attribut A in B umbenannt worden ist5 . Der Buchstabe rho
5
Diese Definition ist formal nicht sauber, sollte aber dennoch präzise verständlich
sein. Eine formal saubere Definition bedingt einen wesentlich höheren notationellen
Aufwand; Tupel müssen dann als Abbildungen von Mengen von Attributnamen in
Mengen von Wertemengen definiert werden (wie z.B. in [Vo99]). Da dieser nota-
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
14
(ρ) erinnert an rename. Der Typ der Ergebnisrelation ist, als Attributmenge aufgefaßt, gleich ( R − { A }) ∪ { B }.
Wir wenden die Umbenennungsoperation auch auf Relationennamen an. Sei r eine Relation vom Typ R , s ein Name, der bisher keine
Relation benennt, dann ist
ρs (r )
eine Relation namens s mit Typ R und dem gleichen Inhalt wie r .
3.5
Das Kreuzprodukt
Eine sehr häufige praktische Aufgabe besteht darin, Tupel aus verschiedenen Relationen zu neuen Tupeln zu “verbinden”; Beispiele werden wir erst später besprechen.
Das Verbinden von Einzelelementen zu einem Tupel ist durch das
mathematische Kreuzprodukt hinlänglich bekannt und wurde bereits
beim Relationsbegriff ausgenutzt. Es liegt nahe, statt einzelner Wertebereiche auch ganze Relationen durch das mathematische Kreuzprodukt zu verbinden. Seien also r1 , . . . , rn Relationen, dann können
wir folgendes mathematische Kreuzprodukt bilden:
r1 × ... × rn
Dies ist aber leider keine Relation im Sinne der relationalen Algebra:
Ein Tupel in diesem Kreuzprodukt hat die Form
(t1 , . . . , tn )
wobei ti ein Tupel aus Ri ist; als Elemente relationaler Tupel sind
aber nur elementare Datentypen zugelassen. Wir hätten auch ein Problem, den Relationentyp dieses Kreuzprodukts zu benennen.
Ein Lösungsansatz besteht darin, die Tupel ti , ..., tn zu “konkatenieren”, also ein einziges neues Tupel zu bilden. Diese Idee funktioniert aber nur dann, wenn keine Attributnamen doppelt auftreten, also wenn die Typen der beteiligten Relationen paarweise disjunkt sind.
tionelle Aufwand keinen signifikanten Gewinn an Präzision bringt, andererseits der
intuitiven Verständlichkeit abträglich ist, wird er hier vermieden.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
15
Unter dieser Annahme können wir das relationale Kreuzprodukt
folgendermaßen definieren:
r 1 × . . . × r n = { < t1 | . . . | tn > | t i ∈ r i }
Darin ist < t1 | . . . | tn > die Konkatenation der einzelnen Tupel. Der
Typ des Kreuzprodukts ist die Vereinigung der Ri , 1 ≤ i ≤ n.
Die Bildung eines Kreuzprodukts veranschaulicht Bild 2 am Beispiel zweier Relationen, die 3 bzw. 2 Tupel enthalten; der Aufbau der
Tupel interessiert hier nicht, der Inhalt ist mit “aa”, “bb” usw. nur
angedeutet.
aa
bb
cc
aa
aa
X
xx
yy
=
bb
bb
cc
cc
xx
yy
xx
yy
xx
yy
Abbildung 2: Beispiel eines Kreuzprodukts
Da jedes Tupel der ersten Relation mit jedem Tupel der zweiten
kombiniert wird, gilt folgende Formel:
| r×s |=| r | ∗| s |
worin | r | die Anzahl ihrer Tupel einer Relation r bezeichnet.
Die “Länge” der Ergebnistupel (gemessen in der Zahl der Attribute) ist gleich der Summe der Längen der Argumenttupel. Bei der
Kreuzproduktbildung entstehen also sehr viele und lange Tupel6 .
Wir hatten unser relationales Kreuzprodukt bisher nur unter der
Annahme definieren können, daß die Typen der beteiligten Relationen paarweise disjunkt sind; diese Annahme ist natürlich nicht immer
6
Deshalb wird das Kreuzprodukt in der Praxis auch fast nie wirklich berechnet.
Im Rahmen der Optimierung werden Kreuzprodukte, die in einer vorgegebenen
Abfrage auftreten, praktisch immer zu Verbundoperationen umgeformt; letztere
lassen sich meist effizient berechnen. Mit relationalen Abfragesprachen kann man
(bzw. sollte man oft sogar) Abfragen formulieren, die auf den ersten Blick extrem
ineffizient aussehen. Wir gehen hierauf in Abschnitt 3.9 noch näher ein.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
16
erfüllt. Die Lösung besteht darin, die Attribute, die in mehr als einer
Relation auftreten, automatisch umzubenennen. Sei A ein solches Attribut; dann wird A in jeder Relation ri , in deren Typ A vorkommt, zu
ri . A umbenannt, d.h. wir führen innerhalb der Operationsausführung
und vor der eigentlichen Bildung des Kreuzprodukts die Umbenennung
ρ A → r i. A ( r i)
durch. Unter der Annahme, daß die Namen aller ri verschieden sind,
sind anschließend alle Attributnamen eindeutig.
Natürlich können die betroffenen Attribute auch explizit vor der
Bildung des Kreuzprodukts umbenannt werden, wenn die automatische (implizite) Umbenennung im Einzelfall unpassend ist.
Gelegentlich will man auch das Kreuzprodukt einer Relation mit
sich selbst bilden. Dies verbieten wir hier und verlangen, daß in solchen
Fällen zunächst explizit eine der Relationen umbenannt wird, so daß
letztlich alle involvierten Relationen eindeutige Namen bekommen.
3.6
3.6.1
Verbundoperationen
Beispiel
Wir betrachten nun das schon angekündigte Beispiel, bei dem Daten,
die in verschiedenen Relationen stehen, zusammenzuführen sind. Wir
führen hierzu eine weitere Relation lieferungen ein, die folgenden
Relationentyp hat:
Lieferungen = ( Datum: date;
Wert: real;
Kundennummer: integer;
Lager: string;
Lieferadresse: string )
Ein Tupel dieses Typs zeigt an, daß am angegebenen Datum Waren im
angegebenen Gesamtwert an den Kunden, der durch die Kundennummer
identifiziert wird, geliefert worden sind, und zwar vom angegebenen
Lager aus an die angegebene Lieferadresse. Der Inhalt der Relation
lieferungen sei wie in Bild 3 angegeben.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
Tabelle: lieferungen
Datum
Wert
Kundennummer
00-08-12 2730.00
167425
00-08-14
427.50
167425
00-08-02 1233.00
171876
17
Lager
Mitte
Nord
West
Lieferadresse
Bahnhofstr. 5
Luisenstr. 13
Bergstr. 33
Abbildung 3: Beispieltabelle für Lieferungen
Wir wollen nun eine Relation erzeugen (und anzeigen oder ausdrucken), in der für alle Lieferungen Datum, Wert und der Name des
Kunden angezeigt werden. Den Namen des Kunden mit einer gegebenen Kundennummer können wir anhand der Relation kunden herausfinden. Wir können das gesuchte Resultat in mehreren Schritten wie
folgt konstruieren:
1. Wir müssen Daten aus verschiedenen Relationen in einzelnen Tupeln zusammenbringen. Der einzige Operator, der dies leistet, ist
das relationale Kreuzprodukt. Wir bilden also zuerst das Kreuzprodukt von lieferungen und kunden :
r1 = lieferungen × kunden
Dieser erste Schritt kann im Prinzip ein extrem großes Zwischenergebnis erzeugen. Dies braucht uns aber nicht zu stören, wie wir
später sehen werden, wird dieses Zwischenergebnis infolge interner
Optimierungen nicht wirklich erzeugt.
Die beiden Relationen haben das Attribut Kundennummer gemeinsam. Gemäß der definierten Funktionsweise des Kreuzprodukts ist dieses Attribut automatisch in lieferungen.Kundennummer bzw. kunden.Kundennummer umbenannt worden.
2. In r1 ist jedes Lieferungstupel mit jedem Kundentupel kombiniert worden. Die meisten dieser Kombinationen sind für unseren
Zweck unsinnig und daher überflüssig; wir interessieren uns nur für
die Kombinationen, bei denen lieferungen.Kundennummer und
kunden.Kundennummer den gleichen Wert haben, denn nur hier
sind die richtigen Kundendaten und Lieferungsdaten kombiniert.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
18
Wir bilden also
r2 = σ lieferungen.Kundennummer = kunden.Kundennummer ( r1 )
3. In r2 sind die Spalten lieferungen.Kundennummer und kunden.Kundennummer identisch: dies war gerade die Selektionsbedingung. Eine der beiden Spalten ist offensichtlich entbehrlich und
kann entfernt werden. Der lange Attributname der verbliebenen
Spalte ist dann nicht mehr notwendig, wir können einfacher wieder
den ursprünglichen Namen verwenden. Wir gehen nun so vor, daß
wir zuerst eine der Spalten in den ursprünglichen Namen umbenennen:
r3 = ρlieferungen.Kundennummer→Kundennummer ( r2 )
4. Die überflüssige Spalte mit dem langen Namen können wir nun
entfernen, indem wir einfach auf die Vereinigung der beiden Relationentypen projizieren:
r4 = πLieferungen ∪ Kunden ( r3 )
5. Zum Schluß entfernen wir noch die nicht benötigten Attribute; gefragt war nur nach dem Datum, Wert und Kundennamen:
r5 = πDatum,Wert,Kundenname ( r4 )
Unser Endresultat sieht folgendermaßen aus:
Tabelle: r5
Datum
Wert
00-08-12 2730.00
00-08-14
427.50
00-08-02 1233.00
3.6.2
Kundenname
Schneider, Peter
Schneider, Peter
Litt, Michael
Der natürliche Verbund
Das vorige Beispiel weist eine sehr häufig auftretende Problemstruktur auf: die Werte in der Spalte Kundennummer in der Relation
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
19
lieferungen kann man als “Referenzen” auf Tupel in der Relation kunden ansehen7 . Unsere Absicht war es, zu jedem Tupel in
lieferungen die dort stehende Referenz auf ein Kundentupel zu verfolgen und Daten aus diesem Kundentupel hinten an das Lieferungstupel anzuhängen - so hätte man es auch von Hand gemacht (s. auch
Bild 4). Letztlich verbinden wir solche Paare von Lieferungstupel und
Kundentupel, die im gemeinsamen Attribut Kundennummer den gleichen Wert haben.
.....
177180 .....
.....
177180 .....
177180
1111
0000
0000
1111
1111
0000
0000
1111
Abbildung 4: Auflösung einer “Referenz”
Der natürliche Verbund (natural join) verallgemeinert diesen
Vorgang; er faßt die obigen Schritte 1 bis 4 zu einer einzigen Operation zusammen. Sie wird mit dem Zeichen 1 notiert. Mit Hilfe
des natürlichen Verbunds können wir das Beispiel in Abschnitt 3.6.1
wesentlich einfacher lösen, und zwar wie folgt:
πDatum,Wert,Kundenname ( lieferungen 1 kunden )
Definition: Gegeben seien zwei Relationen r und s mit den Relationentypen R bzw. S .
Sei V = R ∩ S die Menge der Verbundattribute. Es kann beliebig
viele Verbundattribute geben, i.a. ist also V = {v1 ,...,vn}.
Dann ist:
r 1 s = π R ∪ S (ρ r.V → V (σ r.V=s.V ( r × s )))
7
Die Denkweise in Referenzen unterstellt, daß die Kundennummern in der Relation kunden eindeutig sind, daß also eine bestimmte Kundennummer höchstens
einmal in der Spalte Kundennummer in der Relation kunden auftritt. Dies trifft in
der Praxis auf fast allen Verbundbildungen zu, ist aber nicht zwingend erforderlich.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
20
Die Schreibweise σ r.V=s.V ist eine Kurzform von
σr.v1 =s.v1 ∧ ... ∧ r.vn =s.vn
Es werden also nur solche Tupel verbunden, die in allen Verbundattributen übereinstimmen.
Die Schreibweise ρ r.V → V (...) ist eine Kurzform für
ρr.v1 →v1 (. . . (ρr.vn →vn (...)) . . .)
In dem Sonderfall, daß R und S disjunkt sind, also V die leere
Menge ist, ist im obigen Ausdruck die Selektionsbedingung leer, d.h.
die selektierten Tupel müssen keine Bedingung erfüllen, es wird also
nichts weggefiltert. Bei V = ∅ bilden auch die darauf folgende Projektion und die Umbenennung ihre Argumente identisch ab, der natürliche
Verbund verhält sich dann also wie das Kreuzprodukt.
Wie schon oben erwähnt ist es nicht zulässig, das Kreuzprodukt
einer Relation mit sich selbst zu bilden, stattdessen muß wenigstens
eine der Relationen vorher umbenannt werden. Dies gilt auch für den
natürlichen Verbund. Wenn man dies tut, also z.B.
r 1 ρs (r )
bildet, erhält man als Ergebnis genau r (s. folgende Übungsaufgaben), d.h. ein Verbund einer Relation mit sich selbst ist überflüssig.
Übungsaufgabe: Zeigen Sie, daß der natürliche Verbund eine kommutative Operation ist, d.h. für beliebige Relationen (oder besser gesagt Tabellen) r und s gilt:
r 1 s = s 1 r
Übungsaufgabe: Zeigen Sie, daß der natürliche Verbund eine assoziative Operation ist, d.h. für beliebige Relationen r , s und t gilt:
(r 1 s ) 1 t = r 1 (s 1 t )
Übungsaufgabe: Zeigen Sie, daß im Sonderfall R = S der Verbund
den Durchschnitt der beiden Relationen bildet, also:
R = S ⇒ r 1 s = r∩s
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
21
Übungsaufgabe: Berechnen Sie unter Nutzung des Ergebnisses der
vorigen Übungsaufgabe r 1 ρ s ( r ).
Verbundpartner. Eine sehr simpler Algorithmus zur Implementierung des Verbunds r 1 s besteht darin, alle Tupel t ∈ r zu durchlaufen, für jedes t dessen Verbundpartner in s zu suchen und pro
Verbundpartner u ein Ergebnistupel auszugeben, das Attributwerte
gemäß t und u enthält. Verbundpartner von t sind diejenigen Tupel
u ∈ s , für die gilt: u [V] = t [V] . Diese Menge können wir auch als
Abfrage formulieren:
σu[V ]=t[V ] ( s )
Häufige Denkfehler. Das obige Beispiel, in dem wir den Verbund
der Relationen lieferungen und kunden gebildet haben, enthält
Merkmale, die in der Praxis sehr häufig auftreten. Diese Merkmale
werden sehr leicht irrtümlich zu notwendigen Voraussetzungen erklärt
oder falsch interpretiert; die häufigsten Denkfehler in diesem Zusammenhang sind:
1. Denkfehler: Im Beispiel und in ca. 99 % aller praktischen Fälle
hat man genau ein Verbundattribut. Dies wird oft fälschlicherweise als Voraussetzung angesehen! Der Verbund ist für beliebig viele
Verbundattribute definiert, auch für V = ∅!
2. Denkfehler: Wenn keine Verbundattribute vorhanden sind, also
V = ∅, dann findet ein Tupel in r scheinbar keine Verbundpartner
in s , also ist r 1 s = ∅. Dies ist falsch.
Wenn V = ∅, dann ist die Menge der Verbundpartner von t,
wie oben definiert, σu[∅]=t[∅] ( s ). Darin verstehen wir u[∅] als “leeres Tupel mit 0 Attributen”. Offensichtlich ist damit die Bedingung u[∅] = t[∅] für jedes beliebige u erfüllt, d.h. in Wirklichkeit
sind für ein beliebiges t ∈ r alle u ∈ s Verbundpartner, und
r 1 s = r × s.
3. Denkfehler: Im obigen Beispiel und in fast allen praktischen Fällen
ist das Verbundattribut in einer der beiden Relationen eindeutig.
Dies haben wir auch unterstellt, als wir oben die Kundennummern
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
22
in der Relation lieferungen als “Referenzen” auf genau ein Tupel
in kunden interpretiert haben. Diese Eindeutigkeit ist aber nicht
notwendig. Wie schon bei der Definition des Begriffs Verbundpartner gesehen kann ein t ∈ r beliebig viele Verbundpartner in s
haben.
3.6.3
Der Theta-Verbund
Beim natürlichen Verbund wurden bei der Prüfung, ob ein Paar von
Tupeln verbunden werden soll,
– der Vergleichsoperator = benutzt, und
– es wurde jeweils das gleiche Attribut in beiden Tupeln für den Vergleich herangezogen.
Dies wird beim Θ- (Theta-) Verbund dahingehend verallgemeinert,
– daß irgendein Vergleichsoperator Θ ∈ {=, 6=, <, ≤, >, ≥} benutzt
wird und
– daß unterschiedliche Attribute in beiden Tupeln für den Vergleich
herangezogen werden.
Wenn r und s Relationen vom Typ R bzw. S sind und A ∈ R und B
∈ S Attribute mit gleichen Wertebereich, dann ist ein Theta-Verbund
wie folgt definiert:
r 1r.A Θ s.B s := σr.A Θ s.B ( r × s )
Man kann geteilter Meinung darüber sein, ob der Theta-Verbund viel
einbringt; eine wesentliche Ersparnis an Schreibarbeit und ein dementsprechender Gewinn an Übersichtlichkeit der Ausdrücke – die ein
großer Vorteil des natürlichen Verbundes sind – tritt hier jedenfalls
nicht ein.
Ein Gleichheitsverbund (equi-join) ist ein Theta-Verbund mit
dem Vergleichsoperator =.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
3.6.4
23
Äußere Verbunde
Wir betrachten noch einmal das Beispiel in Abschnitt 3.6.1 und nehmen an, in der Relation kunden sei das Tupel mit der Kundennummer
167425 gelöscht worden. Wenn wir jetzt wieder den Verbund
lieferungen 1 kunden
bilden, würden die beiden ersten Tupel in der Relation lieferungen
(s. Bild 3) keinen Verbundpartner mehr finden und dementsprechend
herausfallen. Dies ist aber oft nicht erwünscht. Wenn der Kundenname nicht ermittelt werden kann, sollte der Sachverhalt, daß der Wert
unbekannt ist, angezeigt werden, etwa in folgender Form:
Datum
Wert
00-08-12
00-08-14
00-08-02
2730.00
427.50
1233.00
Kundennummer
167425
167425
171876
Lieferadresse
Kundenname
Bahnhofstr. 5
Luisenstr. 13
Bergstr. 33
NULL
NULL
Litt, Michael
Der Text NULL soll einen Nullwert darstellen; dieser drückt aus,
daß der tatsächliche Attributwert unbekannt ist.
In der vorstehende Tabelle haben wir bei den Tupeln aus lieferungen (also dem linken Verbundargument), die keinen Verbundpartner gefunden haben, einen künstlichen Verbundpartner benutzt. Diese
Art von Verbund nennt man linken äußeren Verbund.
Analog wird beim rechten äußeren Verbund für Tupel des rechten Verbundarguments ggf. ein künstlicher Verbundpartner benutzt.
Der äußere Verbund ist die Vereinigung von linkem und rechtem
äußeren Verbund.
3.7
Die Division
Das Kreuzprodukt ist in gewisser Weise vergleichbar mit einer Multiplikation; im Kreuzprodukt r × s wird jedes Tupel aus r mit jedem
Tupel aus s kombiniert (s. auch Bild 2). Die relationale Division kann
man sich als eine Art inverse Operation zum Kreuzprodukt vorstellen.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
24
Hierzu betrachten wir das Beispiel in Bild 2 noch einmal genauer. Jedes der Tupel “aa”, “bb” und “cc” der linken Relation führt zu
einem eigenen Abschnitt im Ergebnis (in Bild 2 jeweils durch einen
kleinen Zwischenraum abgesetzt): die linken Hälften der Tupel eines
Abschnitts enthalten alle das gleiche, z.B. “aa”, die schattiert dargestellten rechten Hälften bilden eine Kopie der rechten Argumentrelation. Diese rechte Hälfte eines Abschnitts wiederholt sich wie ein
Stempelabdruck immer wieder.
Bei der Umkehrung der Kreuzproduktbildung suchen wir sozusagen nach Stempelabdrücken (s. Bild 5):
bb
bb
cc
cc
cc
xx
yy
xx
zz
xx
yy
zz
dd
xx
aa
aa
:
xx
yy
=
aa
cc
Abbildung 5: relationale Division
– Dividend ist eine Relation x vom Typ X ;
– Divisor ist eine Tupelmenge in einer Teilmenge der Spalten, aufgefaßt als Relation s vom Typ S (der “Stempel”)
– im Quotienten enthalten sind solche Tupel aus den restlichen Spalten von x , die mit allen Tupeln des Divisors kombiniert auftreten
Im Beispiel in Bild 5 besteht der Stempel aus den Tupeln “xx”
und “yy”. Für “aa” ist ein kompletter Stempelabdruck vorhanden,
für “bb” und “dd” nur ein unvollständiger, “bb” und “dd” sind daher
nicht im Ergebnis enthalten. Die Tupel “bb/xx” und “dd/xx” tragen
somit nicht zum Ergebnis bei, ebenfalls nicht das Tupel “bb/zz”, da
“zz” nicht im Divisor auftritt. Die relationale Division ähnelt insofern
der ganzzahligen Division ohne Rest. Wegen dieses Rests erhält man,
wenn man den Quotienten wieder mit dem Divisor multipliziert, i.a.
nur noch eine Teilmenge des ursprünglichen Dividenden:
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
25
(x ÷ s ) × s ⊆ x
Formal definiert ist die Division wie folgt: Gegeben sei
– eine Relation x vom Typ X (der Dividend)
– eine Relation s vom Typ S (der Divisor),
wobei ∅ =
6 S und S ⊂ X sein muß. Sei R = X − S . Dann ist
x ÷ s = { t | t ∈ π R ( x ) ∧ {t} × s ⊆ x }
Das Ergebnis ist eine Relation vom Typ R . Ein Tupel t ist genau
dann im Ergebnis enthalten, wenn {t} × s ⊆ x , also wenn für alle
t’ ∈ s gilt: < t | t′ > ∈ x . Bildlich gesprochen enthält das Ergebnis
diejenigen “linken Hälften” von Tupeln aus x , die mit allen “rechten
Hälften” aus s kombiniert in x auftreten.
Anwendungsbeispiel. Als Anwendungsbeispiel für die Division betrachten wir eine Relation konten , die Angaben zu den Konten einer
Bank enthält und die folgenden Relationentyp hat:
Konten = ( Kontonummer: integer;
Kundennummer: integer;
Filialenname: string )
Der Filialenname gibt den Namen der Filiale an, bei der das Konto geführt wird. Ein Kunde kann bei jeder Filiale eine oder mehrere
Konten haben. Gesucht sind nun die Kunden, die bei allen Filialen
wenigstens ein Konto haben. Für die Lösung unserer Aufgabe bilden
wir zunächst die Relation
kundeFiliale = πKundennummer,Filialenname ( konten )
Diese enthält genau dann ein Tupel < k, f >, wenn der Kunde k wenigstens ein Konto in der Filiale f hat. Die Liste aller Filialen erhalten
wir als eine 1-spaltige Tabelle mittels:
filialen = πFilialenname ( kundeFiliale )
Die Kunden, die in jeder Filiale ein Konto haben, erhalten wir nunmehr durch:
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
26
kundeFiliale ÷ filialen
Das Typische an unserem Anwendungsbeispiel war, daß ein allQuantor bei der Beschreibung der gesuchten Daten benutzt wurde
(“Kunden, die bei allen Filialen ein Konto haben”). Für derart spezifizierte Suchergebnisse kann man generell die Division einsetzen. In
den Selektionsbedingungen einer Selektion ist ein all-Quantor nicht
erlaubt; die Division bietet daher einen Ersatz. Ein Ersatz für den
Existenz-Quantor ist nicht notwendig, denn dieser wird implizit durch
die Selektion realisiert.
Berechnung von x ÷ s : x ÷ s kann direkt durch Ausnutzung der
Definition algorithmisch berechnet werden:
– Man bildet π R ( x ) als die Menge der Kandidaten, die im Ergebnis
enthalten sein könnten.
– Für jedes t ∈ π R ( x ) prüft man, ob {t} × s ⊆ x . Falls ja, kommt
t in die Ergebnismenge.
Die Division ist aber auch, was man spontan vielleicht nicht erwarten würde, zurückführbar auf die früher definierten Operationen. Zu
berechnen sei also x ÷ s . Sei R = X − S und
r = πR (x )
r enthält alle “Kandidaten”, die im Ergebnis sein könnten. r ist i.a.
eine Obermenge von x ÷ s , denn r kann Tupel enthalten, für die
{t} × s ⊆ x nicht gilt. Um diese Tupel (“durchgefallene Kandidaten”) zu finden, benutzen wir einen Trick: Wir bilden zunächst die
Relation r × s . Sei nun
inv = ( r × s ) − x
inv ist die Invertierung von x in r × s . Wir betrachten den Inhalt
von inv an einem Auszug unseres Beispiels aus Bild 5. Wir können
hier 2 Fälle unterscheiden, die in Bild 6 veranschaulicht sind:
1. Für den Kandidaten t = “aa” sind alle Kombinationen mit den
Tupels des Divisors in x vorhanden und es gilt: {t} × s ⊆ x .
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
(r x s)
aa
aa
bb
bb
xx
yy
xx
yy
27
x
(r x s) − x
aa
aa
bb
xx
yy
xx
bb
zz
bb
yy
Abbildung 6: relationale Division
inv enthält daher kein Tupel der Form “aa/...”, weil alle derartigen Tupel aus r × s auch in x vorhanden sind und somit
abgezogen wurden.
2. Für den Kandidaten t = “bb” sind nicht alle Kombinationen mit
den Tupels des Divisors vorhanden und es gilt: {t} × s 6⊆ x .
In inv bleiben daher wenigstens eine der fehlenden Kombinationen übrig. Wenn wir nun noch auf R projizieren, haben wir einen
“durchgefallenen Kandidaten” gefunden.
Die Tupel in π R ( inv ) sind somit gerade diejenigen, die in r zuviel
sind. Unser Endresultat ist also
x ÷ s = r − π R ( inv )
x ÷ s = π R ( x ) − π R ((π R ( x ) × s ) − x )
bzw.
3.8
Relationale Vollständigkeit
Wir haben inzwischen eine Reihe von Operationen mit Relationen
kennengelernt und schon bei den relativ komplizierten Verbundoperationen und der Division bemerkt, daß wir sie auf die einfacheren
Operationen
σ, π, ρ, ∪, −, ×
zurückführen konnten. Die Verbundoperationen und die Division
mögen zwar die Formulierung mancher Abfragen erleichtern, sie erweitern die Fähigkeiten der relationalen Algebra aber nicht wirklich,
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
28
d.h. es gibt kein Suchproblem, das nur mit ihrer Hilfe lösbar wäre.
Dieser Effekt ist auch bei diversen weiteren Operationen, die man sich
noch ausdenken kann, zu beobachten.
Hieraus schlußfolgert man, daß die Ausdruckskraft, die durch die
vorstehende Operationenmenge erreicht wird, einerseits ausreichend
für eine große Klasse von Problemen, andererseits ein Minimum an
Ausdruckskraft ist, das von jeder Abfragesprache für relationale Datenbanken erreicht werden sollte; solche Sprachen nennt man daher
relational vollständig8 .
Die Operationenmenge {σ, π, ρ, ∪, −, ×} ist übrigens minimal in
dem Sinne, daß keine der Operationen auf die anderen zurückführbar ist, jede echte Teilmenge wäre nicht mehr relational vollständig.
Wir hätten alternativ statt des Kreuzprodukts zuerst den natürlichen Verbund einführen können und hätten dann das Kreuzprodukt
auf den natürlichen Verbund zurückgeführt; die Operationenmenge
{σ, π, ρ, ∪, −, 1} ist also eine andere minimale, relational vollständige
Operationenmenge.
3.9
Ausdrücke in der relationalen Algebra
Wie schon einleitend erwähnt setzen wir bei der relationalen Algebra
eine existierende Datenbank, also ein konzeptuelles Schema und dazu
passende existierende Relationen, voraus. Hierdurch ist eine Menge
von Namen von Relationen und Attributen vorgegeben. Diese Namen
können wir nun an passender Stelle in den Operationen der relationalen Algebra einsetzen. Überall dort, wo eine relationale Operation
eine Relation als Argument benötigt, kann natürlich wiederum ein relationaler Ausdruck eingesetzt werden.
Syntaktisch korrekte Ausdrücke sind analog zu arithmetischen Ausdrücken in gängigen Programmiersprachen definiert. Details der Syntaxdefinition und -prüfung und Übersetzung interessieren uns an dieser
8
Diese Bezeichnung ist insofern irreführend, als eine praxisgerechte Sprache viele über die zentralen Abfrageoperationen hinausgehende Funktionen anbieten muß,
s. Abschnitt 1. So gesehen sind die Operationen der relationalen Algebra ziemlich
unvollständig.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
29
Stelle nicht, und wir setzen i.f. syntaktisch korrekte Ausdrücke voraus.
Ausdrücke werden klassischerweise von innen nach außen ausgewertet. Die entstehenden Zwischenresultate müssen gepuffert werden.
Diese Zwischenresultate können, wenn Verbunde oder Kreuzprodukte
auftreten, extrem groß werden, d.h. man kann erhebliche PerformanceProbleme bekommen, wenn man einen relationalen Ausdruck in kanonischer Weise auswertet.
Man kann das Ergebnis eines relationalen Ausdrucks oft effizienter
berechnen als durch eine kanonische Auszuwertung; die Bestimmung
eines effizienteren Rechenverfahrens bezeichnet man als Optimierung.
Durch die Optimierung ist es vielfach möglich, auch äußerlich “ineffiziente” Ausdrücke recht effizient auszuwerten. Die entscheidende
Konsequenz hieraus ist, daß man bei der Formulierung relationaler
Abfragen zunächst keine Rücksicht auf Ineffizienz bei der kanonischen
Auswertung nehmen sollte und sich stattdessen besser auf die inhaltliche Korrektkeit des Ausdrucks konzentieren sollte. Lösungen, die klar
und korrekt, aber “ineffizient” sind, sind vielfach kompakter und deswegen leichter für Optimierer behandelbar als “effiziente” komplizierte
(und schlimmstenfalls inkorrekte) Lösungen.
Wenn der Optimierer der Datenbank wider Erwarten doch keine effiziente Ausführung findet – Wunder wirken können Optimierer nicht,
und nicht jedes DBMS hat einen guten Optimierer – , kann man in
einem zweiten Schritt immer noch versuchen, durch Umformung der
Anfrage die eigentliche Arbeit des Optimierers doch selbst von Hand
zu erledigen.
4
Schlüssel
Wir hatten schon in Abschnitt 2.3 Identifizierungsschlüssel als eine
typische Integritätsbedingung erwähnt; nachdem wir nun die Operationen der relationalen Algebra kennen, können wir einige Schlüsselbegriffe leichter exakt definieren.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
4.1
30
Superschlüssel und Identifizierungsschlüssel
Wir betrachten noch einmal die Relation kunden in Bild 1. Von dem
Attribut Kundennummer verlangten wir schon früher, daß es “eindeutig” sein sollte, m.a.W. daß zu jeder Kundennummer höchstens ein Tupel vorhanden sein sollte. Eine Kundennummer identifiziert also, sofern vorhanden, genau ein Tupel. Formal läßt sich dies so ausdrücken:
kn ∈ πKundennummer (kunden)
⇒
| σKundennummer=kn (kunden) | = 1
Die vorstehende Bedingung ist äquivalent zu der folgenden kompakteren Bedingung (Beweis: Übungsaufgabe):
| πKundennummer (kunden) | =
| kunden |
Das Attribut Wohnort hat diese Eigenschaft offensichtlich nicht. Es
könnte aber sein, daß die beiden Attribute Wohnort und Kundenname
zusammen die Identifizierungseigenschaft haben. Genereller kann eine
beliebige Menge von Attributen zur Identifikation von Tupeln verwendet werden. Eine derartige Menge von Attributen nennen wir einen
Superschlüssel. Die formale Definition lautet:
Sei R ein Relationentyp, K ⊆ R eine Attributmenge. Wenn K ein
Superschlüssel für R ist, dann gilt für jede korrekte Relation r mit
dem Relationentyp R stets folgendes:
| πK (r) | =
| r |
Die Attribute in K nennen wir auch Schlüsselattribute. Bildlich gesprochen gehen beim Projizieren auf einen Superschlüssel keine Tupel
verloren, weil eben keine Kombination der Werte der Schlüsselattribute doppelt auftritt.
Der seltsam klingende Name Superschlüssel rührt daher, daß die
Attributmenge gemäß der vorstehenden Definition auch “überflüssige”
Attribute enthalten kann, die für die Identifikation eigentlich nicht gebraucht werden. Ein extremes Beispiel ist die Attributmenge R; R ist
immer ein Superschlüssel für R , sofern die Relation eine Menge ist
(also keine Duplikate erlaubt sind).
Ein Identifizierungsschlüssel ist eine minimale Menge von Attributen, die Superschlüssel ist.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
31
Für unsere Relation kunden sind {Kundennummer} und {Kundenname, Wohnort} Identifizierungsschlüssel. Wenn zusätzlich die Personalausweisnummer zu jedem Kunden vorhanden wäre, wäre {Personalausweisnummer} ein weiterer Identifizierungsschlüssel. Dieses Beispiel
zeigt, daß es für einen Relationentyp mehrere Identifizierungsschlüssel
geben kann.
Die Bezeichnung Schlüssel wird meist als Synonym zu Identifizierungsschlüssel verstanden. Unter einem Schlüsselwert bei einem
Tupel t verstehen wir die Menge der Attributwerte von t bei den Attributen des Identifizierungsschlüssels.
Es sei noch einmal daran erinnert, daß Schlüsseleigenschaften Integritätsbedingungen, also vom Anwender definierte Anforderungen
sind. Zu der Erkenntnis, daß eine Attributmenge K ein Identifizierungsschlüssel ist, kommt man nicht etwa dadurch, daß man den
Zustand der Datenbank eine Zeitlang beobachtet und währenddessen
dauernd kontrolliert, ob die Identifizierungseigenschaft erfüllt ist. Es
ist genau umgekehrt: die Identifizierungseigenschaft wird vorgegeben,
und das DBMS hat dafür zu sorgen, daß unerwünschte Zustände verhindert werden.
Das DBMS muß bei jedem Einfügen eines neuen Tupels oder
Ändern eines vorhandenen Tupels für jeden Identifizierungsschlüssel
prüfen, ob der neue Schlüsselwert schon in der Relation auftritt. Diese Prüfung kann so implementiert werden, daß die ganze Relation
linear durchsucht wird. Dies ist i.a. (außer bei kleinen Relationen)
zu ineffizient, daher muß praktisch immer für einen Identifizierungsschlüssel ein Verzeichnis angelegt werden, in dem die aktuell vorhandenen Schlüsselwerte verzeichnet sind und das effizient durchsuchbar ist
(z.B. als Baumstruktur oder Hash-Tabelle)9 . Dieses Verzeichnis muß
bei allen Datenänderungen entsprechend aktualisiert werden. Sofern
eine Relation mehrere Identifizierungsschlüssel hat, muß für jeden ein
9
Eine effiziente Suche wird z.B. auch durch die sortierte Speicherung nach
dem Identifizierungsschlüssel ermöglicht; allerdings machen hier Einfügungen und
Löschungen Probleme. Derartige Implementierungstechniken sind kein Thema dieses Lehrmoduls.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
32
eigenes Verzeichnis der vorhandenen Schlüsselwerte angelegt werden.
Viele DBMS erlauben es, Relationen zu definieren, die keinen einzigen Identifizierungsschlüssel haben. Eine derartige Relation kann
Tupelduplikate enthalten. Auch die Gesamtmenge aller Attribute bildet hier keinen Schlüssel, denn dann wären keine Duplikate erlaubt.
4.2
Primärschlüssel
Die Verzeichnisse für die Identifizierungsschlüssel kosten Platz und Rechenzeit, man würde sie daher lieber vermeiden. Dies ist in der Tat
bei vielen internen Speicherstrukturen möglich. Bei den folgenden Annahmen und Implementierungsentscheidungen:
1. jedes Tupel wird in einem Speichersatz gespeichert (vgl. [DBSA]),
2. die Relation wird in einem B*-Baum gespeichert,
3. der Identifizierungsschlüssel ist einelementig (enthält also nur ein
Attribut),
4. man verwendet die Schlüsselwerte der Tupel als Schlüsselwerte im
B*-Baum
bekommt man die Eindeutigkeitsprüfung praktisch gratis! Diese sehr
effiziente Prüfung der Schlüsseleigenschaft ist aber nur bei einem einzigen Identifizierungsschlüssel möglich; wenn man mehrere Identifizierungsschlüssel hat, muß man für die übrigen nach wie vor separate
Verzeichnisse anlegen.
Als Primärschlüssel bezeichnet man denjenigen Identifizierungsschlüssel, für den die Möglichkeit der sehr effizienten Prüfung der
Schlüsseleigenschaft ausgenutzt werden soll. Welche Implementierungstechniken hierzu verwendet werden, bleibt eine Entscheidung des
DBMS-Herstellers.
Neben der Prüfung der Schlüsseleigenschaft ist natürlich bei einem
Primärschlüssel auch die Suche nach dem Tupel, das einen bestimmten
Wert bei diesem Attribut hat, besonders effizient möglich. Derartige
Suchvorgänge sind z.B. bei der Verbundbildung nötig; s. das Beispiel
in Abschnitt 3.6.1. Daher wird man, sofern mehrere Identifizierungsschlüssel vorhanden sind, denjenigen als Primärschlüssel auswählen,
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
33
mit dem häufig Verbunde gebildet werden. In den meisten Fällen
hat man aber ohnehin nur einen einzigen Identifizierungsschlüssel, der
dann automatisch als Primärschlüssel zu wählen ist.
Die vorstehenden Beobachtungen zeigen, daß die Festlegung des
Primärschlüssels eine Implementierungsentscheidung ist, die für die
konzeptionelle Struktur der Datenbank unerheblich ist. Im Sinne der
3-Ebenen-Schema-Architektur (s. Abschnitt 5.2 in [DVS]) gehört die
Festlegung des Primärschlüssels also zum internen Schema. Im Gegensatz dazu gehören Identifizierungsschlüssel zum konzeptuellen Schema.
Leider wird zwischen den Ebenen oft nicht sauber getrennt. Die
Bezeichnung Schlüssel wird vielfach auch als Synonym zu Primärschlüssel verstanden.
Eine wesentliche Ursache für diese Vermischung von Begriffen liegt
darin, daß man beim Entwurf der konzeptuellen Schemata durchaus
Rücksicht auf deren Implementierung nehmen muß; dies steht etwas
im Widerspruch zu der Idealvorstellung, wonach die konzeptuellen und
implementierungsbezogenen Aspekte völlig getrennt voneinander auf
den beiden unteren Ebenen der 3-Ebenen-Schema-Architektur behandelt werden können. Betrachten wir hierzu wieder das Beispiel in Bild
1. Einer der Identifizierungsschlüssel war {Kundenname, Wohnort}.
Dieser Identifizierungsschlüssel ist i.a. als Primärschlüssel ungeeignet,
weil hier die internen Schlüsselwerte als Konkatenation der beiden Attributwerte gebildeten werden müßten und weil diese Zeichenketten
relativ lang werden können. Aus Effizienzgründen erlauben Implementierungen von B*-Bäumen und ähnlichen internen Strukturen ggf.
nur relativ kurze Schlüsselwerte fester Länge, z.B. ganze Zahlen mit 4
oder 8 Bytes Länge oder Zeichenketten mit 8 Zeichen.
Sofern die “natürlichen” Identifizierungsschlüssel alle als Primärschlüssel ungeeignet sind, muß man ein künstliches Schlüsselattribut
erfinden; hierauf gehen wir in Abschnitt 4.4 ausführlicher ein.
4.3
Fremdschlüssel
Identifizierungsschlüssel einer Relation werden oft von einer anderen
Relation aus “referenziert”. In unserer Relation lieferungen kam
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
34
z.B. das Attribut Kundennummer vor, das Identifizierungsschlüssel in
kunden ist. Es sollte offensichtlich keine Lieferung geben, bei der die
Kundennummer “ins Leere zeigt”, weil sie in kunden nicht auftritt.
Die Abwesenheit solcher Datenfehler bezeichnet man auch als referentielle Integrität. Formal formuliert fordern wir folgende Mengeninklusion:
πKundennummer (lieferungen) ⊆ πKundennummer (kunden)
Kundennummer bezeichnen wir als Fremdschlüssel in der Relation lieferungen. Alle Werte, die im Attribut Kundennummer in
lieferungen auftreten, müssen auch im Attribut Kundennummer in
kunden auftreten.
Die allgemeine Definition ist: sei K eine Attributmenge, r eine Relation mit dem Relationentyp R, K ⊆ R, s eine andere Relation mit dem
Relationentyp S und K der Primärschlüssel in S. Wenn K Fremdschlüssel in r (mit Bezug auf s) ist, dann gilt stets
πK (r) ⊆ πK (s)
Das DBMS muß hier verhindern,
1. daß Tupel in s, auf die noch Referenzen in r existieren, gelöscht
werden, und
2. daß Tupel in r erzeugt werden, bei denen der Wert der Fremdschlüsselattribute kein Tupel in s referenziert.
Nullwerte sollten in Fremdschlüsseln vermieden werden. Wenn man
sie zuläßt, bedeutet ein Nullwert, daß unbekannt ist, welches andere
Tupel referenziert wird.
4.4
Kriterien für die Festlegung von Identifizierungsund Primärschlüsseln
Identifizierungsschlüssel werden häufig als Fremdschlüssel in anderen
Relationen benutzt; hieraus ergeben sich mehrere Kriterien, die bei
der Festlegung von Identifizierungsschlüsseln beachtet werden sollten:
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
35
– Können die Werte beim Eintragen immer sofort bestimmt werden?
Man kann theoretisch auch Nullwerte bei Schlüsselattributen zulassen, praktisch stört dies aber sehr. U.a. können keine Fremdschlüssel-Referenzen auf dieses Tupel in anderen erzeugt werden.
– Sind die Werte kurz und schreibbar? Dies betrifft wieder den Fall,
daß in anderen Relationen Fremdschlüssel-Referenzen von Hand
eingetragen werden müssen.
– Sind die Werte “sprechend”, d.h. ist den Systembenutzern intuitiv
verständlich, welche reale Entität durch ein Tupel dargestellt wird?
Diese Anforderung steht oft im Widerspruch zu den beiden ersten.
Ein weiteres Kriterium betrifft die zeitliche Entwicklung des Datenbankinhalts. Die aktuell in einem Identifizierungsschlüssel auftretenden Werte müssen natürlich eindeutig sein; zusätzlich kann es sinnvoll
sein, die Eindeutigkeit über die Zeit hinweg zu verlangen. Beispielsweise könnte Kundenname ein Identifizierungsschlüssel sein und derzeit
eine Kundin “Meier, Anna” vorhanden sein. Diese wird irgendwann
gelöscht, und ein Jahr später wird eine andere, neue Kundin eingetragen, die zufällig genauso heißt. Wenn man derartiges vermeiden will,
dürfen einmal benutzte Identifizierungsschlüsselwerte nicht wiederverwendet werden. Hierzu müßte ein Verzeichnis aller jemals verwendeten
Identifizierungsschlüsselwerte geführt werden, was sehr aufwendig und
platzraubend sein kann.
Die vorstehenden Anforderungen werden oft von “natürlichen”
Identifizierungsschlüsseln, die sich aus einer von Implementationsaspekten unbeeinflußten Datenmodellierung ergeben, nicht erfüllt. Beispielsweise sind textuelle Namen zwar oft gut verständlich, aber zu
lang und wiederverwendbar.
Im Endergebnis entscheidet man sich daher oft dazu, ein künstliches Schlüsselattribut, meist eine laufende Nummer, zu erfinden. Das
Attribut Kundennummer ist ein Beispiel hierfür, denn “von Natur aus”
haben Kunden keine Nummer.
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
4.5
36
Weitere Schlüsselbegriffe
Sofern mehrere Identifizierungsschlüssel vorhanden sind, werden sie
oft auch als Schlüsselkandidaten bezeichnet. Jeder Identifizierungsschlüssel ist ein Kandidat dafür, Primärschlüssel zu werden, nur einer
schafft es. Diese Bezeichnung vermengt die konzeptuelle und interne
Begriffs- und Denkwelt besonders stark, weshalb wir sie weitgehend
vermeiden werden.
Ein Sortierschlüssel (sort key) bestimmt die Reihenfolge, in der
die Speichersätze in einem DB-Segment gespeichert werden. Hierdurch kann die Verarbeitung kompletter Relationen beschleunigt werden. Ein Sortierschlüssel muß nicht unbedingt identifizierend sein.
Ein Sekundärschlüssel (secondary key) ist eine Menge von Attributen, für die ein Sekundärindex vorhanden ist. Ein Sekundärschlüssel
ist i.a. nicht identifizierend. Der Sekundärindex ist eine Datenstruktur, die jedem Sekundärschlüsselwert eine Liste der Sätze bzw. Tupel
zuordnet, bei denen die entsprechenden Attributwerte auftreten. Beispielsweise könnte es sinnvoll sein, bei der Relation konten einen Sekundärindex für das Attribut Kundenname einzurichten; dies beschleunigt die Suche nach den Kunden mit einem bestimmten Namen erheblich.
Die folgende Tabelle stellt noch einmal alle Schlüsselbegriffe zusammen und gibt jeweils an, ob es sich um einen Begriff der konzeptuellen
oder internen Ebene in der 3-Ebenen-Schema-Architektur handelt und
ob die Attribute identifizierend sind.
Begriff
Identifizierungsschlüssel
Superschlüssel
Schlüsselkandidat
Fremdschlüssel
Primärschlüssel
Sekundärschlüssel
Sortierschlüssel
c
2008
Udo Kelter
Ebene
logisch
logisch
logisch
logisch
intern
intern
intern
identifizierend
ja
ja
ja
nein
meist
nein
nein
Stand: 10.11.2008
Das relationale Datenbankmodell
37
Implementierungen für Primärschlüssel sind meist so gestaltet,
daß die Eindeutigkeit der Schlüsselwerte erzwungen wird. Man kann
aber auch leicht Varianten dieser Implementierungen bilden, bei denen mehrere Sätze mit dem gleichen Primärschlüsselwert vorhanden
sein dürfen, die dann beim Lesen als Gruppe behandelt werden. Bei
solchen Implementierungen ist ein Primärschlüssel nicht automatisch
auch Identifizierungsschlüssel.
Literatur
[Co70] Codd, E.F.: A relational model for large shared data banks;
CACM 13:6, p.377-387; 1970/06
[Vo99] Vossen, G.: Datenmodelle, Datenbanksprachen und Datenbank-Management-Systeme; Oldenbourg; 1999
[DBSA] Kelter, U.: Lehrmodul “Architektur von DBMS”; 2001
[DVS] Kelter, U.: Lehrmodul “Datenverwaltungssysteme”; 2002
Glossar
Division: Operation der relationalen Algebra, die in gewisser Weise invers zum Kreuzprodukt ist und mit der Suchaufgaben gelöst werden
können, die All-Quantoren enthalten
Fremdschlüssel: (Kontext: Attributmenge F in Relation R1 ist Fremdschlüssel auf eine Relation R2) Menge von Attributen, die Tupel in
einer anderen Relation identifizieren sollen; ist eine Integritätsbedingung, wonach die Projektion von R1 auf F komplett in der Projektion
von R2 auf F enthalten ist
Identifizierungsschlüssel: minimale Menge von Attributen, die ein Superschlüssel ist
Primärschlüssel: Attribut (-kombination),
terstützt
die der Primärindex un-
Projektion: Operation der relationalen Algebra, mit der in den Tupeln einer Eingaberelation Attribute entfernt werden können; entstehende
Duplikate werden eliminiert
c
2008
Udo Kelter
Stand: 10.11.2008
Das relationale Datenbankmodell
38
relationale Algebra: Algebra mit den Kernfunktionen relationaler Datenbanksysteme im Bereich der Abfragedienste, insb. Selektion, Projektion, Mengenoperationen, Kreuzprodukt, natürlicher bzw. ThetaVerbund und Division
Relationenschema: Namen und Typen der Attribute einer Relation; Synonyme: Relationentyp, Relationenformat
Schlüssel: Oberbegriff für mehrere spezielle Schlüsselbegriffe; oft als Synonym für Identifizierungsschlüssel benutzt
Schlüsselkandidat: Synonym für Identifizierungsschlüssel
Sekundärschlüssel: Attribut (-kombination), für die ein Sekundärindex
vorhanden ist
Selektion: Operation der relationalen Algebra, mit der Tupel einer Eingaberelation anhand einer Bedingung selektiert werden können
Sortierschlüssel: Attribut (-kombination), nach der intern sortiert gespeichert wird
Spalte (column): einer Tabelle; Synonym: Attribut
Superschlüssel: Menge von Attributen, deren Werte die Tupel einer Relation eindeutig identifizieren
Tabelle (table): Hauptbestandteile einer relationalen Datenbank; wird oft
als Synonym zu Relation benutzt
Verbund: Operation der relationalen Algebra, mit der die Tupel zweier Eingaberelationen paarweise verbunden werden, sofern Sie eine Verbundbedingung erfüllen; beim Theta-Verbund wird die Verbundbedingung
explizit vorgegeben, beim Gleichheitsverbund werden Attribute der
zu verbindenden Tupel auf Gleichheit getestet, beim natürlichen Verbund werden nur Tupel verbunden, die in allen Attributen, die beiden
Relationen gemeinsam sind, jeweils die gleichen Werte haben
Verbund, äußerer: der linke (rechte) äußere Verbund ist eine Variante der
normalen Verbunde, bei denen Tupel der linken (rechten) Eingaberelation, die keinen Verbundpartner in der rechten (linken) Eingaberelation finden, ergänzt um Nullwerte bei den fehlenden Attributen,
zum Ergebnis hinzugenommen werden; der beidseitige äußere Verbund
liefert die Vereinigung des rechten und linken äußeren Verbunds
Zeile (row ): einer Tabelle; Synonym: Tupel
c
2008
Udo Kelter
Stand: 10.11.2008
Index
| .. |, 15
Primärschlüssel, siehe Schlüssel
3-Ebenen-Schema-Architektur, 33, 36 Projektion, 11, 37
Administration, 3
Attribut, 4, 38
Reihenfolge, 5
Wertebereich, 6
Wertzuweisung, 5
Rechteverwaltung, 3
referentielle Integrität, 34
Relation, 6
relationale Algebra, 9, 37
äußerer Verbund, 23
Ausdrücke, 28
B*-Baum, 32
Auswertung, 29
Differenz, 12
Datenbank, 4
Division, 23
Datenbankmodell
Gleichheitsverbund, 22
konventionelles, 3
Kreuzprodukt, 14
relationales, 3, 4
natürlicher Verbund, 18
Datenbanksprache, 3
Projektion, 11
Division, 23, 37
Schnitt, 12
Duplikate, 5, 7
Theta-Verbund, 22
Umbenennung, 13
equi-join, 22
Vereinigung, 12
relationale
Kalküle, 4
Fremdschlüssel, siehe Schlüssel
relationale Vollständigkeit, 28
Gleichheitsverbund, 22
Relationenformat, 6
Relationenschema, 6, 38
Identifizierungsschlüssel, siehe SchlüsselRelationentyp, 6
Integritätsbedingung, 8
als Menge von Attributen, 7
dynamische, 8
statische, 8
Schema, 3
Überprüfung, 8
Schlüssel, 29, 31, 33, 38
als Integritätsbedingungen, 31
Kalkül, siehe relationale Kalküle
Fremdschlüssel, 34, 36, 37
Kreuzprodukt, 14, 20, 23
Identifizierungsschlüssel, 30, 37
Auswahlkriterien, 34
natural join, 19
künstlicher, 33
Notationskonventionen, 7
Prüfung, 31
Nullwert, 23
Wiederverwendung von Schlüsselwerten, 35
Optimierung, 29
39
Das relationale Datenbankmodell
40
Primärschlüssel, 32, 33, 36, 37
Auswahl, 32
Schlüsselattribut, 30
Schlüsselkandidat, 36, 38
Sekundärschlüssel, 36, 38
Sortierschlüssel, 36, 38
Superschlüssel, 30, 36, 38
Schlüsselkandidat, siehe Schlüssel
Schlüsselwert, 31
secondary key, 36
Sekundärschlüssel, siehe Schlüssel
Selektion, 9, 38
Bedingung mit all-Quantor, 26
sort key, 36
Sortierschlüssel, siehe Schlüssel
Spalte, 4, 38
Superschlüssel, siehe Schlüssel
t[A], 11
Tabelle, 4, 38
Tupel, 6, 38
Umbenennung, 13
Verbund, 38
äußerer, 23, 38
Gleichheits-, 22, 38
natürlicher, 18, 38
Theta-, 22, 38
Verbundattribute, 19
Vollständigkeit, 27
Zeile, 4, 38
c
2008
Udo Kelter
Stand: 10.11.2008