EvA - ISQ81.de

Werbung
Oberstufenzentrum
Industrie und Datenverarbeitung
Berufsschule, Berufsfachschule, Fachoberschule
Fachbereich Wirtschaftsinformatik
Entwicklung von Anwendungen
Unterrichtsmaterial
Datenbanken
Stand 2009
© oszinddv
EvA
Flotte Kiste
Datenbanken
Situationsbeschreibung:
Angefangen hat alles mit einem Citroën „Traction Avant" Baujahr 1936, den Rudi Rost von
seinem Onkel geerbt hatte. Mit diesem wunderbaren Auto entdeckte Rudi seine Leidenschaft
für Oldtimer. Um sich dieses kostspielige Hobby leisten zu können, vermietete er den Citroën an
Freunde und Bekannte. Mit dem so erwirtschafteten Überschuss war es Rudi möglich, die eine
oder andere Rarität zu erwerben und ggf. selbst zu restaurieren. Hatte er einen Oldtimer neu
aufgebaut, rief er seine Freunde und Bekannten an, um das „neue" Stück an sie zu vermieten.
Zu diesem Zweck notierte sich Rudi die Kundendaten auf Karteikarten – neben Adresse und
Telefonnummer auch Vorlieben für bestimmte Fahrzeugtypen.
Heute hat Rudi Rost 23 Oldtimer in seiner Garage stehen, die er längst nicht mehr nur an
Freunde und Bekannte vermietet. Insbesondere sein Rolls-Royce Phantom II von 1931 wird von
Hochzeitspaaren gern gemietet.
Die Arbeit macht Rudi Spaß, wenn da nicht die lästige Schreibarbeit wäre. Für jeden Kunden
wird eine Karteikarte angelegt, und in einer Liste werden die Mietvorgänge erfasst.
Insbesondere die Mahnung säumiger Kunden, die ihre Rechnung noch nicht gezahlt haben, ist
Rudi ein Graus. Alles muss doppelt und dreifach geprüft werden, damit er niemanden übersieht
oder fälschlicherweise mahnt. Früher hat Rudi, wenn er wieder einen neuen Oldtimer in seiner
Sammlung hatte, gezielt die Kunden angeschrieben, die wegen ihrer Vorlieben Interesse an
dem neuen Stück haben könnten. Die Kunden waren davon begeistert, aber heute ist es ihm
viel zu aufwändig, alle Kundenkarteikarten auf die Vorlieben hin durchzugehen. Auch das
Anschreiben der Hochzeitspaare zum ersten Hochzeitstag mit einem Spezialtarif für den RollsRoyce Phantom II spart sich Rudi heute, obwohl fast 70% der Hochzeitspaare dieses Angebot
angenommen haben.
Der Schreibarbeit überdrüssig beschließt Rudi, seinen Oldtimerverleih in Zukunft
computerunterstützt abzuwickeln und vereinbart für nächste Woche einen Termin mit einem
Software-Entwickler. Da Herr Rost weiß, dass Software-Entwickler horrende Stundensätze
haben, will er sich gut vorbereiten und überlegt, welche Daten und Informationen für das
Mietverfahren notwendig sind.
Aufgabe:
Versetzen Sie sich in die Lage von Herrn Rost und notieren Sie alle Daten und Informationen,
die für das Vermietverfahren notwendig sind. Gruppieren Sie diese Informationen zweckmäßig!
© oszinddv – 2009 / A1 Flotte Kiste.doc
1
EvA
Datenbanken
Entity-Relationship-Modell
Grundbegriffe
Das Entity-Relationship-Modell (kurz: ERM) wurde 1976 von P. Chen zur Datenmodellierung
entwickelt. Im Deutschen wird manchmal auch die Bezeichnung Gegenstands-BeziehungsModell verwendet. Im Angelsächsischen ist auch der Begriff Information Modelling gebräuchlich.
Ziel des ER-Modells ist es, die permanent gespeicherten Daten und ihre Beziehungen
untereinander zu beschreiben. Die Analyse der Information erfolgt aus fachlogischer Sicht.
Es entsteht ein konzeptionelles Modell, das gegen Veränderungen der Funktionalität
weitgehend stabil ist.
Ausgangspunkt des ER-Modells ist der Begriff der Entität. Eine Entität (entity) ist ein
individuelles und identifizierbares Exemplar von Dingen, Personen oder Begriffen der realen
oder der Vorstellungswelt und wird durch Eigenschaften beschrieben. Für Entität wird synonym
oft der Begriff Objekt oder Instanz verwendet.
Die Beziehungen zwischen den Entitäten werden grafisch in einem Entity-RelationshipDiagramm (ERD) dargestellt. Die Entität selbst wird nicht im ER-Diagramm dargestellt.
Entitätsmenge (entity set), Entitätstyp, Entitytyp, Objekttyp, Objektklasse
ist eine Zusammenfassung von Entitäten mit gleichen Eigenschaften unter
einem eindeutigen gemeinsamen Oberbegriff.
Für die Bezeichnung sollte ein Substantiv gewählt werden.
Attribut (property)
beschreibt eine fachliche Eigenschaft, die allen Entitäten einer Entitätsmenge
gemeinsam ist. Es wird durch seinen Namen, der seiner fachlichen
Bedeutung entsprechen soll, und durch seinen Wertebereich definiert.
Für die Bezeichnung sollte ein Substantiv gewählt werden.
Schlüsselattribute (ID)
bilden den Primärschlüssel einer Entitätsmenge.
Der Primärschlüssel ist die minimale identifizierende Attributkombination, d. h.
er muss über alle Entitäten einer Entitätsmenge hinweg eindeutig sein. Oft
besteht der Primärschlüssel nur aus einem Schlüsselattribut. Der Wert eines
Schlüsselattributs sollte sich über die gesamte Lebensdauer der Entität nicht
ändern und darf nicht NULL sein.
Relationship (Assoziation)
Wechselwirkungen und Abhängigkeiten zwischen Entitäten werden durch
Beziehungen dargestellt.
Für die Bezeichnung sollte ein Verb gewählt werden.
Vorteile des ER-Modells:
•
Da das ER-Modell nur mit wenigen Konstrukten auskommt, ist es auch für den Laien
schnell verständlich und erlaubt so den Einsatz in der Systemanalyse mit dem späteren
Anwender.
•
Da es sich um ein konzeptionelles Modell – ausgehend von der sachlogischen Sicht des
Anwenders – handelt, ist es unabhängig von bestimmten Datenbanksystemen.
© oszinddv – 2009 / A2 ERM-Grundbegriffe.doc
1
ERM-Übung
Kurswahl
EvA
Datenbanken
Situationsbeschreibung:
Die Wahl der Wahlpflichtfächer (kurz: Kurswahl) ist relativ kompliziert und umfangreich. Es gibt
Kurse, die im ersten Halbjahr angeboten werden, und welche für das zweite Halbjahr. Jeder
Auszubildende wählt einen Kurs pro Halbjahr, muss aber auch gleichzeitig seinen jeweiligen
Ersatzwunsch äußern. Damit Frau Köhn die Übersicht behält, will sie eine Datenbank zur
Verwaltung der Kurswahl erstellen. Natürlich überlegt sich Frau Köhn zuvor ein EntityRelationship-Modell und hat mit der Erstellung bereits angefangen.
Aufgabe:
Leider musste Frau Köhn die Arbeit an ihrem Modell zwischendurch unterbrechen. Helfen Sie
ihr und vervollständigen Sie das unten stehende Entity-Relationship-Diagramm.
a) Für das Relationship „wählt“ fehlen noch die Attribute.
b) Für die Stundenplanerstellung müssen die Lehrer den verschiedenen Kursen zugeordnet
werden. Auch das würde Frau Köhn am liebsten mit einer Datenbank machen. Erweitern Sie
das Entity-Relationship-Diagramm diesbezüglich!
Name
Vorname
Azubi-Nr
Azubi
Telefon
Straße
wählt
Kursthema
Kurs-Nr
Kurs
Halbjahr
© oszinddv – 2009 / A3 Kurswahl.doc
1
EvA
Datenbanken
ERM-Übung
CASE-Werkzeuge
Situationsbeschreibung:
Software-Systeme, die Entwickler bei der Erstellung und Wartung von Software nutzen, werden
CASE-Werkzeuge (Computer Aided Software Engineering) genannt. Sie existieren für die
gesamte Breite eines Softwareentwicklungsprozesses, beginnend bei der Analyse der
Anforderungen an die Software, über die Programmierung bis hin zur Testphase des fast
fertigen Produkts.
In einer Datenbank für CASE-Werkzeuge sind folgende Informationen über die Werkzeuge zu
speichern:
(1) Jedes Werkzeug wird von einem Anbieter vertrieben. Ein Anbieter vertreibt in der Regel
mehrere Werkzeuge.
(2) Ein Werkzeug kann auf mehreren Betriebssystemen (BS) laufen (BS-Name ist eindeutig).
Für ein Betriebssystem gibt es in der Regel mehrere Werkzeuge.
(3) Jede betriebssystem-spezifische Werkzeug-Version hat einen eigenen Preis.
(4) Pro Werkzeug sind zu speichern: Werkzeugname (eindeutig), Installationszahl und eine
Beschreibung.
(5) Zum Anbieter sind sein Name (eindeutig), die Adresse und die Anzahl der Mitarbeiter in der
Werkzeugentwicklung zu speichern.
(6) Ein Werkzeug kann Komponente einer CASE-Umgebung sein. Eine CASE-Umgebung
enthält im Allgemeinen mehrere Werkzeuge.
(7) Für jede CASE-Umgebung soll die Datenbank den Produkt-Namen (eindeutig) und das
Jahr der Erstinstallation enthalten.
Aufgabe:
Erstellen Sie das ER-Diagramm mit Attributen. Schlüssel sind zu unterstreichen!
© oszinddv – 2009 / A4 CASE-Werkzeuge.doc
1
EvA
Datenbanken
ERM-Übung
Bibliothek
Situationsbeschreibung:
Eine Bibliothek ist zu verwalten. Nach längeren Gesprächen können sich der Systemanalytiker
und ein späterer Anwender auf folgende Aussagen einigen.
(1) Ein Leser kann sich maximal 20 Bücher ausleihen. Genau betrachtet leiht sich ein Leser
Buchexemplare aus, denn er nimmt sich ein reales Exemplar eines Buches mit nach
Hause.
(2) Von einem Buch gibt es oft mehrere Exemplare in der Bibliothek.
(3) Ist ein gewünschtes Buch nicht vorhanden, so kann es von den Lesern vorbestellt werden.
(4) Pro Leser sind maximal zehn Vorbestellungen möglich.
(5) Für jedes Buch sind der Titel und bis zu drei Autoren zu speichern.
(6) Einige Bücher besitzen einen Herausgeber.
(7) Bei der Aufnahme in die Bibliothek erhält jedes Exemplar eine eindeutige Inventarnummer.
(8) Für jeden Leser werden der Name und die Adresse gespeichert.
(9) Bei der Ausleihe wird das Ausleihdatum, bei der Rückgabe das Rückgabedatum
gespeichert.
Aufgabe:
Erstellen Sie das ER-Diagramm mit Attributen. Schlüssel sind zu unterstreichen!
© oszinddv – 2009 / A5 Bibliothek.doc
1
EvA
Datenbanken
ERM-Übung
Altenpflege
Situationsbeschreibung:
Der Altenpflegedienst „Barmherzigkeit“ möchte seine Daten in einem Informationssystem
speichern. Sie sind beauftragt, eine entsprechende Datenbank zu planen. Ihr erstes Interview
mit der Auftraggeberin und Geschäftsführerin des Unternehmens ergab folgende Sachverhalte:
(1) Es gibt mehrere Standorte, die alle einen eindeutigen Namen haben und deren Anschriften
zu erfassen sind.
(2) Jeder Standort hat eine Leiterin, die nur namentlich beim Standort erwähnt werden soll.
(3) Die Altenpflegerinnen haben Mitarbeiternummern und sollen mit Name und Handynummer
erfasst werden.
(4) Jede Altenpflegerin ist genau einem Standort zugeteilt.
(5) Jede Altenpflegerin erhält einen eigenen Dienstwagen, den nur sie fährt.
(6) Der Fuhrpark des Unternehmens wird durch Kfz-Kennzeichen und Herstellerangabe jedes
einzelnen Autos gespeichert.
(7) Die pflegebedürftigen Personen (Patienten) werden in ihren eigenen Wohnungen (Name,
Anschrift) versorgt.
(8) Da im Schichtdienst gearbeitet wird, kann eine zu pflegende Person von mehreren
Altenpflegerinnen betreut werden.
Aufgabe:
Erstellen Sie das ER-Diagramm mit Attributen. Schlüssel sind zu unterstreichen!
© oszinddv – 2009 / A6 Altenpflege.doc
1
EvA
Datenbanken
ERM-Übung
Busreisen
Situationsbeschreibung:
Ein Busunternehmen bietet Busreisen an und möchte nun die vielen Buchungen, den
Kundenstamm, die Informationen über die angefahrenen Hotels und auch die Daten ihrer
Busfahrer und Busse in einer Datenbank verwalten. Die im Anforderungskatalog genannten
Attribute stellen nur eine Auswahl dar. Verwenden Sie in Ihrem ERD bitte nur die genannten
Attribute, allerdings zuzüglich weiterer Attribute, wenn sie datenbanktechnisch notwendig sind.
(1) Von einem Kunden werden Name, Wohnort und Geburtsdatum gespeichert.
(2) Wenn ein Kunde eine Reise zu einem Hotel bucht, sind das Abfahrtsdatum, die Reisedauer
in Tagen und die Personenanzahl, für die der Kunde bucht, festzuhalten.
(3) Zu den Hotels sind der Hotelname, der Ort und die Bettenanzahl im Hotel zu speichern. Sie
können davon ausgehen, dass ein Hotelname in einem Ort nur einmal vorkommt.
(4) In der Datenbank sollen der Name und die Handynummer der Fahrer gespeichert werden.
(5) Die Busse werden mit ihrem Kennzeichen, der Herstellerangabe und Sitzplatzanzahl
registriert.
(6) Wenn eine Reise beginnt (Abfahrtsdatum speichern), fährt ein Busfahrer einen beliebigen
Bus zu einem Hotel. Er steht den Reisegästen die ganze Urlaubszeit vor Ort für
Ausflugsfahrten zur Verfügung und fährt mit ihnen wieder zurück.
Aufgabe:
Erstellen Sie das ER-Diagramm mit Attributen. Schlüssel sind zu unterstreichen!
© oszinddv – 2009 / A7 Busreise.doc
1
ERM-Übung
Pauschalreisen
EvA
Datenbanken
Situationsbeschreibung:
Ein Reisebüro möchte seine Buchungen von Pauschalflugreisen mit Hilfe einer Datenbank
verwalten. Dazu werden die Entitätstypen KUNDE, REISE, HOTEL und FLUG berücksichtigt.
(1) Jede Reise führt nur an einen Ort, d. h. ein Hotelwechsel ist nicht möglich.
(2) Mit REISE werden festgelegte Pauschalreisen inklusive Flug gemeint, die feste
Reisetermine und Preise pro Person je nach Zimmerart und Verpflegung haben.
(3) Ein Kunde kann für mehrere Personen unter seinem Namen buchen.
(4) Für Kinder bis 12 Jahren wird nur der halbe Preis berechnet.
(5) Hin- und Rückflug werden getrennt verwaltet.
(6) Flüge enthalten unter einer Flugnummer Informationen über die Fluggesellschaft, den
Wochentag, die Abflugs- und Ankunftszeit sowie den Abflugs- und Ankunftsort.
Aufgabe:
Ergänzen Sie das ER-Diagramm (Relationships, Attribute). Schlüssel sind zu unterstreichen!
Kunde
Reise
Hotel
© oszinddv – 2009 / A8 Reise.doc
Flug
1
EvA
Datenbanken
ERM-Übung
Weiterbildung
Das Hildeshofer Zentrum für berufliche Weiterbildung hat in den letzten Jahren eine
bemerkenswerte Entwicklung durchgemacht und kann inzwischen mit einem breiten Angebot
an Fortbildungsveranstaltungen aufwarten. Das ist für die Mitarbeiter/innen erfreulich, bringt
aber auch Probleme mit sich, da das halbjährliche Drucken der Kataloge, das Führen der
Teilnehmerlisten etc. auf der Basis manuell geführter Listen und Kursankündigungen doch recht
mühsam geworden ist. Denn außer einer kleinen Kunden-Adressdatenbank gibt es bisher keine
technische Unterstützung.
Was wir damit zu tun haben, fragen Sie? Nun, uns ist es gelungen, einen tollen Job an Land zu
ziehen. Wir sollen der Verwaltungsangestellten, der die Arbeit mittlerweile über den Kopf
wächst, helfen, indem wir für das Kursangebot, die Kursanmeldungen und -teilnahme einen
Datenbankentwurf liefern und später daraus eine Anwendung "stricken".
Katrin Kleitz, eben jene Verwaltungsangestellte, hat uns mittlerweile folgendes verdeutlicht:
1. Das Kursangebot ist in Bereiche gegliedert, die auch den Kursprospekt strukturieren. Jeder
Bereich hat einen eindeutigen Kennbuchstaben, eine Bezeichnung sowie einen Kurz- und
einen Langtext zur näheren Erläuterung. Der Bereich "E" beispielsweise umfasst alle Kurse
zum Thema "EDV-Grundwissen". Im Kursprospekt findet sich im einführenden Teil eine
ausführliche Erläuterung dazu. Eine kurze Erläuterung leitet dagegen im Hauptteil des
Prospektes die nachfolgenden Kursankündigungen ein.
2. Auf den letzten Seiten des Kursprospektes stellen sich die Dozent/innen mit ihrem Namen,
ihrer Telefonnummer und einem kurzen Statement über ihren Kompetenzbereich vor. Das
verwaltungsintern verwendete zweistellige Namenskürzel erscheint nicht gedruckt.
3. Jeder Kurs hat zusätzlich zur Kursbezeichnung eine eindeutige Kursnummer. Weiterhin
gehören zu jedem Kurs eine Beschreibung der Kursinhalte, Halbjahr, Kursgebühr und die
verantwortlichen Dozent/innen. Die Kurse erscheinen im Prospekt unter genau einer
Bereichsüberschrift.
Der Einfachheit wegen unterschlagen wir weitere Einzelheiten wie Beschreibung der
Zielgruppen, minimale und maximale Teilnehmerzahl, Kursdauer, Anmeldeschluss,
regelmäßiger Termin u. a.
4. Die Kursteilnehmer müssen sich anmelden und bekommen nach Eingang der Zahlung ihre
Anmeldebestätigung unter Angabe des Zahlungsdatums an ihre Adresse zugeschickt.
Da bereits eine Adressdatenbank besteht und man sich über die Zahlungsverwaltung noch
nicht ganz im Klaren ist, sollen diese Aspekte (Adresse, Verwaltung des Kunden-Kontos)
zunächst ausgeklammert bleiben. Wichtig ist allerdings, dass die bisher verwendete
Kundennummer (eine fortlaufende Nummer in der Adressdatenbank) auch in der neuen
Datenbank ihren Platz haben soll.
5. Am Ende eines Kurses werden den teilnehmenden Personen Teilnahmebestätigungen
ausgehändigt. Die Kursleiter übermitteln der Verwaltung für jede Kursteilnahme eine
Textnummer, die für das Zertifikat in einen freundlichen Text über den Teilnahmeerfolg
umgesetzt wird.
Frau Sabine Sandmann-Süllenberger hat im zweiten Halbjahr 2007 an dem Kurs "Englisch
für das Büro" teilgenommen. Ihr Abschlusszertifikat liest sich etwa wie folgt:
Das Hildeshofer Zentrum für berufliche Weiterbildung bestätigt Frau Sabine SandmannSüllenberger die erfolgreiche Teilnahme am Kurs "Englisch für das Büro". Die Teilnehmerin
hat sich an den schriftlichen und mündlichen Übungen mit ausdauerndem Fleiß und recht
gutem Erfolg beteiligt.
Die zu entwickelnde Datenbank wird die Verwaltung in verschiedener Hinsicht unterstützen
müssen: Beim Drucken der Teilnehmerlisten und Teilnahmebestätigungen, bei der
Aktualisierung der Kursdaten und -beschreibungen, bei Auskünften am Telefon, bei Druck und
Versand des Prospektes. Beispielsweise wird Kunden, die in den letzen 3 Jahren an
mindestens 2 Kursen teilgenommen haben, halbjährlich unaufgefordert der jeweils neue
Prospekt zugeschickt. Nach Vervollständigung der Datenbank soll auch die Anmeldung mit
Erfassung der Personaldaten, Verwaltung der Einzahlungen und das Mahnwesen unterstützt
werden.
© oszinddv – 2009 / A9 Weiterbildung.doc
1
ERM-Rückübersetzung
Universität
EvA
Datenbanken
Quelle:
A. Kemper, A. Eickler; Datenbanksysteme; Eine Einführung; Oldenbourg 1997
Aufgabe:
Überführen Sie das ER-Modell „rückwärts“ in eine verbale Beschreibung!
Hinweise: MatrNr = Matrikelnummer (Immatrikulationsnummer) = Studentennummer
SWS = Semesterwochenstunden = Anzahl der Stunden einer Vorlesung pro Woche
AnfJahr = Jahr, in dem der Student sein Studium beginnt
setzt
voraus
Vorgänger
Student
Nachfolger
Vorlesung
hört
VorlNr
MatrNr
Titel
Name
SWS
prüft
Vorname
Note
GebDat
liest
AnfJahr
Assistent
arbeitet für
Professor
PersNr
PersNr
Name
Name
Fachgebiet
Rang
Raum
© oszinddv – 2009 / A10 Universitaet (rw).doc
1
ERM-Rückübersetzung
Zugverbindung
EvA
Datenbanken
Quelle:
A. Kemper, A. Eickler; Datenbanksysteme; Eine Einführung; Oldenbourg 1997
Aufgabe:
Überführen Sie das ER-Modell „rückwärts“ in eine verbale Beschreibung!
ZugNr
Länge
Zug
startet vom
verbindet
von
endet im
nach
Abfahrt
Ankunft
Bahnhof
liegt in
Stadt
Name
Name
Gleisanz.
Bundesl.
© oszinddv – 2009 / A11 Zugverbindung (rw).doc
1
EvA
Datenbanken
Kardinalitäten
im Entity-Relationship-Modell
Mann
ist
verheiratet
mit
Frau
Mann
ist
verheiratet
mit
Frau
Mann
ist
verheiratet
mit
Frau
© oszinddv – 2009 / B1 Kardinalitaeten.doc
1
Relationales Schema
Teil 1
EvA
Datenbanken
Transformation eines Entity-Relationship-Modells in ein relationales Schema
ist
verheiratet
mit
Mann
Regel 1
Frau
MannNr
FrauNr
Name
Name
Aus jedem Entitätstypen wird eine Relation (Tabelle) erstellt.
Eine Relation ist eine Informationseinheit, die aus einer festen Anzahl von Attributen und einer
variablen Anzahl von Datensätzen besteht. Meist wird eine Relation nur Tabelle genannt.
1. Fall: 1:1-Beziehung
Gegenwärtige Ehen
3
5
Ein Mann ist verheiratet mit einer Frau.
Eine Frau ist verheiratet mit einem Mann.
6
Mann MannNr
Name
Frau
FrauNr
Name
42
Eric
57
Claudia
94
Nico
35
Petra
007
James
89
Franziska
35
Otto
17
Eva
1
2
4
Regel 2 Sind zwei Entitätstypen A und B durch eine 1:1-Beziehung verbunden, dann
1
2
3
4
5
6
© oszinddv – 2009 / C1 Relationenschema.doc
1
Relationales Schema
Teil 2
EvA
Datenbanken
2. Fall: 1:N-Beziehung
Orientalische Ehen
Mann MannNr
Name
Ein Mann ist verheiratet mit mehreren Frauen.
Eine Frau ist verheiratet mit einem Mann.
Frau
FrauNr
Name
42
Eric
57
Claudia
94
Nico
35
Petra
007
James
89
Franziska
35
Otto
17
Eva
Regel 3 Sind zwei Entitätstypen A und B durch eine 1:N-Beziehung verbunden, dann
3. Fall: M:N-Beziehung
???
Mann MannNr
Name
Ein Mann ist verheiratet mit mehreren Frauen.
Eine Frau ist verheiratet mit mehreren Männern.
Frau
FrauNr
Name
42
Eric
57
Claudia
94
Nico
35
Petra
007
James
89
Franziska
35
Otto
17
Eva
Regel 4 Sind zwei Entitätstypen A und B durch eine M:N-Beziehung verbunden, dann
© oszinddv – 2009 / C1 Relationenschema.doc
2
EvA
Datenbanken
Datenbankplanung
Zeitschriftenabonnement
Situationsbeschreibung:
Ein Unternehmen vertreibt Zeitschriftenabonnements diverser Verlage und möchte, dass Sie
eine geeignete Datenbank zur Unterstützung ihrer Arbeit planen. Dazu erhalten Sie die
folgenden Informationen.
Anmerkung: Damit das Projekt nicht zu groß wird, werden hier bewusst einige, sonst wichtige
Daten wie Vorname, Straße o. ä. weggelassen.
(1) Von den Kunden sollen der Name, Wohnort, die abonnierten Zeitschriften, der Beginn der
Abonnements und die Bankverbindung gespeichert werden.
(2) Zur Bankverbindung gehören die Kontonummer des Kunden sowie der Name, der Sitz und
die Bankleitzahl der zugehörigen Bank. Das Unternehmen hat bereits eine Tabelle, die zu
jeder BLZ den Namen und Sitz der Bank enthält. Diese Tabelle sollen Sie in Ihre
Planungen mit einbeziehen.
(3) Zu den Zeitschriften sind der Titel, Preis, die Anzahl der pro Jahr erscheinenden Ausgaben
und der Verlag zu speichern.
(4) Zu den Verlagen müssen der Verlagsname, ein Ansprechpartner und die Telefonnummer in
der Datenbank stehen.
(5) Es kommt nicht vor, dass eine Zeitschrift von zwei Verlagen herausgegeben wird, und
keine zwei Verlage haben denselben Namen.
(6) Sollten Ihnen noch einige Informationen fehlen, können Sie zu den bekannten Arbeitszeiten
den Systembeauftragten des Unternehmens aufsuchen und befragen.
Aufgaben:
1.
Planen Sie das vollständige ERM für diese Aufgabe. Eine Schnellskizze genügt.
2.
Notieren Sie die Kardinalitäten in Ihrer Skizze.
3.
Zeichnen Sie in Word Ihr ERM einschließlich Kardinalitäten, Überschrift und Fußzeile
mit Name, Datum, Klasse. Drucken Sie das ERM aus und legen es zur Kontrolle vor.
4.
Überführen Sie Ihr ERM in ein relationales Datenbankmodell. Zeichnen Sie dieses
Modell in Excel. Geben Sie zu jeder Datenbanktabelle zwei realistische Datensätze an.
Dabei sollen einige Fremdschlüsselwerte auch als Primärschlüsselwerte in den
entsprechenden Tabellen existieren. Drucken Sie auch dieses Modell.
5.
Planen Sie die Tabellenstrukturen. Dazu müssen Sie für jedes Attribut (Feldname) den
Datentyp (Felddatentyp) und ggf. dessen Länge (Feldgröße) planen. Außerdem müssen
Sie die Primärschlüsselattribute kennzeichnen (z. B. mit einem Schlüsselsymbol) und
die NULL-Entscheidungen treffen, also ob eine Eingabe in einem Feld erforderlich ist
oder nicht. Die Tabellenstrukturplanung zeichnen Sie in Excel in derselben Datei wie
das Datenbankschema, aber auf einem anderen Tabellenblatt, und drucken es
ebenfalls.
© oszinddv – 2009 / C4 Abonnement.doc
1
EvA
Datenbanken
Phasen des
Datenbank-Entwurfs
Der Entwurf einer Datenbank gliedert sich in folgende Phasen:
1.
In der Anforderungsanalyse werden zunächst die Anforderungen der Nutzer der zu
entwerfenden Datenbank ermittelt. Diese Analyse kann mittels Interviews mit den einzelnen
Benutzern oder durch Fragebogenaktionen durchgeführt werden. Die Ergebnisse der
Anforderungsanalyse werden i. d. R. in einem Anforderungsdokument (User Requirements
Document) schriftlich festgelegt. Dieses Dokument muss von den Nutzern abgenommen
werden und bildet dann die Grundlage für den folgenden Entwurf.
2.
Im konzeptionellen Entwurf wird der Ausschnitt der realen Welt, der in der Datenbank
gespeichert werden soll, mit Hilfe eines Datenmodells (Entity-Relationship-Modell)
dargestellt. Da für das Verständnis dieses Datenmodells Vorkenntnisse notwendig sind,
kann es trotz seiner Eignung als Entwurfsmittel nur bedingt als Basis für die Verständigung
mit den Datenbanknutzern dienen.
3.
Im logischen Entwurf (Implementationsentwurf) erfolgt eine Umsetzung des erzeugten
Datenmodells in das zu verwendende Datenbankschema. Meist wird hierbei das relationale
Modell benutzt. Aus dem Entity-Relationship-Modell werden also direkt die entsprechenden
Relationen generiert. Diese Tabellen müssen nun auf Einhaltung der Normalformen
überprüft werden. Normalformen dienen der Vermeidung von Operationsanomalien, die zu
Inkonsistenzen im Datenbankinhalt führen können. Relationentabellen, die nicht den
Normalformen genügen, müssen entsprechend umgeformt werden.
4.
Im physischen Entwurf wird entsprechend zu den generierten Relationentabellen der
Datenbankcode für das zu verwendende Datenbanksystem erzeugt.
5.
Die Implementierungsphase besteht aus der tatsächlichen Implementierung und
Installation der Datenbank auf dem verwendeten Datenbanksystem.
© oszinddv – 2009 / D1 Phasen des DB-Entwurfs.doc
1
EvA
Was ist eine Datenbank?
Datenbanken
Eine Datenbank ist eine systematisch strukturierte, langfristig verfügbare Sammlung von Daten
einschließlich der zur sicheren Manipulation dieser Daten erforderlichen Hard- und Software.
Datenbank
Hardware
Datenbanksoftware
Datenbasis
Entwicklungsumgebung
Organisatorische
Daten (Schlüssel,
Index-Dateien,...)
DatenbankVerwaltungssystem
(DBMS)
reale Daten
Abb.
Hauptbestandteile
einer Datenbank
Nutzerprogramme
Datenbanksprache
SQL
Datenmanipulationssprache (DML)
Datendefinitionssprache (DDL)
Datensteuerungssprache (DCL)
Befehle zum
Einfügen, Ändern,
Löschen und
Einsehen von Daten
Befehle zum
Erstellen, Ändern,
Löschen und
Einsehen von
Tabellenstrukturen
Befehle zum
Erstellen, Löschen
und Auswählen
von Datenbanken
und
Zugriffsrechten
Gründe für die Verwendung von Datenbanken:
¾ Verschiedenen Nutzergruppen steht eine Datenbasis für eine gemeinsame Nutzung zur
Verfügung; die Nutzung erfolgt sowohl im Dialog als auch durch Programme.
¾ Die Datenbasis als Modell eines Realitätsausschnittes erlaubt verschiedenen Nutzern eine
unterschiedliche Sicht auf die Daten.
¾ Die realen Daten sind unabhängig von Nutzerprogrammen und damit von
Verarbeitungsprozessen, und die Nutzung ist unabhängig von der physischen Speicherform.
¾ Durch die zentralisierte Verwaltung (DBMS und DB-Administrator) wird Redundanz
vermieden und die inhaltliche Vollständigkeit (Integrität) sowie die logische Korrektheit
(Konsistenz) gesichert; durch eine Nutzerverwaltung lassen sich Zugriffsrechte vergeben
und überwachen (Datenschutz).
© oszinddv – 2009 / D2 DBMS.doc
1
EvA
Datenbanken
Structured Query Language
SQL
Die Structured Query Language, kurz SQL, ist eine Skriptsprache, die gleichermaßen dem
Datenbankadministrator, dem Datenbankentwickler und dem Datenbankbenutzer einen Zugriff
auf die Datenstruktur und die Daten in einer Datenbank ermöglicht. Mit SQL sind Sie in der Lage,
Datenbanken und Tabellen einzurichten und zu löschen, Relationen zu definieren oder Daten in
den Tabellen zu verwalten und abzufragen. SQL agiert als eine Art Programmschnittstelle
zwischen einem Datenbankanwender bzw. einer Anwendungssoftware (API), die auf eine
Datenbank zugreift, und dem Datenbanksystem.
Alle Datenbankoperationen können mit Hilfe der SQL-Programmschnittstelle ausgeführt werden. SQL ist eine einfache und strukturierte Skriptsprache, die eine beschreibende Vorgehensweise unterstützt. Mit SQL
beschreibt der Benutzer das Ergebnis einer Datenbankoperation, ohne
zu definieren, wie dieses Ergebnis erzielt wird. Dadurch war es möglich,
die Anweisungen in SQL an die englische Sprache anzulehnen. Beide
Kriterien führen dazu, dass sich SQL von traditionellen Programmierund Skriptsprachen wie C, PHP oder Perl unterscheidet.
SQL ist relativ leicht zu erlernen und besteht eigentlich nur aus einer
Handvoll von Basisanweisungen. Die Komplexität und Stärke von SQL
begründet sich allerdings nicht so sehr aus den Basisbefehlen wie GRANT, CREATE, DELETE
oder SELECT, sondern vielmehr aus den zahlreichen Anweisungsoptionen auch Klauseln
genannt. Je nach Datenbankhersteller ist der SQL-Standard entweder erweitert worden oder
aber nur eingeschränkt verfügbar, wie das aus Gründen der Performance bei kleinen und
mittleren Datenbanksystemen der Fall ist. Einer der mächtigsten Befehle in SQL ist die SELECTAnweisung. Mit diesem Befehl können Sie komplexe Anfragen an die Datenbank stellen und
Tabellen zu einem relationalen Datenmodell verknüpfen.
SQL-Geschichte
Die Structured Query Language wurde in den 70er Jahren in den Forschungslabors von IBM
entwickelt, um Daten in dem ersten relationalen Datenbanksystem System R verwalten zu
können. SQL ist damals speziell für eine Zielgruppe von Datenbankbenutzern aus dem Bereich
der Buchhaltung und Verwaltung entwickelt worden. Den Durchbruch als StandardKommunikationsschnittstelle schaffte SQL allerdings erst zu Beginn der 80er Jahre, als ORACLE
Corp, eines der ersten und zugleich populärsten kommerziellen Datenbanksysteme mit dem
Namen ORACLE auf den Markt brachte. Seitdem gilt SQL als Standardsprache für Datenbanken
und wurde später in andere Datenbanksysteme wie INFORMIX, SYBASE oder MS-SQL
implementiert. Es dauerte allerdings noch bis 1986, bis SQL durch die ANSI (Abk. für American
National Standard Institute] normiert, d.h. zum verbindlichen Standard SQL1 für alle Entwickler
von Datenbanksystemen erklärt wurde. Der Standard von 1986 enthielt alle wesentlichen
Anweisungen für die Definition (DDL) und die Manipulation (DML) von Daten einer relationalen
Datenbank. 1987 wurde der Standard international von der ISO (Abk. für International Standard
Organization) übernommen. Mit einer Reihe von Erweiterungen, u. a. der Einführung von
Schlüsseln und Integritätsprüfungen, wurde 1989 SQL1 in der Version SQL89 zum verbindlichen
weltweiten Industriestandard erklärt. Bis zu diesem Zeitpunkt hatten sich bereits, wie so oft in der
Softwarebranche, verschiedene Dialekte von SQL entwickelt, die letztlich eine Kompatibilität, d.h.
den uneingeschränkten Austausch von Programmen zwischen Datenbanksystemen
verschiedener Anbieter, erschwerten. Erst der 92er Standard SQL92 oder SQL2 nahm eine
Reihe weiterer Spracherweiterungen auf. Dazu gehörten der Befehl ALTER zur nachträglichen
Modifikation der Tabellenstruktur, Domänen und Transaktionen. SQL2 wird heute weitgehend als
SQL-Standard verwendet, wobei nur sehr große und kostenintensive relationale
Datenbanksysteme einen Großteil des vorgeschlagenen Sprachumfangs implementiert haben.
Mit dem zunehmenden Einsatz objektorientierter Ansätze im Datenbankbereich entstand Mitte
der 90er Jahre verstärkt die Notwendigkeit, die Verwaltung von objektorientierten Daten in einem
erweiterten SQL-Sprachkonzept zu verankern. Zurzeit wird daher intensiv an einem neuen
Standard SQL3 gearbeitet, der vor allem objektorientierte Ansätze berücksichtigen soll. Er ist
allerdings noch nicht verabschiedet.
Quelle: Das Einsteigerseminar MySQL, bhv, 2001, S. 95 ff.
© oszinddv – 2009 / D3 SQL-Info.doc
1
EvA
Datenbanken
Folgender Text ist dem MySQL 5.1 Reference Manual entnommen.
http://dev.mysql.com/doc/refman/5.1/en/index.html
Lesen Sie den Text durch und arbeiten Sie die wesentlichen Merkmale von MySQL heraus!
1.4.1. What is MySQL?
MySQL, the most popular Open Source SQL database management system, is developed,
distributed, and supported by MySQL AB. MySQL AB is a commercial company, founded by the
MySQL developers. It is a second generation Open Source company that unites Open Source
values and methodology with a successful business model.
The MySQL Web site (http://www.mysql.com/) provides the latest information about MySQL
software and MySQL AB.
MySQL is a database management system.
A database is a structured collection of data. It may be anything from a simple shopping
list to a picture gallery or the vast amounts of information in a corporate network. To add,
access, and process data stored in a computer database, you need a database
management system such as MySQL Server. Since computers are very good at handling
large amounts of data, database management systems play a central role in computing,
as standalone utilities, or as parts of other applications.
MySQL is a relational database management system.
A relational database stores data in separate tables rather than putting all the data in one
big storeroom. This adds speed and flexibility. The SQL part of “MySQL” stands for
“Structured Query Language.” SQL is the most common standardized language used to
access databases and is defined by the ANSI/ISO SQL Standard. The SQL standard has
been evolving since 1986 and several versions exist. In this manual, “SQL-92” refers to
the standard released in 1992, “SQL:1999” refers to the standard released in 1999, and
“SQL:2003” refers to the current version of the standard. We use the phrase “the SQL
standard” to mean the current version of the SQL Standard at any time.
MySQL software is Open Source.
Open Source means that it is possible for anyone to use and modify the software.
Anybody can download the MySQL software from the Internet and use it without paying
anything. If you wish, you may study the source code and change it to suit your needs.
The MySQL software uses the GPL (GNU General Public License),
http://www.fsf.org/licenses/, to define what you may and may not do with the software in
different situations. If you feel uncomfortable with the GPL or need to embed MySQL code
into a commercial application, you can buy a commercially licensed version from us. See
the MySQL Licensing Overview for more information
(http://www.mysql.com/company/legal/licensing/). …
MySQL Server works in client/server or embedded systems.
The MySQL Database Software is a client/server system that consists of a multi-threaded
SQL server that supports different backends, several different client programs and
libraries, administrative tools, and a wide range of application programming interfaces
(APIs).
We also provide MySQL Server as an embedded multi-threaded library that you can link
into your application to get a smaller, faster, easier-to-manage standalone product. …
The official way to pronounce “MySQL” is “My Ess Que Ell” (not “my sequel”), but we don't mind
if you pronounce it as “my sequel” or in some other localized way.
© oszinddv – 2009 / D4 MySQL-Info (englisch).doc
1
EvA
Datenbanken
SQL-Datentypen
Numerische Datentypen
In einer Datenbank können ganz unterschiedliche Daten gespeichert werden. Für die
verschiedenen Arten von Daten stellt das Datenbanksystem sogenannte Datentypen zur
Verfügung. Die folgende Auflistung fasst die wichtigsten SQL-Datentypen zusammen. Sie
können fünf verschiedenen Basisdatentypen zugeordnet werden.
•
Numerische Daten: ganze oder gebrochene Zahlen
•
Alphanumerische Daten: Ziffern, Buchstaben, Zeichen oder Zeichenketten
•
Datum und Zeit: je nach Art als Spezialform numerischer oder alphanumerischer Daten
•
Mengen: vordefinierte zulässige Ausprägungen der Attributwerte
•
Binärdaten (BLOB – binary large object): unstrukturierte Daten in binärer Form
Numerische Datentypen (INTEGER, FLOAT, DECIMAL)
Numerische Datentypen werden in die zwei Kategorien ganze Zahlen (engl. integer) und
Fließkommazahlen (engl. float) eingeteilt.
Der INTEGER-Datentyp wird für Daten verwendet, die durch ganze Zahlen dargestellt werden
können, z. B. für die Anzahl von Objekten, fortlaufende Nummerierungen etc. Je nach Bedarf
der größtmöglichen Zahl gibt es TINYINT (1 Byte Speicherplatzbedarf pro gespeicherter Zahl),
SMALLINT (2 Byte), MEDIUMINT (3 Byte), INTEGER (4 Byte) und BIGINT (8 Byte)
Der FLOAT-Datentyp wird für gebrochene Zahlen, d. h. Zahlen mit Nachkommastellen (z. B.
Maßzahlen) eingesetzt. Der Datentyp FLOAT entspricht der IEEE-Norm für die
Zahlendarstellung mit den damit verbundenen Fehlern in der Genauigkeit. Daher gibt es für
Anwendungen bei denen Rundungsfehler ausgeschlossen werden müssen (z. B. Geldbeträge)
den Datentyp DECIMAL (Festkommazahl). Hierbei werden die Zahlen als Zeichenketten
gespeichert, d. h. ein Byte Speicherplatz pro Ziffer, sowie Dezimalpunkt und Vorzeichen der
gespeicherten Zahl. Beachten Sie bei der Eingabe einer gebrochenen Zahl in einem SQLBefehl, dass Sie immer einen Dezimalpunkt statt eines Kommas eingeben.
Datentyp
TINYINT(M)
Bezeichnung
Ganzzahl
Wertebereich
– 128 ... + 127
(1 Byte)
INTEGER(M)
kurz: INT
Ganzzahl
– 2147483648
...
+ 2147483647
(4 Byte)
FLOAT(M,D)
Fließkommazahl
– 1.17549E-38
...
+ 3.4028E+38
(4 Byte)
DECIMAL(P,S)
Festkommazahl
beliebig
(je Stelle ein
Byte)
© oszinddv – 2009 / E1 SQL-Datentypen.doc
Bemerkungen (speziell MySQL)
Der Befehlszusatz UNSIGNED stellt auf
0 … 255 um. Das ist bei allen numerischen
Datentypen möglich.
M (maximum display size) gibt an, wie viele
Stellen angezeigt werden sollen. Weder der
zulässige Wertebereich noch die erlaubte
Stellenanzahl werden dadurch eingeschränkt.
Praktisch ergibt sich also keine Auswirkung.
In diesem Fall gibt M die Anzahl aller Ziffern
an, D jene davon nach dem Dezimalpunkt.
D bewirkt ein Runden der Zahlen beim Speichern, wenn mehr Nachkommastellen eingegeben werden als zugelassen.
M schränkt sogar den Wertebereich ein, d. h.
eine Zahl mit mehr als den möglichen Vorkommastellen wird auf die größt-darstellbare
Zahl verkleinert.
Z. B. wird bei FLOAT(4,2) aus 273.1 der Wert
99.99 und aus 37.317 der Wert 37.32
P (precision) gibt die gesamte gewünschte
Stellenanzahl an (ohne Dezimalpunkt und
neg. Vorzeichen, wodurch pos. Zahlen eine
Stelle mehr haben können). S (scale) gibt die
Anzahl der Stellen nach dem Dezimalpunkt
an. Z. B. reicht DECIMAL(6,3) von -999.999
bis 9999.999. Größere Eingaben werden wie
bei Float auf diese Werte verkleinert.
1
SQL-Datentypen
übrige Datentypen
EvA
Datenbanken
Alphanumerische Datentypen (CHAR, VARCHAR, TEXT)
Daten vom Typ CHAR belegen im Speicher immer eine vorher festgelegte Speicherplatzlänge.
Dagegen belegen Daten vom Typ VARCHAR nur so viele Bytes, wie Zeichen in einer
Zeichenkette vorhanden sind. Weil ausreichender Speicherplatz heute kein Problem mehr
darstellt, sollten Sie den Datentyp CHAR verwenden, da Tabellen mit fester Länge schneller
verarbeitet werden können als Tabellen mit variabler Länge.
Falls Sie in der Datenbank Zeichenketten speichern wollen, die mehr als 255 Zeichen enthalten,
müssen Sie den Datentyp TEXT verwenden.
Datentyp
CHAR(n)
VARCHAR(n)
TEXT
Bezeichnung
Zeichenkette mit n Stellen
Variable Zeichenkette, max. n Stellen
Text
Wertebereich
0 ... 255 Zeichen
0 ... 255 Zeichen
0 ... 65535 Zeichen
Zeichenketten müssen in SQL-Befehlen immer in Anführungszeichen eingegeben werden. Am
besten verwenden Sie die einfachen Hochkommata. Zahlen werden übrigens nicht in
Anführungszeichen gesetzt.
Datums- und Zeittypen (DATE, YEAR, TIME)
Da in Datenbanken oft zeitabhängige Prozesse abgebildet werden, wurden in SQL zusätzliche
Datentypen für Datums- und Zeitangaben aufgenommen, wobei die wichtigsten DATE und
YEAR sind. Beachten Sie bei der Eingabe eines Datums das Format JJJJ-MM-TT.
Datentyp
DATE
Bezeichnung
Datum
YEAR
TIME
Jahr
Uhrzeit
Wertebereich
1000-01-01 bis
9999-12-31
1901 bis 2155
–838:59:59 bis
+838:59:59
Format
JJJJ-MM-TT
Beispiel
"2007-03-28"
JJJJ
hh:mm:ss
1984
"15:37:12"
Mengentyp (SET)
Der Datentyp SET ist ein spezieller Zeichenkettendatentyp. Die Besonderheit gegenüber allen
anderen Datentypen besteht darin, dass der Datenbankentwickler selbst einen Wertebereich
definieren kann, indem eine SQL-Anweisung alle möglichen Werte definiert, die ein Objekt
innerhalb des Datentyps SET annehmen kann.
Datentyp
SET
Bezeichnung
Menge
Wertebereich
64 Elemente
mit 0 ... 255 Zeichen
Beispiele
"rot", "grün", "blau"
"Nord", "Süd", "Ost", "West"
"true", "false"
Binärer Datentyp (BLOB – binary large object)
Ein BLOB ist eine Art Behälter, in dem Sie binär codierte Objekte, also Text-, Bild-, Audio- oder
Videodaten (z. B. MP3-Dateien) speichern können. Da eine relationale Datenbank jedoch keine
Algorithmen zur Mustererkennung in unstrukturierten Daten zur Verfügung stellt, führt man in
der Regel in Tabellenspalten vom Datentyp BLOB keine Suche nach Objekten durch. Vielmehr
verwaltet man in Spalten vom Typ CHAR oder VARCHAR Metainformationen über spezielle
binäre Objekte.
© oszinddv – 2009 / E1 SQL-Datentypen.doc
2
EvA
Metasprache und Syntax
Datenbanken
Syntax
SQL-Befehle, die an eine Datenbank geschickt werden, müssen nach festgelegten Regeln
geschrieben werden, da sie sonst das DBMS nicht „versteht“. Diese Regeln werden als Syntax
einer Datenbanksprache (oder Programmiersprache) bezeichnet.
Metasprache
Die Syntax einer Sprache wird in einer künstlichen Sprache, der sogenannten Metasprache
notiert. Ganz allgemein ist eine Metasprache eine Sprache, mit der eine andere Sprache erklärt
oder definiert wird, mit der also die Regeln für diese Sprache festgelegt werden. Meta kommt
aus dem Griechischen (µετα) und bedeutet unter anderem soviel wie „hinter, über“.
Darstellungsarten
In der Informatik wird üblicherweise die Syntax einer Programmiersprache als Syntaxdiagramm
gezeichnet oder in der erweiterten Backus-Naur-Form (EBNF) aufgeschrieben. Die EBNF
wurde 1960 von den Wissenschaftlern Backus und Naur entwickelt und später dann erweitert.
Wir werden als Metasprache die Symbole nach EBNF verwenden.
Metasprachenelement
nach EBNF
Bedeutung
Beispiele
GROSSBUCHSTABEN
Befehlsworte und Schlüsselworte
der Sprache, die genau so im
Befehl verwendet werden müssen.
CREATE DATABASE
Befehlsteile, die vom Benutzer
eingesetzt werden müssen.
<GROSSBUCHSTABEN> Kleinbuchstaben bedeuten, dass
ein Bezeichner frei zu wählen ist;
Großbuchstaben zeigen an, dass
aus einer Liste von Schlüsselworten auszuwählen sei.
<datenbankname>
[]
Optionalsymbol
Alles in den eckigen Klammern
kann, muss aber nicht im Befehl
verwendet werden.
[NOT NULL]
Alternativentrennung
Genau eine der angegebenen
Befehlsteile muss gewählt werden.
Alternativen in eckigen Klammern
bedeutet, dass eine gewählt
werden kann.
ROT | GELB | GRÜN
Wiederholungssymbol
Das Vorangegangene ist
(mehrfach) zu wiederholen. Meist
in eckigen Klammern gesetzt als
Möglichkeit einer Wiederholung.
Die geschweiften Klammern
bedeuten automatisch keine, eine
oder mehrmalige Wiederholung.
<wert1>, <wert2>, …
<kleinbuchstaben>
|
…
oder
{}
(nach EBNF)
© oszinddv – 2009 / E2 Metasprache.doc
<DATENTYP>
[DEFAULT <standardwert>]
[FIRST | AFTER]
[, …]
<wert1> {,<wert2>}
1
SQL-Befehl
CREATE TABLE
EvA
Datenbanken
CREATE TABLE
Die CREATE TABLE-Anweisung erzeugt eine neue Tabelle unter dem angegebenen Namen.
Mit dieser Anweisung definieren Sie die Datenstruktur einer Tabelle, d. h. Sie müssen für jede
Tabellenspalte einen Bezeichner (Attributnamen), einen Datentyp und Eigenschaften angeben.
Syntax:
CREATE TABLE <tabellenname>
( <attributname1> <DATENTYP>
[DEFAULT <standardwert>]
[AUTO_INCREMENT] [NOT NULL] [,
<attributname2> <DATENTYP> [DEFAULT <standardwert>]
[AUTO_INCREMENT] [NOT NULL] [, ...]],
PRIMARY KEY ( <attributname> [, ...] ));
Eigenschaften:
DEFAULT
AUTO_INCREMENT
NOT NULL
Für ein Datenfeld wird ein Standardwert vorgegeben. Nicht anwendbar für Spalten
vom Datentyp BLOB oder TEXT.
Das Datenbanksystem fügt in diese Spalte automatisch eine Zahl ein.
AUTO_INCREMENT-Werte beginnen mit 1 und werden mit jedem neuen
Datensatz, der in die Tabelle eingefügt wird, um 1 hochgezählt. Die Spalte muss
den Datentyp Integer besitzen, als Primärschlüssel (oder Index) definiert und NOT
NULL gesetzt sein.
Die AUTO_INCREMENT-Option kann für die interaktive Eingabe von Daten von
großer Bedeutung sein, da jedem Datensatz automatisch eine eindeutige
Nummerierung zugewiesen wird. Der Benutzer der Datenbank muss sich in
diesem Fall nicht um die fortlaufende Kennzeichnung von Datensätzen kümmern.
Der Nachteil ist, dass auf diese Weise identische (redundante) Datensätze in den
Datenbestand gelangen können, die sich nur durch die automatisch generierte
Kennung unterscheiden.
Gibt an, dass die Spalte Werte besitzen muss, die nicht NULL sind. Durch diese
Option wird eine Eingabe von Werten erzwungen, da, falls keine Dateneingabe
stattfindet, ein Datenfeld in der Regel auf den Wert NULL gesetzt wird.
Beispiel:
CREATE TABLE buch
( BuchNr INTEGER AUTO_INCREMENT NOT NULL,
Autor CHAR(10),
Titel CHAR(20),
Preis DECIMAL(7,2),
Jahr
YEAR,
PRIMARY KEY (BuchNr));
Aufgabe:
Erstellen Sie die Datenbank “db_<IhreKennung>_bibliothek” und darin diese Tabelle “buch”.
DROP TABLE
Die Anweisung DROP TABLE löscht eine oder mehrere spezifizierte Tabellen einer Datenbank.
Beachten Sie, dass mit dem Löschen einer Tabelle auch alle gespeicherten Daten verloren
gehen.
Syntax:
DROP TABLE <tabellenname> [, <tabellenname2>, ...];
Aufgabe:
Löschen Sie die Tabelle “buch” und danach Ihre Bibliotheksdatenbank.
© oszinddv – 2009 / E3 CREATE TABLE.doc
1
EvA
SQL-Syntax (Auswahl)
Datenbanken
CREATE DATABASE <datenbankname>;
_________________________________________________________________________________________________________________________________________
DROP DATABASE <datenbankname>;
_________________________________________________________________________________________________________________________________________
USE <datenbankname>;
_________________________________________________________________________________________________________________________________________
CREATE TABLE <tabellenname>
( <attributname1> <DATENTYP>
[DEFAULT <standardwert>]
[AUTO_INCREMENT] [NOT NULL] [,
<attributname2> <DATENTYP> [DEFAULT <standardwert>]
[AUTO_INCREMENT] [NOT NULL] [, ...]],
PRIMARY KEY ( <attributname> [, ...] ));
_________________________________________________________________________________________________________________________________________
DROP TABLE <tabellenname> [, <tabellenname2> [, ...]];
_________________________________________________________________________________________________________________________________________
ALTER TABLE <tabellenname>
ADD <neuer_attributname> <DATENTYP>
[DEFAULT <standardwert>] [AUTO_INCREMENT] [NOT NULL]
[FIRST | AFTER <existierender_attributname>];
_________________________________________________________________________________________________________________________________________
ALTER TABLE <tabellenname>
CHANGE <alter_attributname> <neuer_attributname> <DATENTYP>
[DEFAULT <standardwert>] [AUTO_INCREMENT] [NOT NULL]
_________________________________________________________________________________________________________________________________________
ALTER TABLE <tabellenname>
DROP <attributname>;
_________________________________________________________________________________________________________________________________________
CREATE INDEX <indexname> ON <tabellenname> (<attributname>);
_________________________________________________________________________________________________________________________________________
DROP INDEX <indexname> ON <tabellenname>;
_________________________________________________________________________________________________________________________________________
INSERT INTO <tabellenname>
[(<attributname1>, <attributname2>, ... )]
VALUES (<wert1_vom_ds1>, <wert2_vom_ds1>, ...) [,
(<wert1_vom_ds2>, <wert2_vom_ds2>, ...) [, ...]];
_________________________________________________________________________________________________________________________________________
UPDATE <tabellenname>
SET <attributname1> = <wert1> [,
<attributname2> = <wert2> [, ... ]]
[WHERE <bedingung>];
_________________________________________________________________________________________________________________________________________
DELETE FROM <tabellenname>
[WHERE <bedingung>];
_________________________________________________________________________________________________________________________________________
SELECT [DISTINCT]
* | <attributname1> | <FUNCTION> [AS <alias1>] [,
<attributname2> | <FUNCTION> [AS <alias2>] [, ... ]]
FROM <tabellenname1>
[, <tabellenname2>, <tabellenname3>, ...
| INNER JOIN <tabellenname2> ON <bedingung_1_2>
INNER JOIN <tabellenname3> ON <bedingung_2_3> ... ]
[WHERE <bedingung>]
[GROUP BY <gruppierungsattributname>] [HAVING <bedingung>]
[ORDER BY <ordnungsattributname1> [ASC | DESC] [,
<ordnungsattributname2> [ASC | DESC] [, ... ]];
© oszinddv – 2009 / E4 SQL-Syntax.doc
1
EvA
SQL-Syntax (Erweiterung)
Datenbanken
Sonderoperatoren
BETWEEN
IN
LIKE
_________________________________________________________________________________________________________________________________________
Gruppierungsfunktionen (Aggregatfungktionen)
AVG (<spaltenausdruck> | <ausdruck>)
COUNT (* | <spaltenausdruck> | <ausdruck>)
MAX (<spaltenausdruck> | <ausdruck>)
MIN (<spaltenausdruck> | <ausdruck>)
SUM (<spaltenausdruck> | <ausdruck>)
_________________________________________________________________________________________________________________________________________
Zeichenkettenfunktionen
LOWER (<stringausdruck>)
SUBSTRING (<stringausdruck>, <position> [, <länge>])
TRIM (<stringausdruck>)
UPPER (<stringausdruck>)
_________________________________________________________________________________________________________________________________________
Zugriffsberechtigungen
GRANT <berechtigung_art1>
[(<attributname1> [, <attributname2> , ...)]]
[,<berechtigung_art2>
[(<attributname1> [, <attributname2> , ...)]]]| ALL
ON {<tabellenname> | *.* | <datenbankname.*>}
TO <benutzername1> [IDENTIFIED BY <passwort1>] |
[, <benutzername2> [IDENTIFIED BY <passwort2>], ...] | PUBLIC
_________________________________________________________________________________________________________________________________________
REVOKE <berechtigung_art1>
[(<attributname1> [, <attributname2>, ...)]
[, <berechtigung_art2>
[(<attributname1> [, <attributname2>, ...)]]
ON {<tabellenname> | *.* | <datenbankname.*>}
FROM <benutzername1> [, <benutzername2>, ...]
_________________________________________________________________________________________________________________________________________
© oszinddv – 2009 / E4 SQL-Syntax.doc
2
EvA
Datenbanken
SQL-Übung
Flotte Kiste
Die Vorlage für die folgenden Aufgaben ist das ER-Modell „Flotte Kiste“ mit der entsprechenden
Transformation in das.
Notieren Sie die notwendigen SQL-Befehle auf diesem Blatt oder kopieren Sie sie aus dem
SQL-Editor in ein Word-Dokument, das Sie sich am Ende ausdrucken können.
1. Erstellen Sie die Datenbank für die Flotte Kiste mit Ihrem persönlichen Datenbanknamen
„db_<IhreKennung>_flottekiste“.
2. Erstellen Sie die notwendigen Tabellen gemäß dem relationalen Datenbankschema.
Die Tabellenstrukturen können Sie sich im Frontend-Programm grafisch anzeigen lassen.
3. Tragen Sie sich als Kunden in die Datenbank ein!
4. Tragen Sie folgende Oldtimer in die Datenbank ein:
B-ET 324; Traction Avant; Citroen; 1299 ccm; 36 PS; Baujahr 1936; 34,00 € pro Tag
B-RL 9299; Phantom II; Rolls-Royce; 7688 ccm; 130 PS; Baujahr 1936; 70,00 € pro Tag
5. Mieten Sie alle eingetragenen Oldtimer zu einem frei wählbaren Datum, aber zahlen Sie nur
den Mietvorgang mit dem Citroen.
6. Haben Sie einen Mietgrund eingetragen? Nein, dann löschen Sie das Feld (Attribut, ganze
Spalte) aus der Datenbank. Wenn ja, dann auch!
7. Sorry, der Citroen hat nur 34 PS. Bitte ändern Sie dies im entsprechenden Datensatz.
8. Statt „Ja“ und „Nein“ für Bezahlt soll in Zukunft das Datum der Zahlung gespeichert werden.
Ändern Sie den Feldtyp in der Tabelle „mieten“ entsprechend! Was passiert mit den Daten?
9. Sie haben einen Totalschaden am Rolls-Royce verursacht. Löschen Sie dieses Fahrzeug
aus der Datenbank. Was passiert mit den Mietvorgängen des Rolls-Royce?
10. Nur ein Kunde, der dann noch nicht mal zahlt und das teuerste Auto zu Schrott fährt, ist für
jede Autovermietung das Ende. Die „Flotte Kiste“ ist Konkurs!
Löschen Sie zunächst die Tabelle „kunde“ und dann die ganze Datenbank!
© oszinddv – 2009 / E5 SQL FlotteKiste.doc
1
SQL-Übung
Universität
EvA
Datenbanken
Gegeben ist das folgende ER-Diagramm.
Planen Sie die Relationen für die Entitätstypen
Student und Vorlesung inkl. Datentypen und
NULL-Entscheidung.
Student
setzt
voraus
Vorgänger
Nachfolger
Vorlesung
hört
VorlNr
MatrNr
Titel
Name
SWS
prüft
Vorname
Note
GebDat
liest
AnfJahr
Assistent
arbeitet für
Professor
PersNr
PersNr
Name
Name
Rang
Fachgebiet
Raum
Notieren Sie die SQL-Befehle für die folgenden Aufgaben und testen Sie diese danach am PC.
1. Erstellen Sie die Datenbank für die Universität!
2. Erstellen Sie die Tabellen „student“ und „vorlesung“ gemäß Ihrer Planung.
3. Tragen Sie sich und zwei weitere Personen als Studenten in die Datenbank ein.
4. Planen Sie zwei Vorlesungen und tragen Sie sie ein.
5. Haben Sie daran gedacht, dass die Beziehung zwischen Vorlesung und Professor eine
1:N-Beziehung ist? Wenn nicht, dann ergänzen Sie in der Tabelle „vorlesung“ das Feld
„gelesenVon“. Wieso? Und was ist mit „setzt voraus“? – Gehen Sie dabei von 1:1 aus.
Alles berücksichtigt? Dann Hut ab, wenn ich einen hätte. Die notwendigen SQL-Befehle
können Sie dann sicherlich auch – also schnell notieren.
6. Der Rotstift hat auch die Universität erreicht! Reduzieren Sie die Semesterwochenstunden
(SWS) bei allen Vorlesungen um eine Stunde.
7. Ist der Datentyp des Feldes „AnfJahr“ vom Typ YEAR? Wenn nicht, dann ändern Sie bitte
Ihre Tabellenstruktur. Wenn ja, dann ... (s. o.)
8. Nun haben Sie alles so schön angefangen aufzubauen. Wenn Sie wollen können Sie die
komplette Datenbank zu Hause fertig stellen und 100 Professoren, 500 Assistenten, 20000
Studenten und eine für alle ausreichende Anzahl von Vorlesungen eintragen – unser Dank
wäre Ihnen sicher. Sie können aber auch alles wieder löschen. Beginnen Sie mit einem
Zelleninhalt, dann einen Datensatz, ein ganzes Feld, eine Tabelle und zum Schluss löschen
Sie die gesamte Datenbank. Und nicht vergessen: Alle SQL-Befehle vorher notieren.
© oszinddv – 2009 / E6 SQL Universitaet.doc
1
EvA
Datenbanken
SQL-Übung
Zeitschriftenabonnement
Grundlage für diese Übung ist die Tabellenstruktur der Datenbank „Zeitschriftenabonnement“,
die Sie aus dem dazugehörigen ERM und relationalen Datenbankschema entwickelt haben.
Da Sie nur die Tabelle „zeitschrift“
benötigen werden, ist deren Struktur hier
noch einmal abgebildet.
Selbstverständlich dürfen Sie alle übrigen
Tabellen als ergänzende Übung in ähnlicher
Form behandeln.
Table: zeitschrift
Name
Type
Null
znr
int
No
titel
preis
anzJahr
vName
char(30)
decimal(4,2)
int
char(20)
Yes
Yes
Yes
Yes
Notieren Sie die SQL-Befehle für die folgenden Aufgaben und testen Sie diese danach am PC.
1. Erstellen Sie die Datenbank „abonnement“ (ggf. als „db_<IhreKennung>_abo“)!
2. Erstellen Sie die Tabelle „zeitschrift“ gemäß obiger Planung.
3. Tragen Sie folgende Datensätze in die Tabelle ein:
Nr. 39, „Wissen für alle“, 6,30 € pro Ausgabe, monatliche Erscheinungsweise, „Verlag H&K“
Nr. 74, „Kochen für die Katz“, 2,95 €, 26 Ausgaben pro Jahr, „Verlag der Tierfreunde“
4. Geben Sie eine alphabetisch geordnete Liste aller Verlage aus.
5. Sie werden bemerkt haben, dass 20 Zeichen für den Verlag nicht ausreichen, erhöhen Sie
den Wert auf 30.
6. Lassen Sie sich für die Zeitschriften die Preise für ein Jahresabonnement ausgeben.
7. Erst jetzt fällt auf, dass eine Eigenschaft über Zeitschriften in der Tabelle fehlt, und zwar an
welchem Wochentag eine Zeitschrift erscheint (sofern bekannt). Tragen Sie das Attribut
„wochentag“ mit 10 Zeichen vor den Verlagsnamen ein und geben Sie bei „Kochen für die
Katz“ den Freitag an.
8. Der Verlag H&K erhöht die Preise aller seiner Zeitschriften um 6 Prozent.
9. Wenn Sie wollen, können Sie nun alle anderen Tabellen erzeugen und mit Leben füllen, also
mindestens 200 Kunden, 50 Zeitschriften, 20 Verlage und viele Abonnements. Wenn Ihnen
das doch ein wenig zu viel Arbeit ist, dann löschen Sie bitte alles wieder, aber schön
langsam – und nicht vergessen: Alle SQL-Befehle vorher notieren!
a) Beginnen Sie mit einem Zelleninhalt, indem Sie den Titel der Zeitschrift 74 löschen.
b) Danach löschen Sie das Attribut „anzJahr“.
c) Löschen Sie nun den gesamten Datensatz 39.
d) Löschen Sie die Tabelle „zeitschrift“.
e) Ganz zum Schluss entfernen Sie die gesamte Datenbank.
© oszinddv – 2009 / E7 SQL Abonnement.doc
1
EvA
Datenbanken
Tabellenstruktur der Datenbank
„Flotte Kiste“
Die folgenden Screenshots zeigen die Tabellenstrukturen der Datenbank „Flotte Kiste“.
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
1
EvA
SQL-Abfragen „Flotte Kiste“
Datenbanken
Teil 1: Abfragen über einzelne Tabellen
Allgemeine Hinweise für alle Teile der SQL-Abfragen zur Flotten Kiste:
• Verwenden Sie die Datenbank FlotteKiste04 als User info.
• Notieren Sie die SQL-Befehle in gewohnter Weise.
• Notieren Sie die Antworten der Datenbank, wie Namen etc. oder mind. wie viele Kunden …
1.1
Wie lautet der Vorname von Frau Ackermann?
1.2
Wer wohnt in Kleinkleckersdorf?
1.3
Von einem Kunden haben Sie nur die Postleitzahl 10889 notiert. Wer ist es?
1.4
Wer wohnt im Holzweg 7 und welche Telefonnummer hat dieser Kunde?
1.5
Wer wohnt in Berlin?
1.6
Wer wohnt in Berlin oder in Potsdam?
1.7
Wer wohnt weder in Berlin noch in Potsdam?
1.8
Welcher Oldtimer hat das Kennzeichen B-SL 300?
1.9
Wie viele PS hat der Rolls-Royce Phantom II?
1.10 Welche Oldtimer sind jünger als 50 Jahre?
1.11 Wer hat kein Telefon (angegeben)?
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
2
EvA
SQL-Abfragen „Flotte Kiste“
Datenbanken
Teil 2: Abfragen mit weiteren Operatoren
2.1
Wessen Vornamen beginnen mit einem R?
2.2
Geben Sie alle Kunde an, die den Nachnamen Müller, Schulze, Daniel oder Walter haben!
2.3
Sie suchen eine Person Maier/Meyer oder mit ähnlicher Schreibweise. Wo wohnt sie?
2.4
Welche Oldtimer sind jünger als 50 Jahre aber älter als 40 Jahre?
2.5
Erstellen Sie eine Telefonliste aller Kunden aus dem PLZ-Bereich 21000 bis 24000.
2.6
Geben Sie eine Liste aller Hersteller aus, von denen Rudi Rost Oldtimer besitzt!
2.7
Geben Sie diese Herstellerliste alphabetisch sortiert aus!
2.8
Sortieren Sie die Oldtimer nach der Leistung (PS), wobei der stärkste Wagen zuerst
aufgeführt werden soll.
2.9
Welche Vorlieben hat Rudi Rost erfasst?
2.10 Welche Vorlieben haben die Berliner und Potsdamer?
2.11 Ermitteln Sie die Namen und Adressen der Kunden, die als Hausnummer eine 13 haben!
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
3
EvA
SQL-Abfragen „Flotte Kiste“
Datenbanken
Teil 3: Aggregatfunktionen + Subselect
3.1
Wie viele Kunden hat Rudi Rost?
3.2
Wie viele Kunden haben kein Telefon (angegeben)?
3.3
Wie viele Mietvorgänge sind noch nicht bezahlt worden?
3.4
Wie hoch ist der durchschnittliche Hubraum aller Oldtimer?
3.5
Wie hoch ist die minimale Leistung (PS) aller Oldtimer?
3.6
Welches Fahrzeug (Hersteller, Typ) hat diese minimale Leistung?
3.7
Welcher Oldtimer (Hersteller, Typ) hat den größten Hubraum?
3.8
Welche Oldtimer haben mehr als die durchschnittliche Leistung aller Oldtimer? Sortieren
Sie die Liste aufsteigend nach der Leistung.
3.9
Wie viele Tage wurde der Oldtimer mit dem Kennzeichen B-EW 3478 vermietet?
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
4
EvA
SQL-Abfragen „Flotte Kiste“
Datenbanken
Teil 4: Gruppierung
4.1
Wie hoch ist die durchschnittliche Leistung pro Hersteller?
4.2
Erstellen Sie eine Liste mit der Anzahl der Mietvorgänge pro Oldtimer (nur Kennzeichen)
sortiert nach der Anzahl der Mietvorgänge.
4.3
Rudi Rost will expandieren. Ob sich eine weitere Ausleihstation im Raum München lohnt?
Wie viele Kunden gibt es pro Ort in den Orten, deren PLZ mit 8 beginnen? Sortieren Sie
absteigend nach der Anzahl, innerhalb gleicher Werte die Orte alphabetisch.
4.4
Für welche Vorlieben haben sich jeweils mindestens 15 Kunden entschieden?
4.5
Aus welchen Baujahren vor 1950 hat Rudi Rost mehr als einen Oldtimer?
4.6
Erstellen Sie eine Liste mit den treuesten Kunden (nur Kundennummer). Als treu zählt ein
Kunde, wenn er mindestens zehnmal einen Oldtimer gemietet hat.
4.7
Welche Oldtimer (nur Kennzeichen) fuhren diese treuesten Kunden?
4.8
Rudi Rost möchte einen Monat im Jahr Urlaub machen! In welchem Monat sind die
wenigsten Mietvorgänge?
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
5
EvA
SQL-Abfragen „Flotte Kiste“
Datenbanken
Teil 5: Abfragen über mehrere Tabellen
5.1
Wann wurde der Triumph TR2 vermietet?
5.2
Welche Oldtimer (Hersteller, Typ) wurden im 1. Quartal 2003 gemietet?
5.3
Erstellen Sie eine nach den Kundennamen sortierte Mahnliste, wobei jeder Mahnvorgang
einzeln aufgeführt werden soll.
5.4
Listen Sie alle Oldtimer (Hersteller, Typ) mit der Anzahl der Mietvorgänge im Jahr 2003
auf. Sortieren Sie die Liste absteigend nach der Anzahl.
5.5
Welche Kunden haben bisher einen Ferrari oder Maserati gemietet?
5.6
Welche Kunden aus Berlin haben bisher einen Ferrari oder Maserati gemietet?
5.7
Welche Kunden haben welchen Oldtimer zu ihrer Hochzeit gemietet?
5.8
Welche Oldtimer (Hersteller, Typ) werden von Kunden gemietet die in Berlin oder
Potsdam wohnen, und die „Nobelkarossen“ als Vorliebe haben? Sortieren Sie nach
Herstellern!
5.9
Listen Sie alle Kunden auf, die in 2003 einen Austin-Healey oder in 2004 einen Triumph
gemietet haben, deren Vorliebe aber nicht „Cabrio“ ist.
5.10 Sie werten das Jahr 2003 aus. Wer hat einen Austin-Healey oder Triumph gemietet,
deren Vorliebe aber nicht „Cabrio“ ist und wer hat einen Porsche gemietet, hat aber keine
Vorliebe für „Sportwagen“? Sortieren Sie nach Hersteller und Typ!
5.11 Listen Sie die Kunden mit der Anzahl ihrer bezahlten Mietvorgänge auf!
5.12 Welche Kunden haben den Ferrari bereits mehrmals gemietet?
5.13 Der „TR2“ hat einen Kratzer. Wann wurde der Wagen zuletzt vermietet? Und an wen?
5.14 Im Rahmen einer Mailingaktion sollen nur die Kunden angeschrieben werden, die mehr
als 7x einen Oldtimer gemietet haben. Wer ist das?
5.15 Da die letzte Mailingaktion so erfolgreich war, will Rudi Rost nun gezielt die Kunden
anschreiben, deren letzte Vermietung vor 2004 lag.
© oszinddv – 2009 / F2 SQL-Abfragen FlotteKiste04.doc
6
EvA
Datenbanken
Tabellenstruktur der Datenbank
„Auftragsbearbeitung“ (AuBe)
Die folgenden Screenshots zeigen die Tabellen der Datenbank „Auftragsbearbeitung“.
© oszinddv – 2009 / F3 SQL-Abfragen AuBe06.doc
1
EvA
Datenbanken
SQL-Abfragen „AuBe“
Teil 1: Abfragen über einzelne Tabellen
Teil 2: Abfragen mit weiteren Operatoren
Allgemeine Hinweise für alle Teile der SQL-Abfragen zur AuBe:
• Verwenden Sie die Datenbank Aube06 als User info.
• Notieren Sie die SQL-Befehle in gewohnter Weise.
• Notieren Sie die Antworten der Datenbank, wie Namen etc. oder mind. wie viele Kunden …
1.1
Listen Sie alle Angaben über alle Kunden auf!
1.2
Erstellen Sie eine reine Adressliste aller Kunden!
1.3
Im Rahmen einer Mailing-Aktion benötigen Sie für den Serienbrief die Daten aller Kunden
die nur einen geringen Rabatt haben (weniger als 5%).
1.4
Die Mailing-Aktion soll nur auf Berlin beschränkt werden.
1.5
Erstellen Sie eine Preisliste für alle Artikel der Artikelgruppe „Scanner“!
2.1
Verschaffen Sie sich eine Übersicht über alle Artikelgruppen!
2.2
Eine weitere Preisliste wird für die LCD-Monitore benötigt!
2.3
Für hochpreisige Drucker (über 1000,00) sollen Sonderkonditionen eingeführt werden.
Welche Artikel sind betroffen? Sortieren Sie nach dem Preis!
2.4
Eine weitere Sonderaktion soll für die Tastaturen, Joysticks und Mäuse gestartet werden.
Welche Artikel sind betroffen?
2.5
Ein Kunde fragt nach Soundkarten unter 50,00 und einfachen Lautsprechern für unter
40,00. Welche Angebote können Sie machen? Zuerst sollen die Lautsprecher aufgeführt
werden!
© oszinddv – 2009 / F3 SQL-Abfragen AuBe06.doc
2
EvA
Datenbanken
SQL-Abfragen „AuBe“
Teil 3: Aggregatfunktionen
Teil 4: Gruppierung
3.1
Wie viele Artikel führt das Unternehmen?
3.2
Wie hoch ist der höchste Rabatt, der einem Kunden gewährt wird, und wie hoch ist der
Durchschnittsrabatt aller Kunden?
3.3
Wie viele Aufträge gingen im Juni 2006 ein?
3.4
Was ist der Durchschnittspreis aller Drucker?
3.5
Zwischen welchen Beträgen liegen die Lautsprecherpreise?
4.1
Führen Sie für jede Artikelgruppe die Anzahl der Artikel auf!
4.2
Die Geschäftsführung wünscht eine Übersicht der eingegangenen Aufträge pro Monat.
4.3
Führen Sie alle Kundennummern auf, die bereits mehr als 125 Aufträge erteilt haben!
4.4
Wie viele Artikelstücke umfasste der Auftrag 11047? Klären Sie vorher die Anzahl der
Positionen dieses Auftrags.
4.5
Wenig bestellte Artikel sollen aus dem Sortiment entfernt werden.
Erstellen Sie eine Liste aller Artikel, die weniger als 25-mal bestellt wurden, sortiert nach
der Anzahl der Bestellungen!
© oszinddv – 2009 / F3 SQL-Abfragen AuBe06.doc
3
EvA
SQL-Abfragen „AuBe“
Datenbanken
Teil 5: Abfragen über mehrere Tabellen
5.1
Erstellen Sie eine Liste aller Kunden, die am 2006-10-27 einen Auftrag erteilt haben.
Sortieren Sie die Liste nach den Kundennamen.
5.2
Ermitteln Sie den Gesamtumsatz für das Jahr 2006 ohne Berücksichtigung der
Kundenrabatte!
5.3
Ermitteln Sie für das Jahr 2006 den Umsatz pro Monat sortiert nach Monaten!
5.4
Wann hat der Kunde „Wolle“ seinen letzten Auftrag aufgegeben?
5.5
Im Rahmen einer Rückrufaktion müssen alle Käufer des „INTEL PENTIUM IV 1700 PGA
423pin“ angeschrieben werden. Stellen Sie die Daten für einen Serienbrief zusammen!
5.6
Die Kundin Frau Knute soll die Rechnung für ihre im Dezember 2006 erteilten Aufträge
erhalten. Stellen Sie alle notwendigen Daten zusammen. Vergessen Sie nicht den Rabatt.
5.7
Ermitteln Sie den Umsatz je Artikelgruppe unter Berücksichtigung der Kundenrabatte!
Sortieren Sie die Ausgabe nach dem Umsatz absteigend!
5.8
Bei der Auftragsaufnahme ist versehentlich eine Artikelnummer aufgenommen worden,
die es gar nicht gibt! Welche ist es?
© oszinddv – 2009 / F3 SQL-Abfragen AuBe06.doc
4
Abfragen über mehrere Tabellen
Kartesisches Produkt
EvA
Datenbanken
produkt
Nr
Bezeichnung
12
Dübel M6
58
Preisgruppe
Gruppe
Preis
E
A
1,20
Schraube M8
B
B
1,50
70
Mutter M10
C
C
1,80
83
Scheibe M12
B
D
2,00
E
2,50
preisgruppe
Ð
Nr
Bezeichnung
12
Dübel M6
Ð
Preisgruppe
Gruppe
Preis
E
Aufgabe: Die Produkte sollen mit ihren Preisen aufgelistet werden.
© oszinddv – 2009 / F4 Kartesisches Produkt.doc
1
EvA
SQL-Abfragen „Uni“
Datenbanken
Teil 5: Abfragen über mehrere Tabellen
Formulieren Sie zu dieser Darstellung die Frage und die dazugehörige Select-Anweisung!
© oszinddv – 2009 / F5 SQL-Abfragen Uni.doc
1
EvA
SQL-Abfragen „Uni“
Datenbanken
Komplexe Abfragen
Formulieren Sie zu obiger Darstellung den SQL-Befehl!
© oszinddv – 2009 / F5 SQL-Abfragen Uni.doc
2
EvA
Datenbanken
Normalisierung
1. Normalform und Anomalien
Um schlechte Relationenschemata zu vermeiden, gibt es die sogenannten Normalformen.
Ziel ist es, Relationen so lange verlustfrei in Teilrelationen zu zerlegen, bis sie mindestens der
dritten Normalform (3. NF) entsprechen. Dadurch können Datenbankanomalien (s. u.) und
Dateninkonsistenzen weitgehend ausgeschlossen werden.
Dateninkonsistenzen sind Fehler in einer Datenbank, die durch Datenredundanz entstehen.
Daten sind redundant, wenn sie doppelt oder mehrfach gespeichert sind, obwohl darauf ohne
Informationsverlust verzichtet werden könnte.
1. Normalform Eine Relation (Tabelle) liegt in der ersten Normalform vor, wenn
Die folgende Tabelle wird genutzt, um einen Überblick darüber zu gewinnen, welcher
Mitarbeiter eines großen Unternehmens an welchen der zahlreichen Projekten beteiligt ist.
Jeder Mitarbeiter hat eine eindeutige Mitarbeiter-Nummer (MNr). Seine Adressenangaben (hier
nur teilweise dargestellt) und Abteilungszugehörigkeit werden ebenfalls in der Tabelle
gespeichert. Aus Platzgründen wurden hier weitere Informationen über die Abteilungen und
Projekte (z. B. Abteilungsleiter und Projektleiter) ebenfalls weggelassen.
MNr
Name
Adresse
AbtNr
AbtBez
ProjektNr
M19
Schweizer
Hauptstr. 75, Frenkendorf
A6
Finanz
{P4, P9}
M1
Meier
Lindenstr. 15, Liestal
A3
Informatik
{P7, P11, P9}
M7
Huber
Mattenweg 94, Basel
A5
Personal
{P4}
M4
Becker
Wasserweg 2, Liestal
A3
Informatik
{P4, P9}
© oszinddv – 2009 / G1 Normalisierung.doc
Projektstart
{01.08.,
01.06.}
{15.05.,
01.09.,
01.06.}
{01.08.}
{01.08.,
01.06.}
Eintrittsdatum
{17.09.,
01.06.}
{15.05.,
01.09.,
01.07.}
{20.08.}
{01.09.,
01.06.}
1
EvA
Datenbanken
Normalisierung
2. Normalform
Eine Relation (Tabelle) liegt in der zweiten Normalform vor, wenn
Frage:
Zerlegungsmethode
© oszinddv – 2009 / G1 Normalisierung.doc
2
EvA
Datenbanken
Normalisierung
3. Normalform
Eine Relation (Tabelle) liegt in der dritten Normalform vor, wenn
Frage:
Zerlegungsmethode
© oszinddv – 2009 / G1 Normalisierung.doc
3
Normalisierung
Funktionale Abhängigkeit
EvA
Datenbanken
Die 2. Normalform lautet:
Eine Relation liegt in der zweiten Normalform vor, wenn sie in der ersten Normalform ist und
jedes Nichtschlüsselattribut vom Primärschlüssel voll funktional abhängig ist, d. h. ein
Nichtschlüsselattribut darf sich nicht schon durch einen Teil des Primärschlüssels kennzeichnen
lassen.
Was bedeutet diese funktionale Abhängigkeit?
1. Definition
Ein Attribut B ist von einer Attributmenge A1 ... An funktional abhängig, wenn
es für jede Attributwertekombination a1 ... an genau einen Attributwert aus B
gibt.
Beispiele: {A1, A2} Æ B
2. Definition
Ein Attribut B ist von einer Attributmenge A1 ... An voll funktional abhängig,
wenn es funktional abhängig ist und die Attributmenge A1 ... An minimal
definiert ist, d. h. beim Weglassen irgendeines Attributs der Menge A1 ... An gilt
die funktionale Abhängigkeit nicht mehr.
Beispiele: {A1} =
{A2} =
{A1, A2} =
Verwenden Sie für die Beispiele die bekannte Mitarbeitertabelle in erster Normalform.
MNr
Name
Strasse
Ort
M19
Schweizer
Hauptstr. 75
M19
Schweizer
M1
Eintrittsdatum
AbtBez
Frenkendorf
A6
Finanz
P4
01.08.
17.09.
Hauptstr. 75
Frenkendorf
A6
Finanz
P9
01.06.
01.06.
Meier
Lindenstr. 15
Liestal
A3
Informatik
P7
15.05.
15.05.
M1
Meier
Lindenstr. 15
Liestal
A3
Informatik
P11
01.09.
01.09.
M1
Meier
Lindenstr. 15
Liestal
A3
Informatik
P9
01.06.
01.07.
M7
Huber
Mattenweg 94
Basel
A5
Personal
P4
01.08.
20.08.
M4
Becker
Wasserweg 2
Liestal
A3
Informatik
P4
01.08.
01.09.
M4
Becker
Wasserweg 2
Liestal
A3
Informatik
P9
01.06.
01.06.
© oszinddv – 2009 / G1 Normalisierung.doc
ProjektNr
Projektstart
AbtNr
4
Normalisierung-Übung
Dozenten
EvA
Datenbanken
Das folgende Relationenschema könnte kaum schlimmer sein, also die Ärmel hochgekrempelt
und ’ran an die Arbeit:
1. Welche Anomalien treten in einer Datenbank, die nach diesem Schema aufgebaut ist, auf?
Geben Sie jeweils ein Beispiel aus dem Schema an.
2. Welche Normalform hat dieses Relationenschema? Begründen Sie!
3. Normalisieren Sie das Schema weiter.
4. Mit einem gut geplanten ERM wäre das alles gar nicht erst passiert. Zeichnen Sie das zu
dieser Aufgabe passende ER-Diagramm.
Kurs
KursNr KursBez
Halbjahr DozKürzel DozName
DozVorname DozTel
47
Windows-Einführung
2007/2
Ra
Raben
Susanne
71485541
103
Business-English I
2007/2
Kü
Kühnel
Winfried
3397631
142
Windows-Einführung
2008/1
Ra
Raben
Susanne
71485541
144
Excel-Einführung
2008/2
Hu
Huller
Anna
47884970
153
Englisch auf Reisen
2008/2
Kü
Kühnel
Winfried
3397631
© oszinddv – 2009 / G2 Dozenten.doc
1
Normalisierung-Übung
Materiallager
EvA
Datenbanken
In einer Datenbank sind Informationen über Verbrauchsmaterialien (Bürobedarf) gespeichert.
Zweck der Datenhaltung ist eine schnelle Übersicht, was von welchem Lieferanten bezogen
werden kann. Ein Lagerbestand, getätigte Bestellungen oder gar ein Bezug zu Rechnungen ist
damit nicht möglich und nicht gewünscht.
Folgende Informationen sind gespeichert:
1. Jedes Material besitzt eine eindeutige Materialnummer (MatNr) und eine Bezeichnung
(MatBez).
2. Gleiche Materialien werden oft von verschiedenen Lieferanten bezogen.
3. Jeder Lieferant hat eine eindeutige Lieferantennummer (LiefNr) sowie einen Firmennamen
(Firma) und eine Anschrift.
4. Für jeden Lieferanten werden seine Bestellnummer des interessierenden Materials, die
Verpackungseinheit (VE) sowie der Lieferantenpreis gespeichert.
Im Folgenden sehen Sie einen Ausdruck der Datenbanktabelle (auszugsweise).
Normalisieren Sie das Relationenschema.
Material MatNr
MatBez
LiefNr
185
Papier blanco
8
185
Papier blanco
21
137
Bleistift
21
264
Radierer
8
137
Bleistift
15
186
Papier kariert
8
© oszinddv – 2009 / G3 Materiallager.doc
Firma
Anschrift
Im Tintenfleck 12
01142 Dresden
Papiergasse 1
Paperback
90384 Nürnberg
Papiergasse 1
Paperback
90384 Nürnberg
Im Tintenfleck 12
Ink GmbH
01142 Dresden
Holzweg 7
Woodstock AG
10463 Berlin
Im Tintenfleck 12
Ink GmbH
01142 Dresden
Ink GmbH
BestellNr
VE
Preis
8020
500
2,79
526
1000
4,99
155
20
9,00
8150
5
2,00
4594
10
4,20
8030
100
0,95
1
EvA
Datenbanken
Normalisierung-Übung
Lieferanten
Überführen Sie die Tabelle schrittweise in die 3. Normalform!
© oszinddv – 2009 / G4 Lieferanten.doc
1
Normalisierung-Übung
Rechnung
EvA
Datenbanken
Rechnung
Re-Nummer
56843
Ku-Nummer
2065
Ku-Name
GUBA GmbH
Datum: 16. 10. ...
Ku-Anschrift
Mittelstr. 24
12585 Belin
Artikel-
Bezeichnung
Nr
Stück-
Menge
Gesamtpreis
preis (EURO)
(EURO)
A720
Kinderset
3,20
100
320,00
K612
Handfeger
1,80
50
90,00
E007
Nussknacker
33,79
1
33,79
443,79
Netto-Gesamtwert der Bestellung
Tragen Sie alle Attribute und die dazugehörigen Attributwerte aus obenstehendem
Rechnungsauszug in das Schema ein.
RENummer
KuNummer
56843
2065
Ku-Name
GUBA
GmbH
KuAnschrift
ReDatum
ArtikelNr
Mittelstr. 24
16.10. ...
Bezeichnung
Stückpreis
Menge
Gesamtpreis
NettogesamtBestellwert
443,79
A720
Kinderset
3,20
100
320,00
12585
K612
Handfeger
1,80
50
90,00
Berlin
E007
Nussknacker
33,79
1
33,79
Führen Sie die Normalisierung bis zur 3. NF durch und zeichnen Sie anschließend das ERM.
© oszinddv – 2009 / G5 Rechnung.doc
1
EvA
Datenbanken
SQL-Befehl
CREATE INDEX
Was ist ein Index?
Im Allgemeinen versteht man unter einem Index eine geordnete Liste von Objekten, die
normalerweise in ungeordneter Reihenfolge vorliegen. Der Vorteil des Indizierens besteht darin,
dass Suchvorgänge in einer geordneten Liste wesentlich schneller durchgeführt werden
können, als es die sequenzielle Suche in einer ungeordneten Menge von Objekten erlaubt.
Ein anschauliches Beispiel ist das Stichwortverzeichnis in einem Buch. Informationen zu einem
Stichwort können an ganz verschiedenen Stellen in einem Buch auftreten. Die sequenzielle
Suche bedeutet nun, dass Sie jede Buchseite anschauen und herausfinden müssen, ob sie das
betreffende Stichwort enthält oder nicht. Schneller ist man dagegen, wenn man in einer
alphabetisch geordneten Stichwortliste zuerst das Stichwort nachschlägt und dort die
betreffenden Seitenzahlen findet, wo Informationen zu einem Stichwort zu finden sind.
In ähnlicher Weise verfährt auch das Datenbanksystem, wenn Sie für eine spezielle Tabellenspalte einen Index anlegen. Ein Index verbessert die Performance bei der Suche mit
zusammengesetzten Ausdrücken oder beim Sortieren von Suchergebnissen. Ein Index wurde
in SQL eingeführt, da das relationale Datenmodell alle Datensätze einer Tabelle als
ungeordnete Menge von Datensätzen verwaltet und standardmäßig eine sequenzielle Suche
durchgeführt wird.
Merklich werden diese Unterschiede in den Antwortzeiten natürlich erst bei einer großen Anzahl
von Datensätzen. Das Indizieren von Tabellen ist dann sinnvoll, wenn man entweder sehr
große Datenbestände verwalten möchte oder wenn man Attribute hat, die sehr oft für die Suche
nach Daten verwendet werden.
CREATE INDEX
Mit der Anweisung CREATE INDEX wird ein Index für eine bereits vorhandene Tabelle erstellt.
Syntax:
CREATE INDEX <indexname> ON <tabellenname> (<attributname>);
Beispiel:
CREATE INDEX buch_index ON buch (autor);
Unser Beispiel legt für das Attribut autor in der Tabelle buch einen Index mit der Bezeichnung
buch_index an. Dadurch ist bei einer entsprechend großen Anzahl von Datensätzen zu
erwarten, dass die Autorensuche und das alphabetische Sortieren der Autoren wesentlich
schneller abläuft.
DROP INDEX
Mit der Anweisung DROP INDEX wird ein bereits vorhandener Tabellenindex wieder gelöscht.
Syntax:
DROP INDEX <indexname> ON <tabellenname>;
Beispiel:
DROP INDEX buch_index ON buch;
In unserem Beispiel wird der Index buch_index zur Tabelle buch gelöscht.
Quelle: Das Einsteigerseminar MySQL, bhv, 2001, S. 119 ff.
© oszinddv – 2009 / H1 CREATE INDEX.doc
1
EvA
Transaktionen
Datenbanken
In einer Bankanwendung findet der Transfer von € 50,00 von Konto A nach Konto B statt.
Welche Operationen sind notwendig?
1.
2.
3.
4.
5.
6.
Mögliche Fehlerfälle:
¾ Systemabsturz nach Schritt 3.
¾ Beide Konten gehören einem Kunden, bei Abhebung von Konto A wird der
Gesamtdispositionsrahmen über alle Konten des Kunden überzogen.
¾ Im Parallelbetrieb werden 3 % Zinsen auf Konto A berechnet.
¾ Absturz des Systems kurz nach Beenden der Transaktion.
Eigenschaften des Transaktionskonzepts werden oft unter der Abkürzung ACID zusammengefasst. Das sogenannte ACID-Paradigma steht dabei für vier Eigenschaften:
Consistency (Konsistenz) Eine Transaktion hinterlässt nach Beendigung einen konsistenten
Datenbasiszustand. Anderenfalls wird sie komplett (siehe Atomarität) zurückgesetzt.
Zwischenzustände, die während der TA-Bearbeitung entstehen, dürfen inkonsistent sein,
aber
der
resultierende
Endzustand
muss
die
im
Schema
definierten
Konsistenzbedingungen erfüllen.
Durability (Dauerhaftigkeit) Die Wirkung einer erfolgreich abgeschlossenen Transaktion bleibt
dauerhaft in der Datenbank erhalten. Die Transaktionsverwaltung muss sicherstellen, dass
dies auch nach einem Systemfehler (Hardware oder Systemsoftware) gewährleistet ist. Die
einzige Möglichkeit, die Wirkungen einer einmal erfolgreich abgeschlossenen Transaktion
ganz oder teilweise aufzuheben, besteht darin, eine andere sogenannte kompensierende
Transaktion auszuführen.
Isolation Diese Eigenschaft verlangt, dass nebenläufig (parallel, gleichzeitig) ausgeführte
Transaktionen sich nicht gegenseitig beeinflussen. Jede Transaktion muss – logisch
gesehen – so ausgeführt werden, als wäre sie die einzige Transaktion, die während ihrer
gesamten Ausführungszeit auf dem Datenbanksystem aktiv ist. Mit anderen Worten, alle
anderen parallel ausgeführten Transaktionen bzw. deren Effekte dürfen nicht sichtbar sein.
Atomicity (Atomarität) Diese Eigenschaft verlangt, dass eine Transaktion als kleinste, nicht
mehr weiter zerlegbare Einheit behandelt wird, d. h. entweder werden alle Änderungen der
Transaktion in der Datenbasis fest geschrieben oder gar keine.
© oszinddv – 2009 / H2 Transaktionen.doc
1
Herunterladen