Thema 1: Datenbanken

Werbung
TU Bergakademie Freiberg
Institut für Informatik
Modul „Einführung in die Informatik“
Großübung
Modul „Einführung in die Informatik“: Großübung 6
Thema:
Datenbankentwurf, SQL; Python (Typ Dictionary)
- Aufgaben -
Thema 1: Datenbanken
Aufgabe 1) Datenbankentwurf (ERD) sowie SQL
(aus der Klausur vom 16.02.2006, damals noch 2/2 SWS)
---------------------------------------------------------------------------------------------------------------------------Datenbanksysteme (ERM und SQL)
Gegeben sei die folgende relationale Datenbank „Online-Werkzeug-Bestellsystem“ mit den folgenden
Tabellen (Relationen) Kunde, Werkzeug und Kauf:
***********************************************************************
Kunde (KNr, Name, Adresse, TelNr)
Kundennummer (Primärschlüssel), TelNr ...
KNr ...
Telefonnummer
Werkzeug (WId, Bezeichnung, Preis, Lagerort)
Werkzeugidentifikator (Primärschlüssel)
WId ...
Kauf (BNr, KNr, WId, LDatum, Stueck)
BNr … Bestellnummer (Primärschlüssel),
KNr, WId ... Fremdschlüssel (siehe oben)
LDatum ...
Lieferdatum,
Stueck
… bestellte Stückzahl
*****************************************************************************
(Teil 1)
Entity-Relationship-Modell-Diagramm (ERM-Diagramm)
Zeichnen Sie für die oben angegebene Datenbank „Online-Werkzeug-Bestellsystem“ ein EntityRelationship-Diagramm mit Entity- und Relationship-Typen (einschließlich der Attribute).
Benutzen Sie dazu die Methodik und die Symbole aus der Vorlesung. Fremdschlüssel sollen in
Relationshipsets nicht aufgeführt werden.
(Hinweis: Vergessen Sie nicht die Zuordnungscharakteristika.)
-------------------------------------------------------------------------------------------------------------------------------
(Teil 2)
SQL-Kommandos
(SQL … Structured Query Language)
Alle folgenden Aufgaben sind jeweils mit nur einer SQL-Anweisung zu lösen:
a)
Geben Sie alle Daten für alle Kunden aus, ohne die Attribute in der Anfrage einzeln namentlich
aufzuführen, und zwar absteigend sortiert nach Name und bei gleichem Namen aufsteigend sortiert nach
der Kundennummer.
b)
Geben Sie den Werkzeugidentifikator und die Bezeichnung aller Werkzeuge mit einem Preis von
mehr als 100 aus, die im Lagerort Freiberg oder im Lagerort Dresden liegen.
c)
Nehmen Sie eine Preissenkung vor: Für alle Werkzeuge, deren Preis über 200 (EUR) liegt, ist in
der Datenbank deren Preis um 20% zu senken.
d)
Fälschlicherweise wurde in mehreren Zeilen als Bezeichnung Hammel statt korrekt Hammer
eingetragen. Korrigieren Sie diesen Fehler in der Datenbank.
1
0112
TU Bergakademie Freiberg
Institut für Informatik
Modul „Einführung in die Informatik“
Großübung
e)
Geben Sie für den Kunden mit der Kundennummer 4812 für alle von ihm gekauften Werkzeuge
den Namen des Kunden und den Werkzeugidentifikator aus, jeden Werkzeugidentifikator jedoch nur
einmal.
------------------------------------------------------------------------------------------------------------------------------
Aufgabe 2)
SQL (Datenbank personal)
Gegeben sei eine relationale Datenbank personal, die aus drei Relationen (Tabellen) besch, abt und
gehstufe
besteht.
Diese
drei
Relationen
werden
im
Folgenden
in
der
Form
Relationsname(Attributname_1, Attributname_2, ...) erläutert (Primärschlüssel sind dabei unterstrichen):
besch(bnr, name, taet, ltr, e_datum, geh, zuschl, abtnr)
- Erläuterung der Relations- bzw. Attributnamen:
besch ...
Beschäftigte;
bnr ...
Beschäftigtennummer;
name ...
Name;
taet ...
Tätigkeit;
ltr ...
Beschäftigtennummer des Leiters; e_datum ...
Einstellungsdatum;
geh ...
Gehalt;
zuschl ...
Zuschlag zum Gehalt;
abtnr ...
Abteilungsnummer der Abteilung, zu der der Beschäftigte gehört;
abt(abtnr, abtname, ort)
- Erläuterung der Relations- bzw. Attributnamen:
abt ...
Abteilungen;
abtname ...
Abteilungsname;
abtnr ...
ort ...
Abteilungsnummer;
Ort;
gehstufe(stufe, von, bis)
- Erläuterung der Relations- bzw. Attributnamen:
gehstufe ...
Gehaltsstufen;
stufe ...
Gehaltsstufe;
von ...
Die Gehaltsstufe beginnt bei diesem Gehaltsbetrag;
bis ...
Die Gehaltsstufe endet bei diesem Gehaltsbetrag;
Bemerkung: Mit dieser Datenbank wird auch in der 7. Poolübung gearbeitet.
------------------------------------------------------------------------------------------------------------------------------
Aufgaben zu SQL :
(alle Aufgaben beziehen sich auf die oben erläuterte Datenbank personal):
Die folgenden Aufgaben sind jeweils mit nur einer SQL-Anweisung zu lösen.
(Ausnahmen: bei b), c) und d) sind mehrere SQL-Anweisungen verlangt.)
a)
Eine Datenbank personal mit den beschriebenen Relationen (Tabellen) besch, abt und gehstufe ist
anzulegen.
Zunächst ist die Datenbank zu definieren (anzulegen).
(Bemerkung: Das hier benötigte Kommando CREATE DATABASE wurde in der Vorlesung nur kurz
erwähnt. Für das Verständnis der weiteren Aufgabe ist es aber von Nutzen.)
b)
Die drei Tabellen besch, abt und gehstufe der eben definierten Datenbank personal sind zu
definieren (anzulegen).
(Bemerkung: Auch das hier benötigte Kommando CREATE TABLE wurde in der Vorlesung nur kurz
behandelt.)
2
0112
TU Bergakademie Freiberg
Institut für Informatik
Modul „Einführung in die Informatik“
Großübung
c)
Die drei Tabellen besch, abt und gehstufe sind mit sinnvollen Daten zu füllen.
d)
Die drei Tabellen der Datenbank personal sollen vollständig ausgegeben werden.
e)
Für alle Beschäftigten sind Name, Einstellungsdatum und Gehalt auszugeben,
und zwar in der eben aufgeführten Reihenfolge.
f)
Welche Tätigkeit übt Schmidt aus?
g)
Auszugeben sind alle Daten für alle Verkaeufer und Sachbearbeiter,
die über ein Gehalt von mehr als 2700,- (EUR) verfügen.
h)
Gesucht sind die Namen aller Abteilungen (ohne Mehrfachnennung),
in denen Sachbearbeiter arbeiten.
Diese Aufgabe ist in zwei Varianten zu lösen:
h1)
mit einem Join (Equi-Join)
h2)
mit einer geschachtelten Anfrage
i)
Welche Gehaltsstufe hat der Beschäftigte Thomas?
j)
Der Beschäftigte Mueller wechselt in die Abteilung mit der abtnr 20.
Die Tabelle besch ist entsprechend zu ändern.
Anschließend ist zur Kontrolle die gesamte Relation besch auszugeben.
k)
Der Datensatz für die Gehaltsstufe 5 ist aus der Relation gehstufe zu löschen.
Anschließend ist zur Kontrolle die gesamte Relation gehstufe auszugeben.
l)
Nach einem Jahr wird die (nun veränderte) Gehaltsstufe 5 wieder eingeführt.
Sie reicht jetzt von 5201 bis 11500 [EUR].
Dieser Datensatz ist in die Tabelle gehstufe einzufügen.
Anschließend ist zur Kontrolle die gesamte Relation gehstufe auszugeben.
m)
Die Tabelle gehstufe ist einschließlich der Tabellenbeschreibung zu löschen.
-----------------------------------------------------------------------------------------------------------------------------An dieser Stelle ist der originäre Zustand der Datenbank durch
Ausführung des SQL-Scripts personal.sql wieder herzustellen.
-----------------------------------------------------------------------------------------------------------------------------n)
Auszugeben sind die Namen aller Personen, die keinen Zuschlag erhalten.
Hinweis: In diesem Falle kann unter zuschl sowohl die Zahl 0
als auch ein Leereintrag (NULL) stehen.
o)
Gesucht sind alle (unterschiedlichen) Tätigkeiten der Abteilung 30,
die auch in der Abteilung 20 vorkommen.
p)
Gesucht sind alle Daten aller Beschäftigten, die mehr verdienen
als mindestens ein (irgendein) Beschäftigter der Abteilung 20.
q)
Was ist in der Lösung von p) zu ändern, um die folgende Aufgabe zu lösen:
Gesucht sind alle Daten aller Beschäftigten, die mehr verdienen
als alle Beschäftigten der Abteilung 20.
3
0112
TU Bergakademie Freiberg
Institut für Informatik
Modul „Einführung in die Informatik“
Großübung
r)
Benötigt werden die Abteilungsnummern aller Abteilungen,
die mehr als 4 Beschäftigte haben.
-------------------------------------------------------------------------------------------------------------------------------
Thema 2:
Der Typ Dictionary
Aufgabe 3)
Eine kleine Python-Datenbank als Liste von Dictionaries
- Teilaufgabe 1:
Dictionary für einen Studenten
(entspricht einem Datensatz einer Datenbank, d.h. es handelt sich hier noch nicht um eine Liste)
Es ist eine Funktion für die Eingabe der Werte eines Dictionary zu schreiben, das für einen Studenten
die Schlüssel Name, Vorname, Studiengang (kurz: Stdgang) und Matrikelnummer (kurz: Matrikelnr)
besitzt. Die Funktion soll keine formalen Parameter besitzen und das eingelesene Dictionary
zurückgeben. In der Funktion ist nicht mit globalen Variablen zu arbeiten.
In einem Testrahmen (Hauptprogramm) ist diese Funktion aufzurufen und nach der Rückkehr aus der
Funktion der Inhalt des Dictionary unformatiert und formatiert auf den Bildschirm auszugeben.
------------------------------------------------------------------------------------------------------------------------------
- Teilaufgabe 2:
Liste mehrerer Studenten-Dictionaries
(Eine kleine Python-Studenten-Datenbank)
- Eingabe und Testanfragen an die Datenbank
Der Quelltext aus Teilaufgabe 1 ist nun zu vervollkommnen:
Es ist eine Funktion für die Eingabe einer Liste von (mehreren) Dictionaries zu schreiben. Jedes
Dictionary dieser Liste soll die in Teilaufgabe 1 erläuterten Schlüssel-Werte-Paare für einen Studenten
besitzen.
Die Eingabe der Listenelemente (Dictionaries) soll beendet werden, wenn als Name 'Ende' in irgendeiner
Schreibweise eingegeben wird.
Die Funktion soll keine formalen Parameter besitzen und die eingelesene Liste zurückgeben. In der
Funktion ist nicht mit globalen Variablen zu arbeiten.
In einem Testrahmen (Hauptprogramm) ist diese Funktion aufzurufen und nach der Rückkehr aus der
Funktion der gesamte Inhalt der Datenbank (Liste von Dictionaries) unformatiert und formatiert auf den
Bildschirm auszugeben.
Schließlich sind vom Testrahmen aus zwei Test-Anfragen an die Datenbank zu richten:
- Name und Vorname aller im Studiengang BNC studierenden Studenten
- Studiengang und Matrikelnummer des Studenten Peter Heinze
Dabei sei nicht bekannt, in welcher Schreibweise BNC bzw. Peter Heinze in der Datenbank eingetragen sind.
Auch wenn kein BNC-Student bzw. kein Student Peter Heinze in der Datenbank vorhanden ist, ist eine
entsprechende Ausgabe auf den Bildschirm auszugeben.
(Sinnvollerweise sollte man beim Test auch entsprechende Daten für diese Anfragen eingeben.)
4
0112
Herunterladen