Hochschule Harz FB Automatisierung und Informatik Versuch:
ERM-Modell
Grundlagen der Informatik III Thema: Grundlagen der Datenbanken
Versuchsziele
Vertiefung in der ERM-Modellierung. Benutzen eines Designers.
Aufgabenstellung:
Entwickeln Sie mit Hilfe des Designers ein ERM-Diagramm und erzeugen damit eine Datenbank unter Firebird. Mit dem Designer soll eine Datenbank für eine Buchhandlung entwickelt werden.
Dabei kann ein Kunde mehrere Exemplare eines Buches bestellen. Auch soll eine Zuordnung Kunde zu Verkäufer realisiert werden. Jede Bestellung muss gespeichert werden, damit Ende des Jahres für gute Kunden Weihnachtskarten verschickt werden können. Unterscheiden Sie zwischen Rechnung und Bestellung.
Versuchsdurchführung
1) Skizzieren Sie einen Grobentwurf auf Papier.
2) Kopieren Sie den Ordner „C:\Programme\wilhelm\designer“ nach c:\Daten 3) Rufen Sie den Designer auf und entwickeln ein konzeptionelles Modell (mit n×m-
Beziehungen (Entity, Attribute und Beziehungen), Kurztaste STRG+M.
Beachten Sie: Es dürfen keine Fremdschlüssel eingetragen werden. Dies trägt der Designer automatisch in die Entities ein.
4) Entwickeln Sie die Beziehungen zwischen den Entities.
5) Lassen Sie den Entwurf überprüfen.
6) Mit der Taste „F9“ wird der konzeptionelle Entwurf in ein logisches Modell umgewandelt.
Die n×m-Beziehung wurde durch zwei hierarchische Beziehung ersetzt. Diese können durch das logische Modell abgebildet werden. Die Fremdschlüssel werden automatisch
übernommen. Man sollte das Entity danach umbenennen.
7) N×M-Beziehungen werden durch zwei neue Beziehungen ersetzt. Der Designer verwendet dazu die Kurznamen.
Beispiel:
Kunde (n) kauft (m) Bücher Ein Kunde kann mehrere Bücher kaufen.
Ein Buch kann von mehrere Kunden gekauft werden
Im konzeptionellen Modell kann man hier eine n×m-Beziehung eintragen.
Im logischen Modell erhält man das neue „Entity“ KD_BCH. Dieses hat mit beiden Entities jeweils eine hierarchische Beziehungen.
9) Rufen Sie die „IBOConsole“ auf und erzeugen eine neue Datenbank (siehe Anlage) 10) Lassen Sie die Create-Table Scripte durchlaufen.
11) Tragen Sie die Fremdschlüssel-Beziehungen ein.
12) Tragen Sie Daten in die Tabellen ein.
Bestimmen Sie vorher die Reihenfolge des Eintragens!
13) Prüfen Sie diese mit einigen Abfragen (siehe Beispielabfragen) 14) Ändern Sie den Namen des Kunden „Bach“ in „Bollrich“.
Hinweise:
Syntax der „CREATE TABLE“ Anweisung:
CREATE TABLE [schema.] table (column datatype [DEFAULT expr], …);
In der Syntax ist:
• table ist der Name der Tabelle.
• DEFAULT expr gibt einen Standardwert an, falls die INSERT-Anweisung keinen Wert enthält.
• column ist der Name der Spalte.
• Datatype ist der Datentyp und die Länge der Spalte.
Datentypen Interbase
Datentyp Beschreibung
SMALLINT Ganzzahlig im Bereich –32768 bis +32767
INTEGER Ganzzahlig im Bereich -2.147.483.648 .. 2.147.483.647
NUMERIC(P,S) P-Stellen Gesamt. s-Stellen nach dem Komma. Berechnung ohne Komma und Vorzeichen
FLOAT Nachkommazahlen im Bereich 1.5*10-45 .. 3.4*1038. Die Mantisse hat 7-8 Stellen
DOUBLE PRECISION Nachkommazahlen im Bereich 5.0*10-324 .. 1.7*10308. Die Mantisse hat 15-16 Stellen
VARCHAR(s) Zeichenwert variabler Länge mit einer maximalen Größe von s CHAR(s) Zeichenwert fester Länge mit einer Größe von s
DATE Datumswert zwischen dem 1. Januar 4712 v. Chr. und dem 31. Dezember 9999 n.
Chr.
TIME Zeitwert zwischen dem 1. Januar 4712 v. Chr. und dem 31. Dezember 9999 n.
Chr.
TIMESTAMP Datum- und Zeitwert zwischen dem 1. Januar 4712 v. Chr. und dem 31.
Dezember 9999 n. Chr.
CURRENCY Währung. Zweistelliger Numerikwert
Beispiel für Tabelle EMP:
create table emp
( empno number(4), ename varchar2(10), job varchar2(9),
mgr number(4),
hiredate date default sysdate, sal number(7,2),
comm number(7,2), deptno number(2),
constraint emp_pk primary key (empno),
constraint emp_fk_emp foreign key (mgr) references emp(empno), constraint emp_fk_dept foreign key (deptno) references dept(deptno) );
Syntax der „INSERT INTO“ Anweisung:
INSERT INTO TABLE [(COLUMN [, COLUMN …])]
VALUES (value [, value …]);
Hinweise:
• Alle Attributnamen müssen in Großbuchstaben geschrieben werden.
• Jeder „Insert Into-Befehl“ muss mit einem Semikolon abgeschlossen werden.
Beispiele Insert Into:
Entity Kunde (KNr, Name, Vorname)
REM Eintragen aller Daten eines Tupels INSERT INTO KUNDE
VALUES(123,'Schmidt', 'Andreas', );
REM Eintragen zweier Daten eines Tupels INSERT INTO KUNDE ( KNR, NAME ) VALUES(123,'Schmidt' );
REM Eintragen zweier Daten eines Tupels INSERT INTO KUNDE ( NAME, KNR ) VALUES( 'Schmidt', 123 );
Syntax der „UPDATE“ Anweisung:
UPDATE tablename
SET column = value [, column = value …]) [WHERE condition(s)];
Beispiele Update:
UPDATE Kunde set Ort = 'WR' where KNR = 1;
UPDATE Kunde set Ort = 'WR'
where Name = 'Müller'; // korrekt ?
Datenbank Daten
Buch
ISBN Titel Autor
1 Buch1 Autor1
2 Buch2 Autor2
3 Buch3 Autor3
4 Buch4 Autor1
5 Buch5 Autor3
6 Buch6 Autor4
7 Buch7 Autor5
8 Buch8 Autor6
9 Buch9 Autor7
10 Buch10 Autor2
Bestellung
BESTNR ISBN ANZ RNR
1 1 1 1
2 2 10 1
3 3 11 1
4 4 1 1
5 5 2 2
6 6 4 2
7 2 3 3
8 3 2 3
9 4 1 4
Rechnung
RNR DATUM MITNR KNR
1 11.12.2004 1 1
2 04.06.2005 2 3
3 12.09.2005 1 5
4 15.10.2005 1 1
Verkäufer
MITNR NAME VORNAME
1 Müller Andrea
2 Schmidt Hans
Kunde
KNR NAME VORNAME TEL
1 Bach Babara
2 Papst Ulrike
3 Meyer Rolf
4 Schmidt Klaus
5 Brandt Willy
Beispielabfragen
1) Liste der Verkäufer
2) Auflistung aller Kunden, sortiert nach Nachnamen, absteigend 3) Welche Bücher hat der Autor “Autor1” geschrieben?
4) Welcher Autoren hat das Buch „Buch3“ geschrieben“?
5) Von welchen Autoren wurden Bücher bestellt?
a) Autorenname
b) Für Experten: Autorenname, Anzahl der Bestellung 6) Welche Kunden haben Bücher bestellt?
7) Welche Rechnungen wurde im Jahr 2005 abgegeben?
Expertenfragen:
8) Wie viele Bücher wurden insgesamt bestellt ? 9) Welche Kunden haben keine Bücher bestellt?
10) Wie viele Bücher wurden vom Autor „Autor1“ bestellt?
11) Von welchen Autoren wurden keine Bücher bestellt?
12) Wie viele Bücher hat der Verkäufer Müller „bestellt“?
13) Von welchen Autoren wurden mehr als ein Buch bestellt?
INTERBASE-Datumsfunktionen
EXTRACT(day FROM column) Liest aus dem Datum den Tag EXTRACT(month FROM column) Liest aus dem Datum den Monat EXTRACT(year FROM column) Liest aus dem Datum den Jahr
Beispiel:
Gesucht die Mitarbeiternamen und der jeweilige Tag, Monat, Jahr des Einstellungstages. Diese numerischen Werte sollen in jeweils eine eigene Spalte eingetragen werden. Wichtig sind aber nur die Mitarbeiter, der Abteilung 632. Sinnvolle Spaltennamen sollten verwendet werden.
Dazu verwendet man das Attribut „hire_date“ mit den drei EXTRACT-Methoden.
Abfrage:
SELECT full_name Name, EXTRACT(day FROM hire_date) Tag,
EXTRACT(month FROM hire_date) Monat, EXTRACT(year FROM hire_date) Jahr FROM employee
WHERE dept_no = 623