Datenbanken Theorie

Werbung
Udo Matthias Munz
Relationale
Datenbanken
und
SQL
Informationstechnik
Einführung
Unformatierte Daten
EINFÜHRUNG ................................................................................................................................................4
Daten und Information...............................................................................................................................4
MODELLE VON DATENBANKEN .............................................................................................................4
UNFORMATIERTE DATEN ...............................................................................................................................4
HIERARCHISCHES MODELL ............................................................................................................................4
TABELLE.........................................................................................................................................................5
ARBEITEN MIT EINER DATENBANK......................................................................................................5
RELATIONALE DATENBANKEN ..............................................................................................................6
NORMALISIEREN EINER RELATION / TABELLE AM BEISPIEL .........................................................................6
Die erste Normalform (1NF)......................................................................................................................6
Die zweite Normalform (2NF) ...................................................................................................................7
Die dritte Normalform (3NF).....................................................................................................................7
Verknüpfung...............................................................................................................................................8
Nachteile einer extremen Normalisierung .................................................................................................8
EINIGE BEGRIFFE............................................................................................................................................8
Entität, Entitätstyp .....................................................................................................................................8
Entitätsbeziehungen ...................................................................................................................................8
Identifikationsschlüssel ..............................................................................................................................8
Redundanz, Mutation und Anomalie ..........................................................................................................9
REFERENTIELLE INTEGRITÄT .......................................................................................................................10
ENTITY-RELATIONSHIP-DIAGRAMM (ER-DIAGRAMM) ...............................................................10
Entitytyp (Objekt).....................................................................................................................................10
Attribute ...................................................................................................................................................11
Abhängige (weak) Entities .......................................................................................................................12
Relation ....................................................................................................................................................13
Kardinalität..............................................................................................................................................14
Die Darstellung in einem vereinfachten ER-Diagramm ..........................................................................14
FÜNF SCHRITTE ZUM ER-MODELL ..............................................................................................................15
ÜBERLEGUNGEN BEIM ENTWURF EINES DATENMODELLS.......................................................16
ER-DIAGRAMM ............................................................................................................................................16
TABELLEN ERSTELLEN .................................................................................................................................17
RELATIONEN MIT ATTRIBUTEN ....................................................................................................................17
DATENTYPEN ...............................................................................................................................................17
AUF DEM INDEX: DIE SCHLÜSSELFELDER ....................................................................................................17
DATENBANKANWENDUNG FERTIGSTELLEN .................................................................................................17
UMSETZUNG ER-DIAGRAMM IN TABELLEN ....................................................................................18
Die erste Regel:........................................................................................................................................18
Die zweite Regel: .....................................................................................................................................18
Die dritte Regel:.......................................................................................................................................19
Die vierte Regel: ......................................................................................................................................19
ZUSAMMENFASSUNG ...............................................................................................................................20
REKURSIVE BEZIEHUNGEN ...................................................................................................................23
Beispiel: ...................................................................................................................................................23
TERNÄRE BEZIEHUNGEN .......................................................................................................................23
Beispiel1: .................................................................................................................................................23
Beispiel2: .................................................................................................................................................23
UMSETZUNG IN RELATIONEN (TABELLEN) ..................................................................................................23
GENERALISIERUNG ..................................................................................................................................26
2
Einführung
Unformatierte Daten
DATENBANKZUGRIFFE MIT SQL..........................................................................................................27
Kleine SQL-Geschichte ............................................................................................................................27
Ein SQL-Beispiel: ....................................................................................................................................28
SQL - BEFEHLSÜBERSICHT ..........................................................................................................................28
ABFRAGEFORMULIERUNG MIT SQL ..................................................................................................29
BEISPIEL-DATENBANK .................................................................................................................................29
1 PROJEKTION UND FORMATIERUNG ...........................................................................................................30
2 SELEKTION ................................................................................................................................................31
3 VERBUND VON TABELLEN ........................................................................................................................32
4 AGGREGATFUNKTIONEN UND GRUPPEN ...................................................................................................33
5 UNTERABFRAGEN (SUBQUERIES)..............................................................................................................34
6 STRUKTUR VON TABELLEN ERZEUGEN, ÄNDERN UND LÖSCHEN ..............................................................35
WEITERE HINWEISE ZUM VERBUND VON TABELLEN ..................................................................................36
Inner Join: Verknüpfung von Tabellen ....................................................................................................36
Auto Join/Self Join: Verknüpfung einer Tabelle mit sich selbst...............................................................36
Outer Join: Verknüpfung von Tabellen....................................................................................................36
Unterabfragen: Einzeilige (= Single Row Subquery) ..............................................................................36
Unterabfragen: Mehrzeilige (= Multiple Row Subquery)........................................................................37
WEITERE BEISPIELE ZUM VERBUND VON TABELLEN ..................................................................................37
3
Einführung
Unformatierte Daten
Einführung
Daten und Information
Grundsätzlich ist eine Datenbank eine Sammlung von Daten. Diese können in beliebiger Form gespeichert
sein, auf fliegenden Blättern genauso wie in einem Karteikasten oder auf einem Computersystem. Datenbanken haben aber erst mit der Verbreitung des Computers an Brisanz gewonnen, weil nur mit ihrer Hilfe aus
den Daten Informationen gewonnen werden können, die so nicht gespeichert sind. Deshalb sind neben der
Entwicklung von Datenbanksystemen die Fragen des Datenschutzes bedeutsam geworden. Datenschutz bedeutet, dass nicht die Daten selbst geschützt werden sollen (das wäre die Frage der Datensicherheit, z.B.
regelmäßige Sicherungskopien anfertigen) sondern es sollen die Personen geschützt werden, deren Daten
gespeichert werden.
Datenbanken, Informationssysteme sowie Datenschutz und Datensicherheit als Expertengruppenarbeit
Siehe http://www.educeth.ch/informatik/puzzles/rundum/
Modelle von Datenbanken
Unformatierte Daten
Keine feste Struktur.
Hierarchisches Modell
In Computer-Datenbanken werden die Daten meist in einer bestimmten, klar beschriebenen Struktur verwaltet:
Auf dem Datenträger sind die Daten meist
linear angeordnet. Als Modell für die Datenbank kann man sich daher vorstellen,
dass die einzelnen Zeichen aneinander gereiht sind. Daraus bilden sich die Datenfelder, welche Datensätze ergeben. Insgesamt
ergibt sich eine Datei. Mehrere Dateien, die
zu einem gemeinsamen Projekt gehören
bilden die Datenbank.
4
Arbeiten mit einer Datenbank
Tabelle
BOF
Zeiger
Datenfeld1
Datenfeld2
EOF
Datenfeld3
Datenfeld4
Datensatz1
Datensatz2
Datei1
Der Zugriff auf die Datei geschieht über Zeiger, die auf das jeweils gelesene Zeichen zeigen. Ein Zeiger
bezeichnet den Anfang der Datei (begin of file, BOF) einer deren Ende (end of file, EOF).
1:
Datenbank1
Zeichnen Sie die Struktur einer hierarchischen Datenbank mit folgenden Feldern: Name(3),
PLZ(5) und Ort(4) für die Personen: Tom, 77815, Bühl; Ben, 77654, OG, Ali, 77815, Bühl
Nennen Sie einige Probleme bei dieser Datenbank.
Tabelle
Man kann sich die Organisation einer Datei auch wie eine Tabelle vorstellen. Dieses Modell ist weiter weg
von der technischen Wirklichkeit, ist aber für die Anwendung praktischer. Jeder Datensatz bildet eine Zeile
der Tabelle. Die einzelnen gleichen Datenfelder jeden Datensatzes kommen dadurch direkt untereinander zu
stehen, wodurch die Übersichtlichkeit erheblich gesteigert wird.
Datenfelder
Datensatz
Beachten Sie, dass dieser Aufbau nicht den realen, physischen Aufbau der Daten auf dem Datenträger widerspiegelt.
Arbeiten mit einer Datenbank
Auch bei einer Datenbank gilt das EVA-Prinzip:
Die Daten werden
•
in Formularen, Datenzugriffseiten eingelesen, die Speicherung der Datenfelder und Datensätze stellen wir uns in Form von Tabellen vor.
•
vom Database Managementsystem (DBMS) verarbeitet,
•
mit Abfragen und Berichten ausgegeben.
5
Relationale Datenbanken
Normalisieren einer Relation / Tabelle am Beispiel
Relationale Datenbanken
Eine komplette Datenbank besteht zur Zeit des Datenbankaufbaus nur aus der Software, mit der man die
Datenbank bearbeiten kann und der Hardware, auf der das Programm läuft. Beides hat seinen Preis, der gut
kalkulierbar ist. Die Kosten der Datenbasis selbst spielen zu diesem Zeitpunkt eine untergeordnete Rolle. Im
Laufe der Zeit werden aber die Daten einen Wert darstellen, der die Hard- und Softwarekosten um ein Vielfaches übersteigen kann. Die Stammdaten müssen über Jahre hinweg gepflegt und erweitert werden. Für
Versicherungsdaten beispielsweise ist eine Lebensdauer der Stammdaten von 50 und mehr Jahren angesagt.
Vor diesem Hintergrund wird klar, dass man dem Aufbau der Datenbasis erheblich mehr Aufmerksamkeit
widmen sollte als der Hardware, die vielleicht nach 3-5 Jahren bereits ersetzt werden muss.
Anfang der 70er Jahre entwickelten Codd, Chen und andere Mathematiker das relationale Datenbankmodell,
welches bereits Anfang der 80er Jahre als „dBase“ auf Personalcomputern implementiert wurde und sich bis
heute allgemein für PC-Datenbanken durchgesetzt hat.
Im relationalen Datenbankmodell werden die Daten in (meist mehreren) Tabellen unabhängig voneinander
gespeichert. Die Beziehungen zwischen den Daten werden erst durch die Anwendung realisiert.
Normalisieren einer Relation / Tabelle am Beispiel
Redundanzen sind in relationalen Datenbanken zu vermeiden. Im Verlaufe der Normalisierung sollen einerseits die Relationen aufgebaut und andererseits die Redundanzen verringert werden.
Ich verwende zur Erläuterung der Normalisierung als Beispiel eine Freunde- und CD-Datenbank. Meine
Ausleihtabelle FREUNDE.DB besteht zunächst nur aus einer einzigen Tabelle:
Name
Unsinn
Maus
Düsentrieb
Maus
Vorname
Reiner
Mickey
Daniel
Mickey
Telefon
564321
1234
9999
1234
Datum
01.01.97
12.01.97
14.11.97
14.11.97
Titel
Tina Dreams
Tina Dreams, Stones Best
Harry Lemon Tree, Tina Dreams, Beatles Rotes
Stones Best
Die gesamte Datenbank besteht aus einer einzigen Tabelle. Wir brauchen keine Schlüssel zu definieren, weil
wir keine Verknüpfungen mit anderen Tabellen bilden müssen und somit Eindeutigkeit nicht unbedingt erforderlich ist.
Diese Tabelle ist aber nicht sehr sinnvoll: die Anzahl der ausgeliehenen Titel ist begrenzt auf die Zahl, die in
das Feld „Titel“ hineinpasst. Außerdem ist eine Suche rückwärts („Wer hat meine Beatles-CD?“) sehr erschwert. Jede neue Ausleihe erzeugt eine (unkontrollierte) Redundanz!
Die erste Normalform (1NF)
Der erste Schritt der Normalisierung vermeidet mehrere Merkmale in einem Feld.
Name
Unsinn
Maus
Maus
Düsentrieb
Düsentrieb
Düsentrieb
Maus
Vorname
Reiner
Mickey
Mickey
Daniel
Daniel
Daniel
Mickey
Telefon
564321
1234
1234
9999
9999
9999
1234
Datum
01.01.97
12.01.97
12.01.97
14.11.97
14.11.97
14.11.97
14.11.97
Titel
Tina Dreams
Tina Dreams
Stones Best
Harry Lemon Tree
Tina Dreams
Beatles Rotes
Stones Best
Fertig sind wir mit dieser Form noch nicht, denn jetzt haben wir neben dem Problem der vielen redundanten
Daten noch weitere Problembereiche:
Die Änderungsabhängigkeit (Update-Dependency): eine Änderung der Telefonnummer von Mickey
muss in allen Zeilen durchgeführt werden um eine „Änderungsanomalie“ zu verhindern.
Die Einfügungsabhängigkeit (Insertion-Dependency): zum Identifizierungsschlüssel muss das Ausleihdatum und der Titel hinzugefügt werden (Eindeutigkeit der Tupel!, siehe „Identifikationsschlüssel“ Seite
6
Relationale Datenbanken
Normalisieren einer Relation / Tabelle am Beispiel
8). Will man einen neuen Freund in die Liste aufnehmen, funktioniert das nur, wenn er gleichzeitig eine
Ausleihe vornimmt, weil die Felder Datum und Titel ja zum Schlüssel gehören müssen und daher nicht
leer bleiben dürfen.
Die Löschabhängigkeit (Deletion-Dependency): ist das Gegenstück zur Einfügungsabhängigkeit. Wenn
Daniel seine beiden ausgeliehen CDs zurückgibt, dann werden mit dem Löschen auch alle seine Daten
gelöscht.
Die zweite Normalform (2NF)
Wir teilen die Datenbank in mehrere Tabellen auf, die jede nach den Entitäten: Freundedaten und Verleihdaten unterschieden sind. In beiden Tabellen wird das Feld FID zusätzlich eingefügt. Mit Hilfe dieser Identifizierungsnummer (Identifizierungsschlüssel) können die Beziehungen zwischen den beiden Tabellen wieder
hergestellt werden. Die Freundetabelle ist nun unabhängig von der Verleihtabelle erweiterbar, und diese
wieder unabhängig von der Freundetabelle.
Freundetabelle
FID Name
Maus
1
Düsentrieb
2
Unsinn
3
Vorname
Mickey
Daniel
Reiner
Telefon
1234
9999
564321
Verleihtabelle
FID
Datum
01.01.97
3
12.01.97
1
12.01.97
1
14.11.97
2
14.11.97
2
14.11.97
2
14.11.97
1
Titel
Tina Dreams
Tina Dreams
Stones Best
Harry Lemon Tree
Tina Dreams
Beatles Rotes
Stones Best
Das DBMS muss die Verbindung zwischen den Tabellen herstellen können. Daher ist in der Verleihtabelle
der Schlüssel FID mit aufzunehmen. Man nennt diesen Schlüssel in der Verleihtabelle einen „Fremdschlüssel“, das entsprechende Attribut in der Freundetabelle ist dort der Identifikations- oder Primärschlüssel.
Die dritte Normalform (3NF)
Wir haben in der Verleihtabelle aber immer noch Redundanzen, nämlich beim Datum und beim Titel. Daher
müssen wir die zweite Tabelle noch weiter aufteilen und gelangen zur 3. Normalform.
tbFreunde
FID Name
Maus
1
Düsentrieb
2
Unsinn
3
Vorname
Mickey
Daniel
Reiner
Telefon
1234
9999
564321
tbVerleih
FID Datum
01.01.97
3
12.01.97
1
12.01.97
1
14.11.97
2
14.11.97
2
14.11.97
2
14.11.97
1
TID
1
1
2
4
1
5
2
tbCDs
TID
1
2
3
4
5
Titel
Tina Dreams
Stones Best
Elvis Jailhouse
Harry Lemon Tree
Beatles Rotes
Betrachten Sie nun einmal die Beziehungen zwischen diesen Tabellen. Ein Tupel in der Freundetabelle
tbFreunde kann auf mehrere Tupel in der Verleihtabelle tbVerleih verweisen (1:n), d.h. ein Freund kann
mehrmals CDs ausleihen. Anders sind die Verhältnisse jedoch zwischen der Verleihtabelle tbVerleih und der
CDs-Tabelle tbCDs. Hier haben wir eine n:1-Beziehung, weil ja dieselbe CD auch mehrmals ausgeliehen
werden kann. (Zwischenzeitliche Rückgabe natürlich vorausgesetzt. Dies ist aber in diesem DatenbankModell nicht erkennbar.)
In der Tabelle tbVerleih erscheinen zwei Fremdschlüssel: FID und TID. Diese Tabelle hat eine zentrale Bedeutung für die Verknüpfungen (Relationen) der Datenbank.
Damit hätten wir für die meisten Fälle die optimale Datenbankrelation erreicht. Die Redundanz beim Datum
werde ich bestehen lassen und die Verleihtabelle nicht noch mal unterteilen. Das wäre dann die 4NF.
Für die fünfte Normalform betrachten wir kein Beispiel mehr. Nur ein Hinweis: wenn sich Datenmengen
überschneiden, kann wieder Redundanz auftreten. Dann nämlich, wenn wir beispielsweise noch eine Komponistentabelle anlegen und ein Freund auch Komponist ist; sein Name müsste dann mehrfach gespeichert
werden, nämlich sowohl in der Freunde als auch in der Komponisten-Tabelle.
7
Relationale Datenbanken
Einige Begriffe
Verknüpfung
Die einzelnen Tabellen enthalten jetzt neben den Schlüsselfeldern (Identifikations- bzw. Fremdschlüssel) nur
noch Daten. Die Beziehung der Daten zueinander ist aber verloren gegangen! Die Beziehungen werden aus
den Tabellen allein nicht unmittelbar ersichtlich. Eine Beschreibung einer Datenbank, die die Relationen
besser darstellt ist das ER-Diagramm.
Nachteile einer extremen Normalisierung
Bei extremer Normalisierung können viele kleine Tabellen entstehen, die die Leistung (z.B. Antwortverhalten) der Datenbank negativ beeinflussen. Durch die vielen künstlichen Schlüssel und die erforderlichen zusätzlichen Verknüpfungen wird das System komplexer, was zu größerer Fehleranfälligkeit führen kann. Die
Schlüssel erfordern Speicherplatz, stellen also auch wieder eine Art von Redundanz dar. Es ist daher ein
Kompromiss zwischen Redundanzfreiheit der Daten und Performance des System anzustreben. Es ist nicht
erforderlich jede Redundanz zu entfernen, sondern nur die „unkontrollierte“ Redundanz.
Einige Begriffe
Entität, Entitätstyp
Die einzelnen Objekte der Datenbasis können Personen sein, Vorgänge oder Handlungsmuster. Sie werden
als „Entitäten“ bezeichnet. Jede Entität weist „Merkmale“ auf. Eine Entitätsmenge (z.B. die Daten aller
Freunde) wird in einer Tabelle abgebildet. Die Tabelle baut sich aus Datensätzen („Tupeln“) auf, die die
Merkmale (Attribute, Felder) enthalten; jeder Datensatz ist eine Entität. Die (allgemeine) Struktur eines Datensatzes ist der Entitätstyp.
Entitätsbeziehungen
In unserem Beispiel der CD-Verleihdatenbank haben wir die Tabelle mit den Freunden. In der zweiten Tabelle sind den Freunden die ausgeliehenen CDs zugeordnet. Dabei kann ein Freund keine, eine oder mehrere
CDs ausgeliehen haben. Entsprechend sind einem Tupel in der Freunde-Tabelle kein, ein oder mehrere Tupel
in der Ausleihtabelle zugeordnet. Es handelt sich hier um eine 1:n-Beziehung. In einer dritten Tabelle sind
die Titel und Interpreten der CDs verzeichnet. In Bezug auf die Freundetabelle haben wir es mit einer m:nBeziehung zu tun: jeder Freund kann mehrere CDs ausleihen und jede CD kann mehrmals ausgeliehen werden (vorausgesetzt sie wurde in der Zwischenzeit wieder zurückgegeben).
Identifikationsschlüssel
Im Relationenmodell werden in den Tabellen nur die reinen Daten gespeichert. Wie diese miteinander in
Beziehung stehen, muss durch (aufwendige) Methoden in Form von Verknüpfungen realisiert werden. Damit
eine Verknüpfung von zwei Tabellen überhaupt funktionieren kann, muss jedes einzelne Tupel eindeutig
identifiziert werden. Dieses Merkmal nennt man den „Schlüssel“. Im Prinzip kann jedes (natürliche) Schlüsselattribut verwendet werden. Das gibt aber oft Probleme mit der Eindeutigkeit: gleiche Namen kommen oft
mehrfach für verschiedene Personen vor. Deshalb verwendet man meist eine Nummer. Dieser künstliche
Schlüssel kann stets so gewählt werden, dass er eindeutig ist.
Der (willkürlich gewählte) künstliche Schlüssel hat noch den weiteren Vorteil, ausschließlich der Identifikation des Datensatzes zu dienen und keinerlei weitere Informationen zu enthalten. Warum ist das nötig? Beispielsweise könnte die Postleitzahl Bestandteil des Schlüssels sein. Dieser „sprechende Schlüssel“ enthält
also eine zusätzliche Information. Wenn sich aber das Merkmal ändert, weil der Kunde umzieht, wird der
Schlüssel fortan mit „gespaltener Zunge“ sprechen, weil ja der Schlüssel nicht geändert werden darf. Würde
der Schlüssel nachträglich bei einem Kunden geändert, würden alle bisherigen Verknüpfungen verloren gehen oder man müßte alle Verknüpfungen mitanpassen!
8
Relationale Datenbanken
Einige Begriffe
Redundanz, Mutation und Anomalie
Redundanz bedeutet, dass Daten mehrfach gespeichert werden. Bei der Redundanz ist die Speicherplatzverschwendung das kleinere Problem; viel schlimmer ist die Gefahr, dass sich „Mutationsanomalien“ einschleichen. Ganz allgemein ist die Änderung auf einem Datensatz eine Mutation. Solche Änderungen sind nie zu
vermeiden: z.B. Namensänderung bei Heirat. Wird bei einer solchen Mutation vergessen sämtliche Redundanzen mit zu verändern, dann entstehen widersprüchliche, inkonsistente Datensätze, die man als Anomalien
bezeichnet.
2:
Normalisieren
Das Normalisieren einer Relation hat die Ziele:
•
•
•
Redundanzfreiheit
keine zusammengesetzten Attribute
keine transitiven Abhängigkeiten
Geben Sie an, an wo die Ziele in der folgenden Tabelle verletzt sind und führen Sie die
Normalisierung bis zur dritten Normalform durch.
Lösungsvorschlag:
Nach Beseitigung mehrfach besetzter Felder und zusammengesetzter Attribute:
Aufteilung in mehrere Tabellen:
Die Zuordnung des Attributs ‚Gruppe’ ist nicht klar. Hat jeder Artikel eine besondere Rabattgruppe, jeder Kunde oder jede Position eines Auftrags? Hier wird angenommen, dass die Rabattgruppe an den Artikel gebunden ist. In der Tabelle fehlen noch Angaben über die Artikel: Bezeichnung Preis usw. Die lassen sich aber ohne Weiteres in der Tabelle Artikel unterbringen.
9
Entity-Relationship-Diagramm (ER-Diagramm)
3:
Referentielle Integrität
Bücherei
ISBN-Nr
0-201-14192-2
Autoren
Date, Ch.
3-89319-117-8
Finkenzeller, H.
Kracke, U.
Unterstein, M.
Melton, J.
Simon, A.
1-55860-245-3
Titel
The Relational Model for Database
Management: Version 2
Systematischer Einsatz von SQL-Oracle
Jahr
1990
Seiten
538
1989
494
Understanding the new SQL
1993
536
a) Welche Normalformen sind verletzt?
b) Erzeugen Sie ein äquivalentes System in normalisierter Form.
4:
Kurs-Noten
Matrikel
30321
30321
30346
30346
30346
30378
Student
Meyer, J.
Meyer, J.
Ahrens, H.
Ahrens, H.
Ahrens, H.
Knudsen, K.
Kurs-Nr
706S6
715S4
715S4
706S6
713S5
706S6
Kurs-Titel
Datenbanksysteme
Software-Engineering
Software-Engineering
Datenbanksysteme
relationale u. funktionale Programmierung
Datenbanksysteme
Note
1,0
1,7
3,0
2,0
1,7
2,0
a) Welche Normalformen sind verletzt?
b) Erzeugen Sie ein äquivalentes System in normalisierter Form.
Referentielle Integrität
Durch die Normalisierung und die anschließende Verknüpfung haben wir uns das Problem der Redundanz
und der damit verbundenen Mutationsanomalien vom Halse geschafft, aber dafür ein neues Problem erzeugt.
Wird beispielsweise ein Freund aus der Freundetabelle gelöscht und nicht alle Datensätze aus den Kindtabellen, die in irgendeiner Beziehung zu diesem Datensatz stehen, dann entstehen Waisen also „elternlose“ Datensätze. Die referentielle Integrität ist damit nicht mehr gegeben. Ganz schlimm kann so etwas werden,
wenn irgendwann später einmal der gelöschte Schlüssel für einen anderen Freund neu vergeben wurde. Das
Wiederaufleben des Schlüssels stellt auch die Referenzen wieder her. Die möglichen Folgen können Sie sich
leicht selbst ausmalen! Viele Datenbanksysteme haben Mechanismen eingebaut, die die referentielle Integrität gewährleisten können.
Entity-Relationship-Diagramm (ER-Diagramm)
Der Entwurf einer Datenbank kann wie eben gesehen von den Daten her ausgehen, wobei oft eine vorhandene, gewachsene Tabelle als Ausgangsbasis dient. Wenn man aber eine Datenbank komplett neu konzipiert,
empfiehlt es sich, davon auszugehen in welchen Beziehungen die Daten untereinander stehen. Aus diesem
Entwurf werden direkt die Tabellen abgeleitet, die dann häufig bereits normiert sind. Es ist aber unerlässlich,
die entstandenen Tabellen auf die Einhaltung der Normalitätsregeln zu überprüfen.
Entitytyp (Objekt)
Eine Entity ist vergleichbar mit einer Tabelle. Die Daten eines bestimmten Kunden sind eine Entity. Eine
Datenbank besteht demnach aus mehreren Entities, die innerhalb einer Tabelle jeweils die gleiche Struktur
aufweisen.
10
Entity-Relationship-Diagramm (ER-Diagramm)
Referentielle Integrität
Attribute
Attribute sind die „Daten“ der Entity. Im Datenmodell einer Tabelle sind dies die Datenfelder in einer Spalte.
Wenn die Entity ein eindeutig identifizierbares Attribut besitzt (z.B. Kundennummer), dann wird es unterstrichen.
5:
Versandhandel 1
Zeichnen Sie das ER-Diagramm für folgende Entities:
ENTITY TYPE Artikel
DESCRIPTION Beschreibung für die verschiedenen Artikel. Artikel ist hier als
Kategorie einer Ware gemeint, die in einer größeren Menge auf Lager vorhanden sein kann.
ATTRIBUTES
Artikel-Nr
CHAR(4);
Bezeichnung
STRING;
Listenpreis
Geldbetrag;
Bestand
CARDINAL;
Mindestbestand
CARDINAL;
Verpackung
STRING;
Lagerplatz
Lager;
Kann-wegfallen
BOOLEAN;
keine Nachbestellung, wenn Lager geräumt
Bestellvorschlag
Zeitpunkt;
vom System automatisch erzeugt
Nachbestellung
Zeitpunkt;
tatsächliche Bestellung
Nachbestellmenge
CARDINAL;
KEY (Artikel Nr)
END
Artikel;
ENTITY TYPE MWSt-Satz
DESCRIPTION Mehrwertsteuersatz. Da der Mehrwertsteuersatz gesetzlichen Änderungen unterliegt und da es mehrere Möglichkeiten der Versteuerung gibt
(keine MWSt, reduzierte MWSt, volle MWSt), werden die verschiedenen Sätze in dieser Tabelle beschrieben.
ATTRIBUTES
MwSt
CARDINAL;
Prozent
NUMERIC(3,1);
Beschreibung
STRING;
KEY (MWSt)
END MWSt-Satz;
ENTITY TYPE Kunde
DESCRIPTION Beschreibung der relevanten Kundendaten.
ATTRIBUTES
Kunden-Nr
CARDINAL;
11
Entity-Relationship-Diagramm (ER-Diagramm)
Referentielle Integrität
Status
(Stammkunde, Werbung, Gelegenheitskunde)
Name
STRING;
Straße
Straßen;
PLZ
Postleitzahlen;
Ort
Orte;
letzte-Bestellung
DATE;
letzte-Werbeaktion DATE;
KEY (Kunden-Nr)
END Kunde;
ENTITY TYPE Bestellung
DESCRIPTION Dieser Entitätstyp beschreibt einen Bestellvorgang von der Bestell-Aufnahme bis zur Lieferung. Allerdings wird eine stornierte Bestellung aus der Datenbank gelöscht, ohne dass dieser Vorgang in der Datenbank vermerkt wird.
ATTRIBUTES
Bestell-Nr
CARDINAL;
Bestell-Datum
DATE;
Liefer-Datum
DATE;
Rechnungsbetrag
Geldbetrag;
KEY (Bestell-Nr)
END Bestellung;
Abhängige (weak) Entities
Um Speicherplatz zu sparen, kann man Entities als von einer anderen Entity abhängig deklarieren. Die weak
Entity „erbt“ dann gewissermaßen das Schlüsselattribut von der strong Entity. Man kann das so sehen, als ob
an eine Karteikarte (manchmal) ein weiteres Blatt angeheftet wird. In der graphischen Darstellung wird diese
Entity mit einem doppelten Rahmen gezeichnet. Wichtig ist, dass diese Entität mit verschwinden muss, wenn
die zugehörige „Hauptindentität“ gelöscht wird.
6:
Versandhandel 2
Zeichnen Sie die vom Kunden abhängige Entity „Girokonto“ in das Diagramm der vorigen Aufgabe ein.
ENTITY TYPE Girokonto
DEPENDENT ON Kunde
DESCRIPTION Bankverbindungen der Kunden, die eine Einzugsermächtigung erteilt
haben. Falls (ausnahmsweise) mehrere Kunden dieselbe Bankverbindung belasten, ist das Konto mehrfach aufzunehmen, da andernfalls die Konto-Änderung eines Kunden problematische Konsequenzen hätte.
ATTRIBUTES
Konto-Inhaber String;
BLZ
Bankleitzahlen;
Konto-Nr
String(10);
END Girokonto;
Lösung:
12
Entity-Relationship-Diagramm (ER-Diagramm)
Referentielle Integrität
Relation
Das ER-Modell kennzeichnet die Beziehungen der Entities (die Relationen) durch eine Raute. Die beteiligten
Entitäten haben eine „Rolle“.
7:
Schule
Erstellen Sie ein Entity-Relationship-Diagramm mit folgenden Begriffen:
Entities:
Schüler, Schule, Ort
Attribute:
PLZ, Einwohnerzahl, Ortsname, Schülername, Schulname, Schülernummer,
Schulart, Schüleranzahl, Vorname, Klasse, Schulnummer (unterstreichen des
eindeutigen Attributs nicht vergessen!)
Relationen:
wohnt, besucht
Lösung:
13
Entity-Relationship-Diagramm (ER-Diagramm)
Referentielle Integrität
Kardinalität
Schauen Sie sich wieder die Aufgabe „Versandhandel 1“ an. Beziehungen bestehen hier zwischen jeweils einer Bestellung und genau einem
Kunden und zwischen jeweils einer Bestellung
und mehreren Artikeln. Man kann bei den Beziehungen vier Fälle unterscheiden:
0..1
null-one
0..*
null-many
1..1
one-one
1..*
one-many
Der fünfte Fall: n..m many-many kann stets
aufgelöst werden indem man die eine Relation
in zwei Relationen auftrennt.
Die Darstellung in einem vereinfachten ER-Diagramm
In einem vereinfachten ERDiagramm werden die entities als
Kästen dargestellt und die Beziehungen als Striche mit Beschriftung und nicht als Raute. Die
weak (abhängigen) entities werden normalerweise unter oder
neben den strong (unabhängigen)
entities aufgelistet. Die Beziehungen werden ebenfalls näher beschrieben, wenn es dazu Daten
gibt. In diesem Fall wird hier der
Vorgang des Ausleihens näher
durch Ausleihdatum und Rückgabedatum beschrieben. Die Beziehungen werden an dieser Stelle
bereits in 1:N-, M:N- und 1:1Beziehungen festgelegt. Beim ER-Modell ist der Vorgang, das Diagramm zu erstellen, wohl der aufwendigste und manchmal auch komplizierteste Schritt. Ein Fehler an dieser Stelle bringt das ganze Modell zum
Scheitern. Daher ist dieser Schritt sehr gründlich durchzuführen.
Bitte beachten Sie, daß es sich nach wie vor um keine Tabellen und deren Beziehnungen handelt, sondern
um die Darstellung eines ER-Modells.
Die obige M:N-Beziehung zwischen Kunde und Kassette ergibt sich daraus, daß ein Kunde mehrere Kassetten leihen kann, eine Kassette aber an mehrere Kunden verliehen werden kann.
8:
Versandhandel 3
Fügen Sie die Relationen zur Aufgabe Versandhandel1 hinzu.
RELATIONSHIP TYPE Bestellung-Kunde
ROLES
Bestellung Bestellung OPTIONAL MULTIPLE;
kunde
Kunden
MANDATORY UNIQUE;
END Bestellung-Kunden;
RELATIONSHIP TYPE Position
ROLES
14
Entity-Relationship-Diagramm (ER-Diagramm)
Bestellung
artikel
ATTRIBUTES
menge
preis
END Position;
Bestellung
Artikel
Fünf Schritte zum ER-Modell
OPTIONAL MULTIPLE;
MANDATORY MULTIPLE;
CARDINAL;
Geldbetrag
RELATIONSHIP TYPE Kunde-Girokonto
ROLES
kunde
Kunde
MANDATORY UNIOUE;
konto
Girokonto
OPTIONAL UNIQUE;
END
Kunde-Girokonto,
RELATIONSHIP TYPE Artikel-Mwstsatz
ROLES
artikel
Artikel
OPTIONAL MULTIPLE;
mwstsatz
Mwstsatz
MANDATORY UNIQUE;
END Artikel-Mwstsatz;
Lösung
Der Beziehungstyp der zweiten Relation enthält noch ein Attribut über die Anzahl der georderten Artikel und
den Gesamtpreis für diese Artikel (dieser kann später nicht mehr aus den ArtikelDaten rekonstruiert werden,
da der Preis sich geändert haben kann; außerdem sind gegebenenfalls auch Sonderkonditionen möglich).
Fünf Schritte zum ER-Modell
Ein ER-Modell wird in folgenden Schritten erstellt:
1. Datenobjekte werden aus der Beschreibung des Systems identifiziert. Dazu müssen für jedes Datenobjekt die relevanten Attribute bestimmt werden. Die Attribute sollten einfache, nichtstrukturierte
Eigenschaften darstellen, die sich mit nichtstrukturierten Werten belegen lassen.
2. Entitäten werden teilweise direkt aus der Beschreibung des Systems identifiziert, teilweise durch
Verallgemeinerung der gruppierten Datenobjekte. Jede Entität modelliert genau ein Konzept. Es
handelt sich um alle im System vorhandenen physischen Elemente (z.B. Lehrer, Klasse).
3. Die Menge der Entitäten wird dadurch erweitert, daß auch abstrakte (nicht sichtbare) Entitäten (z.B.
Projekt, Budget) identifiziert werden.
4. Die Beziehungen werden identifiziert. Es wird ermittelt, in welche Wechselwirkungen die Datenobjekte einzelner Entitäten treten. Die gefundenen Wechselwirkungen werden durch Tupel der Beziehungen modelliert.
5. Die Kardinalität der Beziehungen wird untersucht und bestimmt.
15
Überlegungen beim Entwurf eines Datenmodells*)
9:
ER-Diagramm
CD-Verleih
Gehen Sie zurück zum Beispiel der normalisierten Tabellen des CD-Verleihs auf der Seite 7.
Zeichnen Sie das ER-Diagramm für diese Tabellen. Beachten Sie, dass die Tabellenfelder mit
den Fremdschlüsseln nicht als Attribute im ER-Diagramm erscheinen! Setzen Sie die Tabelle
tbVerleih als Relation und nicht als Entity um.
Überlegungen beim Entwurf eines Datenmodells*)
Ergebnis der folgenden Überlegungen soll
eine Verwaltung für eine private Büchersammlung sein. Bei Büchern ist es sicher
sinnvoll, Daten wie Autor, Titel, Untertitel,
Verlag und Sprache zu erfassen und vielleicht noch Felder für Kaufdatum, Erscheinungsjahr und Bemerkungen vorzusehen.
Enthält die Sammlung vorwiegend Sachbücher. hilft eine Klassifizierung nach Sachgebieten, Belletristik könnte man nach Genre
sortieren. Wer es bunt mag, spendiert noch
ein Feld, das einen Scan des Einbands aufnimmt. Bei verliehenen Büchern sind der
Entleiher, Verleih- und versprochenes Rück,gabedatum zu erfassen.
Bei der Festlegung, wie die Tabellen der zu
erstellenden Datenbank aufgebaut sein sollen, ist es oft hilfreich, einfach erst einmal
die Hauptwörter aus einer solchen groben
Beschreibung herauszuschreiben, zu gruppieren und sich zu überlegen. in welcher
Beziehung sie stehen. Zwei Tabellen kristallisieren sich sofort heraus: 'Buch' und 'Entleiher'. Bei der Entscheidung, welche Attribute als Felder beispielsweise der Tabelle
'Buch' zu realisieren sind und für welche
eine verknüpfte Tabelle zu spendieren ist,
helfen Fragen wie: 'Hat dieses Attribut jedes Buch, die meisten oder nur wenige?', 'Kann es mehrfach bei
einem Buch vorhanden sein?' und 'Ist es atomar, also durch eine Zahl, einen kurzen Text oder Ähnliches
darstellbar, oder besteht es aus weiteren Unterattributen?' Jedes Buch hat einen Titel und eine Sprache, ist in
einem bestimmten Jahr in einem Verlag erschienen und zu einem Zeitpunkt gekauft worden. Einige Bücher
haben einen Untertitel, für einige liegt ein Umschlag-Scan vor, und zu einigen fällt mir sofort eine Bemerkung ein. Bücher haben einen oder mehrere Autoren und gehören zu einer oder mehreren Kategorien. Ein
Verlag ist gekennzeichnet durch Name, Land und Ort, ein Autor durch Vor- und Nachname. Letzteres gilt
auch für einen Entleiher, der außerdem eine Telefonnummer und eine E-Mail-Adresse hat. Eine Person kann
sich zu unterschiedlichen Zeitpunkten mehrere Bücher leihen und für jedes ein anderes Rückgabedatum vereinbaren; ein Buch kann nur an eine Person verliehen sein.
ER-Diagramm
Die geschilderten Zusammenhänge kann man grafisch wie in der Abbildung auf dieser Seite darstellen. Die
Rechtecke kennzeichnen dabei Objekte aus der realen Welt, die abgerundeten Kästen ihre Attribute. Rauten
stehen für Beziehungen zwischen Objekten; an den Enden ihrer Verbindungslinien steht ihre sogenannte
Kardinalität. die 1:n-, m:n- und 1:1-Beziehungen auseinander hält.
*)
(nach c’t Heft 18/2001)
16
Überlegungen beim Entwurf eines Datenmodells*)
Tabellen erstellen
Tabellen erstellen
Aus einer solchen Grafik lässt sich unmittelbar die Tabellenstruktur der Datenbank ableiten: Rechtecke werden zu Tabellen, die dazugehörigen Attribute zu deren Feldern. Die Tabelle am Ende jeder 1:n-Beziehung
bekommt ein weiteres Feld mit einem entsprechenden Fremdschlüssel. Zusätzliche Tabellen sind für
m:n-Beziehungen vorzusehen, neben eventuellen Attributen besitzen sie ein Feld für jede an der Relation
beteiligte Tabelle.
Relationen mit Attributen
Einen Sonderfall stellt in diesem Beispiel die 1:n-Relation 'hat geliehen’ dar, die man eigentlich ohne zusätzliche Tabelle realisieren könnte. Aber wo bringt man Entleih- und geplantes Rückgabedatum unter? Speichert man sie in der Buch-Tabelle, verschwendet man Speicherplatz. denn die müsste diese Felder für jedes
Buch bereithalten, obwohl in der Regel nur wenige Bücher verliehen sind. Schlägt man sie andererseits der
Entleiher-Tabelle zu, müsste man Name, Telefonnummer und E-Mail-Adresse des Empfängers jedes Mal
neu ausfüllen, auch wenn sich ein und dieselbe Person mehrere Bücher leiht; außerdem gehen diese Informationen verloren, wenn man den entsprechenden Eintrag löscht, weil jemand ein Buch zurückgibt. Die beste
Lösung ist hier wohl, eine Extra-Tabelle 'Leihe' zu spendieren, die die Felder 'Buch' und 'Entleiher’ als
Fremdschlüssel sowie die beiden Datumsfelder enthält.
Datentypen
Die Datentypen der einzelnen Tabellenfelder ergeben sich meist intuitiv. Zu beachten ist, dass Frerndschlüsselfelder denselben Typ besitzen müssen wie das Primärschlüsselfeld, auf das sie verweisen. Ansonsten sollte man Zahlentypen nur dann verwenden, wenn man die Werte für Berechnungen verwenden oder Datensätze numerisch sortieren will - für deutsche Postleitzahlen ist beispielsweise ein fünf Zeichen fassendes Textfeld angebrachter, denn sonst erscheint Leipzig (04105) nur vierstellig. Bei der Dimensionierung von Textfeldem sollte man nicht zu sparsam sein, denn bei den meisten modernen Datenbankprogrammen belegen
Datensätze auf der Festplatte nur die Anzahl von Zeichen, die tatsächlich benutzt sind. Lediglich ältere Datenbankformate wie dBase arbeiten mit festen Feldlängen und verbraten für ein Textfeld, das 100 Zeichen
fassen darf, in jedem Datensatz 100 Bytes, auch wenn dort nur 'Der Herr der Ringe' steht.
Auf dem Index: die Schlüsselfelder
Für die Primärschlüssel der Tabellen kommen in diesem Beispiel eigentlich nur automatisch hochgezählte
laufende Nummern in Frage, es gibt bei keinem der Objekte Attribute, die es eindeutig kennzeichnen. Man
könnte auf die Idee kommen, zu jedem Buch seine ISBN zu speichern und als Primärschlüssel zu verwenden, das kann aber zu Problemen führen, wenn man mehrere Bände eines Werkes getrennt verwalten will
oder wenn etwa ein Versandhauskatalog seinen Platz in der Bibliothek finden soll.
Für Sekundärindizes sind selbstverständlich erst einmal alle Fremdschlüsselfelder vorzusehen, damit man
beispielsweise schnell von einem Verlag zu den Büchern gelangt, die er herausgegeben hat. Welche weiteren
Felder man indiziert, ist weitgehend Geschmackssache und hängt davon ab, wonach man häufig suchen und
sortieren will. Folgendes ist dabei allerdings zu beachten: Man wird die Datenbank wohl selten benutzen, um
beispielsweise herauszufinden, wie ein Autor namens Brecht mit Vornamen heißt, also für eine Suche nur in
der Autoren-Tabelle. Allerdings ist eine Anfrage wie 'alle Bücher eines Autors, der mit Nachnamen Brecht
heißt' durchaus sinnvoll. Daher sollte die Datenbank einen Sekundärindex über die Nachnamen der Autoren
enthalten. Dasselbe gilt für die Namen von Verlagen und Entleihern.
Datenbankanwendung fertigstellen
Mit dem Entwurf des Datenmodells und dem Anlegen der Tabellen ist ein Großteil der Handarbeit auf dem
Weg zu einer Datenbankanwendung erledigt. Was fehlt, sind Eingabeund Suchmasken, mit denen man den
Datenbestand bequem pflegen und durchforschen kann, sowie Formulardefinitionen zum Drucken von Berichten. Die meisten modernen Datenbankprogramme bieten dafür aber recht brauchbare Vorlagen oder Assistenten an, die zumindest ein funktionierendes Grundgerüst erstellen.
17
Umsetzung ER-Diagramm in Tabellen
Datenbankanwendung fertigstellen
Der Rest ist Kosmetik. So kann man sich die Dateneingabe dadurch erleichtern, dass die Datenbank beim
Anlegen eines neues Datensatzes bestimmte Felder mit sinnvollen Vorgaben belegt, etwa 'Heute' als Kaufdatum und 'Deutsch' als Sprache beim Eintragen eines neuen Buches. Wer zusätzlich Lust verspürt, sich in die
Skript- oder Programmiersprache eines Datenbanksystems einzuarbeiten, eröffnet sich die Möglichkeit, weitere Funktionen um die eigentliche Datenbank herum zu programmieren, etwa das automatische Versenden
von ErinnerungsMails an säumige Entleiher.
Umsetzung ER-Diagramm in Tabellen
Die nachfolgenden Regeln sind für eine schrittweise Erstellung eines normalisierten Datenmodells gedacht.
Die Verfahrensweise soll an folgendem Beispiel erläutert werden. Ein Kunde leiht Video-Kassetten. Jede
Kassette hat einen Titel und ist in einer Kategorie eingeteilt. Die Kategorien haben unterschiedliche Leihpreise.
Die erste Regel:
Wertetypen werden 1:1 auf Datentypen abgebildet. Hier wird also festgelegt, dass z. B. das Feld »Name« ein
Textfeld ist und das Geburtsdatum in einem Datumsfeld gespeichert wird. Es werden die Datentypen festgelegt.
Durch diesen Schritt entstehen die Entitäten und deren Attribute
Die zweite Regel:
Ein Gegenstand (Entity) wird mit all seinen Attributen zu jeweils einer Tabelle zusammengefasst.
Durch die zweite Regel erfolgt also die Umsetzung in Tabellen. Die strong entities werden mit den dazugehörigen weak entites in einer Tabelle abgelegt. Ab diesem Punkt existieren die ersten Tabellen in unserem
Modell und wir haben eine gute Basis für die weitere Regel geschaffen. Die Kassettentabelle hat im Moment
noch gar kein Feld, aber wir sind noch nicht fertig.
18
Umsetzung ER-Diagramm in Tabellen
Datenbankanwendung fertigstellen
Die dritte Regel:
Jeder Gegenstand erhält ein 1:1-Attribut als Identifikator (Primärschlüssel), soweit noch nicht vorhanden.
Der notwendige Primärschlüssel in einem relationalen Datenbankmodell wurde bereits besprochen. Als Primärschlüssel kann hier ein vorhandenes Datenfeld benutzt werden, oder es wird ein Feld hinzugefügt (z.B.
eine »Kundennummer«). Nach diesem Schritt haben wir also alle Objekte untergebracht, und es sind nur
noch die Beziehungen zu definieren.
Die vierte Regel:
Jede M:N-Beziehung wird in einer eigenen Tabelle abgebildet. Diese Tabelle enthält die Primärschlüssel der
beteiligten Entitäten und die Datenfelder, die die Beziehung selbst beschreiben.
1:N-Beziehungen werden durch Einfügen des Primärschlüssels der 1-Tabelle in der N-Tabelle als Fremdschlüssel realisiert.
Dieser Schritt löst unsere verbleibenden Beziehungen auf, so dass diese in Tabellen realisiert werden können.
Lösung:
19
Zusammenfassung
Datenbankanwendung fertigstellen
Zusammenfassung
10:
1.
Das Datenmodell wird mit keinerlei Blickpunkt auf die Programmierung erstellt. Es ist einzig
und allein die Umsetzung der realen Welt auf die Ebene der Datenverarbeitung. Programmiertechnische Überlegungen haben an dieser Stelle nichts zu suchen. Diese Regel gilt jedoch nur,
wenn Aspekte der Geschwindigkeit unberücksichtigt bleiben können. Bei DataWarehouseAnwendungen ist es oft erforderlich, daß redundante Daten angelegt werden, um die Zugriffszeiten auf Tabellen und Datenbanken zu reduzieren. In diesem Fall wird nach der dritten Normalform oder beim ER-Modell nach der vierten Regel das Modell mit dem Gesichtspunkt der optimalen Geschwindigkeit modifiziert.
2.
Das Normalisieren nach Codd und das ER-Modell sind zwei getrennte, unabhängig voneinander
existierende Methoden. Natürlich kann ein Datenmodell, das nach Codd erstellt wurde, immer
mit einem ER-Diagramm dargestellt werden, da beide Verfahren das relationale Datenbanksystem zum Ziel haben.
3.
Bevorzugen Sie das Datenbank-Design mit dem ER-Modell, prüfen Sie wenigstens die Werte
auf Abhängigkeit, wie es bei der Methode von Codd erfolgt. Dies erspart Ihnen oft nachträgliches Ändern im Datenmodell.
4.
Das Modellieren der Daten in Tabellen ist ein nicht zu unterschätzender Punkt. Fehler beim Modellieren kosten zu einem späteren Zeitpunkt enorm viel Zeit. Sollen Änderungen an dem Modell
durchgeführt werden, müssen diese Änderungen durch alle Stufen der benutzten Methode durchgezogen werden. Es führt zu Fehlern, wenn versucht wird, die dritte Normalform, die ja das Ergebnis beider besprochener Verfahren ist, abzuändern und anzupassen.
5.
Änderungen an einem fertigen Datenmodell sind immer ein Hinweis darauf, daß die Tabellen
nicht korrekt normalisiert worden sind. Die Ursache ist meist, daß in der Anwendungsanalyse
nicht gründlich genug gearbeitet wurde. Diese Phase kann bis zu 30% des Aufwandes für die Erstellung der gesamten Anwendung einnehmen, und man sollte sich diese Zeit unbedingt nehmen.
6.
Tabellen müssen in einer bestimmten Reihenfolge gefüllt werden. Die Tabellen ohne Fremdschlüssel müssen zuerst mit Daten gefüllt werden. In unserem Beispiel kann keine Kassette erfaßt werden, wenn keine Titel und keine Kategorien mit ihren Preisen eingegeben wurden. Es ist
die Aufgabe der Programmierung, dies abzufangen und den Benutzer hier richtig zu leiten.
ER-Diagramm1
Erstellen Sie für das Beispiel in der dritten Normalform (Seite 7) das ER-Diagramm.
11:
Kardinalitäten
Untersuchen Sie, welche Kardinalitäten in folgenden Beziehungen möglich sind - geben Sie dafür gegebenenfalls Randbedingungen vor:
12:
a)
Postleitzahlen Orte (in Deutschland)
b)
Steuernummer Steuerpflichtiger
c)
Kind
↔
Vater
d)
Kind
↔
Mutter
e)
Kind
↔
Elternteil
ER-Diagramm2
Erstellen Sie für die Beziehungen der vorigen Aufgabe ER-Diagramme. Beachten Sie dabei,
dass wir in c), d), und e) in der Aufgabenstellung nicht die Entitätenmengen angegeben haben
(die auf beiden Seiten jeweils »Person« ist), sondern Rollen.
20
Zusammenfassung
13:
Datenbankanwendung fertigstellen
Schlüsselattribute
Erstellen Sie für die folgenden Angaben jeweils ein Entity-Relationship-Diagramm und bestimmen Sie die Schlüsselattribute.
14:
a)
Es gibt Personen, Bücher und Verlage. Jedes Buch hat einen oder mehrere Autoren.
Jedes Buch kann zu gegebener Zeit von höchstens einem Ausleiher ausgeliehen werden. Ein Ausleiher kann mehrere Bücher leihen, Ein Buch ist von einem Verlag.
b)
Ein Auto ist von einem Hersteller. Es hat zum Zeitpunkt der Herstellung keinen Halter,
sonst höchstens einen Halter. Auf einen Halter können mehrere Autos eingetragen
sein.
c)
In einer Bibliothek gibt es »Buchtitel« und »Buchexemplare«. Für einen Buchtitel können mehrere Exemplare vorhanden sein, jedoch immer mindestens eins. Ausleiher leihen Buchexemplare. Ausleiher können Buchtitel vormerken lassen. Ausleiher und Autoren sind Personen.
d)
Personen sind Studenten oder Professoren. Jede Vorlesung wird von einem Professor
gehalten. Ein Professor hält mehrere Vorlesungen. Ein Student besucht mehrere Vorlesungen. Eine Vorlesung wird von mehreren Studenten besucht, aber erst nach Semesterbeginn steht fest, von wem. Ein Professor empfiehlt für eine bestimmte Vorlesung ein
Buch.
Segeltörn
Eine Yachtagentur will die Törns (Touren) ihrer Segelyachten mit einer Datenbank verwalten.
Dabei geht es darum, die Mitfahrer ebenso zu erfassen wie die im Lauf der Tour angelaufenen
Häfen. Es gelten folgende Regeln:
1.
Eine Crew setzt sich aus mehreren Mitfahrern zusammen. Mitfahrer müssen an keiner
Crew teilnehmen, können aber auch an mehreren Crews beteiligt sein.
2.
Eine Crew bezieht sich immer auf eine Tour. Während einer Tour kann aber die Crew
wechseln.
3.
Für jede Tour gibt es einen Kapitän. Ein Kapitän kann natürlich an mehreren Touren
teilnehmen,
4.
Kapitäne und Mitfahrer sind Personen.
5.
Eine Tour wird immer von einer Yacht gefahren. Meistens überlebt eine Yacht die erste
Fahrt. Dann kann sie an weiteren Touren teilnehmen.
6.
Während einer Tour läuft eine Yacht mehrere Häfen an.
Modellieren Sie grafisch die Entitätenmengen- und Beziehungsmengen. Legen Sie Schlüsselattribute und die wichtigsten anderen Attribute fest.
15:
Arztpraxis1
Nichts ist ernüchternder als die Wirklichkeit! Nach mehrmaligem Umdrehen Ihrer leeren Taschen
beschließen Sie, den am Uni-Aushang angekündigten Hilfsjob bei den Medizinern (Seufz!) als
Systemdesigner im Projekt "Diabetes" bei Chefarzt Prof. Dr. Dr. hc. mult. Gerngroß anzunehmen. Die erste Begegnung verläuft wie folgt: Sie betreten nach langem Warten das Vorzimmer
des Chefs. Sie betreten nach langem Warten das Arbeitszimmer des Chefs. Nach langem Warten kommt der Chef herein, im grünen Kittel (Vorsicht: Klischee!), und reicht Ihnen die plastikbehandschuhte Hand. Nun geht alles ziemlich rasch:
"Schön, dass Sie den Job bei uns angenommen haben. Unsere Sekretärin wird nachher mit Ihnen den Papierkram erledigen. Projektgelder sind genug da. Also, nächste Woche brauche ich
einen Datenbankentwurf für unsere Diabetesambulanz. Nun ... Die Diabetikerbetreuung läuft bei
1
Universität Ulm -Sektion Angewandte Informationsverarbeitung 3.Übungsblatt (09.11.98 bis
16.11.98) zur Vorlesung Software Engineering Praxis (WS 98/99)
21
Zusammenfassung
Datenbankanwendung fertigstellen
uns in etwa wie folgt ab: Also, ähh, die Patienten kommen halt regelmäßig zur Untersuchung. Ja
- stationär zur Stoffwechseleinstellung, so alle zwei Jahre. Dann aber regelmäßig alle Vierteljahr
zur ambulanten Untersuchung. Die stationäre lassen wir mal weg! Ambulant - ja, das ist wegen
des neuen EBM-Katalogs und des GSG III primär dringend. Bis nächste Woche, das sagte ich ja
schon. Die Patienten werden also ambulant untersucht ... Auf der Akte sehe ich immer, wen ich
vor mir habe. Alter, Geschlecht und so. Wohnort... Na ja, alle unveränderlichen Merkmale eines
Menschen halt, Stammdaten sagt man glaub'. Auch den betreuenden Hausarzt vor Ort. Da
kommen viele vom gleichen Hausarzt. Da könnte ich Geschichten erzählen... Jedenfalls werden
die Patienten dann untersucht. Pro Untersuchung: Gewicht, Größe, Blutdruck etc. eben die ganzen antropometrischen Daten, Sie wissen! Dann halt das Labor. Ja mei, HbA1c-Wert, Kalium,
Natrium. Betreut werden die bei uns von 6 Klinikärzten. Jeder hat seine festen Patienten. Wir
sind ein eingespieltes Team. Nicht so wie an der Uni XYZ! Ach ja ... Natürlich wird die Insulintherapie des Patienten eingestellt. Bei uns ist die Intensivierte Therapie als Ergebnis der DCCTStudie eingeführt worden! Die Patienten spritzen bis zu 7 mal pro Tag. Keine festen Dosen ... Sie
wissen das sicher! Wir sagen ihnen nur wie viel Insulin pro gegessener Broteinheit sie spritzen
sollen. Und geben Ihnen mit, wie viel Broteinheiten wir empfehlen. Noch Fragen? Nein? Gut! Ich
fasse zusammen: Also bis nächste Woche der Entwurf. Patientenstammdaten, ambulante Untersuchungen. Sie machen das schon! Hals- und Beinbruch! Auf Wiedersehen! Der nächste bitte!"
Sie machen das schon: Bis nächste Woche ein ER-Diagramm, bei dem Sie versuchen, das
Durcheinander des Chefarztes in sinnvolle Relationen und auf Papier zu bannen. Zu einem guten Entwurf gehört natürlich auch eine Umsetzung in Tabellen. Der Chefarzt würde zwar nichts
merken, da Sie aber auch Ihrem Gewissen verpflichtet sind, beschließen Sie, dass die Tabellen
alle der 3.Normalform genügen sollen. Und einem Chefarzt (hier: Tutor) legt man seinen Entwurf
natürlich nicht handschriftlich vor! Sondern eben mit einem netten Malprogramm gezeichnet
Der nächste bitte!
16:
Uni1
Erstellen Sie die Tabellen für die Universitätsverwaltung
22
Rekursive Beziehungen
Umsetzung in Relationen (Tabellen)
Rekursive Beziehungen
Beispiel:
"Ein Angestellter kann einem oder mehreren anderen Angestellten vorgesetzt
sein. Wir halten das Datum der Übernahme dieser Führungsfunktion fest."
N am e
A d re s s e
D a tu m
(0 ,n )
A n g e s te llte r
le ite n
(0 ,1 )
Dies ist eine binäre Beziehung und damit problemlos in eine Tabelle abbildbar:
Projektleiter
Mitarbeiter
Datum
Ternäre Beziehungen
Beispiel1:2
"Wir beziehen die Bestandteile über Artikelnummer - von einem Lieferanten für ein bestimmtes Projekt. Den Lieferanten identifizieren wir mit einer
Lieferantennummer, jedes Projekt verfügt über einen einmaligen Codenamen. Die bestellte
Menge und den Preis halten wir
natürlich fest."
Lief.-N r.
M en g e
Lie fe ra n t
(0,m )
C o d en am e
P reis
beziehe n
(0 ,m )
P ro je kt
(0,m )
A rtike l-N r.
B e stan d te il
Beispiel2:3
"Unser Schulungsinformationssystem soll folgende Tatbestände abbilden: Ein Kurs kann wegen des großen
Andranges in mehreren Kursräumen gleichzeitig gehalten werden. Um die einzelnen Schulungen identifizieren zu können, verwenden wir daher neben den Kursnamen eindeutige KursIDs. An einem Kurs können
natürlich mehrere Personen teilnehmen, von denen wir Name und Addresse erfassen. Die Räumlichkeiten
identifizieren wir anhand von Raumnummern; wir wollen vor allem die Rechnerausstattung festhalten."
Umsetzung in Relationen (Tabellen)
Beziehungstypen, die mehr als zwei Entitätstypen miteinander in Beziehung setzen, werden in einer eigenen
Relation abgebildet. Die Relation erhält als Fremdschlüsselattribut die Primärschlüssel der Entitätstypen, die
dadurch verbunden werden.
2
Beispiel von WU Wien
3
Beispiel von WU Wien
23
Ternäre Beziehungen
Umsetzung in Relationen (Tabellen)
Existiert eine strukturelle Bedingung, deren Maximalwert 1 ist, reicht es, dieses Fremdschlüsselattribut in der
abgeleiteten Relation als Primärschlüssel zu definieren. Ansonsten bilden alle Fremdschlüsselattribute den
Primärschlüssel.
Wunsch
W-Nr.
Wunsch
(0,1)
beauftragen
(0,m)
(0,m)
stationiert
Hilfsosterhase
Name
SV-Nr.
Osterhase
Name
SV-Nr.
Wunsch
W-Nr.
...
Wunsch
K-SVNr
O-SVNr
Auftrag
W-Nr.
...
H-SVNr.
O-SVNr.
Osterhase
SV.-Nr.
Name
Hilfsosterhase
SV.-Nr.
...
17:
Name
stationiert
...
Transportkompanie
Eine Transportkompanie der Schweizer Armee benötigt zur Abwicklung der Transportzentrale eine Datenbank. Früher wurde die Abwicklung in MS Excel gemacht.
Ein Unteroffizier verwaltet die Standalone Datenbank. Die Fahraufträge kommen per Fax oder
telefonisch. Angegeben wird bei der Bestellung die Route das Transportgut und die am Auftragsort zuständige Person.
Der Unteroffizier wählt anhand des Transportguts und der Strecke das passende Fahrzeug aus.
Er wählt einen Motorfahrer, der dieses Fahrzeug führen kann. Der Unteroffizier nimmt die Datenbank zu Hilfe.
In der Datenbank sind alle Fahrer erfasst. Unterschieden werden sie anhand der eindeutigen
Matrikel – Nummer. Des weiteren hat ein Fahrer noch einen Dienstgrad, Namen und Vornamen. Er hat die Fahrerlaubnis einer bestimmten Kategorie.
In einer Tabelle Kategorie sind der Kategoriename und die Bezeichnung der dazugehörigen
erlaubten Fahrzeuge gespeichert. Von einer Kategorie können mehrere Fahrer die Erlaubnis
haben.
Die Fahrzeuge müssen auch erfasst werden. Jedes Fahrzeug hat eine eindeutige Nummer
(Verkehrsschild) und eine Bezeichnung.
24
Ternäre Beziehungen
Umsetzung in Relationen (Tabellen)
Ein bestimmtes Fahrzeug gehört zu einem Typ. Ein Typ kann mehrere Fahrzeuge beinhalten.
Der Typ beinhaltet die Bezeichnung, Höhe, Breite, das Leergewicht in Kilo, das Höchstgewicht in
Zusatzaufgaben:
Erweitern Sie den Entwurf so, dass je Fahrauftrag mehrere Artikel transportiert werden können.
Kann das System so erweitert werden, dass jeder Artikel einen anderen Zielort erhält? Mit anderen Worten: Je Fahrauftrag müssen mehrere Ziele gespeichert werden.
Wenn die Fahrer alle KfZ fahren dürften, kann die Relation „darffahren“ entfallen. Dann kann der
Entitätentyp „Klasse“ ebenfalls entfallen und das Attribut dieses Typs direkt im Entitätentyp
„Fahrzeug“ erscheinen. Führen Sie die entsprechenden Änderungen durch.
25
Generalisierung
Umsetzung in Relationen (Tabellen)
Generalisierung
Zur weiteren Strukturierung der
Entity-Typen wird die Generalisierung eingesetzt. Hierbei werden
Eigenschaften von ähnlichen Entity-Typen einem gemeinsamen
Obertyp zugeordnet. Bei dem jeweiligen Untertyp verbleiben nur
die nicht faktorisierbaren Attribute. Somit stellt der Untertyp eine
Spezialisierung des Obertyps dar.
Diese Tatsache wird durch eine
Beziehung mit dem Namen is-a
(ist ein) ausgedrückt, welche durch
ein Sechseck, verbunden mit gerichteten Pfeilen symbolisiert
wird. In Abbildung 2.5 sind Assistenten und Professoren jeweils
Spezialisierungen von Angestellte
und stehen daher zu diesem EntityTyp in einer is-a Beziehung.
Beispiel:
"Bei unseren Angestellten unterscheiden wir zwischen den Sekretären und
den Managern. Namen und Adressen
halten wir von allen fest; von den Sekretären interessieren uns die Anschläge
pro Minute und von den Managern
wollen wir wissen, welche Projekte sie
leiten."
26
Datenbankzugriffe mit SQL
18:
Umsetzung in Relationen (Tabellen)
Uni2
Erstellen Sie die Tabellen für die Universitätsverwaltung
Datenbankzugriffe mit SQL
SQL (Structured Query Language) ist eine »Programmiersprache«, die nur noch ausdrückt, welches Ergebnis
gewünscht wird, und nicht wie der Rechner zu diesem Ergebnis kommt. Der Programmierer braucht sich
daher nicht um den Algorithmus der Datengewinnung zu kümmern. Diese „nicht-prozeduralen“ Sprachen
werden zu den Programmiersprachen der vierten Generation (4GL) gezählt (im Gegensatz zu prozeduralen
3GL-Sprachen wie Modula-2, Pascal, ADA, COBOL, BASIC, Fortran usw).
Die derzeit verbreitetste Sprache für relationale Datenbanken ist unbestritten SQL. Auch in Zukunft wird
diese Sprache keine Konkurrenz bekommen, was sich aus der Tatsache ableiten läßt, daß mittlerweile alle
Hersteller relationaler Datenbanken ihr System auf diese Sprache umgestellt haben.
Kleine SQL-Geschichte
Anfang der siebziger Jahre wurde in den IBM Forschungslaboratorien in San Jose, Kalifornien, ein Forschungsprojekt begonnen, das sich »System R« nannte. Es sollte die Praktizierbarkeit der relationalen Theorien untersuchen. Von den IBM-Mitarbeitern R.F. Boyce und D.D. Chamberlain wurde die Sprache
SEQUEL (sprich: siequel) entwickelt, die später in SQL umbenannt wurde. Man lehnte hierbei die Syntax an
Begriffe der englischen Umgangssprache wie z.B. SELECT, FROM, WHERE an.
Seit dieser Zeit wurden von fast allen DB-Herstellern SQL-Schnittstellen zu ihren relationalen und nichtrelationalen Datenbanksystemen entwickelt. Da nun auch eine ANSI- und eine IS0-Definition der Sprache SQL
27
Datenbankzugriffe mit SQL
SQL - Befehlsübersicht
vorliegt, ist zu erwarten, daß SQL die Sprache für alle zukünftigen relationalen Datenbanksysteme werden
wird.
Ein SQL-Beispiel:
Mit der Anweisung
CREATE TABLE ARTIKEL (ART_NR SMALLINT, ART_BEZ CHAR(13),
ART_ART CHAR(11), LIEF_NR SMALLINT)
wird eine leere Tabelle mit dem Namen ARTIKEL und dem folgendem Aufbau erzeugt:
Mit dem INSERT-Befehl ist es möglich, Daten in eine Tabelle einzufügen:
INSERT INTO ARTIKEL VALUES (1, 'Multisync II', 'Monitor', 1)
INSERT INTO ARTIKEL VALUES (2, 'Multisync I', 'Monitor', 2)
Mit dem SELECT-Befehl werden Daten aus der Tabelle selektiert:
SELECT ART_BEZ, ART_ART FROM ARTIKEL WHERE LIEF_NR = 2
Diese Abfrage liefert das Ergebnis:
SQL - Befehlsübersicht
Man unterscheidet fünf SQL-Kommandoklassen:
DATA Definition Language (DDL) (Daten-Definitions-Sprache)
Dazu zählen alle Datenbankanweisungen, mit denen die logische Struktur der Datenbank bzw. der Tabellen
der Datenbank beschrieben bzw. verändert wird, um Tabellen zu erzeugen, zu ändern und zu löschen und um
Indizes zu erzeugen und zu löschen.
DML Data Manipulation Language (Daten-Manipulations-Sprache)
Dazu zählen alle Anweisungen an das Datenbanksystem, die dazu dienen, die Daten zu verarbeiten, um Tabelleneinträge auszuwählen, einzufügen, zu aktualisieren und zu löschen. Hierzu gehören folgende Befehle:
Die SET-Klausel ist eine durch Kommas getrennte Liste von Aktualisierungsausdrücken. Jeder Ausdruck
setzt sich aus dem Namen einer Spalte, dem Zuweisungsoperator (=) und dem Aktualisierungswert (Aktualisierungsatom) für diese Spalte zusammen.
Die optionale WHERE-Klausel beschränkt Aktualisierungen auf einen Teil der Zeilen in der Tabelle. Ist
keine WHERE-Klausel angegeben, so werden alle Zeilen in der Tabelle unter Verwendung der Aktualisierungsausdrücke der SET-Klausel aktualisiert.
Transaction Control Language (TCL) (Daten-Steuerungs-Sprache
Die Transactionskommandos stellen die Datenintegrität sicher, indem logisch zusammenhängende Anweisungen entweder komplett oder gar nicht ausgeführt werden.
28
Abfrageformulierung mit SQL
Beispiel-Datenbank
Database Administration Language (DAL) (Datenbank-Verwaltungs-Sprache
Die Befehle aus dieser Kategorie dienen dem Anwendungsentwickler bzw. dem Datenbankadministrator.
Über SQL werden auch Datenbanken angelegt und geartet. Außerdem müssen Benutzer für die Datenbank
eingerichtet werden, wobei jedem Benutzer bestimmte Rechte für die Tabellen in der Datenbank einzuräumen sind.
DATA Query Language (DQL) (Daten-Abfrage-Sprache)
Dies wird wohl die meistgebrauchte Gruppe sein, da hier die SELECT-Anweisung auftaucht.
Abfrageformulierung mit SQL
Beispiel-Datenbank
Die Beispiele in der folgenden Tabelle beziehen sich auf diese Datenbank mit den Tabellen Teilnehmern,
Kurs und Ort.
Tabelle: Teilnehmer
Teiln
Nr
Name
Vorname
Strasse
Wohnort
100
101
102
103
104
105
106
107
108
Hirsch
Nicks
Unterländer
Peters
Wallung
Pfeiffer
Hauer
Hofmann
Sorglos
Harry
Steffi
Elke
Paul
Walther
Claudia
Hans
Helma
Susi
Baumgartenstr. 2
Holzweg 8
Max-Weber-Str. 12
Am Markt 1
Panoramapfad 33
Mozartweg 6
Im Winkel 16a
Am Bächle 3
Hauptstr. 143
75175 Pforzheim
73124 Oberndorf
81023 München
53522 Köln
09663 Grünstadt
74121 Ludwigshafen
12329 Talhausen
66822 Heidelberg
40210 Sonnstetten
Tabelle: Kurs
Kurs
Nr
Kurs
Dauer
Voraussetzungen
Ort_Nr
2.0
3.1
3.2
Projektmanagement
Kostenrechnung
IT-Marketing
5
2
1
010
011
011
1.0
3
4.1
5.1c
5.1b
5.1d
5.6
5.3
Geschäftsprozess,
betriebl. Organisation,
Grundlagen PC-Technik
C++ Anfängerkurs
Java Fortgeschrittenen-kurs
C++ Fortgeschrittenen-kurs
Grundlagen Datenbanken
Vertiefung Java
keine
keine
Teilnahme am Modul Kostenrechnung
keine
2
14
10
10
5
1
013
014
014
014
013
015
5.4
Dynamische Web-Seiten
2
4.3
Vertiefung PC-Technik
2
keine
keine
Programmiererfahrung
Programmiererfahrung
keine
Teilnahme am Fortgeschrittenenkurs oder vergleichbare
Kenntnisse
Kenntnisse einer höheren
Programmiersprache
Modul 4.1
012
010
013
29
Abfrageformulierung mit SQL
1 Projektion und Formatierung
Tabelle: Ort
Ort Nr
Ort
Schule
010
011
012
013
014
015
Ulm
Binzen
Ehingen
Pforzheim
Freiburg
Lörrach
Robert-Bosch-Schule
Fritz-Erler-Schule
Kfm. Schule
Heinrich-Wieland-Schule
Walther-Rathenau-Schule
Gewerbeschule
1 Projektion und Formatierung
Auswahl aller Spalten einer Tabelle
SELECT
*
FROM
<Tabelle>
Gesucht wird die Tabelle "Kurs".
Beispiel :
SELECT
*
FROM
Kurs
Auswahl einer Spalte einer Tabelle
Syntax :
SELECT
<Spalte>
FROM
<Tabelle>
Gesucht werden die Nachnamen aller Teilnehmer der Kurse.
Beispiel :
SELECT
Name
FROM
Teilnehmer
Auswahl mehrerer Spalten einer Tabelle
Syntax :
SELECT
<Spalte1> , <Spalte2> , ...
FROM
<Tabelle>
Gesucht werden die Vor- und Nachnamen aller Teilnehmer der Kurse.
Beispiel :
SELECT
Vorname, Name
FROM
Teilnehmer
Hinweis :
In SQL kann ein Anfrageergebnis mehrere identische Tupel enthalten.
Auswahl ohne mehrfaches Auftreten desselben Tupels
Syntax :
SELECT
DISTINCT
<Spalte>
FROM
<Tabelle>
Gesucht werden die verschiedenen Nachnamen der Teilnehmer der Kurse. Tragen zwei
Beispiel :
Teilnehmer den gleichen Nachnamen, so wird dieser nur einmal aufgeführt.
SELECT
DISTINCT
Name
FROM
Teilnehmer
Formatierte Ausgabe und Berechnungen in einer Selektion
Syntax :
Beispiel :
Es soll für jeden Kurs berechnet werden, wieviel Stunden dieser dauert.
SELECT
"Die Fortbildung ", Kurs, "dauert ", Dauer*8, " Stunden"
FROM
Kurs
Umbenennen von Spalten
Syntax :
Beispiel :
SELECT
<Spalte> AS <neuer Spaltenname>
FROM
<Tabelle>
Unter der Bezeichnung “Schulorte“ sind alle Schulen gesucht, die in der Tabelle "Ort"
gespeichert sind.
SELECT
DISTINCT
Ort AS Schulorte
FROM
Ort
30
Abfrageformulierung mit SQL
2 Selektion
Sortierung
Syntax :
Beispiel :
SELECT
<Spalte>
FROM
<Tabelle>
ORDER BY
<Spalte> {DESC | ASC}
Gesucht wird für jeden Teilnehmer der Name und sein Wohnort. Dabei ist die Ergebnistabelle absteigend nach dem Namen sortiert auszugeben.
SELECT
Name, Wohnort
FROM
Teilnehmer
ORDER BY
Name DESC
2 Selektion
SELECT
<Spalte>
FROM
<Tabelle>
WHERE
<Bedingung>
Selektion mit einfachem Vergleich
Syntax :
Beispiel :
Gesucht werden die Kurse, bei denen keine Voraussetzungen notwendig sind.
SELECT
Kurs
FROM
Kurs
WHERE
Voraussetzungen = 'keine'
Gesucht werden die Kurse, bei denen Voraussetzungen gefordert werden.
Beispiel :
SELECT
Kurs, Voraussetzungen
FROM
Kurs
WHERE
NOT (Voraussetzungen = 'keine')
Gesucht werden die Kurse, die mindestens 3 Tage dauern.
Beispiel :
SELECT
Kurs, Dauer
FROM
Kurs
WHERE
Dauer >= 3
Selektion mit mehreren Bedingungen
Beispiel :
Gesucht werden alle Kurse, die Programmiererfahrung erfordern und weniger als 10
Tage dauern.
SELECT
Kurs
FROM
Kurs
WHERE
Voraussetzungen = 'Programmiererfahrung'
AND
Dauer < 10
Gesucht werden die Namen und Wohnorte aller Teilnehmer, deren Vorname Harry oder
Beispiel :
Susi ist.
SELECT
Name, Wohnort
FROM
Teilnehmer
WHERE
Vorname = 'Harry'
OR
Vorname = 'Susi'
Selektion mit dem Operator IN
Beispiel :
Gesucht werden die Namen aller Schulen, die in Binzen oder Freiburg sind.
SELECT
Schule
FROM
Ort
WHERE
Ort IN (''Binzen, 'Freiburg')
Gesucht werden die Namen aller Schulen, die nicht inLörrach, Binzen und Freiburg
Beispiel :
sind.
SELECT
Schule
FROM
Ort
WHERE
Ort NOT IN ('Lörrach', 'Binzen, 'Freiburg')
Selektion mit dem Operator LIKE
Der LIKE-Operator ermöglicht den Vergleich eines Strings mit einem Muster. Muster werden aus beliebigen
Zeichen eines Strings und den beiden Sonderzeichen '?' und '*' gebildet. '?' steht für genau ein beliebiges
31
Abfrageformulierung mit SQL
3 Verbund von Tabellen
Zeichen, während '*' für eine beliebig große (evtl. leere) Kette von beliebigen Zeichen steht. Achtung: In
ANSI-SQL: '?' = '_' und '*' = '%'.
Beispiel :
Gesucht werden die Vornamen aller Teilnehmer, deren Postleitzahl mit "3" endet.
SELECT
Vorname
FROM
Teilnehmer
WHERE
Wohnort LIKE '????3*'
Gesucht werden die Vornamen aller Teilnehmer, deren Name mit "H"- und deren
Beispiel :
Wohnort nicht mit "H" beginnt.
SELECT
Vorname
FROM
Teilnehmer
WHERE
Name LIKE 'H*' AND Wohnort NOT LIKE '??????H*'
Selektion und NULL-Werte
NULL wird i.a. interpretiert als ein Platzhalter für die Aussage "Information/Attribut ist nicht vorhanden
oder nicht bekannt oder nicht anwendbar". SQL betrachtet daher im Vergleich zwei NULL-Werte immer als
unterschiedlich. Möglich ist es allerdings abzufragen, ob die Aussage "Spalten-Wert ist NULL" für ein Tupel
gilt.
Beispiel :
Gesucht werden die Kurse, die keine Dauer angegeben haben (oder deren Dauer nicht
bekannt ist)
SELECT
Kurs
FROM
Kurs
WHERE
Dauer IS NULL
3 Verbund von Tabellen
Einfacher Equijoin mit zwei Tabellen
SELECT
<Spalte1> , <Spalte2>, ...
FROM
<Tabelle1> , <Tabelle2>
WHERE
<Join-Bedingung>
Hinweis :
Wenn die Tabellen, die miteinander zu verbinden sind, Spalten mit gleichem
Spaltennamen aufweisen, dann muß jeweils spezifiziert werden, welche Spalte
welcher Tabelle gemeint ist.
Zur Verkürzung des Anfragetextes können für die Tabellen in der FROM-Komponente
Beispiel :
auch Alias-Namen vergeben werden.
SELECT
Schule, Kurs
FROM
Ort O, Kurs K
WHERE
O.Ort_Nr = K.Ort_Nr ORDER BY Schule ASC, Kurs ASC
Hinweis :
Die Alias-Namen können bereits in der SELECT-Komponente verwendet werden, auch wenn sie erst in der FROM-Komponente definiert werden.
Einfacher Equijoin über n>2 Tabellen
Syntax :
Beispiel :
Welche Kurse belegt Frau Hofmann in Binzen?
SELECT
Kurs
FROM
Teilnehmer T, TeilnehmerKursZuordnung TK, Kurs K, Ort O
WHERE
(T.Vorname = ‘Hofmann‘) AND (O.Ort_Nr = ‘Binzen‘) AND
(T.Teiln_Nr = TK.Teiln_Nr) AND (K.Kurs_N r = TK.Kurs_Nr)
AND (O.Ort_Nr = K.Ort_Nr) ORDER BY Kurs ASC
Equijoin mit Umbenennen der Spalte
Hinweis :
Beispiel :
Es ist oft sinnvoll, Spalten umzubenennen, um Mißverständnisse auszuschließen.
Für jeden Teilnehmer wird die Schulungsdauer in Stunden gesucht.
SELECT
Name, Vorname, Kurs, Dauer*8 AS Stunden
FROM
Teilnehmer T, TeilnehmerKursZuordnung TK, Kurs K
WHERE
(T.Teiln_Nr = TK.Teiln_Nr) AND
(K.Kurs_Nr = TK.Kurs_Nr ORDER BY Name
32
Abfrageformulierung mit SQL
4 Aggregatfunktionen und Gruppen
Vereinigung und Durchschnitt mit UNION
Die Datensätze von Tabellen, die identische Spalten enthalten, können durch UNION zusammengefaßt werden.
Beispiel :
Gewünscht wird eine Tabelle mit den Ortsnummern Ort_Nr, der Orte, an denen das Modul 4.1 Voraussetzung ist oder deren OrtLörrach oder Binzen ist.
SELECT
Ort_Nr
FROM
Kurs K
WHERE
K.Voraussetzungen = 'Modul 4.1'
UNION
SELECT
FROM
WHERE
Ort_NR
Ort O
(O.Ort = 'Lörrach') OR (O.Ort = 'Binzen')
4 Aggregatfunktionen und Gruppen
Hinweis: NULL-Werte werden vor der Auswertung einer Aggregatfunktion eliminiert.
Zählfunktion
SELECT
COUNT ([DISTINCT] <Spaltenliste|*>)
FROM
<Tabelle>
Gesucht wird die Anzahl aller Fortbildungsteilnehmer.
Beispiel :
SELECT
COUNT (*)
FROM
Teilnehmer
Wieviel verschiedene Schulorte existieren?
Beispiel :
SELECT
COUNT (DISTINCT Ort) AS Schulorte
FROM
Ort
Arithmetische Funktionen
Syntax :
Syntax :
SELECT
SUM ({numerische Spalte |
Arithmetischer Ausdruck mit numerischen Spalten})
FROM
<Tabelle>
Gesucht wird die Gesamtdauer aller Fortbildungen, die in Binzen stattfinden.
Beispiel :
SELECT
SUM (Dauer) AS Gesamtdauer_in_Binzen
FROM
Kurs K, Ort O
WHERE
(K.Ort_Nr = O.Ort_Nr) AND (O.Ort = ‘Binzen‘)
SELECT
AVG ({numerische Spalte |
Syntax :
Arithmetischer Ausdruck mit numerischen Spalten }
FROM
<Tabelle>
Gesucht wird die Durchschnittsdauer aller Fortbildungsveranstaltungen.
Beispiel :
SELECT
AVG (Dauer) AS Durchschnittsdauer
FROM
Kurs
Min-/Max-Funktionen
Syntax :
SELECT
Syntax :
Beispiel :
MAX ({numerische Spalte |
Arithmetischer Ausdruck mit numerischen Spalten})
FROM
<Tabelle>
SELECT
MIN ({numerische Spalte |
Arithmetischer Ausdruck mit numerischen Spalten})
FROM
<Tabelle>
Gesucht wird die kürzeste Kursdauer.
SELECT
MIN (Dauer) AS Minimale_Kursdauer
FROM
Kurs
33
Abfrageformulierung mit SQL
5 Unterabfragen (Subqueries)
Gruppenbildung in SQL-Anfragen
In den vorangegangenen Beispielen wurden die Aggregatfunktionen immer auf eine ganze Tabelle angewandt. Daher bestand das Abfrageergebnis immer nur aus einem Tupel. In SQL ist es aber auch möglich,
eine Tabelle in Gruppen "aufzuteilen", d.h. die Tupel einer Tabelle in Gruppen einzuteilen, und dann die
Aggregatfunktionen jeweils auf die Gruppen anzuwenden.
SELECT
<Spalte> , <Aggregatfunktion ...>
FROM
<Tabelle>
GROUP BY
<Spalte>
Hinweis :
Die in der group by-Komponente spezifizierten Spalten müssen auch in der
SELECT-Komponente spezifiziert sein, da Basis für die Gruppierung die "Zwischen-Ergebnis"-Tabelle ist, die durch Select ... From ... Where ... spezifiziert
wurde. Andererseits müssen alle Spalten der Selektionsliste, die nicht durch
eine Aggregatfunktion gebunden sind, in der group by-Komponente aufgeführt
werden. Die Reihenfolge der Spaltenspezifikation in der GROUP BYKomponente hat keinen Einfluß auf das Resultat der Abfrage.
Es sind 2 Gruppen auszugeben: Alle verschiedenen Voraussetzungen und deren GesamtBeispiel :
Kursdauer nach Gesamt-Kursdauer absteigend sortiert.
SELECT
Voraussetzungen, SUM (Dauer) AS Gesamtdauer
FROM
Kurs
GROUP BY
Voraussetzungen ORDER BY Sum (Dauer) DESC
Für jeden Kursort soll die Anzahl der Veranstaltungen ermittelt werden.
Beispiel :
SELECT
Ort, COUNT (Ort) AS Veranstaltungen
FROM
Ort
GROUP BY
Ort ORDER BY COUNT(Ort) DESC, Ort ASC
Auswahl von Gruppen
Syntax :
Syntax :
Beispiel :
SELECT
<Spalte> , <Aggregatfunktion ...>
FROM
<Tabelle>
GROUP BY
<Spalte>
HAVING
<Bedingung>
Es sind alle Orte zusammen mit der Gesamtdauer auszugeben, wenn die Gesamtdauer
mindestens 10 Tage lang ist.
SELECT
Ort, SUM (Dauer) AS Gesamtdauer
FROM
Kurs, Ort
WHERE
Kurs.Kurs_Nr = Ort.Ort_Nr
GROUP BY
Ort
HAVING
SUM (Dauer) >= 10
5 Unterabfragen (Subqueries)
Eine Unterabfrage ist eine Abfrage, die in einer Abfrage eingebettet ist.
Unteranfragen mit dem IN-Operator
Syntax :
Hinweis :
Beispiel :
Hinweis :
SELECT
FROM
WHERE
<Spalte1>
<Tabelle>
<Spalte2>
IN (SELECT <Spalte3>)
FROM <Tabelle>
[WHERE <Bedingung>])
Spalte 1, Spalte 2 und Spalte 3 müssen nicht unterschiedlich sein.
Gesucht wird jede Schule an der ein Kurs stattfindet, der Programmiererfahrung verlangt.
SELECT
Ort, Schule
FROM
Ort
WHERE
Ort_Nr IN (SELECT Ort_Nr
FROM Kurs
WHERE Voraussetzungen = ‘Programmiererfahrung‘)
Jede Anfrage, die eine Unteranfrage mit dem IN-Operator enthält, ist als Equi-
34
Abfrageformulierung mit SQL
Hinweis :
Beispiel :
6 Struktur von Tabellen erzeugen, ändern und löschen
join formulierbar (gilt nicht für NOT IN). So ist die folgende Abfrage äquivalent
zur vorhergehenden.
SELECT
Ort, Schule
DISTINCT
FROM
Kurs K, Ort O
WHERE
(K.Ort_Nr = O.Ort_Nr) AND
(Voraussetzungen = ‘Programmiererfahrung‘)
Um das Ergebnis einer Unterabfrage zu negieren, kann der NOT-Operator benutzt werden.
Gesucht werden alle Kurse, die nicht in Binzen stattfinden.
Kurs
SELECT
FROM
Kurs
WHERE
Ort_Nr NOT IN (SELECT Ort_Nr
FROM
Ort
WHERE Ort = ‘Binzen‘)
Identisch wäre: SELECT
FROM
WHERE
Kurs
Kurs
Ort_Nr IN (SELECT Ort_Nr
FROM
Ort
WHERE Ort <> ‘Binzen‘)
6 Struktur von Tabellen erzeugen, ändern und löschen
Neue Tabelle zu einer bestehenden Datenbank hinzufügen
<Tabellenname>
(<Spalte1> Datentyp, <Spalte2> Datentyp, ...)
Es soll eine Tabelle “Referent“ erstellt werden.
Beispiel :
CREATE TABLE
Referent
(Ref_Nr Text(4), Name Text(20), Vorname Text(18))
Eine bestehende Tabelle aus einer Datenbank löschen
Syntax :
CREATE TABLE
DROP TABLE
<Tabellenname>
Es soll eine Tabelle “Referent“ endgültig entfernt werden.
CREATE TABLE
Referent
Eine neue Spalte zu einer bestehenden Tabelle hinzufügen
Syntax :
Beispiel :
<Tabellenname>
ADD COLUMN <Spalte> Datentyp
Zur Tabelle “Ort“ soll die Spalte “OSA“ hinzugefügt werden.
Beispiel :
ALTER TABLE
Ort
ADD COLUMN OSA Text(20)
Eine Spalte einer Tabelle löschen
Syntax :
ALTER TABLE
Syntax :
ALTER TABLE
<Tabellenname>
DROP COLUMN
Aus der Tabelle “Ort“ soll die Spalte “OSA“ dauerhaft entfernt werden.
Beispiel :
ALTER TABLE
Ort
DROP COLUMN OSA
An eine Tabelle ein Datensatz anfügen
Syntax :
INSERT INTO
Beispiel :
<Tabellenname>
(<Spalte1> Datentyp, <Spalte2> Datentyp, ...)
VALUES
(<Wert1>, <Wert2>, ...)
Zur Tabelle “Ort“ soll der Datensatz “016“,“Lörrach“, “Gewerbeschule“ hinzugefügt werden.
INSERT INTO Ort (Ort_Nr, Ort, Schule)
VALUES
(016, ‘Lörrach‘, ‘Gewerbeschule‘)
35
Abfrageformulierung mit SQL
Weitere Hinweise zum Verbund von Tabellen
Datensatz aus einer Tabelle löschen
Syntax :
DELETE FROM
<Tabellenname>
WHERE
<BEDINGUNG>
Von der Tabelle “Ort“ sollen die Datensätze gelöscht werden, deren Schulbezeichnung
“Heinrich-Hertz-Schule“ lautet.
DELETE FROM
Ort
WHERE
Schule = ‘Gewerbeschule-Loerrach‘
Beispiel :
Weitere Hinweise zum Verbund von Tabellen
Inner Join: Verknüpfung von Tabellen
Beispiel: SELECT
b.buch_nr, autor, titel, leser_nr
FROM buecher b, verleih v WHERE b.buch_nr = v.buch_nr; Beschreibung:
Hier werden die beiden Spalten buecher.buch_nr und verleih.buch_nr verglichen, und bei gleichem Inhalt in
der Tabelle ausgegeben. Somit erhält man eine Tabelle mit dem Inhalt von mehreren Tabellen. Alias-Namen
sind nicht zwingend, aber ratsam.
Auto Join/Self Join: Verknüpfung einer Tabelle mit sich selbst
Beispiel: SELECT
emp1.name, emp1.sal, emp2.name, emp2.sal
FROM emp emp1, emp emp2 WHERE (
(emp2.sal > emp1.sal) AND (emp1.ename = 'BLAKE') );
Beschreibung:
Hier können Angaben einer Tabelle miteinander verknüpft und verglichen werden. Alias-Namen sind wegen
der garantiert doppelt vorkommenden Namen Pflicht.
Outer Join: Verknüpfung von Tabellen
Beispiel: SELECT * FROM u, v WHERE u.s1(+) = v.s1(+);
SELECT * FROM u, v WHERE u.s1(+) = v.s1;
--> vollständig
--> einseitig
Beschreibung:
Bei dieser Tabellenverknüpfung werden auch Zeilen dargestellt, die nur in einer Tabelle vorhanden sind. Die
Spalten der anderen Tabelle bleiben an dieser Stelle leer. Beim vollständigen Outer Join geschieht dies bidirektional, beim einseitigen Outer Join nur in eine Richtung.
Unterabfragen: Einzeilige (= Single Row Subquery)
- Beispiel: SELECT
ename FROM emp WHERE hiredate >
( SELECT hiredate FROM emp
WHERE
ename = 'FORD' );
36
Abfrageformulierung mit SQL
Weitere Beispiele zum Verbund von Tabellen
Beschreibung:
Eine SELECT-Unterabfrage ist dann einzeilig (=Single Row Subquery), wenn sie genau eine Zeile als Ergebnis liefert. Das Ergebnis der einzeiligen SELECT-Abfrage kann mit <, =, >, <= und >= verglichen werden.
Unterabfragen: Mehrzeilige (= Multiple Row Subquery)
Beispiel: SELECT
* FROM buecher WHERE buch_nr IN ( SELECT buch_nr FROM verleih );
Beschreibung:
Eine SELECT-Unterabfrage ist dann mehrzeilig (=Multiple Row Subquery), wenn sie als Ergebnis eine
mehrzeilige Tabelle liefert, die nur mit Mengenoperatoren verglichen werden kann.
Mengenoperatoren sind:
ANY, ALL, [NOT] IN, EXISTS, UNION, INTERSECT, MINUS. Auf den Seiten DQL 40 und DQL 42
werden diese beschrieben.
Weitere Beispiele zum Verbund von Tabellen
SELECT * FROM testCompanies JOIN testEmployees";
SELECT * FROM testCompanies AS a
LEFT JOIN testEmployees AS b ON (a.ID = b.ID)";
SELECT * FROM testCompanies AS a
RIGHT JOIN testEmployees AS b ON (a.ID = b.ID)";
SELECT * FROM testCompanies
LEFT JOIN testEmployees USING (ID)";
SELECT * FROM testCompanies as A , testEmployees AS B
WHERE A.ID = B.ID
SELECT *
FROM testCompanies
JOIN testEmployees
ID name ID nachname position companyID 1 Firma 1 3 Schmidt
Hausmeister
1
2 Firma 2 3 Schmidt
Hausmeister
1
3 Firma 3 3 Schmidt
Hausmeister
1
1 Firma 1 1 Musterfrau
Geschäftsführerin 1
2 Firma 2 1 Musterfrau
Geschäftsführerin 1
3 Firma 3 1 Musterfrau
Geschäftsführerin 1
1 Firma 1 2 Mustermann Geschäftsführer
2
2 Firma 2 2 Mustermann Geschäftsführer
2
3 Firma 3 2 Mustermann Geschäftsführer
2
37
Abfrageformulierung mit SQL
SELECT *
Weitere Beispiele zum Verbund von Tabellen
FROM testCompanies AS a
LEFT JOIN testEmployees AS b
ON (a.ID = b.companyID)
ID name ID nachname position companyID 1 Firma 1 3 Schmidt
Hausmeister
1
1 Firma 1 1 Musterfrau
Geschäftsführerin 1
2 Firma 2 2 Mustermann Geschäftsführer
3
2
Firma 3
SELECT *
FROM testCompanies as A ,
testEmployees AS B
WHERE A.ID = B.companyID
ID name ID nachname position companyID 1 Firma 1 3 Schmidt
Hausmeister
1
1 Firma 1 1 Musterfrau
Geschäftsführerin 1
2 Firma 2 2 Mustermann Geschäftsführer
2
38
Herunterladen