Lösung zum Drucken

Werbung
Prof. Dr. Dr. h.c. mult. A.-W. Scheer
Institut für Wirtschaftsinformatik (IWi)
im Deutschen Forschungszentrum für künstliche Intelligenz (DFKI)
Sommersemester 2005
Wirtschaftsinformatik II
Dipl.-Kfm. Björn Simon
Dipl.-Kfm. Dominik Vanderhaeghen
Dipl.-Wirt.Inform. Jörg Ziemann
([email protected])
Sprechstunde: nach Absprache, Geb. 43.8, Raum 0.16 und 0.26
Lösungsblatt 4
Aufgabe 7 : ERM
Bauer Kahl möchte für seinen Betrieb auch ein Datenbanksystem einführen, mit dem er alle
relevanten Informationen verwalten kann. Die folgenden Angaben stellen einen Auszug aus
der Ist-Erhebung der Datenstruktur dar:
Jede Kuh muss eindeutig identifizierbar sein. Dies ist auch wichtig, um die Herkunft
bestimmen zu können. Bei selbst gezüchteten Tieren wird zu jedem Tier die Mutterkuh
festgehalten. Bei gekauften Tieren wird der Herkunftshof notiert. Daneben ist jeder Kuh ein
Stall und eine Weide zugeordnet. Während die Zuordnung einer Kuh zu einem Stall eher
selten geändert wird, kann die Zuordnung zu einer Weide jährlich mehrfach wechseln.
Ebenfalls wird für jedes Tier das Futter notiert, das es erhält. Eine Kuh kann durchaus
mehrere verschiedene Futter erhalten. Das Futter wird auch noch nach selbst hergestelltem
Futter und zugekauftem Futter unterschieden. Das zugekaufte Futter kann pro Futtertyp
mehrere Lieferanten haben, von denen der jeweils günstigste ausgewählt wird. Gleichzeitig
kann ein Lieferant auch mehrere Futter in seinem Sortiment führen. Dem selbst hergestellten
Futter ist ein Feld zugeordnet, von wo es gewonnen wurde. Um einen Überblick über alle
Felder und Weiden zu behalten, werden diese als Gelände verwaltet.
Modellieren Sie basierend auf diesen Angaben ein ERM. Berücksichtigen Sie auch die
Kardinalitäten in min,max-Notation und geben Sie die Schlüsselattribute an. Den Entitytypen
ist darüber hinaus mindestens ein weiteres sinnvolles Attribut zuzuordnen! (Primär- und
Fremdschlüssel sind entsprechend zu kennzeichnen!)
Allgemeines zur Datensicht :
Fachkonzeptebene : Modellierung mit ERM
KUNDE
KNR, NAME, ADRESSE
DV-Konzept-Ebene : Relationenmodell
Kundennummer
001
002
003
Name
Mayer
Schmitt
Müller
Implementierungsebene : SQL (Structured Query Language)
CREATE TABLE Kunde
(Kundennummer COUNTER NOT NULL,
Name VARCHAR (20) NOT NULL,
Adresse VARCHAR (100) NOT NULL,
PRIMARY KEY (Kundennummer));
Adresse
Schulstr. 3, 12345 SB
Kirchweg 7, 21324 HH
Stadtallee 9, 43242 HB
Lösung zu Aufgabe 7 :
Aufgabe 8: Relationenmodell, Normalisierung
Neben den Tieren soll die Datenbank von Bauer Kahl auch die Maschinen seines Hofes
verwalten. Das folgende ERM zeigt den Ausschnitt des Datenmodells, der die Verwaltung der
Traktoren und des passenden Zubehörs wie Pflug oder Saatmaschine beschreibt:
TNr., Modell, Baujahr, PS
0, n
Traktor
TNr., ZNr., Kompatibilität
verwendet
1, n
ZNR., Bezeichnung
Zubehör
1, 1
1, 1
Z.-H.Zuord
T.- H.Zuord.
0, n
0, n
Hersteller
1, 1
H.-O.Zuord.
HNr., Firma, Anschrift
Ort
0, n
PLZ, Ort
a) Erstellen Sie das zugehörige Relationenmodell!
Lösung zu 8a :
R. Traktor (TNr, Modell, BJ, PS, HNr)
R. Zubehör (ZNr, Bez, HNr)
R. Hersteller (HNr, Firma, Anschrift, PLZ)
R. Ort (PLZ, Ort)
R. Verwendet (TNr, ZNr, Kompatibilität)
Anmerkungen :
Primärschlüsselattribute : unterstrichen
Fremdschlüsselattribute : kursiv
b) Nehmen Sie eine Relation „Traktordatenbank“ an, die wie folgt implementiert wurde:
TNr. Model Baujahr PS
l
1
4711 1978
150
2
8911
1992
220
ZNr. Bezeichnung
Kombatibil
ität
Saatmaschine
Direkt
Pflug „Schafttnix“
Adapter
Düngemaschine
Direkt
Pflug „Butterweich“ Direkt
HNr. Firma
Anschrift
PLZ
Ort
1
2
3
4
1
2
1
1
Hussarenweg 17
Rüsselweg 12
Hussarenweg 17
Hussarenweg 17
11235
47986
11235
11235
Bauernglück
Ferkelbrunn
Bauernglück
Bauernglück
Ackermann
Steiggut
Ackermann
Ackermann
Überprüfen Sie, ob die Relation in der 3. Normalform vorliegt. Sollte dies nicht der Fall sein
überführen Sie die Tabelle in die 3. Normalform!
Vorbemerkungen zu Datenbankdesign und Normalisierung :
Bei ungünstigem Design der Datentabellen können Anomalien auftreten :
- Einfügeanomalie
- Löschanomalie
- Updateanomalie
Relationen sollen so entworfen werden, dass :
- keine untergeordneten Relationen enthalten sind
- das Datenmodell möglichst redundanzfrei ist
- keine Inkonsistenzen auftreten
- die Datenpflege problemlos zu bewerkstelligen ist
Æ Analyse und Modifikation eines initialen Relationenmodells durch Normalisierung
1. Normalform : Eine Relation R ist dann in der ersten Normalform (1. NF), wenn jeder
Attributwert elementar ist. Die 1.NF wird durch Elimination von Wiederholungsgruppen
erreicht Æ alle Attribute sind funktional abhängig.
2. Normalform : Eine Relation R ist dann in der zweiten Normalform (2. NF), wenn sie die 1.
NF erfüllt und jedes Nichtschlüsselattribut von jedem Schlüsselattribut voll funktional
abhängig ist. Wenn eine Relation 1. NF ist und nur einen Schlüssel hat, ist sie automatisch
auch 2. NF.
3. Normalform : Eine Relation R ist in der dritten Normalform (3. NF), wenn sie die 2. NF
erfüllt und kein Nichtschlüsselattribut transitiv von einem Schlüsselattribut abhängig ist.
Wenn eine Relation 2. NF ist und nur ein Nichtschlüsselattribut besitzt, ist sie automatisch in
der 3. NF.
Vorteile der Normalisierung :
- Redundanzfreiheit : Jedes Faktum ist nur einmal in der Datenbank gespeichert
- Integritätssicherung: Widerspruchsfreie Datenhaltung bei Vorliegen der 3. NF
Nachteile der Normalisierung :
- Normalisierung kann aufwändig werden
- Laufzeitverhalten (Zusammenfügen von vielen Relationen ist „teuer“)
Æ Normalisierungsentscheidungen müssen je nach Anwendungsfall getroffen werden
Integritätsbedingungen sorgen dafür, dass die Datenbank stets ein korrektes Abbild der
Wirklichkeit darstellt :
- IBs beziehen sich auf die Sicherung des semantischen Gehalts eines Datenmodells.
- IBs können in der Anwendungslogik oder in der Datenbank definiert werden.
Integritätsbedingungen :
Lösung zu 8b :
1. NF :
R.1 (TNr, Modell, BJ, PS)
R.2 (ZNr, Bez, Komp, HNr, Firma, Anschrift, PLZ, Ort)
R.3 (TNr, ZNr)
2. NF :
R.1 (TNr, Modell, BJ, PS)
R.2 (ZNr, Bez, HNr)
R.3 (TNr, ZNr, Komp)
R.4 (HNr, Firma, Anschrift, PLZ, Ort)
3.NF :
R.1 (TNr, Modell, BJ, PS)
R.2 (ZNr, Bez, HNr)
R.3 (TNr, ZNr, Komp)
Transitive Abhängigkeit : Ort
R.4 (HNr, Firma, Anschrift, PLZ)
R.5 (PLZ, Ort)
Aufgabe 9: SQL
a) Legen Sie die 5 im Relationenmodell definierten Tabellen aus Aufgabe 8 a) mittels
SQL an!
b) Fügen Sie in die Tabelle Hersteller die Spalte „Test“ ein.
c) Entfernen Sie aus der Tabelle Hersteller die Spalte „Test“ wieder!
d) Fügen Sie mittels SQL die folgenden Daten in die entsprechenden Tabellen ein:
i .Traktor 8210, Baujahr 1995, 200 PS, Hersteller John Deere, John-Deere-Str. 8,
76646 Bruchsal,
ii. Traktor 1532, Baujahr 2004, 300 PS, Hersteller MAN, Schulzenstraße 82, 66758
Glücksdorf,
iii. Traktor 7895, Baujahr 1999, 150 PS, Hersteller Peugeot, Motorring 11, 84613
Sulzheim.
e) Ändern Sie die PS des Modell „7895“ von 150 PS auf 156 PS!
f) Formulieren Sie eine SQL-Abfrage, welche Modell, Baujahr und PS aller vor 2000
gebauten Traktoren anzeigt, absteigend sortiert nach der PS-Zahl!
g) Formulieren Sie eine SQL-Abfrage, deren Ergebnis das Modell, den Herstellernamen
und den Hersteller-Ort des Traktors mit der TNr. 2 enthält!
h) Erstellen Sie eine Abfrage, die neben dem Traktormodell, Baujahr und der PS-Zahl
auch die Leistung in kW anzeigt! (1PS = 0,735 kW)
i) Ermitteln Sie die durchschnittliche Leistung der Traktoren in PS!
j) Der Traktor 1532 fällt nach nur einem Jahr mit einem Totalschaden aus. Entfernen
Sie den Traktor, den Hersteller und alle betroffenen Datensätze aus der Datenbank!
k) Löschen Sie die Tabellen der Datenbank!
Allgemeines zu SQL :
Es gibt verschiedene SQL (Structured/Standard Query Language) Dialekte :
DDL (Data Description Language)
Sprache zur Beschreibung einer Datenbank (z.B. Anlegen von Tabellen)
DML (Data Manipulation Language)
Sprache, die das Arbeiten mit einer DB unterstützt (z.B. Veränderungen von Daten, Hinzufügen,
Löschen)
QL (Query Language)
Sprache, um Daten aufzufinden und selektiv darzustellen (z.B. Selektionen wie z.B. Kunden mit
Umsatz > 10.000 Euro auflisten)
DDL-Datentypen :
VARCHAR (Größe) = Zeichenkette. (z.B. VARCHAR (10): „ab!“ => 3 Zeichen Speicherplatz)
CHAR (Größe) = feste Zeichenkette. (z.B. CHAR (10): „ab!“ => 10 Zeichen Speicherplatz)
INT integer = ganzzahliger Wert (z.Bsp. „8“)
FLOAT = Gleitkommazahl
COUNTER = Inkrementwert, Zähler (Wert wird hochgezählt)
DATETIME = Datum
BLOB = Binary Large Object (für Binärdaten)
Lösung zu Aufgabe 9 :
9a) Allgemein :
CREATE TABLE Tabellenname
(Feld1 DATENTYP (Größe) NOT NULL,
Feld2 DATENTYP (Größe) NOT NULL
[…] PRIMARY KEY (Schlüsselattribute)]);
Tabelle “Traktor” :
Tabelle “Hersteller” :
CREATE TABLE Traktor
(TNr COUNTER NOT NULL,
Modell VARCHAR(20) NOT NULL,
Baujahr INT NOT NULL,
HNr INT NOT NULL
PRIMARY KEY (TNr));
CREATE TABLE Hersteller
(HNr COUNTER NOT NULL,
Firma VARCHAR(50),
Anschrift VARCHAR(100),
PLZ INT
PRIMARY KEY (HNr),
FOREIGN KEY (PLZ) REFERENCES ORT (PLZ));
Tabelle “Ort” :
Tabelle “Zubehör” :
CREATE TABLE Ort
(PLZ INT(5) NOT NULL,
Ort VARCHAR(40) NOT NULL
PRIMARY KEY(PLZ));
CREATE TABLE Zubehoer
(ZNr COUNTER,
Bezeichnung VARCHAR(100) NOT NULL,
HNr INT NOT NULL
PRIMARY KEY (ZNr));
Tabelle “kompatibel” :
CREATE TABLE kompatibel
(TNr INT NOT NULL,
ZNr INT NOT NULL
PRIMARY KEY (TNr, ZNr));
9b) ALTER TABLE Hersteller ADD Test INT;
9c) ALTER TABLE Hersteller DROP Test;
9d) Allgemein :
INSERT INTO Tabellenname (Spaltenname1, Spaltenname2) VALUES (Wert1, Wert2);
# (i.)
INSERT INTO Ort (PLZ, Ort) VALUES (76646, 'Bruchsal');
INSERT INTO Hersteller (Firma, Anschrift, PLZ) VALUES ('John Deere', 'John-Deere-Str', 76646);
INSERT INTO Traktor (Modell, Baujahr, PS, HNr) VALUES (‘8210’, 1995, 200, 1);
# (ii.)
INSERT INTO Ort (PLZ, Ort) VALUES (66758, 'Glücksdorf');
INSERT INTO Hersteller (Firma, Anschrift, PLZ) VALUES ('MAN', 'Schulzenstraße 82', 66758);
INSERT INTO Traktor (Modell, Baujahr, PS, HNr) VALUES (‘1532’, 2004, 300, 2);
# (iii.)
INSERT INTO Ort (PLZ, Ort) VALUES (84613, 'Sulzheim');
INSERT INTO Hersteller (Firma, Anschrift, PLZ) VALUES ('Peugeot', 'Motorring 11', 84613);
INSERT INTO Traktor (Modell, Baujahr, PS, HNr) VALUES (‘7895’, 1999, 150, 3);
Anmerkungen :
- Bei Datentyp VARCHAR Hochkommata setzten, Bsp. : 'Bruchsal'.
- COUNTER braucht nicht eingefügt zu werden, wird automatisch hochgezählt.
9e) UPDATE Traktor SET PS=156 WHERE Modell=’7895’;
9f) SELECT Modell, Baujahr, PS FROM Traktor WHERE Baujahr < 2000 ORDER BY PS DESC;
Anmerkungen :
- desc = descending
- es gibt auch “asc” = ascending
9g) SELECT Modell, Firma, Ort FROM Traktor, Hersteller, Ort
WHERE Traktor.HNR = Hersteller.HNR
AND Hersteller.PLZ = Ort.PLZ
AND Traktor.TNR = 2;
9h) SELECT Modell, Baujahr, PS, (PS * 0.735) AS Leistung FROM Traktor;
9i) SELECT AVG(PS) AS Leistung FROM Traktor;
9j) DELETE FROM Ort WHERE PLZ = 84613;
DELETE FROM Hersteller WHERE HNr = 2;
DELETE FROM Traktor WHERE Modell = 1532;
Anmerkungen : Der gesamte Datensatz muss gelöscht werden !
9k) DROP TABLE kompatibel;
DROP TABLE Traktor;
DROP TABLE Zubehoer;
DROP TABLE Hersteller;
DROP TABLE Ort;
Herunterladen