794
FHTW D6TI1 Sommersemester 1997 Datenbanken SS 97 Prof. Dr.-Ing. H.-J. Scheibl D:\Eigene\Doku\DB\971D6DB.doc – 12.04.97/12.04.97 Seite: 1 Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3 Die Lehrveranstaltung Datenbanken geht über ein Semester mit 2 UE Vorlesung donnerstags, 3. LE, Raum F315 2 UE Übung donnerstags, 4. LE, Raum B24 Die Abschlußnoten setzen sich aus folgenden Leistungsnachweisen zusammen: Vorlesungsklausur zum Inhalt des gesamten Stoffes Termin: Donnerstag, 26. Juni 1997, 3. LE Raum: wird noch bekanntgegeben (voraussichtlich F315) Unterlagen: alle Unterlagen erlaubt (außer dem Nachbar oder Externen) Gewicht: 100% Übungsbeleg Erstellen einer DB-Anwendung nach Vorgaben Aufgabenstellung: Donnerstag, 10. April 1997 (spätestens) Abgabe: nach Zeitplan am Ende dieses Textes Raum: B24 Unterlagen: wie in den Vorgaben beschrieben Einzelbeleg, keine Teamarbeit! Gewicht: Noten der Teilbelege ergeben Gesamtnote (siehe Zeitplan) Sämtliche Teilbelege müssen abgegeben werden! Hinweise zum Lehrfach: Ohne Datenhaltung kommt kein Anwendungssystem aus. Sie werden daher über kurz oder lang zumindest einfache Datenbanken entwerfen müssen. Hier zeigt es sich sehr schnell, ob Sie Ihr Handwerk verstehen oder nicht. Sie lernen für die Praxis! Experten behaupten, daß unter 10 Programmierern nur einer in der Lage ist, ein gutes Datenbanksystem zu entwerfen. Die Lehrveranstaltung stellt daher erhebliche Ansprüche an Ihr Denk- und Abstraktionsvermögen. Daher ist intensive Mitarbeit angesagt. Hinweise zur Vorlesung: 1. Kommen Sie regelmäßig zu den Vorlesungen und Übungen. 2. Kommen Sie pünktlich. Am Anfang der Vorlesung wird immer kurz der prüfungsrelevante Stoff der letzen Einheit kurz wiederholt. 3. Sollten Sie ein Lehreinheit einmal versäumen, dann informieren Sie sich bei Ihren Kommilitonen. Infor- mieren Sie diese schon vorher von Ihrer Abwesenheit. 4. Folgen Sie aufmerksam der Vorlesung. Den Stoff, den Sie vergammeln, müssen Sie später mit vielfa- chen Aufwand nachlernen. 5. Stellen Sie Fragen, wenn Sie etwas nicht verstanden haben. Vielleicht habe ich es ja auch nicht kapiert. 6. Verlassen Sie sich nicht auf das Skript. Schreiben Sie so viel wie möglich mit. Erstellen Sie daraus ein Skript in eigenen Worten bzw. ergänzen Sie das Skript. 7. Aufgabenlösungen müssen sie selbst erstellen und nicht nur nachvollziehen. Es gibt nur wenige Men- schen, die durch reines Lesen einer Lösung den Gedankengang auf ein ähnliches Problem übertragen können. Hinweise zu den Übungen: 1. Die Übungen werden mit dem Datenbanksystem MS Access durchgeführt. 2. Es ist empfehlenswert, wenn Sie sich auch außerhalb der Übungen mit diesem System beschäftigen.

Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW D6TI1 Sommersemester 1997 Datenbanken SS 97Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\971D6DB.doc – 12.04.97/12.04.97 Seite: 1

Informationen zur Vorlesung: FHTW Berlin

Datenbanken FB 3

Die Lehrveranstaltung Datenbanken geht über ein Semester mit

2 UE Vorlesung donnerstags, 3. LE, Raum F3152 UE Übung donnerstags, 4. LE, Raum B24

Die Abschlußnoten setzen sich aus folgenden Leistungsnachweisen zusammen:

Vorlesungsklausur zum Inhalt des gesamten StoffesTermin: Donnerstag, 26. Juni 1997, 3. LERaum: wird noch bekanntgegeben (voraussichtlich F315)Unterlagen: alle Unterlagen erlaubt (außer dem Nachbar oder Externen)Gewicht: 100%

Übungsbeleg Erstellen einer DB-Anwendung nach VorgabenAufgabenstellung: Donnerstag, 10. April 1997 (spätestens)Abgabe: nach Zeitplan am Ende dieses TextesRaum: B24Unterlagen: wie in den Vorgaben beschrieben

Einzelbeleg, keine Teamarbeit!Gewicht: Noten der Teilbelege ergeben Gesamtnote (siehe Zeitplan)

Sämtliche Teilbelege müssen abgegeben werden!

Hinweise zum Lehrfach:Ohne Datenhaltung kommt kein Anwendungssystem aus. Sie werden daher über kurzoder lang zumindest einfache Datenbanken entwerfen müssen. Hier zeigt es sich sehrschnell, ob Sie Ihr Handwerk verstehen oder nicht. Sie lernen für die Praxis!

Experten behaupten, daß unter 10 Programmierern nur einer in der Lage ist, ein gutesDatenbanksystem zu entwerfen. Die Lehrveranstaltung stellt daher erhebliche Ansprüchean Ihr Denk- und Abstraktionsvermögen. Daher ist intensive Mitarbeit angesagt.

Hinweise zur Vorlesung:1. Kommen Sie regelmäßig zu den Vorlesungen und Übungen.2. Kommen Sie pünktlich. Am Anfang der Vorlesung wird immer kurz der prüfungsrelevante Stoff der letzen

Einheit kurz wiederholt.3. Sollten Sie ein Lehreinheit einmal versäumen, dann informieren Sie sich bei Ihren Kommilitonen. Infor-

mieren Sie diese schon vorher von Ihrer Abwesenheit.4. Folgen Sie aufmerksam der Vorlesung. Den Stoff, den Sie vergammeln, müssen Sie später mit vielfa-

chen Aufwand nachlernen.5. Stellen Sie Fragen, wenn Sie etwas nicht verstanden haben. Vielleicht habe ich es ja auch nicht kapiert.6. Verlassen Sie sich nicht auf das Skript. Schreiben Sie so viel wie möglich mit. Erstellen Sie daraus ein

Skript in eigenen Worten bzw. ergänzen Sie das Skript.7. Aufgabenlösungen müssen sie selbst erstellen und nicht nur nachvollziehen. Es gibt nur wenige Men-

schen, die durch reines Lesen einer Lösung den Gedankengang auf ein ähnliches Problem übertragenkönnen.

Hinweise zu den Übungen:1. Die Übungen werden mit dem Datenbanksystem MS Access durchgeführt.2. Es ist empfehlenswert, wenn Sie sich auch außerhalb der Übungen mit diesem System beschäftigen.

Page 2: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW D6TI1 Sommersemester 1997 Datenbanken SS 97Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\971D6DB.doc – 12.04.97/12.04.97 Seite: 2

3. Das Semester kann in zwei große Zeitabschnitte unterteilt werden. In der ersten Hälfte wird ein DB-System einer Fachhochschule gemeinschaftlich entwickelt. In der zweiten Hälfte haben Sie Gelegenheit,den Übungsbeleg zu entwickeln.

4. In den Übungen wird normalerweise schrittweise der Umgang mit dem Datenbanksystem erlernt, alsodas Anlegen einer Datenbank, der darin enthaltenen Tabellen, der Abfragen, Berichte und Formulareusw. Da es sich hierbei um einen fortlaufender Aufbau handelt, ist es dringend erforderlich, bis zum Ab-schluß des ersten Teiles regelmäßig an den Übungen teilzunehmen.

5. Im zweiten Teil der Übungen stehe ich Ihnen in den Übungen zur Unterstützung zur Verfügung.

Unterlagen:Die Manuskripte für die Vorlesung und die Übungen stehen Ihnen auf Wunsch zur Verfügung. Leider ist esnicht möglich, die Manuskripte auf Hochschulkosten zu vervielfältigen. Es ist auch nicht möglich, die Unter-lagen in Form von Disketten usw. weiterzureichen.

Literatur

John L. Viescas: Microsoft Access professionell nutzenMicrosoft Press, München 1993

Ignatz Schels: MS Access: das Nachlagewerk für alle PC-Anwenderte-wi-Verlag, München, 1993, ISBN: 3-89362-510-0

Baloui, Said: Microsoft Access – Das KompendiumMarkt & Technik, Haar bei München, ISBN: 3-87791-392-X

C. J. Date: An Introduction to Database Systems, Volume 1Addison-Wesley, Reading, Mas., 1991, ISBN: 0-201-51381-1

Neben dem Originalhandbuch zu Access gibt es eine Vielzahl von Büchern zu Access, die jedoch alle mehroder minder Ersatzbücher für die raubkopierten System darstellen. Nur wenige trauen sich an die fundierteTheorie heran. Reine Datenbank Bücher sind dagegen relativ schwer zu lesen.

Terminplan

KW Datum Vorlesung Labor Aufg %12 20.03.97 Motivation, Einführung DB anlegen, Tabelle anlegen13 27.03.9714 03.04.97 ERM Entwurf 1:m Beziehungen herstellen, Abfragen15 10.04.97 Relationale Datenbanken m:m Beziehungen herstellen, Abfragen16 17.04.97 RDM Theorie Formulare17 24.04.97 Normalformen Formulare, Programmieren 6.1 1518 01.05.9719 08.05.9720 15.05.97 Normalformen/SQL Programmieren, API 6.2 1521 22.05.97 SQL Berichte22 29.05.97 SQL Berichte 6.3 1523 05.06.97 andere Datenbank-Modelle Makros24 12.06.97 Datenbank Aufbau Programmieren 6.4 1525 19.06.97 Optimierung Programmieren26 26.06.97 Klausur Reflexivbeziehungen 6.5 4027 03.07.97 Besprechung der Musterlösungen Reflexivbeziehungen

Page 3: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Dieses Manuskript ist ausschließlich als Unterlage für die genannte Lehrveranstaltung bestimmt. Verviel-fältigungen (auch auszugsweise) sind nur mit schriftlicher Genehmigung des Autors erlaubt.

Fachhochschule für Technik und WirtschaftFachbereich 1: Ingenieurwissenschaften !Studiengang: Technische InformatikStudienfach: Datenbanken

Datenbanken

Eine Einführung

Prof. Dr.-Ing. H.-J. ScheiblRebhuhnweg 5D-82256 FürstenfeldbruckTel.: 08141/349333Fax.: 08141/349335E-Mail: [email protected]

Page 4: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3
Page 5: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 11.10.98 20:13/11.10.98 20:13 Seite: 1-I

Datenbank – Einführung

1 Einführung................................................................................................................... 1-1

1.1 Motivation............................................................................................................. 1-1

1.2 Grundlagen........................................................................................................... 1-5

1.2.1 Informationen, Nachrichten, Daten................................................................. 1-5

1.2.1.1 Begriffsdefinitionen ................................................................................. 1-5

1.2.1.2 Modellbildung.......................................................................................... 1-8

1.2.2 Datenbanksystem (DB-System) ..................................................................... 1-9

1.3 Aufbau von Datenbanken.................................................................................. 1-13

1.3.1 Grundlagen................................................................................................... 1-13

1.3.2 Organisation................................................................................................. 1-14

1.3.3 Datenstrukturen............................................................................................ 1-14

1.3.3.1 ANSI/SPARC 3-Schichten-Modell........................................................ 1-15

1.3.3.2 Entitäten, Beziehungen......................................................................... 1-17

1.3.3.3 Datenbanksprachen .............................................................................. 1-20

1.3.3.4 Anwendungsbeispiel ............................................................................. 1-23

1.3.3.5 Entity-Relationship-Modell (ERM)......................................................... 1-25

1.3.3.6 Referentielle Integrität........................................................................... 1-37

1.3.3.7 Änderungs-, Löschweitergabe .............................................................. 1-38

1.3.4 Werkzeugunterstützung ............................................................................... 1-38

1.3.5 Konstruktion neuer semantischer Einheiten................................................. 1-41

1.3.6 Schritte zu einem vollständigen semantischen Datenmodell ....................... 1-42

1.4 Anhang ............................................................................................................... 1-42

1.4.1 Abbildungsverzeichnis ................................................................................. 1-42

1.4.2 Definitionsverzeichnis .................................................................................. 1-43

1.4.3 Index............................................................................................................. 1-43

Page 6: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3
Page 7: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-1

1 Einführung

1.1 Motivation

Bei den Studenten der Informatik (insbesondere der Technischen Informatik) ist eine ge-wisse unverständliche Zurückhaltung beim Zugang zu den Datenbanken festzustellen,obwohl sie diese ständige einsetzen müssen. Bevor wir uns mit der zugegebenermaßentrockenen Theorie beschäftigen wollen, soll das folgende Beispiel dazu dienen, dasGrundverständnis für die wesentlichen Probleme der Datenbanken zu vermitteln.

Nun ist es für einen Autor sehr schwer, sich ein Beispiel aus den Fingern zu saugen, dasdazu noch falsch sein muß. Aber zum Glück gibt es das Leben, das immer noch die be-sten Beispiele lieferte. Da auch Fernstudenten ein Diplom machen müssen, wählen siemeist ein Thema aus ihrem beruflichen Alltag. Hierbei handelt es sich erstaunlich häufigum Datenbankprobleme (auch wenn es die Studenten selbst nicht wahrhaben wollen). Oftist es dann auch noch so, daß vorhandene Anwendungen auf neue Betriebssysteme usw.umgestellt werden müssen. Diese Beispiele haben den großen Vorteil, daß sie mit genü-genden „echten“ Daten vorliegen.

So kam also eines Tages einFernstudent zu mir und wolltedie Aufgabe bearbeiten, dieVerwaltung einer Videopro-duktionsfirma auf Windowsumzustellen. Sein erster Ent-wurf sah bereits äußerlich ganzansprechend aus (die Menü-sowie die Symbolleiste fehlt imBild) (Bild 1.1-1).

Erst auf den zweiten Blick er-kennt man, daß keinerlei Li-sten- oder Kombinationsfelderzu sehen sind. Über solcheListen werden erlaubte Einträ-ge dem Benutzer angezeigt,damit dieser einen auswählenkann.

Ein Blick auf die „Datenbank“ zeigt, daß es sich nur um eine einzige Tabelle (Datei) han-delt. Jedem Feld des Bearbeitungsfensters entspricht genau eine Spalte in dieser Tabel-le. Wegen der Übersichtlichkeit sind in den folgenden Darstellungen immer recht vieleSpalten und Zeilen weggelassen. Bei Bedarf werden sie hier in diesem Manuskript ausdem Hut gezaubert.

Natürlich sind einige mündliche Erklärungen hilfreich. Die Videokassetten werden mit ei-ner vierstelligen Nummer versehen, bei der die erste Ziffer die Gruppe markiert. Nachdieser Nummer werden die Kassetten im Archiv auf verschiedenen Gestellen abgelegt.

Bild 1.1-1: Bearbeitungsfenster

Page 8: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FH

TW

1.1 Motivation

©

Prof. D

r.-Ing. H.-J. S

cheibl

Seite: 1-2

D:\E

igene\Doku\D

B\D

BM

S\D

B01E

in\DB

01Ein.doc – 97202

KASSETTEN

GRUPPE

U-GRUPPE

TITEL

DREHTAG

REDAKTION

KAMERA

AUFTRAGGEB

STANDORT

VERSAND

INFO

ID

53

Sport

Boxen

Box-Amateur-Meisterschaft

03.04.93

Pflüger

C.Fischer

Berlin

0 - Kampf

1

2127

Kultur

Party Metropol Superstar

16.06.93

Berlin

0 -Showeinlage:Step

2

2128

Kultur

Nancy-Lee-GRA

03.05.93

Viola

S.Di Tidaro

Berlin

0 -Grand Hotel von innen

3

2129

Kultur

West-Side-Story-Pemiere Feier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer

4

6781

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Modenschau -Christian

5

2135

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0-Studio in Rom

6

2130

Kultur

Theater

West-Side-Story

27.07.93

E.Lang

S.Di Tidaro

Berlin

0 -Finale

7

2131

Kultur

West-Side-Story-Premierenfeier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer -I.

8

2133

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0 -I.-Brüssau auf

9

2134

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Todaro

Zdf

Berlin

0 -Häuser/Dächer

10

2425

Kultur

Montserrat Caballe

14.07.93

T.Ohm

C.Fischer

Berlin

0 -Hilton-hotel -Interv

11

6782

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Interview Claus Pöhland

12

2261

Kultur

Heller

Berlin

0- Akrobatinnen - Tänzer

13

2259

Kultur

Filmausschnitte Malcom X

Berlin

014

2126

Kultur

Party-Metropol-Superstar

16.06.93

Berlin

0 -Showeinlage -Step

15

6266

Verschiedenes

Musik

Berlin

0 -ohne Bild,nur Musik

16

6191

Verschiedenes

Tränenpalast

A.Choo

F.Brauer

Berlin

0 -Eingang-ränenpalast

17

6192

Verschiedenes

Zoobilder

Berlin

0 -Affen-Insel

18

1000

Politik

Skinhead Prozess

09.07.92

Berlin

0- Autos Haus

19

6193

Verschiedenes

Kita/Tierversuche

M.Illner

Sat 1

Berlin

0 -Kinder spielen in

20

6194

Verschiedenes

Zirkus Busch

14.04.93

M.Gräser

Berlin

0 -Aufbauarbeiten

21

6195

Verschiedenes

OFF-Gorillababys

18.03.93

T.Ohm

M.Gräser

Berlin

0 -9 Monate altes

22

6196

Verschiedenes

Hitze

Berlin

0 -Fernsehturm

23

6257

Verschiedenes

Tiere

Moschusochse Balthasar

04.10.92

T.Ohm

M.Gräser

Rtl

Berlin

0 -I.-Wolfgang Völz

24

6256

Verschiedenes

Löwe als Nachbar

01.12.92

I.Hüttig

Rtl

Berlin

0 -Tiere -Löwen im

25

5013

Wissenschaft

Stralsund-Treuhand

SAT.1

Berlin

0-Leute am Computerputer

26

5014

Wissenschaft

Stralsund-Treuhand

SAT 1

Berlin

0 -Schiff -Hafen

27

5015

Wissenschaft

Stralsund-Treuhand

SAT1

Berlin

0 -Schiff-Astoria

28

5010

Wissenschaft

Stralsund

Berlin

0 -Schreinerwerkstatt

29

5011

Wissenschaft

Stralsund

Berlin

0 -Bedienung-Hand

30

5012

Wissenschaft

Stralsund

Berlin

0 -Gelände von oben

31

5007

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Betriebsgelände

32

5008

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Westhafen

33

5009

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Schweißen

34

5004

Wissenschaft

CIM-Data

Berlin

0 -Technische

35

Schauen S

ie sich diese Tabelle einm

al in Ruhe an und blättern S

ie nicht gleich weiter. W

as fällt Ihnen alles auf? Notieren S

ie alle Punkte! D

ies isteine w

ichtige Übung, um

Ihnen die Problem

atik vor Augen zu führen. V

ergleichen Sie Ihre E

rgebnisse mit denen auf der nächsten S

eite. Untersu-

chen Sie kritisch, w

elche Punkte S

ie übersehen haben, welche P

unkte für Sie zusätzlich falsch w

aren.

Page 9: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FH

TW

Datenbank – E

inführung

© P

rof. Dr.-Ing. H

.-J. Scheibl

D:\E

igene\Doku\D

B\D

BM

S\D

B01E

in\DB

01Ein.doc – 97202

Seite: 1-3

KASSETTEN

GRUPPE

U-GRUPPE

TITEL

DREHTAG

REDAKTION

KAMERA

AUFTRAGGEB

STANDORT

VERSAND

INFO

ID

53

Sport

Boxen

Box-Amateur-Meisterschaft

03.04.93

Pflüger

C.Fischer

Berlin

0 - Kampf - Siegerehrung

12127

Kultur

Party Metropol Superstar

16.06.93

Berlin

0 -Showeinlage:Step

22128

Kultur

Nancy-Lee-GRA

03.05.93

Viola

S.Di Tidaro

Berlin

0 -Grand Hotel von innen3

2129

Kultur

West-Side-Story-Pemiere Feier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer

46781

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Modenschau -Christian

52135

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0-Büro-Rau -Fahrstuhl

62130

Kultur

Theater

West-Side-Story

27.07.93

E.Lang

S.Di Tidaro

Berlin

0 -Finale

72131

Kultur

West-Side-Story-Premierenfeier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer

82133

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0 -I.-Brüssau auf

92134

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Todaro

Zdf

Berlin

0 -Häuser/Dächer

10

2425

Kultur

Montserrat Caballe

14.07.93

T.Ohm

C.Fischer

Berlin

0 -Hilton-hotel

11

6782

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Interview Claus Pöhland12

2261

Kultur

Heller

Berlin

0- Akrobatinnen - Schein13

2259

Kultur

Filmausschnitte Malcom X

Berlin

014

2126

Kultur

Party-Metropol-Superstar

16.06.93

Berlin

0 -Showeinlage -Step

15

6266

Verschiedenes

Musik

Berlin

0 -ohne Bild,nur Musik16

6191

Verschiedenes

Tränenpalast

A.Choo

F.Brauer

Berlin

0 -Eingang-Tränen

17

6192

Verschiedenes

Zoobilder

Berlin

0 -Affen-Insel

18

1000

Politik

Skinhead Prozess

09.07.92

Berlin

0- Auto

19

6193

Verschiedenes

Kita/Tierversuche

M.Illner

Sat 1

Berlin

0 -Kinder spielen in

20

6194

Verschiedenes

Zirkus Busch

14.04.93

M.Gräser

Berlin

0 -Aufbauarbeiten

21

6195

Verschiedenes

OFF-Gorillababys

18.03.93

T.Ohm

M.Gräser

Berlin

0 -9 Monate altes

22

6196

Verschiedenes

Hitze

Berlin

0 -Fernsehturm

23

6257

Verschiedenes

Tiere

Moschusochse Balthasar

04.10.92

T.Ohm

M.Gräser

Rtl

Berlin

0 -I.-Wolfgang Völz

24

6256

Verschiedenes

Löwe als Nachbar

01.12.92

I.Hüttig

Rtl

Berlin

0 -Tiere -Löwen im

25

5013

Wissenschaft

Stralsund-Treuhand

SAT.1

Berlin

0 -Leute am Computer

26

5014

Wissenschaft

Stralsund-Treuhand

SAT 1

Berlin

0 -Schiff -Hafen

27

5015

Wissenschaft

Stralsund-Treuhand

SAT1

Berlin

0 -Schiff-Astoria

28

5010

Wissenschaft

Stralsund

Berlin

0 -Schreinerwerkstat29

5011

Wissenschaft

Stralsund

Berlin

0 -Bedienung-Hand

30

5012

Wissenschaft

Stralsund

Berlin

0 -Gelände von oben

31

5007

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Betriebsgelände

32

5008

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Westhafen

33

5009

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Schweißen

34

5004

Wissenschaft

CIM-Data

Berlin

0 -Technische Zeichne

35

Hier sind jetzt einige P

robleme m

arkiert. Einige sind offensichtlich, über einige können w

ir trefflich streiten. Insgesamt ist aber eine M

enge ganzgravierender F

ehler festzustellen.

zweistellige Z

ahl ist verbotenF

ehlende Eingabeplausibilität

Imm

erhin gleich geschrieben

Wie heiß

t er eigentlich wirklich?

3870 Einträge „B

erlin“In der ersten Z

iffer istdie G

ruppe verstecktV

erstoß gegen die 2N

F

Kann es sein, daß

das Datum

nicht existiert?

Was ist richtig?

Wiederholung?

Was ist richtig?

Hier schreibt jeder, w

ie er will! S

ind dieS

zenen eigentlich Suchkriterium

?

Wo ist die K

assette?

Sind 2 P

ersonen erlaubt?V

erstoß gegen 1N

F?

Page 10: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.1 Motivation© Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4

Ein Thema wird grundsätzlich nur von einem Redakteur, einemKameramann und einem Schneider bearbeitet. Es wird von ei-ner Sendeanstalt (genauer Sendung innerhalb einer Sendean-stalt) in Auftrag gegeben, kann aber später in einzelnen Szenenoder als ganzes Thema auch in anderen Sendungen wieder-verwendet werden.

In der Tabelle sind einige grobe Fehler markiert. Ich bin sicher,daß Sie diese mit Ihrem „natürlichen Menschenverstand“ soforterkannt haben. Leider zeigt aber die Praxis genau das Gegen-teil. Datenbanken kann man nicht nur mit „gesundem Men-schenverstand“ entwickeln. Der Entwurf muß wie eine Pro-grammiersprache erlernt werden.

Oder können Sie sagen, wie man die falsche Namensgebungverhindert? Die Kenntnis der Programmiersprache von Accessallein reicht dazu nicht aus!

Aber natürlich reicht es, per Ge-brauchsanweisung den Anwendernmitzuteilen, daß alle Namen richtigund gleichartig zu schreiben sind,kein Blödsinn zu machen ist usw.Schließlich halten sich alle Benutzerdaran, besonders wenn es mehrereverschiedene sind. Es gibt auchkeine Böswilligen usw., die statt desNamens z. B. das SchimpfwortKotzbrocken oder ähnliches ein-tragen.

Auch bei weit weniger gefährlichenSpalten finden wir genug Fehler,wie uns die linke Tabelle zeigt. Hiererhebt sich sofort die Frage, waserlaubt ist. Selbst wenn sich dieAnwender Mühe geben, ergebensich Unterschiede wie Plural oderSingular, Abkürzung oder Volltextusw.

Wenn Sie also wissen wollen, wieman diese Probleme verhindert,dann folgen Sie den weiteren Aus-

führungen. Ein wenig Theorie muß einfach sein. Vielleicht wis-sen Sie es nicht, aber die Datenbanktheorie ist älter als alle Coder Visual, DOS, Windows usw. Entwicklungen und (!) sie istaktueller denn je!

Kamera

(f) Vick

-

-gallus

......

A.Di Tidaro

A.Di Todaro

A: Di Todaro

.....

Alessandro Di Todaro

.....

D. Sittnik/ S. Di Todaro

.....

I. Brunner / M. Gräser

I.Brunner

I.Brunner/m.Gräser

Ia-fernsehen

.....

Ingo Brunner/lutz Oehmigen

.....

L. Oehmigen

L. Oehmingen

L. Ohmingen

L. Öhmingen

Lutz Oehmigen

Lutz Oehmiger

Lutz Oehming

Lutz Oehmingen

Lutz Oehminger

Lutz Oemigen

Lutz Öhmigen

M Gräser

M. Gräser

M.Gräser

M: Gräser

Mathias Gräser

Mati Gräser

Matthias Gäser

Matthias Gräser

Matti

Matti Der Gräser

Matti Gräser

.....

Mona Lisa Von Schredinzki

....

Oehmigen

Oehmiger

Oehmnigen

Ohmigen

S. Di Tidaro

S. Di Todaro

S. Ti Todaro

S.Di Tidaro

S.Di Todaro

Sandro Di Todaro

Sandro Ti Todado

Sandro Ti Todaro

.... usw.

Todaro

GRUPPE U-GRUPPE

Kultur

Kultur Asterix

Kultur Ausstellung

Kultur Bb -intim

Kultur Berlin Break

Kultur Berlinale

Kultur Berlinale '94

Kultur Boy George

Kultur Bundesfilmpreis '94

Kultur Christoph Heyn

Kultur Club

Kultur Clubs

Kultur Diskothek

Kultur Fernsehprominenz

Kultur Festival

Kultur Festival Berlin

Kultur Film

Kultur Filmausschnitte

Kultur Filmausscnitte

Kultur Generalprobe

Kultur High Society

Kultur Hunde

Kultur Interview

Kultur Kennste Den?

...

Kultur Theater

Kultur Tiere

Kultur Varieté-kunst

Kultur Vips

Kultur Ziere

Kultur Zirkus

Kutur High Society

Kutur V.I.P.'s

Zwei, geht das?

Kameramann?

Toll, was?

Was ist das?

Da lacht jede Datenbank.

Aha, mal mit :

Ohne, geht das?

Plural/Singular?Plural/Singular?

Schreibfehler gibt es gratis

So oder so?

Page 11: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-5

Wie heißt der Kameramann nun eigentlich wirklich, Tidaro oder Todaro, Di Tidaro, TiTodaro oder wie nun, vielleicht doch Ti Tidaro? Vielleicht weiß es ja die Personalabtei-lung?

Natürlich wollen Sie die Musterlösung einmal ansehen. Hier ist sie.

1.2 Grundlagen

In diesem Kapitel wollen wir die Grundlagen für die späteren Anwendungen legen. Dabeiwenden wir uns zuerst der Frage zu, was eine Datenbank ist, um dann auf ihren Entwurfund ihre Implementation überzugehen.

1.2.1 Informationen, Nachrichten, Daten

1.2.1.1 Begriffsdefinitionen

In unserer Welt dreht sich alles um Informationen, Nachrichten und Ereignisse. Sogar indie Zukunft wollen wir blicken

Operator, give me information, long distance information

Bild 1.1-2: Musterlösung

Hier legen wir fest, wel-chen Typ der ma hat.Die Auswahl erfolgt dannimmer nach dem Typ.Also werden nur Mitar-beiter aufgelistet, die z. B.Kameramänner sind.

Bestellbeziehung

Versandbeziehung

Abteilung/Sendung

m:m Beziehung

m:m Beziehungen

Firma oderSendeanstalt

Jedes Thema ist nur auf einerKassette. Eine Kassette kannmehrere Themen umfassen.

Szene kannStichwort haben

Thema kannStichwort haben

Kann auch zumThema führen

Page 12: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-6 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Als wenn wir davon nicht schon genug hätten. Man spricht schon vom Zeitalter der Infor-mationstechnologie. Heutzutage entstehen pro Tag mehr Informationen, als früher in gan-zen Jahrhunderten erzeugt wurden. Diese Informationsflut kann nur durch entsprechendetechnische Hilfsmittel bewältigt werden. Dabei stehen Datenbanksysteme im Mittelpunktdes Interesses.

Im Laufe der Jahrhunderte hat der Mensch immer wieder mit gleichen Problemen ge-kämpft. Ein Dauerproblem waren die immer wiederkehrenden Energiekrisen. Andere Pro-bleme entstanden durch Technologiesprünge, bei denen die begrenzten Ressourcen desMenschen sprunghaft verbessert wurden. Dies fängt in der Steinzeit mit der Nutzung er-ster Werkzeuge als Unterstützung für die Hände an, geht weiter über die Dampfmaschineals Ersatz großer körperlicher Kräfte (Kraftverstärker) und endet heute mit dem PC alsIntelligenzverstärker.

Für eine einheitliche Verständnisplattform wollen wir einige der Begriffe definieren, auchunter der Gefahr, bestimmte Grundbegriffe entweder gar nicht oder rekursiv festzulegen.

Informationist die Verringerung von Ungewißheit. Im engeren Sinne ist hier an die Verringe-rung von Ungewißheit aufgrund von Kommunikationsprozessen zu denken.

Dokumentarische Informationals Ergebnis eines Dokumentationsprozesses intendiert sie die Verringerung vonUngewißheit auf seiten der Dokumentationsbenutzer. (In diesem Sinne sollte 'In-formation' immer nur in der Einzahl und ohne Artikel gebraucht werden.) Wesent-lich ist hierbei, daß in unserem Sinne nicht alle möglichen Daten, Signale oder Zei-chen Informationen bewirken, sondern nur die, die beim zu bedienenden Benutzervermutlich Ungewißheit verringern können.

Informationen(informationsträchtige Daten) sind Daten, die geeignet sind, innerhalb bestimmterKommunikationsprozesse Informationen auf seiten des Rezipienten (Benutzers,Empfängers) zu bewirken. (In diesem Sinne sollte 'Informationen' immer nur in derMehrzahl gebraucht werden.)

Nachrichtensind Daten, die zwischen einem Sender und Empfänger (ohne Betrachtung des In-haltes) ausgetauscht werden.

Der Begriff Nachricht bezieht sich offensichtlich auf die Form (Syntax), der Begriff Infor-mation auf den Inhalt (Semantik) der Daten.

Syntaxumfaßt die Regeln, wie Nachrichten gebildet werden. Art und Aufbau des Regeln-systems nennen wir Grammatik.

Semantikumfaßt die Menge der Regeln und Vereinbarungen, die jeder syntaktisch zulässi-gen Nachricht ihre Bedeutung zuordnet.

Page 13: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-7

Kommunikationist die Übertragung von Bedeutungen (zwischen Sender und Empfänger) aussen-denden, empfangenden und interpretierenden Systemen.

Kommunikationsprozeßist die Übertragung von Bedeutungen zwischen einem Kommunikator (z. B. Spre-cher) und einem Rezipienten (z. B. Zuhörer).

Kommunikationssystemist ein System von nach bestimmten Regeln ablaufenden Kommunikationsprozes-sen.

Fakten, TatsachenFakten werden erst dann zur Information, wenn sie den Dokumentationsprozeßdurchlaufen haben. Informationen müssen auf einen bestimmten Empfängerkreiszugeschnitten werden, damit die Hauptforderung 'Ungewißheit zu verringern' erfülltwerden kann.

Interessant ist in diesem Zusammenhang die neue Namengebung für sehr alte Begriffeder elektrischen Nachrichtentechnik:

Kommunikation NachrichtenübertragungKommunikator SenderRezipient Empfänger

Datensind die kleinsten realisierbaren Repräsentationen von Sachverhalten, die in einemgegebenen kommunikativen Zusammenhang für sich interpretiert und dauerhaft fi-xiert werden können. (Als Singular verwendet man Dateneinheit und nicht Datum.)Im vorliegenden Manuskript wird der noch kürzere und gleich aussagekräftige Sin-gular Date angewandt.

Dokumentarische Datensind geeignet, den Rezipientenkreis eines Dokumentationssystems hinsichtlichseiner spezifischen Fragestellung zu informieren.

Diese beiden Datendefinitionen leiten auf unsere Betrachtung zur Dokumentation über.

Dokumentationist die Erstellung, Sammlung, Speicherung, Ordnung und Auswahl, Verbreitung undNutzbarmachung von Informationen, die in Dokumenten (Schriftstücken, Listen,Filmen usw.) enthalten sind.

Diese Definition soll um zwei Punkten erweitert werden. Zur Dokumentation soll die Ände-rung (Aktualisierung) bestehender Dokumente, die sich auch nur logisch auf einem Da-tenträger (Plattenspeicher, Diskette, Band usw.) befinden können, sowie das Vernichtenvon Dokumenten gezählt werden.

Page 14: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-8 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Im Duden’91 finden wir nur die prozeßorientierte Definition:

Zusammenstellung, Ordnung und Nutzbarmachung von Dokumenten und Materia-lien jeder Art

Häufig verstehen wir aber unter der Dokumentation die Sammlung der Ergebnisse, alsodie Dokumente, Handbücher usw.

Dokumentist das kleinste innerhalb der Dokumentation auftretende, in sich abgeschlosseneElement.

Interpretationsregelnsind die zwischen Sender und Empfänger abgesprochenen Regeln, wie Nachrich-ten verstanden werden sollen (zu Informationen werden).

Darstellungist die Art und Weise, wie Daten präsentiert werden. Dies hängt einerseits mit derAufnahmegeschwindigkeit des Menschen, andererseits mit der gewünschten Ge-nauigkeit zusammen. Tabellen können auch als (Balken-) Diagramme dargestelltwerden. Dies erleichtert die Verständlichkeit auf Kosten der Genauigkeit der ein-zelnen Date. Für verschiedene Empfänger können unterschiedliche Darstellungs-formen notwendig sein.

Die letzte Aussage führt uns quasi ohne Bruch zu den Datenbanksystemen. Diese sindeine der möglichen Darstellungen der realen Welt, so wie die DNS (Desoxyribonuklein-säure) eine Darstellung (Genotypus) eines Lebewesens ist, genau wie dessen physischeAusprägung (Phänotypus). Letztere hängt stark von der Umgebung ab, in das Lebewesengerade existiert. Somit hängt die Struktur einer Datenbank davon ab, zu welchem Zwecksie dient.

Für die Entwicklung von Software benötigen wir Informationen über diese reale Welt inbestimmten Darstellungsformen. Diese Darstellungsformen hängen vom jeweiligen Standder Technik ab und können morgen anders aussehen als heute, d. h. die Darstellungensind wie auch die Informationen selbst nicht invariant.

Die Objekte sind

− Gegenstände, Sachverhalte, Tatsachen, Fakten− Individuen, Individuengruppen− Vorgänge, Regeln, Prozesse, Verfahren, Methoden− Beziehungen zwischen diesen Objekten.

1.2.1.2 Modellbildung

Die Modellbildung ist ein zentraler Vorgang beim Systementwurf.

Page 15: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-9

Definition 1-1: Modell

Ein Modell ist ein vereinfachtes, begrenztes Abbild eines Teils der realen Welt oder unse-rer Vorstellung, das die (im jeweiligen Zusammenhang) wesentlichen Eigenschaften undBeziehungen des Originals widerspiegelt. Es entsteht als Ergebnis einer zielgerichteten,zweckorientierten Tätigkeit (Prozeß), der Modellierung oder Modellbildung.

Für die Darstellung des Modells sind eine Vielzahl von Techniken bekannt, die hier je-doch nicht im einzelnen besprochen werden sollen. Einzelheiten folgen in einem derspäteren Kapitel. Wichtig sind aber in diesem Zusammenhang die Tätigkeiten

− Abgrenzung des Modells (Teilsystems) vom Gesamtsystem (Modellierungssicht)− schrittweise Detaillierung der gleichen Modellierungssicht in verschiedenen Mo-

dellierungsebenen (Dekomposition, Verfeinerung, Modularisierung).

Definition 1-2: Sicht

Eine Sicht ist die Menge aller für die Prozesse einer Modellierungsschicht relevanten In-formationen.

Bei der Darstellung eines Modells können wir folgende Dimensionen feststellen

− Funktionen (Prozesse)− beteiligte Stellen− Objekte (Belege, Formulare, Berichte, Materialien)− logische Abhängigkeiten− Zeitabhängigkeiten.

Da unser Papier nur zweidimensional ist, wird es schon schwierig, ein System in all sei-nen Dimensionen vollständig darzustellen. Der Datenbankentwurf beschränkt sich daherhäufig auf die letzten drei Dimensionen und verfeinert dort insbesondere die Objekte undderen logischen Abhängigkeiten. Schon die zeitliche Abhängigkeit von Objekten bereiteteinige Schwierigkeiten.

1.2.2 Datenbanksystem (DB-System)

Wenn wir von einer Datenbank und einem Datenbanksystem sprechen, dann müssen wiruns im Klaren sein, was dies eigentlich ist und wie sich ein solches Datenbanksystem voneinem Dateiensystem bzw. von einem Dateienverwaltungssystem unterscheidet.

Ein Datenbankverwaltungssystem (DBMS Data Management System) verwaltet nicht nurphysische Daten jeder Art, vielmehr geht es in erster Linie um die Verwaltung logischerDaten auf einer logischen Ebene. Die Datenbank entsteht dabei im Datenbankentwurfs-prozeß durch folgende Schritte1

1 Bleimann u. a.: Betriebsinformatik, München 1990

Page 16: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-10 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

ÊKonzeptuelle DatenmodellierungErstellung eines Unternehmensdatenmodells mit allen Datenobjekten und Beziehun-gen. Es entsteht ein semantisches Modell z. B. als ERM (Entity-Relationship Modell).

ËModellierung der VerteiltstrukturFestlegung der Datenverteilung innerhalb von Rechnernetzen. Es entstehen VerteilteAnwendungen.

Ì Logische DatenmodellierungStrukturierung der Daten auf der Basis eines konkreten, formalen Datenmodells. Esentsteht z. B. ein relationales Modell.

ÍPhysische DatenmodellierungÜbertragung des logischen Datenmodells in eine Datenbanksoftware auf einer gege-benen Hardware. Es entsteht ein lauffähiges System.

ÎModellierung externer SichtenDatenauswahl und Festlegung der Funktionalität für konkrete Teilanwendungen. Esentstehen Arbeitsumgebungen für verschiedene Benutzergruppen.

Alle Betriebssysteme kennen den Begriff Datei. Eine Datei ist erst einmal nichts anderesals eine beliebige Menge von Daten versehen mit einem Bezeichner, dem Dateinamen.Sicher werden Sie wissen, daß es bereits auf dieser Ebene eine erste Differenzierunggibt. Wir unterscheiden ASCII-Dateien (oder besser im Sinne der ANSI-Dateien von Win-dows allgemeiner) Textdateien und Binärdateien. Beide Dateitypen haben natürlich eineaktuelle Länge. Bei den Textdateien wird diese Information aber vom Betriebssystem(normalerweise) ignoriert. Vielmehr orientiert sich das Betriebssystem am Dateiinhalt, ge-nauer gesagt an den Steuerzeichen im Dateiinhalt und noch genauer betrachtet am EOF(End Of File) Steuerzeichen am Ende der Datei. Daher lassen sich solche Dateien rechteinfach z. B. über eine Datenleitung senden. Der Empfänger liest die Daten bis zum er-sten Ende-Zeichen. Eine Binärdatei ist dagegen völlig transparent und wird nur über ihreim Inhaltsverzeichnis vermerkte Länge bearbeitet. In diesem Fall müssen wir z. B. dieLänge der Datei gesondert über die Datenleitung senden. Der Empfänger muß dies er-kennen und verarbeiten können.

Warum macht man eigentlich solche Unterscheidungen? Nun, dies können Sie selbstrecht schnell in DOS einmal ausprobieren. Zwei Textdateien lassen sich konkatenieren(verbinden), indem Sie den Befehl

COPY datei1+datei2 datei3

eingeben. Dann wird die erste Datei bis zum EOF-Zeichen in die Zieldatei kopiert (aberohne das EOF-Zeichen). Anschließend wird die zweite Datei angehängt (auch ohne einEOF-Zeichen). Erst wenn COPY fertig ist, hängt es ein EOF-Zeichen an. Aus diesemGrund können wir (höchstens mit einem Trick) keine Datei über die V.24-Schnittstelle ko-pieren

COPY datei1 COM1: Rechner 1

COPY COM1: empfang Rechner 2

Der empfangende Rechner liest im Empfangsstrom nie ein EOF, so daß er immer weiterwartet, bis wir ihm in irgend einer Weise dieses Zeichen zusenden.

Page 17: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-11

Aber wir wollen dies nicht vertiefen, sondern zu unse-rem Problem zurückkehren. Aus der Betrachtung ei-nes Anwenders ist ein DB-System im wesentlichen einrechnergestütztes System zur Aufbewahrung undVerwaltung von Daten. Dabei kann jeder Benutzereine eigene Vorstellung hierzu haben.

Definition 1-3: Datenbank

Die Datenbank (Data Base) enthält zentral gesam-melte, redundanz(freie)arme Daten, die über das Da-tenbankverwaltungssystem (Data Base ManagementSystem DBMS) einer Vielzahl unterschiedlicher An-wendern zur Verfügung gestellt werden.

Diese Definition ist natürlich viel trockener als jene,die ich kürzlich las:

„In zusammengesetzten Wörtern bedeutet „Bank“ eine zentrale Stelle, wo das im Bestim-mungswort des Kompositums Genannte für den Gebrauchsfall bereitgehalten wird. Da wirkeine Organ-, Blut- oder gar Samenbank planen, dient eine Datenbank logischerweiseder Vorratshaltung von Daten.“

Diese etwas witzige Definition (ich habe auch ein Fremdwörter-Duden und eineDeutschgrammatik benötigt, um sie zu verstehen) zeigt uns sehr deutlich, daß wir etwasabstraktes bevorraten wollen, nämlich Daten. Bringt ein Benutzer ein ausgeliehenes Buchzur Bibliothek zurück, dann ist dies durchaus real. Den Computer interessiert aber nur dieSignatur (Buchnummer), die heutzutage als Strichcode auf dem Buch zu finden ist.

Hier muß angemerkt werden, daß der Begriff Datenbank häufig auch zur Bezeichnungdes Datenbankverwaltungssystems, also der Software benutzt wird. Dies führt i. a. zu kei-nen Problemen. Es sollte aber trotzdem versucht werden, beide Bedeutungen durch Ver-wendung der unterschiedlichen Begriffe deutlich zu machen.

Das DBMS hat insbesondere folgende Anforderungen zu erfüllen

1. Strikte Trennung zwischen Datenbank und AnwendernDer Zugriff auf die Daten erfolgt ausschließlich über die Datenbankverwaltung niemalsdirekt. Die Organisation der Datenbank, die Datensicherheit und die Zugriffsverwaltungerfolgt für sämtliche Anwender zentral durch das DBMS.

2. Beliebiger Zugriff

Sämtliche Daten (soweit Zugriffsrechte bestehen) sollen vom Anwender beliebig zu-sammengestellt und gefiltert werden können.

3. Paralleler Zugriff

Auf die in der Datenbank gespeicherten Daten sollen mehrere Benutzer (zumindest le-send) gleichzeitig zugreifen können.

Bild 1.2-1: Sichten

Page 18: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-12 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Der letzte Punkt ist wohl der entscheidende Punkt für den Einsatz einer Datenbank. So-bald wir mehr als einen Anwender haben, ist der Einsatz einer Datenbank angezeigt.

Einzelplatzanwendungen zeichnen sich durch

lokale, einzelnen Programmen oder Programmsequenzen zugeordneten Daten

aus. Datenbanken erzeugen aber daraus

globale, programm-invariante Strukturen.

Da diese natürlich nicht von allein vorhanden sind, müssen wir uns in einem Kapitel mitder Konstruktion solcher Strukturen beschäftigen.

Die Vorteile einer solchen zentralen Verwaltung von Daten (auch in verteilten Systemen)bestehen in

1. Vermeidung redundanter DatenhaltungDie Verwendung mehrerer Kopien der gleichen Daten in lokalen Dateien kostet nichtnur zusätzlichen Speicherplatz sondern erschwert auch die Kontrolle über Datenschutzund Datensicherheit. Da aber auch in der zentralen Datenbank Redundanzen (z. B.Verbindungsschlüssel oder ggf. Postleitzahl, Ort, Straße) auftreten, sprechen wir vonRedundanzarmut.

2. Vermeidung inkonsistenter Datenbestände

Redundant gehaltene Daten neigen nach einem Grundgesetz der Natur dazu, inkonsi-stent zu werden, d. h. auseinanderzulaufen. Beim Vergleich zweier Datenbestände istdann nur noch bedingt (d. h. aufgrund anderer Datenfelder wie einem Änderungsda-tum) zu entscheiden, welches die „richtigen“ Daten sind.

3. Parallele Zugriffsmöglichkeiten

Daten in einer Datenbank stehen jedem Anwender (wenn er über die notwendigen Zu-griffsrechte verfügt) zur Verfügung.

4. Sichere Abspeicherung

Dies umfaßt einerseits des Schutzes von Daten vor Verlust und Fehlern, andererseitsaber auch vor Mißbrauch, wobei (leider) die Auswirkungen bei zentraler Datenhaltungschlimmer sind, wenn der Schutz überwunden wurde, da alle Daten offen liegen.

Ein Nebeneffekt ist noch erwähnenswert

5. BegriffsdefinitionenDie zentrale Datenhaltung erzwingt eine eindeutige Definition der einzelnen Daten. Einsolcher Definitionskatalog wird Data Dictionary genannt.Versuchen Sie doch einmal, in einem Betrieb die Begriffe Umsatz, Deckungsbeitragusw. abzuklären. Ist das nun vor oder nach Steuern?

Page 19: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-13

Organisatorisch ergeben sich folgende Vorteile

6. AktualitätÄnderungen am Datenbestand werden sofort allen anderen Anwendern sichtbar.

7. Kostenreduktion

Daten werden nur noch an einer Stelle und nicht an n Stellen korrigiert. 8. Zugriffsrechte

Durch die Vergabe von unterschiedlichen Zugriffsrechten ist es möglich, die Sichtbar-keit sowie die Änderbarkeit durch verschiedene Anwender zu steuern.

9. Sichten

Schon aus Sicherheitsgründen wird man einem Anwender nur die Daten zur Verfügungstellen, die er unmittelbar benötigt. Dies wird als Sicht auf die Datenbank bezeichnet.

Ein Nachteil, den aber auch Dateien besitzen, soll nicht verschwiegen werden. Datenban-ken und Dateien haben normalerweise kein Gedächtnis, d. h. speichern keine Historie.Sie erinnern sich nicht wie ein Sachbearbeiter, daß „da doch einmal etwas gewesen ist“.Auch „ausradierte“ Informationen auf der Karteikarte lassen sich nicht wiederherstellen.Ohne besondere Maßnahmen ist nicht zu erkennen, wann eine Date geändert wurde, ge-schweige denn welchen Wert sie vorher hatte. Sollten solche Informationen wichtig sein,so müssen wir dies beim Entwurf bereits berücksichtigen.

Beispiel:Auch hier wieder ein Beispiel aus der Praxis. Ein Praktikant hatte die Aufgabe, eine Da-tenbank zur Verwaltung der internen, betrieblichen Schulung einer Firma zu entwerfen.Dabei sollte jährlich die Abrechnung über die Kostenstellen erfolgen, also legte er logi-scherweise ein Attribut kststelle bei jedem Mitarbeiter an. Am Ende des Jahres be-schwerten sich dann die Abteilungsleiter, daß die Kosten für Mitarbeiter übernehmensollten, die zu diesem Zeitpunkt noch gar nicht zur Abteilung gehörten. Hier handelt essich offensichtlich um einen Entwurfsfehler. Ein Mitarbeiter gehört zwar immer nur zu ei-ner Kostenstelle. Dies aber eben nur zu einem bestimmten Zeitpunkt. Für einen Abrech-nungszeitraum kann er ggf. zu mehreren Kostenstellen gehören. n

1.3 Aufbau von Datenbanken

1.3.1 Grundlagen

Bereits im ersten Kapitel haben wir verschiedene Begriffe kennengelernt, die zu einemDBMS gehören

− die Datenbank− das Verwaltungssystem− die Anwendungsprogramme.

Idealerweise sollten die Anwendungssysteme eine einheitliche logische Schnittstelle vor-finden. Die damit definierte logische Sicht des DB-Systems sollte unabhängig von derphysischen Sicht, d. h. von der physikalischen Realisierung des benutzten DB-Systems

Page 20: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-14 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

sein. Eine solche Schnittstelle ist z. B. in Form von SQL (Standard Query Language) ge-normt.

1.3.2 Organisation

Die Organisation wird hauptsächlich von folgenden Anwendergruppen erledigt:

1. Daten-AdministatorenDiese sind für die Daten eines Unternehmens verantwortlich. Dabei kann es sichum Daten auf Formularen, Karteikarten oder in Datenbanken handeln. Sie defi-nieren also eine Date unternehmenseinheitlich und legen die organisatorischenZugriffsrechte auf die Daten fest.

2. DB-Administratoren

Diese sind für die Erfassung und Gruppierung der Datenelemente zuständig. Sieverwalten diese, deren Beschreibungen und die Zugriffsrechte der Anwender aufdiese. Die Datenelemente müssen physikalisch gespeichert und verwaltet wer-den.

3. Anwendungsprogrammierer

Diese schreiben Anwendungsprogramme, indem sie Zugriff auf die Datenbanküber festgelegte Aufrufe benutzen. Die Hauptfunktionen dabei sind lesen, än-dern, löschen, suchen und ableiten (filtern).

Neben diesem zentralen Personal finden wir natürlich das Heer der Anwender, die wireinteilen können in

4. operationelle BenutzerDiese Benutzer haben einen festen Aufgabenbereich und führen festgelegteOperationen auf der Datenbank aus, d. h. sie sind z. B. für die Pflege derStammdaten zuständig. Für diese Gruppe erstellen die Anwendungsprogram-mierer spezielle Programme, die für den Aufgabenbereich optimiert sind.

5. sporadische Benutzer

Diese stellen hin und wieder Anfragen der verschiedensten Art an das System(ad-hoc-Nutzung). Für diese Anwendergruppe steht eine allgemeine Abfrage-sprache (Query Language) zur Verfügung.

Die Aufgaben und die Zuständigkeiten lassen sich wie in Tabelle 1-1 darstellen.

1.3.3 Datenstrukturen

Die Form, d. h. die Struktur, in der die Daten einer DB abgespeichert werden, sind in denwenigsten Fällen gleich der Struktur, wie sie von den Anwendungsprogrammen benötigtwerden.

Denken Sie doch nur einmal an einen Auftrag, eine Auftragsbestätigung, eine Rechnungusw. Auf jedem „Blatt Papier“ liegt eine bestimmte Struktur der Daten vor. Diese Struktur

Page 21: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-15

ist meist eine andere als auf den „Karteikarten“. Ein „Blatt Papier“ (Beleg) entspricht einerSicht. Die Karteikarten sind die Tabellen der Datenbank.

Die Adresse auf einem dieser Papiere gehört zur Datengruppe „Kunde“. Dieser wird in derDatenbank auf einer physischen Ebene verwaltet, d. h. auf einer Platte gespeichert. Wei-tere Informationen auf dem Beleg stammen z. B. aus der Datengruppe „Produkte“.

Tabelle 1-1: Zuständigkeiten bei der Datenbankverwaltung

Benutzer Programmierer DB-Admin. Daten-Admin.

Informationskonzept des Unterneh-mens

B B G H

Projektauswahl G G G HProjekt-Durchführbarkeitsstudie G H G GAuswahl der DB-Software G G G HEntwurf und Implementierung der DB B G H GEntwurf des Anwendungsprogramms G H G BProgrammieren, Testen G H BPflege des Anwendungsprogramms G H BPflege der DB (Sicherung, Fehlerbe-seitigung)

B B H G

Pflege der Daten H B B B

B = Beratung auf AnforderungG = Gemeinsame VerantwortungH = Hauptverantwortung

Der konzeptuelle Entwurf einer Datenbank muß die reale Welt in ein solches System um-wandeln.

1.3.3.1 ANSI/SPARC 3-Schichten-Modell

Ursprünglich kommt diese Unter-scheidung in physische und logi-sche Strukturen noch von der Band-verarbeitung her. Zwischen denDatensätzen benötigte man immereine gewisse Spanne zum Abbrem-sen und Anlaufen des Bandes (Kluftë gap genannt). Daher wurdenmehrere Datensätze zu physikali-schen Einheiten zusammengefaßt.Heute findet man diese Strukturen inder Blockung und der Einteilung inSektoren und Clustern wieder.

Die Beschreibung aller Daten einesAnwendungsbereiches wird kon-zeptuelles DB-Schema (KS) genannt

Anwendung 1 Anwendung 2 Anwendung 3ad-hoc-Nutzung ad-hoc-Nutzung

externes Schema

internes Schema

konzeptuelles Schema

arbeitet auf

abgeleitet von

Bild 1.3-1: SPARC 3-Schichten-Modell

Page 22: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-16 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

(nicht konzeptionelles!). Es enthält die allgemeine Bedeutung (Semantik) der Daten einesBereiches (Unternehmens), auf die sich die beiden anderen Schemata abstützen. Daherfinden wir auch den Begriff Unternehmensdatenmodell (UDM) oder Begriffsschema. We-gen der Darstellung der Semantik verwenden wiederum einige Autoren den Begriff se-mantisches Modell. Wir sollten uns aber von der Vielfalt der Begriffe nicht verwirren las-sen, sondern uns merken, daß wir möglichst frühzeitig ein umfassendes Unternehmens-datenmodell entwerfen sollten.

Die einzelnen, lokalen Sichten der Anwendungsprogramme werden externe DB-Schemata(ES) genannt. Sie beschreiben die Nutzungsformen der Daten. Die Beschreibung derphysischen DB-Strukturen (Speicherungsformen) wird im Gegensatz dazu als internesDB-Schema (IS) bezeichnet. Diese 3-Schema-Architektur (Bild 1.3-1) wurden vonANSI/SPARC (American National Standards Institute/Standard Planning and RequirementCommittee) 1975 (erfolglos) zur Normung vorgeschlagen, hat aber trotzdem heute grund-legende Bedeutung bei der Entwicklung von Datenbank-Management-Systemen erlangt.

Es gibt zahlreiche Interne Schemata (Tabellen), noch mehr Externe Schemata (Sichten)aber nur ein konzeptuelles Schema (im Unternehmen) (Bild 1.3-2).

Da alle drei Schemabereiche etwas über die Organisation der Daten aussagen, gehörensie zur Kategorie der Metadaten. Metadaten sind Beschreibungen anderer Daten.

ProgrammeAnwendungen

externe Schemata(user views)

Transformation Transformationinterne Schemata(storage views)

physische Dateien

konzeptuellesSchema

(enterpriseview)

Datenneutralität Datenunabhängigkeit

Unternehmens-datenmodell

Bild 1.3-2: Zusammenhang zwischen den Schemata

Page 23: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-17

Praktisch stellen sich drei Grundaufgaben

1. Aufstellen der konzeptuellen, externen und internen Schemata (Entwurf)2. Abbildung der externen Schemata auf das konzeptuelle Schema3. Transformationen zwischen dem konzeptuellen Schema, dem internen Schema

und den physischen DB-Strukturen (Programmierung).

Damit Sie als Leser einmal ein Gefühl für die Größenordnungen der Unternehmensda-tenmodelle erhalten seien folgende Zitate angeführt

Mehr als bescheiden gibt sich Prof. Scheer

„Praktische Erfahrungen mit Unternehmensdatenmodellen zeigen, daß eine Größenordnung von rund300 Entity- und Beziehungstypen bereits eine adäquate Beschreibung der logischen Datenstrukturenergeben.“2

„Die Erstellung eines Unternehmensdatenmodells ist mit einem erheblichen Aufwand verbunden. ...Nach Erfahrungen des Verfassers ist hierfür für einen Industriebetrieb ein Aufwand von rund zweibis drei Mannjahren bei entsprechender Vorbildung bzw. externer Beratung durch Spezialisten erfor-derlich.“3

„UDM im Bereich der Banken, Versicherungen, Großunternehmen usw. erreichen leicht 600 undmehr Elemente.“4

1.3.3.2 Entitäten, Beziehungen

Das Gesamtsystem (Unternehmensdatenmodell) und mit ihm die Datenbank entstehtdurch Modellierung beim Datenbankentwurf. Es handelt sich um eine Abbildung der rea-len Welt auf ein semantisches Modell. Die Bestandteile dieses Prozesses sind in Bild 1.3-3 dargestellt.

− Auschnittbildung ausder realen Welt;

− Feststellen der rele-vanten Objekte undTätigkeiten in diesemAusschnitt(Weglassen dernichtrelevanten Ob-jekte);

− Abstraktion durchBeschreibung der

2 Scheer: Unternehmensdatenmodell ...3 (IBM Nachrichten 302 (1990), S. 22).4 E. Märten, C. Heppner: Der vollständige Nachweis über Unternehmensdaten und Geschäfts-Prozesse –

nur eine Vision?U. Klonki, G. Zumbroich: Repository-Einsatz in der Krupp-Hoesch Infomationsverarbeitung GmbHbeide Vorträge in H.-J. Scheibl (Hrsg.): 6. Kolloquium Software-Entwicklung – Methoden, Werkzeuge, Er-

fahrungen ‘95, ISBN 3-924813-33-7

Ausschnitt ausder realen Welt

SchemaDatenbankentwurf

Datenmodell

Beschreibungsmittel

Bild 1.3-3: Modellierung

Page 24: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-18 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Objekte mit ihren relevanten Eigenschaften (Attributen, Merkmalen);− Klassenbildung durch Angleichen der ausgewählten Merkmale (Weglassen überflüssi-

ger Merkmale). Diese vereinheitlichte Beschreibung einzelner Objekte nennen wir En-titäten (Entities). Eine Entität ist somit ein Individuum (Instanz, Occurrence, Instance)aus der Menge aller Objekte, beschrieben durch ausgewählte Attribute (genauer durchAttributwerte). Ein Attribut ist durch seinen Namen, seine Bedeutung und seinen Wertaus einem Wertebereich gekennzeichnet;

Hier ist sicher ein Beispiel angebracht

real existierende Objekte abstrahierte EntitätenHerr Mayer Beschäftigter MayerFrau Müller Studentin MüllerHerr Huber Dozent HuberAbteilung Einkauf Abteilung Einkauf

Merkmal Wert Attribut AttributwertName Mayer pname Mayer

Personalnummer 12345 pnr 12345

Ort München port München

Entitätsmenge/-typ: personalpnr pname port11111 Schulze Frankfurt12345 Mayer München23456 Müller Berlin

− Aufstellen von Objektklassen, die die Objektmengen in (elementfremde) Entitätsmen-gen (Entity Sets) unterteilt. Die Beschreibung einer solchen Menge (d. h. Definition derAttribute) erfolgt im Entitätstyp (Entity Type);

− Feststellen der Beziehungen (Relationships) zwischen den Entitäten;− Zusammenfassung der Beziehungen zu Beziehungsklassen, die die Beziehungen in

Beziehungsmengen (Relationship Sets) unterteilen. Die Beschreibung einer solchenMengen erfolgt im Beziehungstyp (Relationship Type).

Die Realisation der Beziehungen (d. h. das zugrundeliegende Datenmodell) klassifiziertdas Datenbanksystem in (geordnet nach der Komplexität)

− Hierarchisches Datenbanksystem− Vernetztes Datenbanksystem− Relationales Datenbanksystem− Objektorientiertes Datenbanksystem.

Die Abstraktion der realen Beziehung zwischen Objekten in Beziehungen zwischen Klas-sen (Entitätsmengen) führt zu Beziehungstypen (Relationship Types)

Page 25: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-19

Beziehung zwischen Entitäten (Objekten) =Beziehung

Beziehung zwischen Entitätsmengen =Beziehungstyp

Maier arbeitet im Einkauf. Beschäftigte arbeiten in einer Abteilung.Der Einkauf befindet sich im Gebäude H10. Abteilungen befinden sich an Orten.

Ihnen werden natürlich sofort sprachliche Probleme bei den Formulierungen auffallen

• Arbeitet ein Beschäftigter in genau einer Abteilung oder mehreren (prozentual)?• Ist eine Abteilung immer genau an einem Ort, oder kann sie auch verteilt sein?• Wie wird also der Singular in der oberen (Abteilung) und der Plural in der unteren Zeile

(Orten) interpretiert?

Jetzt wird es mit den Bezeichnungen etwas schwierig, weil eine Entität eigentlich schoneine Relation ist, nämlich die Beziehung der Eigenschaften des Individuums zueinander.Die Eigenschaften gehören zusammen, weil sie sich auf dasselbe Individuum beziehen.Daher werden die Entitäten selbst als Relationen 1. Ordnung bezeichnet. Die Beziehun-gen zwischen Entitäten als Relationen 2. Ordnung. Im Sprachgebrauch verzichtet man oftauf diese präzise Einteilung überläßt es dem Kontext, welche Art der Relation gemeint ist.

Die Beziehung zwischen allen Objekten des gleichen Typs, d. h. die Beziehungsmengezwischen Entitätsmengen wird nun ganz analog durch Attribute beschrieben

Beziehungstyp: arbeitetWer Wo Seit wann Mit welcher Aufgabe1234 A02 01.10.1993 Programmierer2345 A03 01.01.1989 Organisator

Diese Tatsache führt im RDM (Relationalen Datenmodell) dazu, beide (Entitätstyp undBeziehungstyp) auf einen gemeinsamen Ursprung zurückzuführen, nämliche auf die Re-lation.

Betrachten wir noch einmal die Aussagen im „gewohnten“ Sprachschatz

Die kleinste Einheit der Informationen, die für einen Anwender von Bedeutung ist,wird Datenelement (Synonyme: Datenfeld, Elementardatum, Date, Data-Item, Attri-but usw.) genannt. Ein Datenelement hat im DBMS einen eigenen, eindeutigenNamen (Bezeichner).

Verschiedene Datenelemente werden in einem Datensatz (Synonyme: Datenag-gregat, Datenverbund, n-Tupel, Entität, Relation 1. Ordnung, Record, Zeile einerTabelle usw.) zusammengefaßt. Programme lesen und schreiben normalerweise inganzen Sätzen. Zur Verwaltung der Sätze im DBMS werden Zeiger (Zugriffspfade,pointer) verwendet.

Eine Zusammenstellung gleich strukturierter Datensätze wird (logische) Datei(Synonyme: File, Tabelle, Table, Segment, Entitätsmenge, Relationstyp 1. Ord-nung) genannt. Eine solche logische Datei kann z. B. eine Untermenge einer phy-sikalischen Datei sein. Die Beschreibung aller zur Modellbildung relevanter Infor-

Page 26: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-20 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

mationen eines Objekts wird Entitätstyp (Entity Type) genannt. Die Menge alle En-titäten ist die Entitätsmenge (Entity Set).

Die Beziehungstypen verstecken sich etwas in den Dateienselbst. Sie werden über Verbindungsschlüssel realisiert. Hierzufolgt aber später noch mehr.

Bild 1.3-4 zeigt die Strukturhierarchie. Eine Datenbank besteht ausmehreren (logischen) Dateien. Diese wiederum besteht aus mehrerenDatensätzen. Ein Datensatz hat im Normalfall mehrere Datenele-mente. Dazu kommen Verwaltungsinformationen, wie Beschreibun-gen, Indexdateien usw.

1.3.3.3 Datenbanksprachen

Für die Datenmodelle (ihre detaillierten Beschreibungen folgen in dennächsten Kapiteln) stellen die DB-Systeme die sog.

• Datenbeschreibungssprache (DDL Data Definition Language),• Datenmanipulationssprache (DML Data Manipulation Language)• Datenabfragesprache (DQL Data Query Language)

zur Verfügung.

Die Unterscheidung zwischen DML und DQL wird nicht immer durchgeführt, ist aberdurchaus sinnvoll, da es sich bei der DQL um eine eigenständige Sprache handelt, dieunabhängig von einer Wirtssprache (Host Language) ist.

Die Datenbeschreibungssprache dient

− zum Anlegen, Ändern und Löschen von DB-Schemata− zur Unterstützung beim Datenschutz und der Datensicherheit

Bei den Datenmanipulationssprachen unterscheiden wir

− eigenständige DML/DQL (im PC-Bereich dBase, Access, SQL)− eingebettete DML für Gastsprachen (Cobol, Visual Basic, Delphi)

Eine weitere Klassifizierung besteht im Sprachkonzept

− satzorientierte Datenbanksprachen (dBase)− mengenorientierten Datenbanksprachen (SQL)

Moderne DBMS bieten häufig beides, wobei aber die Gefahr besteht, grundsätzliche For-derungen des jeweiligen Datenbankkonzepts nachhaltig zu verletzen.

Die Datenmanipulationssprachen stellen verschiedene Grundfunktionen zur Verfügung,die wir ebenfalls in Gruppen ordnen können

Datenbank

(logische) Datei

Datensatz

Datenelement

*

*

*

* = Wiederholung

Bild 1.3-4: Struk-turhierarchie

Page 27: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-21

1. BearbeitungsbefehleDiese Befehle dienen zur Navigation in der Datenbank sowie zum Ändern desDatenbestandes durch Neuanlegen, Ändern und Löschen.

2. Verwaltungsbefehle

Diese Befehle dienen der allgemeinen Verwaltung und Erhaltung der Integritäteiner Datenbank im Multiuser-Betrieb. Es handelt sich u. a. um Befehle zum

− An- und Abmelden− Sperren und Freigeben von Datenbereichen− Festlegen von Transaktionen (Beginn und Ende)− Setzen von Kontrollpunkten an denen im Fehlerfall wieder aufgesetzt

werden kann.

NavigationsbefehleDie Navigationsbefehle (Suchbefehle) bewegen die Satzzeiger in den Dateien bzw. stel-len Teilmengen des Datenbestandes einer Datenbank zur Verfügung. Die Auswahl derTeilmengen erfolgt dabei durch Filterfunktionen, die dem Befehl mitgegeben werden.

NeuanlegenDer Anwender bzw. das Anwenderprogramm stellt einen logischen Datensatz oder einenTeil davon dem DBMS in einem fest definierten Format über den sog. Verständigungsbe-reich (Eingabepuffer) zur Verfügung. Die Einarbeitung des Datensatzes wird durch dasDBMS entweder vollständig durchgeführt oder ohne Änderung des Datenbestandes mitFehlermeldung abgelehnt.

LesenDiese Befehle werden durch Angabe einer Klausel näher bestimmt. Hierdurch sind fol-gende Fälle möglich

− direktes Lesen unter Angabe einer logischen Datensatzadresse− Lesen mit Angabe eines Aufsetzpunktes− Lesen entsprechend dem Suchkriterium eines Navigationsbefehls− Lesen in einer sequentiellen Reihenfolge.

ÄndernHierbei werden Teile des logischen Datensatzes unter Einhaltung der Plausibilitätsbedin-gungen verändert. Dies kann relativ einfach bei Änderung von Nichtschlüsselbegriffenoder auch sehr komplex bei Schlüsselbegriffen sein. Im letzten Fall erfolgt zumindest eineUmsortierung der Schlüssel. Häufig ist auch eine Überprüfung auf „referentielle Integrität“noch nötig (wird später noch erklärt).

LöschenHier unterscheidet man logisches und physisches Löschen. Beim logischen Löschen wirdder Datensatz nur entsprechend markiert. Das DBMS liefert beim Zugriff auf einen sol-chen Datensatz eine entsprechende Kennung zurück, die vom Anwender oder vom An-wenderprogramm geeignet auszuwerten ist.

Beim physischen Löschen werden die Daten völlig aus der Datenbank entfernt. Dabeiwerden auch alle Verweise auf den Datensatz gelöscht, soweit sie unter Kontrolle desDBMS liegen. Gerade hier können wir uns natürlich schnell einige grundsätzliche Proble-

Page 28: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-22 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

me vorstellen. Löschen Sie gedanklich einmal einen Professor, der bereits in vielen zu-rückliegenden Veranstaltungen eingetragen ist. Müssen nun all diese Veranstaltungengelöscht werden? Dürfen wir überhaupt Datensätze aus einer Datenbank löschen? Wennnein, wer verhindert, daß die Datenbank nach einiger Zeit platzt?

Eine Datenbank hat von sich auch kein Gedächtnis. Im Gegensatz zu einer Karteikartekönnen wir ohne besondere Maßnahmen nicht mehr feststellen, wann eine Änderung,Löschung usw. erfolgte und wie ggf. der vorherige Zustand aussah.

VerwaltungsbefehleDie Verwaltungsbefehle sichern hauptsächlich den Zugang zum DMBS selbst und sorgenfür einen ungestörten Multiuser-Betrieb. Mit dem Anmelden werden die Benutzer in Listeneingetragen, ihre Zugriffsrechte überprüft und verschiedene Pufferspeicher zur Verfügunggestellt.

Durch explizite Befehle oder implizit mit den eingesetzten Befehlen sperrt der BenutzerDatenbereiche gegen fremden Zugriff. Dies kann sowohl gegen lesenden wie natürlichvorwiegend schreibenden Zugriff geschehen. Durch diese Möglichkeiten, kleine Bereiche(Sätze, Satzgruppen usw.) zu sperren ergibt sich erst die Multiuser-Fähigkeit. Die Be-triebssysteme selbst sperren meist nur ganze Dateien gegen Fremdzugriff.

Die Verwaltungsbefehle dienen zur Definition einer Transaktion:

Definition 1-4: Transaktion

Unter einer Transaktion versteht man eine Befehlsfolge, die vollständig ablaufen muß, umeinen konsistenten Datenbankzustand in einen neuen konsistenten Zustand überzufüh-ren.

Beispiel:Sehen wir uns dies am Beispiel einer Geldüberweisung an. Eine solche Transaktion be-steht vereinfacht betrachtet aus den Prüfungen, ob das Absendekonto vorhanden undliquide (ggf. kreditwürdig) ist, ob das Empfängerkonto vorhanden ist, dem Abbuchen desBetrages vom Absenderkonto und dem Einbuchen im Empfängerkonto. Stürzt die Daten-bank genau zwischen den beiden letzten Aktionen ab, dann glaubt der Absender, daß dasGeld angekommen ist, während der Empfänger vergeblich wartet. Beide treffen sich dannvor Gericht wieder. Die Transaktionssteuerung hat somit dafür zu sorgen, daß beide Bu-chungen quasi gleichzeitig oder überhaupt nicht erfolgen. n

Das Setzen von Kontrollpunkten ist für die Datensicherung von Interesse. Aufgrund dieserKontrollpunkte lassen sich gestörte Datenbanken wieder in einen ordnungsgemäßen Zu-stand zurücksetzen.

Page 29: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-23

1.3.3.4 Anwendungsbeispiel

Um die Unterschiede in den verschie-denen Datenmodellen herausarbeitenzu können, benötigen wir ein einfachesund trotzdem einigermaßen vollständi-ges Problem.

Wir haben eine kleine Hochschule mitStudenten, die wie in Fachhochschulenin Klassen gegliedert sind. Die Klassen hören verschiedene Themen, die von Professorengelesen werden. Flexibel wie diese Professoren nun mal sind, können sie natürlich ver-schiedene Themen lesen usw. (Bild 1.3-5). Die Entitätstypen stellen wir mit Rechteckendar. Zur Darstellung dieser Beziehungen zeichnen wir erst einmal ganz naiv Pfeile in un-ser Diagramm ein. Die Namen von Entitätstypen, Attributen usw. werden in diesem Manu-skript grundsätzlich klein in der Schriftart Courier New dargestellt. Die Bezeichnungensind in Singular (weil kürzer). Der Plural stellt zwar besser die Menge dar. Im Sprachge-brauch ist es aber logischer zu sagen: Ein student gehört_zu genau einer klas-se.

Sicher bemerken Sie bei dieser Gelegenheit, daß wir durch die Pfeile eine Entitätsmengezum Subjekt, eine zweite Entitätsmenge zum Objekt gemacht haben. Wir sollten die Frageim Hinterkopf behalten, ob dies zulässig und vollständig ist. Schließlich könnten wir dieBeziehung auch herumdrehen (führt in allen Sprachen zu einer Passivkonstruktion).

Für jeden Entitätstyp müssen wir uns nun Attribute (Attributbezeichner, Attributtyp bzw.Wertemenge) festlegen, ohne schon dabei gleich an die spätere Verarbeitung zu denken

1. Entitätstyp studentBezeichner Typ Länge Bereich Kommentarsnr Ganzzahl (Zähler) Matrikelnummersname Zeichenkette 30 Studentennamesgeschl Zeichen 1 „M“,“W“ Geschlechtsgeb Datum Geburtsdatumsvord boolescher Wert Vordiplom bestanden?

2. Entitätstyp klasse

knr Ganzzahl (Zähler) laufende Nummerkname Zeichenkette 9 Klassenbezeichnungkanzahl Ganzzahl 0 - 100 Anzahl der Studenten

3. Entitätstyp thema

tnr Ganzzahl (Zähler) laufende Nummertname Zeichenkette 30 Themenname der Vorlesungtstunden Zahl Vorlesungsstunden

gehoert_zu

ist_klassensprecherhoert

liest

klassestudent

professor thema

Bild 1.3-5: Naiver Entwurf

Page 30: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-24 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

4. Entitätstyp professorpnr Ganzzahl (Zähler) laufende Nummerpname Zeichenkette 30 Name des Professorsport Zeichenkette 20 Wohnort

Der Wertebereich eines Attributes (sog. Domäne) ist durch den Datentyp, seine Längeund weitere Beschränkungen festgelegt. Das Geschlecht könnte eigentlich in einem Bitgespeichert werden. Die Organisation der meisten Prozessoren ist aber byteorientiert, sodaß wir i. a. mindestens 1 Byte benötigen.

Die Beziehungstypen finden wir zu

5. Beziehungstyp gehoert_zuzwischen student und klasse gibt an, welcher Student in welche Klasse geht. Wirwollen zusätzlich abspeichern, seit wann ein Student die Klasse besucht. Gehört die-ses Attribut nun zum Studenten, zur Klasse oder zum Beziehungstyp selbst?

gseit Datum Datum, ab der der Student die aktuelle Klasse besucht.

Nun, das Datum gehört zum Beziehungstyp, da es erst dann auftritt, wenn der Studenteiner Klasse zugewiesen wird (oder sich dort einschreibt).

Beziehungstypen, die ihrerseits relevante Attribute haben, nennt man in der Daten-banktheorie assoziative Beziehungstypen. Diese Typen sind insbesondere bei m:m Be-ziehungen interessant, wie wir später noch sehen werden.

6. Beziehungstyp ist_klassensprecherzwischen student und klasse gibt an, wer Klassensprecher der Klasse ist.

7. Beziehungstyp hoert

zwischen klasse und thema gibt an, welches Thema welche Klasse hört. 8. Beziehungstyp liest

zwischen professor und thema gibt an, welches Themen welcher Professor liest.

Integritätsbedingungen

Nicht auf den ersten Blick erkennbar, doch bei diesem Entwurf wichtig (wenn man ihnschon so gestaltet) sind die folgenden Integritätsbedingungen

9. Integritätsbedingungen sname,sgeschl,sgeb,svord,...Eine Vielzahl von Attributen muß mit einem Wert belegt sein. Dies sind die Muß- oderobligaten Felder. Der Rest sind die Kann- oder optionalen Felder.

10. Integritätsbedingung kanzahlDer Wert von kanzahl muß mit der Anzahl der Instanzen im Beziehungstypgehoert_zu übereinstimmen, d. h. es müssen tatsächlich so viele Studenten zurKlasse gehören, wie es dieser Attributwert angibt.

Page 31: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-25

11. Integritätsbedingung ksprecherDer Klassensprecher muß gleichzeitig Student in der Klasse sein, d. h. er kann nichtzu einer anderen Klasse gehören. Somit ist dieser Beziehungstyp logisch vom Bezie-hungstyp gehört_zu abhängig.

1.3.3.5 Entity-Relationship-Modell (ERM)

Im Gegensatz zu den inden späteren Kapiteln be-schriebenen Datenmodel-len dient das Entity-Relati-onship-Modell nicht zurdirekten Modellierung ei-nes DMBS. Es kann aber inallen Fällen als Vorstufezur weiteren Detaillierungdienen (Bild 1.3-6). Des-halb wird es an den Anfangunserer Betrachtungen ge-stellt. Das ERM hat einen geringeren Abstraktionsgrad als die anderen Modelle und kannals Vorstufe und Hilfsmittel für die Modellierung der anderen Schemata dienen. Es wird zuden semantischen Datenmodellen gezählt, bei denen die Beschreibung der Realität imVordergrund steht. Es unterstützt

• den Datenentwurf durch Entitätstypbildung;• den Beziehungstypentwurf durch entsprechende grafische Darstellung.

Das ERM wurde 1976 von P. P.-S. Chen vorgestellt5. Daher nennt man die entstehendenDiagramme auch gern Chen-Diagramme. Diese ERD (Entity-Relationship-Diagramme)gibt es inzwischen mit verschiedenen Modifikationen, die ein sehr breites Einsatzgebieterschließen. Dies führt andererseits hin und wieder zu Verwirrungen in der Symbolik. An-dererseits wollte man mit den Erweiterungen modernere Erkenntnisse in das immerhinschon über 20 Jahre alte Modell integrieren.

Chen hat das ERM (Entity-Relationship Modell) zur Erfassung der semantischen Abhän-gigkeiten zwischen den Daten eines Anwendungsbereiches vorgeschlagen. Es handeltsich um eine Spezialisierung des allgemeineren Relationenmodells und setzt voraus, daß

1. die zu modellierende Realität aus einer Vielzahl von abgrenzbaren Objekten (Entities)besteht,

2. die miteinander in Beziehungen (Relationships) stehen;3. die Entities und Relationships durch Attribute beschreibbar sind;4. sich gleichartige Elemente in Teilmengen (Entity Sets, Relationship Sets) zusammen-

fassen lassen,5. die sich durch Typbeschreibungen (Entity Type, Relationship Type) definieren lassen.

5 P. P.-S. Chen The Entity-Relationship Model – Toward a Unified View of Data

ACM Transactions on Database Systems, Vol. 1, No. 1, March 1976, p. 9-36

Ausschnitt ausder realen Welt

SchemataER-

Hierarchische

Netzwerk-

Relationale

Schemata

Schemata

Schemata

Bild 1.3-6: Stellung der ER-Schemata im Entwurfsprozeß

Page 32: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-26 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Die Datenbeschreibung einer Anwendung erfolgt heute in vielen CASE-Werkzeugen(Computer Aided Software Engineering) mit Hilfe der ER-Modelle. Hierbei reicht dasSpektrum von einfachen Modellen bis hin zu Unternehmensdatenmodellen (UDM).

Basis des ERM sind Mengen und Relationen, wie sie näher in Kapitel über das RDM(relationale Datenmodell) besprochen werden. Diese Hintergrundkenntnisse sind aber füreinen pragmatischen Ansatz nicht unbedingt notwendig.

Um die Grundidee des ERM zu verstehen, be-trachten wir zum einen die Beziehung zwi-schen zwei Entitäten (Ausprägungen) (Bild 1.3-7). Die Entitäten sind als Rechtecke mit abge-rundeten Ecken dargestellt. Zwischen beidenEntitäten besteht genau eine feste Beziehung.

Nun wird diese Betrachtungsweise verallge-meinert. Gemeinsame Entitäten ergeben eineEntitätsmenge (Entity Set ES), die Beschrei-bung einen Entitätstyp (als Rechteck darge-stellt). Die Menge aller gleichartigen Bezie-hungen ergibt eine Beziehungsmenge (Relationship Set RS), genauer einen Beziehung-styp (als Raute dargestellt).

Die Grundelemente sind also das Rechteck, die Raute und Kanten zwischen beiden. Ein-zelne Entitäten werden nie in einem ERD (ER-Diagramm) dargestellt sondern immer nurMengen bzw. Typen. Eine Unterscheidung zwischen Typ und Menge ist im Diagrammnicht notwendig.

Das ERM kennt, wie es derName schon aussagt zweiElemente, den Entitätstyp(Entity Set bzw. Entity Type)und den Beziehungstyp(Relationship Set bzw. Rela-tion Type). Diese beidenStrukturtypen korrespondieren somit unmittelbar mit den eingeführten Grundbegriffen(Bild 1.3-8).

Die Entity-Sets (ES) und die Relationship-Sets (RS) haben einen eindeutige Namen. Zu-sätzlich wird die Art der Beziehung (mathematisch auch Abbildung genannt) (1:1, m:1,1:m, m:m und c…) an die Verbindungslinie geschrieben. Dies ist die Kardinalität. Die Artder Beziehung gibt an, wie die Entitäten der beiden Entitätstypen mengenmäßig mitein-ander zusammenhängen. Dabei wird Unter- und Obergrenze angegeben. Die Untergren-ze liegt zwischen 0 und 1, die Obergrenze zwischen 1 und beliebig vielen. Um beidesnoch einmal zu differenzieren, verwenden einige Autoren auch noch den Begriff der Kon-ditionalität. Dieser spezifiziert die Untergrenze genauer. Ein konditionaler Beziehungstypbedeutet, daß es Objekte geben kann, die keine Beziehung zur zweiten Entitätsmengehaben. Wenn es nicht explizit notwendig ist, so wird unter der Kardinalität auch die Kon-ditionalität verstanden. Beide Begriffe, Kardinalität und Konditionalität, werden häufig ineinem Begriff Komplexität zusammengefaßt.

themaliest

professoren themenlesen

Entity EntityRelationship

Entity-Set Relationship-Set Entity-Set

professor

Bild 1.3-7: Konzept des ERM

RS-Name

m m

Beziehungstyp (Komplexität = Kardinalität + Konditionalität)

Entity-Set-Name

Entity-Set-Name

Bild 1.3-8: Symbole des ERD

Page 33: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-27

Ein ERD ist ein ungerichteter Graphen mit Gewichten an den Verbindungslinien.

Das erste praktische Problem stellt sich schon bei der Angabe der Komplexität. Wie kön-nen wir sie feststellen, und wo schreiben wir ihn dann hin?

Die Festlegung der Komplexität ist für den Anfänger oft nicht einfach. Umgekehrt beein-flußt sie das Gesamtsystem so nachträglich, daß eine spätere Korrektur nur mit erhebli-chem Aufwand möglich ist.

Grundsätzlich leiten wir die Komplexität aus einer Subjekt-Objekt Betrachtung ab. Dazudurchlaufen wir geistig alle Entitäten der Subjektmenge und notieren, ob die einzelne En-tität 0, 1 oder m Partner im Sinne der untersuchten Beziehung in der zweiten Enti-tätsmenge hat. So können wir Unter- und Obergrenze feststellen und in das Diagrammeinzeichnen.

Wichtig ist es, diese Frage zeitlos zu stellen. Der Anfänger argumentiert, daß ein Profes-sor zu einem Zeitpunkt immer nur ein Thema lesen (oder etwa nicht?) kann. Insgesamtwird er aber in einem Semester (oder in seinem ganzen Leben usw.) mehrere Themenlesen, die in diesem Zusammenhang wesentlich sind. Im Verhältnis zu den Themen han-delt es sich um einen :m Beziehungstyp (beachten Sie bitte, daß nur eine Richtung desBeziehungstyps festgelegt wird). Stellen wir uns dagegen die Frage, welche Beziehung zueinem Stundenplan, d. h. z. B. der 3. Lehreinheit am Mittwoch, den 4.5.1996, besteht, sokann dies nur eine :0 oder :1 Beziehung sein, je nachdem ob der Professor dannlehrt oder nicht.

Wird ein Professor berufen, so beginnt er vielleicht nicht gleich mit seinen Vorlesungen.Es soll Hochschulen geben, die einem Professor einige Monate zur Vorbereitung einesThemas einräumen. Somit gibt es einen gewissen Zeitraum, in dem ein Professor keineBeziehungen zum Entitätstyp themen besitzt. Dies ist eine konditionale Beziehung, diewir mit einem c versehen. Insgesamt ergeben sich dadurch 16 verschiedene Möglich-keiten, die aber teilweise symmetrisch zueinander sind.

Die Komplexität (Kardinalität und Konditionalität) wird folgendermaßen dargestellt:

1 genau 1, d. h. immer 1c 0 oder 1m 1 oder mehrere, d. h. immer mindestens 1mc keinen, 1 oder mehrere

Es ist ganz interessant, die Kombinationsmöglichkeiten einmal mit dem Funktionsbegriffzu vergleichen, den wir alle in der Schule kennengelernt haben:

1:1 bijektive funktionale Beziehung (umkehrbar eindeutig)1:m funktionale Beziehungm:m nichtfunktionale Beziehung

Alle konditionalen Beziehungen sind vom mathematischen Standpunkt aus nichtfunktio-nal. Ein x-Wert ohne y-Wert gehört nicht zum Definitionsbereich einer Funktion.

Page 34: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-28 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Um trotzdem die gewohnte funktionale Abhängigkeit beibehalten zu können, spricht manin der Datenbanktheorie trotzdem von funktionaler Abhängigkeit. Die Mußbeziehung wirddann als voll funktional bezeichnet.

Es stellt sich aber weiterhin die Frage

Schreiben wir die Komplexität an die nahe oder ferne Seite des Beziehungstyps?

Ist der nebenstehendeBeziehungstyp nun ein1:m oder ein m:1 Bezie-hungstyp (Bild 1.3-9)?

Wir überlegen

• ein Student gehört ge-nau zu einer Klasse

• einer Klasse gehörenmehrere Studenten an

oder auch

• mehrere Studenten gehören zu einer Klasse• in den Klassen ist ein Student in genau einer Klasse.

Aus der Sicht der Studenten (als Subjekt) handelt es sich um eine 1:m Beziehung, ausder Sicht der Klasse um eine m:1 Beziehung. Wir könnten in Bild 1.3-9 die Beschriftungwie in a) durchführen oder wie in b) genau herumdrehen. Es handelt sich um eine Festle-gung, die wir frei wählen können. Die Variante b) (ferne Beschriftung) hat den Vorteil, daßsie unserem Sprachgebrauch näher kommt, indem wir von links nach rechts lesen „EinStudent (also eine Entität aus dem Entitätstyp student) gehoert_zu 1 Klasse (einerEntität aus dem Entitätstyp klasse)“. Diese Darstellung ist daher auch für einen Unge-übten lesbar. Wir finden aber sowohl in der Literatur wie auch bei den Werkzeugen genaudie umgekehrte Beschriftung a).

Die Variante c) benutzt zwei Bezeichner für jede Richtung. Die Komplexität wird vorteilhaftzum Bezeichner hinzugefügt. Dafür ist die Bezeichnung nahe zum Entitätstyp gestellt, derals Subjekt dient. Die Komplexität wird entweder hinter oder unter den Beziehungsbe-zeichner eingetragen. Diese Bezeichnung wird im folgenden weiter verwendet.

Jeder Entitätstyp hat Attribute, deren Werte aus der Wertemenge (Value Set VS) stam-men. Die Attributnamen hängen wir an eine Entitätsmenge an und beschreiben die Wer-temengen in Kreisen oder Ovalen (Bild 1.3-10). Ist eine Wertemenge durch ein anderesAttribut erklärt, so schreiben wir dessen Name in das Oval. Diese Fälle treten bei densog. Verbindungsschlüsseln (Fremdschlüsseln = foreign keys) auf. Ein Eintragksprecher besitzt als Wertemenge die Studentennummer snr. Diese Beziehung istaber in der Abbildung noch nicht eingetragen, da sie im Grunde nicht zum ERM gehört. ImERM legen wir nur die Attribute der einzelnen Entitätstypen fest. Wie die Beziehungsty-pen zwischen den Entitätstypen realisiert werden, hängt von der weiteren Vorgehens-

1 mstudent klassegehoert_

zu

m 1student klassegehoert_

zu

a)

b)

1

besteht_ausstudent klasse

geht_inc)

m

Bild 1.3-9: Beschriftungsprobleme

Page 35: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-29

weise ab. Beim Übergang vom ERM zum Relationenmodell werden weitere Attributedefiniert, um die Beziehungen herzustelle (Näheres folgt im nächsten Kapitel).

Auch wenn wir in die Ovale Formatierungsanweisungen hineinschreiben, so handelt essich doch um Angaben zur Wertemenge. Die Angabe N 3;0 bedeutet gleichzeitig denWertebereich 000...999 (oder vielleicht doch ±99). Eine Festlegung 1...100 wür-de den Bereich noch einmal genauer festlegen (wie bei sgeschl).

Chen hat als erste Verbesserung neben diesen regulären ES und RSsog. schwache ES bzw. RS (Weak Entity Set wES) eingeführt, die vonder Wertebelegung einer anderen Entitätsmenge abhängt (Existenz-abhängigkeit). So hat ein Student mit einem Hauptwohnsitz mögli-cherweise Nebenwohnsitze. Diese existieren aber nur, wenn er be-reits einen Hauptwohnsitz hat. Ein Beziehungstyp auf eine wES wirdanalog dazu schwacher Beziehungstyp (Weak Relationship Set wRS)genannt. Diese ES wird im ESD mit einem doppelten Rahmen darge-stellt (Bild 1.3-11). Die schwache Entitätsmenge wird mit ihrer Bezie-hung an die Entitätsmenge angehängt, von der sie abhängt.

Die Darstellung zweier Entitätstypen mit einem Beziehungstyp ergibteine Fülle von Informationen im Diagramm, was bei umfänglichemDatenbestand schnell unübersichtlich wird (Bild 1.3-12). Dieses Bei-spiel enthält, wie Sie sofort erkannt haben, keine Angaben zu denWertbereichen. Trotzdem ist es bereits übervoll. Das ERD hat den Nachteil, daß es un-strukturiert ist, also z. B. keine Hierarchie besitzt. Wir müssen hier also zu einer etwasübersichtlicher Darstellung übergehen. Zu diesem Zweck klassifizieren wir noch einmalunsere Anforderungen und schränken sie dabei entsprechend ein.

student klasse

snr

sname

sgeschl

sgeb svord

knr kname

kanzahl

gseit

gehoertmc

N 6;0

D

C 30

L

"M","W"

N numerisch (Ganzzahl, Festpunktzahl mit Angabe der Gesamtlänge und derNachkommastellenD DatumC Zeichen (Character)L Logisch

D N 4;0 C 20

N 3;0

z. B. 6;2 heißt insgesamt 6 Stellen, davon ein Komma und zweiNachkommastellen)

zu

c

Bild 1.3-10: Beispiel eines ER-Diagramms

w2sitz

student

sort

wohntauch

C 20

Bild 1.3-11: WeakEntity

Page 36: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-30 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Ein erster Schritt besteht darin, die Attribute wegzulassen, bzw. in getrennten Tabellen fürjeden Entitätstyp zu führen. Im zweiten Schritt verzichten wir auf die Raute und stellen dieBeziehungstypen durch Pfeile mit unterschiedlichen Spitzen dar usw.

Sehen wir uns das Beispiel noch einmal etwas genauer an. Chen führt Entitäten bzw. En-titätsmengen als allgemeine Objekte ein, die wir wohldefiniert identifizieren können.Schwache Entitäten sind solche, die in ihrer Existenz von anderen Entitäten abhängen. ImBeispiel existiert die Unterstellung nur, wenn auch der Mitarbeiter existiert. Die Unterstel-lung muß gelöscht werden, wenn der Mitarbeiter gelöscht wird usw. Damit haben wir einegroße Ähnlichkeit zu den konditionalen Beziehungen.

Bei den Eigenschaften (Attributen) finden wir einfache und zusammengesetzte. EinigeEigenschaften bilden den Primärschlüssel. Chen unterscheidet noch Attribute nach ein-fach bzw. mehrwertig, mit unbekanntem Wert und abgeleitet (z. B. Gesamtmenge derTeile als Summe aller Einzelmengen) oder originär. Hierzu sind im Diagramm keine Bei-spiele zu finden.

Die Beziehung im ERD ist eine Verallgemeinerung der konkreten Beziehungen einer En-tität in der einen Entitätsmenge zu Entitäten der anderen Entitätsmengen auf alle Entitä-ten. In einem ERD nach Chen sind also auch n-stellige Beziehungen erlaubt, wie es dasBeispiel lieteipro demonstriert. Diese Relation hat drei Beziehungspartnerlieferant, teil und projekt. Diese Beziehung ist vom Grad 3 (nicht zu verwech-seln mit der Anzahl der Attribute, dem Grad einer Relation 1. Ordnung).

Sind in einem gegebenem Beziehungstyp R alle Instanzen eines beteiligten Beziehungs-partner E wenigstens in einer Instanz von R (d. h. einer konkreten Beziehung) vorhan-den, so nennen wir die Beziehung total, andernfalls partiell. Dieses Eigenschaften werdenin den weiterentwickelten ERDs mit den bereits erwähnten konditionalen Beziehungenbeschrieben. Chen hat die Eigenschaft „total“ durch zwei Linien dargestellt.

Bei der Relationship teile_struktur sind die beiden Linien mit sog. Rollennamenergänzt worden. Die Beziehung führt auf denselben Entitätstyp zurück. Es handelt sichhier um eine Beziehungsrekursion (recursive relationship).

Die weiteren Verbesserungen des ursprünglichen ERD beziehen sich weitgehend auf die

teil

lieferant

projektmitarbeiter

abteilung

unterstellung

mnr

mname

mgehalt

mvornmtitel mnachn

gehoert_zu

haengt_ab

arbeitet_an

leitet

lieteipro lietei

teile_

struktur

1

1

m

m m

mm

1

m

m

m

m

m mbesteht_aus ist_in

menge

menge

lnr lname lplz lort

total

rekursiv

Bild 1.3-12: Beispiel eines ERD

Page 37: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-31

Die Modifikationen in denDarstellungen sind vielfältigund gehen nahtlos in dasRDM über, indem z. B. die Artder Abbildung durch Pfeile(mit hohlen oder gefülltenSpitzen) dargestellt wirdund/oder so auf die Rauteverzichtet wird (sie bietet so-wieso relativ wenig Platz fürTexte), wobei der RS-Namedann an der Kante steht (Bild 1.3-13). Beide Diagrammtypen sollten aber nicht verwech-selt werden, da einige Unterschiede bestehen.

*Vorsicht: Wir werden noch sehen, daß es im RDM keine Beziehungstypen mit Dop-pelpfeilen an beiden Enden gibt. Benutzen Sie diese also ausschließlich imERM!

Wieder andere Darstellungen ver-suchen einerseits, die m:m Rela-tionen gleich in 1:m und m:1 Re-lationen aufzulösen und anderer-seits, aktive und passive Bezie-hungstypen einzuführen. Diesedoppelten Bezeichnungen sindsehr hilfreich in der Diskussion mit der Fachabteilung (Bild 1.3-14). „Ein Studentgehoert_zu einer Klasse. Eine Klasse besteht_aus mehreren Studenten.“

Andere Varianten zielen darauf ab, die pro-blematische Pfeildarstellung der Abbildungsty-pen zu verbessern, indem diese genau entge-gengesetzt angebracht werden (Bild 1.3-15).Hier ist die Art der Beziehung direkt der Entitätsmenge zugeordnet, so daß wir nicht dielangen Verbindungslinien verfolgen müssen, um die Art festzustellen (Krähenfußnotation).Statt 1 bzw. 2 Pfeilen werden dann häufig 0 bzw. 1 Pfeil benutzt.

Auch die Abbildungsarten selbst können nochverfeinert werden. Ähnlich wie bei der Diskussi-on einer mathematischen Funktion kann sich dieFrage erheben, ob z. B. eine 1:1 Relation für alleElemente gilt. In diesem Fall müßten beide En-titätsmengen gleich mächtig sein. Gibt es nichtden Fall der 0/1-1 Relation (konditionale Beziehung)?

In unserem Hochschulbeispiel hat jede Klasse einen Klassensprecher, aber nicht jederStudent ist ein solcher. Sollte dieser Zusammenhang, der ja aus der Sichtweise der bei-den beteiligten Entitätstypen durchaus unterschiedlich sein kann, nicht auch dargestellt

RS-NameEntity-Set-Name m:m

m:1

1:m

1:1

Entity-Set-Name

c:c

Bild 1.3-13: Modifiziertes ERD

1student klasse

m

gehoert_zu

besteht_aus

Bild 1.3-14: ERD mit beidseitiger Beziehungsangabe

Entity-Set-Name

RS-Name Entity-Set-Name

Bild 1.3-15: Krähenfußvariante der ERD

student klasse

gehoert_zu

Bild 1.3-16: Konditionale Beziehungen

Page 38: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-32 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

werden? Dies geschieht entweder durch zusätzliche Bezeichner wie mc (multiple condi-tional) oder kleine senkrechte Striche an der Verbindungslinie (Bild 1.3-16).

Um die Verwirrung zu vergrößern, benutzen einige Tools den senkrechten Strich als Muß-Aussage, einen kleinen Kreis dagegen als Kann-Aussage (Informix). Wiederum eine Un-tervariante besteht darin, den Pfeil offen und geschlossen (schwarz gefüllt) zu zeichnen,um die Konditionalität darzustellen.

Eine dritte Variante schiebt nun die Darstellung der Beziehungsart zusammen und reali-siert die konditionalen Beziehungen durch eine hohle Pfeilspitze, während die nicht kon-ditionalen Beziehungen durch gefüllte Pfeilspitzen dargestellt werden.

Da ein Student erfaßt wird,ohne daß er sofort einerKlasse zugeordnet wird, undeine Klasse eingerichtet wird,ohne daß sie sofort Studen-ten enthält, handelt es sich genau genommen um eine mc:c Beziehung. Wir lesen

„Ein Student gehört möglicherweise genau einer Klasse an.“„Eine Klasse hat keinen, einen oder mehrerer Studenten.“

Inzwischen werden die ERD in einer Vielzahl von Werkzeugen eingesetzt. Dies führt da-zu, die Beschreibung noch präziser zu gestalten und gleichzeitig überprüfbar zu machen.Grundlegender Überlegungen haben zum folgenden als ERM' bezeichnete Datenmodellgeführt, das während der Züricher Lidas-Entwicklung (Lilith DAta base System) entstand.Hierbei werden schon Verfahren zur Realisation der verschiedenen Beziehungstypenvorgegeben. Dieses System zeigt uns bereits den Übergang vom ERM zum RDM.

1. Hierarchische Klassifizierung der BeziehungstypenWir hatten schon die Beziehungstypen klassifiziert, wobei wir auch die mögliche Be-ziehung eingeführt haben. Eine zweistellige Relation können wir nun als Abbildung ei-ner Menge A in eine zweite Menge X interpretieren. Stellen wir uns dabei nur aufden Standpunkt der Menge A, so führen wir eine Hierarchie ein, weil X dann in einerder folgenden Formen von A abhängig sein kann

Typ 1Jedem Element von A ist genau 1 Element von X zugeordnet. Das Umgekehrte folgtdaraus jedoch nicht. Es können also mehrere Elemente aus A dem gleichen Elementaus X zugeordnet sein.

Typ c (conditional)Jedem Element von A ist höchstens 1 Element von X zugeordnet, d. h. keines odereines.

Typ m (multiple)Jedem Element von A ist mindestens 1 Element von X zugeordnet, d. h. eines odermehrere.

student klasse

gehoert_zu

Bild 1.3-17: Variante mit zentraler Symbolik

Page 39: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-33

Type mc (multiple conditional)Jedem Element von A ist kein oder mindestens 1 Element von X zugeordnet.

Die zwischen zwei Mengen möglichen Bezie-hungsarten sind in der nebenstehenden Tabelledargestellt. Hierbei müssen wir beachten, daß inder Tabelle beide Mengen berücksichtigt sind.

Insgesamt gibt es 16 Fälle, wovon 8 Fälle (dickumrahmt) die Menge der hierarchischen Beziehungstypen bilden, also die Beziehun-gen aus der Sicht der Menge A als Subjekt beschreiben. 4 Beziehungen (doppelt um-rahmt) umfassen die beidseitig multiplen Beziehungen. Die restlichen 4 Beziehungensind direkte Beziehungen zwischen je zwei Entitäten, bei denen eigentlich nur die Kon-ditionalität interessant ist. Die 1:1 Beziehung ist ja durch die Bildung des Entitätstypsselbst gegeben. Alle Attribute einer (richtig entworfenen) Entität stehen in dieser Be-ziehung, d. h. alle Attribute werden gleich in einem Entitätstyp zusammengefaßt.

Die Matrix ist symmetrisch. Aus einer 1:m Beziehung wird eine m:1 Beziehung, wennwir das Diagramm einfach umgekehrt zeichnen. Da die Reihenfolge der Entitätstypenzufällig gewählt werden kann, muß die Matrix entsprechend symmetrisch sein.

Der hierarchische Beziehungstyp hilft uns, Konsistenzbedingungen zu berücksichtigen.Dabei stellen wir uns logisch auf eine Entitätsmenge und definieren, welchen Bezie-hungstyp sie zu den anderen Entitätsmengen hat. Beispiel: Ein Student geht in höch-stens eine Klasse, d. h. es ist nicht von Anfang an festgelegt, in welche. Eine Klassehat keinen oder mindestens einen Studenten, d. h. kann auch mehrere Studenten ent-halten.

2. Berücksichtigung der SchlüsselattributeA und X seien Entitätsty-pen mit den Schlüsseln aund x und weiteren Nicht-schlüsselattributen. Dannwird die zwischen A und Xbestehende Beziehungs-menge in Abhängigkeit vomBeziehungstyp so model-liert, daß zwei Entitätstypen entstehen, von denen mindestens einer um das Schlüs-selattribut (ggf. Attributkombination) des anderen erweitert ist, d. h. ausA(a,b,....) wird A(a,x,b,...) usw. In diesem Fall können wir im ERD' aufdie Raute als Symbol für die Beziehungstypen verzichten (Bild 1.3-18).

1 c m mc1 1:1 1:c 1:m 1:mcc c:1 c:c c:m c:mcm m:1 m:c m:m m:mcmc mc:1 mc:c mc:m mc:mc

A1 1

X

A1

Xm

A(a,x,...)

X(x,a,...)

A(a,x,...)

X(x,......)

Bild 1.3-18: Darstellung der 1:? Beziehungen im LilithSystem

Page 40: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-34 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

3. Multiple BeziehungenNatürlich müssen wir auch die multi-plen Beziehungen (doppelt umrahmt)im ERD' darstellen können. Hierzuführen wir einen neuen EntitätstypAX ein, der die m:m Beziehung ineine m:1 und eine 1:m-Beziehungauflöst. Somit existieren in unserenDiagrammen keine m:m Beziehun-gen mehr (Bild 1.3-19).

Eventuell vorhandene Attribute desBeziehungstyps werden dabei zu At-tributen des neuen Entitätstyps

Damit gibt es nur noch Entitätstypen undkeine Beziehungstypen mehr in unserenDiagrammen. Die Kanten der Graphen können wir natürlich wieder beschriften, um so denBeziehungstyp in Form eines Rollennamens einzuführen. Dies ist besonders dann hilf-reich, wenn es mehrere Beziehungen zwischen zwei Entitätstypen gibt (Beispiel:student<<->klasse).

Eine weitere Variante, die man häufig in der Literatur bzw. in Werkzeugen findet, wird alsSERM (Strukturiertes ERM) bezeichnet, das auf [Sinz88] zurückgeht. Diese versucht dieKomplexität auf eine eindeutige Art und Weise darzustellen.

Definition 1-5: Komplexität

Die Komplexität comp(E,B) eines Entitätstyps E bezüglich seines Beziehungstyps Bgibt an, wie viele Beziehungen b des Beziehungstyps B mit einer Entität e des Enti-tätstyps E minimal und maximal in Beziehung stehen.

Die Komplexität wird für jeden Entitätstyp bezüglich aller seiner Beziehungstypen be-stimmt. Diese doppelte Verwendung des Begriffs Beziehung ist auf den ersten Blick etwashölzern. Sie entspricht aber der Mengeneigenschaft der Entitätsmenge E und der Bezie-hungsmenge B. Beide Mengen sind zwar nicht unabhängig voneinander, da z. B. Bkeine Beziehungen enthalten kann (bei der Realisation sollte), die sich auf eine Entität ebezieht, die es in E nicht gibt. Trotzdem können wir wiederum einen Beziehungstyp fürdiese beiden Mengen bestimmen.

Die Grundtypen werden in nebenstehender Notation in der Form(min,max) dargestellt. Da ein Beziehungstyp immer (mindestens)zwei Entitätstypen verknüpft, ergeben sich die bekannten 16 Fälle:

A X A(a,...)

X(x,...)

m m

AX(a,x)

A X A(a,...)

X(x,...)

m m

AX(a,x,p,q)

p q

m m

Bild 1.3-19: Auflösung von m:m Beziehungenim Lilith System

SERM bisher(0,1) c(0,*) cm(1,1) 1(1,*) m

Page 41: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-35

Diese Darstellung stellt also noch keine be-sondere Erweiterung unserer bisherigenNotation dar. Um das ERM weiter zu struktu-rieren wird im SERM ein Entitäts-Bezie-hungs-Typ (Entity-Relationship-Type = ERT)eingeführt, der zusätzlich neben die bisherverwendeten Entitätstypen (ET) und Bezie-hungstypen (Relationship-Type RT) tritt.

Ein ERT ist von je einer Entität all der Enti-tätstypen abhängig, von denen eine Kantezum ERT (von links nach rechts) hinführt.Somit ist der ERT eine Vereinigung eines ETmit denjenigen RT, die mit ihm selbst in einer(1,1) Beziehung stehen (Bild 1.3-20).

Eine Existenzabhängigkeit zwischen zwei Enti-tätstypen E1 und E2 läßt sich sowohl einstufigwie auch mehrstufig darstellen. In diesem Fall kanneine Entität e2 aus der Entitätsmenge E2 nurdann vorkommen, wenn eine passende Entität e1aus E1 existiert. Der Entitätstyp E2 ist damit ab-hängig von der Existenz von E1. Hierzu werden imSERM einfache (einseitige Abhängigkeit) und dop-pelte Kanten benutzt (Bild 1.3-21) (wechselseitigeAbhängigkeit).

Wenn wir beim Entwurf darauf achten, daßzyklische Abhängigkeiten vermieden werden,so können die Primärschlüssel der Entitätsty-pen zur Konstruktion des Relationalen Daten-bankmodells dienen. Hierzu werden die Pri-märschlüssel der beteiligten E- bzw. ER-Typen zu Fremdschlüsseln in den ange-schlossenen Beziehungstypen.

1.3.3.6 Besondere Beziehungstypen

Zum ursprünglichen ERM sind zusätzliche Beziehungstypen hinzugekommen.

Assoziativer Beziehungstyp

Wir hatten den assoziativen Beziehungstyp schon kurz erwähnt. In der Theorie zum Rela-tionalen Datenbankentwurf werden wir sehen, daß jeder Entitätstyp bereits ein Bezie-hungstyp ist, da er die Beziehungen zwischen den Attributen festlegt. Umgekehrt kann einBeziehungstyp zwischen zwei Entitätstypen selbst wiederum Attribute besitzen. Diesesind aber nur bei m:m Beziehungen sozusagen „sichtbar“, da sie bei allen anderen Be-

B(E1,E2) comp(E1,B) comp(E2,B)1:1 (1,1) (1,1)1:c (1,1) (0,1)c:1 (0,1) (1,1)c:c (0,1) (0,1)1:m (1,1) (1,*)1:mc (1,1) (0,*)c:m (0,1) (1,*)c:mc (0,1) (0,*)m:1 (1,*) (1,1)mc:1 (0,*) (1,1)m:c (1,*) (0,1)mc:c (0,*) (0,1)m:m (1,*) (1,*)mc:m (0,*) (1,*)m:mc (1,*) (0,*)mc:mc (0,*) (0,*)

E Entitätstyp

Entitäts-Bezie-hungs-Typ

BeziehungstypR

ER

Bild 1.3-20: Elemente des SERM

(1,*)-Beziehung

(0,*)-Beziehung

(0,1)-Beziehung

(1,1)-Beziehung(nur für Generalisierung)

Bild 1.3-21: Beziehungen im SERM

Page 42: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-36 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

ziehungen in eine der beiden Entitätstypen aufgeht. In diesem Fall kann man nur schwerAttribute dem Entitätstyp bzw. dem Beziehungstyp explizit zuweisen.

Sie werden gesondert dargestellt (Bild 1.3-22).Das Beispiel zeigt die typische m:m Beziehungzwischen den Aufträgen und den Artikeln. EinAuftrag enthält normalerweise mehrere Artikel,für die dann z. B. die Menge festgelegt wird.Diese Positionen auf dem Auftrag haben alsoweitere Attribute, u. a. die Mengenangabe.

Der assoziative Beziehungstyp hat damit vielmit dem RT des SERM gemeinsam. Dieserwird ja bereits mit einem Viereck wie ein ET dargestellt, wobei die zusätzlichen AttributePate für diese Darstellungsform waren.

Generalisierung (klassifizierender Beziehungstyp IS-A-Beziehungstyp)

Die Menge der Ist-Ein-Beziehungen (Rollenbeziehungen, IS-A-Beziehung) zwischen denExemplaren mehrerer Entitätstypen nennen wir einen klassifizierenden Beziehungstyp. Erwird durch Spezialisierung eines Entitätstyps bzw. durch Generalisierung einer Gruppevon Entitätstypen gebildet. Die durch Spezialisierung gefundenen Entitätstypen nennenwir auch Subentitätstypen, den durch Verallgemeinerung gebildeten Entitätstyp entspre-chend Superentitätstyp. Schließt die Zugehörigkeit einer Entität zu einem Subentitätstypdie zu einem anderen aus so sprechen wir von einer exklusiven Beziehung. Sind die Su-bentitätstypen nicht paarweise disjunkt, so sprechen wir von einem inklusiven klassifizie-renden Beziehungstyp.

*Beispiel: Die Mitarbeiter einer Firma spielen eine oder mehrere „Rollen“ in einerFirma. So gibt es in einer Fernsehanstalt Redakteure, Kameramänner,Schneider usw. Beim Entwurf muß entschieden werden, ob eine Person im-mer nur eine Rolle spielt oder ggf. mehrere Rollen spielen kann.

Beim klassifizierenden Beziehungstyp können wir noch dazu unterscheiden, ob alle Enti-täten des Superentitätstyps einer der Spezialisierungen angehören oder nicht, d. h wiederbildlich gesprochen, ob einer der Mitarbeiter unserer Fernsehanstalt keiner der genann-ten Gruppen angehört. Die Darstellung erfordert also vier Fälle:

Ist die Vereinigung aller Entitätstypendie Gesamtmenge, so spricht manvon einer IS-A-Hierarchie. Gibt esdagegen Entitäten, die zu keiner derKlassen gehören, so spricht man vonSubtypen.

Der klassifizierende Beziehungstypist der Schritt in Richtung einer Ge-neralisierung im Sinne des Objektori-entierten Entwurfs. Schauen Sienoch einmal auf das Beispiel ganz

aufträge artikelhaben

Entitätstyp Entitätstyp

positionen

Bild 1.3-22: Assoziativer Beziehungstyp

exklusive, nicht vollzähligSubtypen

exklusive, vollzähligIS-A-Beziehung

inklusive, nicht vollzählig inklusive, vollzählig

Page 43: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-37

am Anfang dieses Manuskriptes. Bei unserem Videoarchiv können wir entweder für jedenKameramann, jeden Redakteur und jeden Schneider einen eigenen Entitätstyp anlegenoder alle in einer Mitarbeiterdatei zusammenfassen. In diesem Fall spielt der Mitarbeiterdie vorgesehen Rolle. Wäre es z. B. möglich, daß ein Mitarbeiter sowohl Redakteur wieauch Kameramann (ggf. sogar Schneider) sein, dann müßten wir ihn bei getrennter Spei-cherung dreimal ablegen. Bei jeder Änderung müßte er dann in mehreren Tabellen geän-dert werden. In diesem Fall ist es sinnvoll, eine gemeinschaftliche Datei mit entsprechen-den Rollen vorzusehen. Ist also ein Mitarbeiter ein und nur ein Redakteur oder ..., dannwäre dies eine IS-A-Hierarchie. Gibt es dagegen Mitarbeiter, die eine weitere Rolle spie-len (Assistenten, Fahrer, Verwaltungspersonal usw.), dann handelt es sich um eine Sub-typenhierarchie.

1.3.3.7 Referentielle Integrität

Die Beziehungen zwischen den Entitäten werden über Verweise dargestellt. Für dieseVerweise müssen wir die sog. referentielle Integrität herstellen, die wir folgendermaßendefinieren

Definition 1-6: Referentielle Integrität

Zwischen zwei Entitäten herrscht referentielle Integrität, wenn jeder Verweis im einen En-titätstyp einen passenden Partner im anderen Entitätstyp findet.

Im unkonditionalen Fall muß ein Verweis vorhanden sein und einen Partner finden. Imkonditionalen Fall ist auch der Wert Null (undefiniert, also nicht die Ziffer 0) erlaubt.Dies besagt, daß kein Verweis existiert.

In Access wird die führende Tabelle als Mastertabelle, die geführte Tabelle als Detailta-belle bezeichnet. In der Literatur finden wir statt Mastertabelle auch den Begriff Kernta-belle. Dort ist der zugrundeliegende 1:m Beziehungstyp definiert als

Definition 1-7: 1:m Beziehungstyp

Der Primärschlüsselwert jedes Datensatzes in der Mastertabelle (Entität in einem Enti-tätstyp) entspricht dem Wert des jeweiligen Feldes (bzw. mehrerer Felder, wenn diesegeteilt sind) in mehreren Datensätzen (oder auch keinem) in der Detailtabelle.

Der Verbindungsschlüsselwert jedes Datensatzes in der Detailtabelle ist „Null“ (ein Null-wert, es sind also keine Daten vorhanden), oder entspricht dem Wert des jeweiligen Da-tenfeldes (bzw. mehrerer Felder, wenn diese geteilt sind) in einem einzigen Datensatz derMastertabelle.

ä Beispiel:Unsere klasse ist die Mastertabelle zur Detailtabelle student. Wechseln wir dieKlasse, so ergibt sich eine neue Liste aus student, die mit der neuen Klasse verknüpftsind. Damit dieses so funktioniert, müssen wir ein Feld in der Detailtabelle studenteinführen, das die Klassennummer enthält. Sehen wir uns die Detailtabelle an, so tauchtdie Klassennummer bei mehreren Studenten auf. Vom Studenten aus gesehen enthält dieMastertabelle klasse die Klassennummer genau einmal. n

Page 44: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-38 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Betrachten wir die Definition genau, so handelt es sich in beiden Fällen um die (eigentlichvon uns gewünschte) konditionale Verknüpfung.

Verletzungen der referentiellen Integrität können in folgenden Fällen auftreten:

1. Hinzufügen eines Datensatzes in einer Detailtabelle mit einemVerweis auf die Mastertabelle für den dort kein Datensatz vorhan-den ist. Beispiel: Zuordnung eines Studenten zu einer nicht vor-handenen Klasse.

2. Ändern von Schlüsseln in der Mastertabelle, die in einer Detailta-

belle verwaiste Sätze zur Folge hätten. Beispiel: Umnumeriereneiner Klasse, für die bereits Studenten eingeschrieben sind.

3. Löschen von Datensätzen in der Mastertabelle, die in einer De-

tailtabelle verwaiste Sätze zur Folge hätten. Beispiel: Auflösen einer Klasse, für die be-reits Studenten eingeschrieben sind

Schauen wir uns noch den letzten Beziehungstyp an:

Definition 1-8: m:m Beziehungstyp

In einem m:m Beziehungstyp zweier Entitätstypen stehen die Entitäten des einen Enti-tätstyps mit beliebig vielen Entitäten des zweiten Entitätstyps in Beziehung (und umge-kehrt).

1.3.3.8 Änderungs-, Löschweitergabe

Als Steigerung der referentiellen Integrität können wir die Änderungs- und Löschweiter-gabe betrachten.

Die Änderungsweitergabe (cascade update) als eine zusätzliche Option der referentiellenIntegrität sorgt dafür, daß bei einer Änderung des Primärschlüssels der Mastertabelleauch die Verbindungsschlüssel in der Detailtabelle geändert werden, so daß die beste-henden Verknüpfungen erhalten bleiben. Diese Weitergabe ist natürlich nur dann not-wendig, wenn der Primärschlüssel der Mastertabelle änderbar ist.

Die Löschweitergabe (cascade delete) als eine zusätzliche Option der referentielle Inte-grität sorgt dafür, daß alle verknüpften Datensätze der Detailtabelle gelöscht werden,wenn der zugehörige Datensatz in der Mastertabelle gelöscht wird.

1.3.4 Werkzeugunterstützung

In vielen SEU (Software-Entwicklungs-Umgebungen) bzw. in CASE-Tools finden wirKomponenten zur Darstellung von ER-Diagrammen oder eER-Diagramme. Die eERD(erweiterten Entity-Relationship-Diagramme) enthalten weitere Beziehungstypen, auf diehier nicht eingegangen werden soll.

Mastertabelle

Detailtabelle

c

mc

Bild 1.3-23: Refe-rentielle Integrität

Page 45: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-39

Die Werkzeuge unterscheiden sich dabei in der formalen Strenge und im Übergang zuden nachfolgenden Phasen, d. h. inwieweit sie z. B. automatisch aus den ERD Relatio-nenmodelle usw. generieren.

Ein amerikanisches Sprichwort drückt die Verwendung von Werkzeugen sehr drastischaus:

A fool with a tool remains a fool.

Der Einsatz von Werkzeugen kann helfen und unterstützen. Es schützt vor groben Feh-lern. Es automatisiert aber den Entwurf nicht vollständig.

Als erstes soll das Werkzeug ARIS (Architektur integrierter Informationssystem“ betrach-tet werden. Dieses bietet eine Vielzahl von Verknüpfungsmöglichkeiten, ist aber bei derGestaltung während der Eingabe nicht sehr formal. Dies bedeutet, daß z. B. Entitätstypenangelegt werden können, ohne einen Namen usw. zu vergeben. Auch wenn es teilweiseeine Frage des Geschmacks ist, so ist doch eine etwas strengere Benutzerführung vonVorteil. Unser Fachhochschulbeispiel sieht wie in Bild 1.3-24 aus.

Z. B. können wir die Komplexität durch einfaches Eintippen des Textes mc im FeldKomplexität oder durch Eingabe von Werten in den beiden Feldern nMax und nMinfestlegen. Ersteres wird zumindest in der Eingabe in keiner Weise überprüft.

Die Attribute legen wir in einem zweiten Diagramm, eERM-Attributszuordnungsdiagramm,getrennt fest (Bild 1.3-25), damit das originale Diagramm nicht überladen wird. Hier findenwir neben dem Primärschlüssel normale Attribute sowie die Fremdschlüssel.

Außer einer Reihe von Analysefunktionen bestehen keine weitere Möglichkeiten, die ent-worfenen Diagramme zu verwenden.

Das zweite System ist CASE/4/0, das weniger Beschreibungsmöglichkeiten zur Verfügungstellt, dafür aber die Analyse und den Übergang zur späteren Phasen bis hin zur Generie-rung von Programmcode in den Vordergrund stellt.

Fehler! Kein gültiger Dateiname.

Bild 1.3-24: ERD in ARIS

Fehler! Kein gültiger Dateiname.

Bild 1.3-25: ERD-Attribute

Page 46: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-40 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Auch hier wird zuerst ein ERD erstellt(Bild 1.3-26), das aber insbesondere beiden m:m Beziehungen einen weiterenNamen zuläßt, um hier einen direktenÜbergang zum Relationenmodell zu er-möglichen. Weiterhin sind leichte Unter-schiede in den Benennungen zu finden,z. B. CN statt des im Manuskript ver-wendeten mc.

Aus diesem Modell wird dann automa-tisch ein Relationenmodell erzeugt (Bild1.3-27), das ggf. nachbearbeitet werdenkann.

Bei der c:c Beziehung tut sichdas System etwas schwer. Eslegt automatisch eine Zwi-schendatei ein, obwohl hier ei-ne Ergänzung der Schlüssel inden beteiligten Entitätstypeneinfacher wäre. Hier müssen wirggf. noch eingreifen. Bei denm:m Beziehungen werden aberautomatisch Verbindungstabel-len angelegt, die als Attribute(und in Kombination den eige-nen Schlüssel) die Primär-schlüssel der beiden verknüpf-ten Entitätstypen enthalten.

Ändern wir die Klassensprecherbeziehung in eine 1:c Beziehung um, dann generiertCASE/4/0 automatisch einen Fremdschlüssel im Entitätstyp student. Diese Beziehungist also keine Allerweltsbeziehung, wie wir auch in unseren Experimenten im MS Accessbemerken werden.

Aus dem Relationenmodell lassen sich dann Anweisungen für den gewünschten Compilergenerieren.

Eine zusätzliche Funktion, die einige der Werkzeuge bieten, ist die Zusammenfassungmehrerer Entitäts- und Beziehungstypen zu einem Aggregat, das ausgelagert wird, um dieÜbersichtlichkeit des aktuellen Diagramms zu erhöhen. Solche Teil-ERM werden dabeidurch eine Ellipse dargestellt. Auf dieser Ellipse enden alle Kanten, die ursprünglich zuden Entitätstypen innerhalb der Ellipse gingen. Umgekehrt werden in der Verfeinerungder Ellipse alle Entitäten der Container-ERM als sog. Randobjekte optisch anders darge-stellt.

Ein Werkzeug, das die Darstellung der SERM unterstützt ist z. B. Innovator.

Bild 1.3-26: ERD in CASE/4/0

Bild 1.3-27: Relationenmodell

Page 47: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-41

1.3.5 Konstruktion neuer semantischer Einheiten

Wenden wir uns einmal der Frage zu, wie wir zu den semantischen Einheiten (sprich En-titätstypen) gelangen.

Im wesentliche stehen uns Möglichkeiten offen

Klassifizierung Hier hilft nur der gesunde Menschenverstand. Die Objekte müssenuntersucht werden. Alle Objekte mit den gleichen Eigenschaften wer-den zu einer Klasse, d. h. einem Entitätstyp zusammengefaßt.

GeneralisierungSpezialisierung

Schon die Klassenbildung zeigt uns, daß wir uns in Richtung der OOP(objektorientierten Programmierung) bewegen, obwohl wir darüberstreiten können, was die Henne und was das Ei ist.Finden wir Entitäten mit vielen gleichen und einigen unterschiedlichenAttributen, dann bietet es sich an, eine Klassenhierarchie anzulegen.

Beispiele: Alle Mitarbeiter haben einen Namen, ein Geburtsdatumusw., egal ob sie Angestellte oder Arbeiter sind.Alle Schiffe haben eine Verdrängung, eine Länge usw. egal ob esTanker, Containerschiffe oder Fischtrawler sind.Alle Eisenbahnwagons haben ein Gewicht, eine LüP (Länge überPuffer) usw., egal ob es Abteilwagen, Speisewagen oder Güterwagensind. Letztere bilden wieder eine Oberklasse für Rungenwagen,Schüttgutwagen usw.

Aggregation Dies ist die Zusammenfassung von Entitätstypen und Beziehungen zueinem komplexeren Objekt.

Beispiel: Fertigteile enthalten Teile. Sie selbst werden aber in Bau-gruppen eingebaut. Diese wiederum in Gestellen usw.

Das Beispiel zeigt den Ansatz einer Rekursion, da wir Fertigteile alsTeile der Baugruppen betrachten können. Die Baugruppen bilden dieTeile der Gestelle usw.

1.3.6 Schritte zu einem vollständigen semantischen Datenmodell

Zum Abschluß wollen wir uns noch einen Vorgehensplan für die Entwicklung unseresDatenmodells zurechtlegen

1. Sammlung vorhandener Informationselemente.2. Analyse, Abgrenzung, Klassifizierung und Beschreibung der Informationselemente.3. Zusammenstellung der Entitätstypen aufgrund der Klassifizierung.4. Erkennen von Schlüsselkandidaten, Festlegung des Primärschlüssels.5. Überprüfung der Normalformkonformität der erstellten Entitätstypen, ggf. Erzeugung

neuer Entitätstypen.6. Feststellen und Beschreiben der notwendigen Beziehungstypen. Analyse der Kom-

plexität dieser Beziehungstypen.7. Aufstellen eines ersten ERM Entwurfs. Überprüfung des Entwurfs.

Page 48: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Aufbau von Datenbanken © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-42 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

8. Auflösung von m:m-Beziehungstypen. Ergänzen von Attributen zu diesen Beziehung-stypen (assoziative Beziehungstypen).

9. Überprüfen des Modells auf Normalformkonformität, d. h. Feststellung von Redun-danzen und Inkonsistenzen.

10. Überprüfung der Zuordnungen von Attributen zu Entitätstypen nach Pkt. 3.11. Zusammenstellung und Beschreibung von Eingabeplausibilitäten sowie Integritätsbe-

dingungen.12. Überprüfung des Gesamtmodells.

Dieser Vorgehensplan ist wie in der EDV üblich nicht als linearer Ablauf zu sehen. Es wirduns kaum gelingen, die Tausende von Informationselemente zusammenzustellen, ohneeine gewisse Klassifizierung vorzunehmen, d. h. Sammlung, Definition und Zuordnungvon Attributen zu Entitätstypen ist ein iterativer Prozeß.

1.4 Anhang

1.4.1 Abbildungsverzeichnis

Bild 1.1-1: Bearbeitungsfenster........................................................................................ 1-1Bild 1.2-1: Sichten .......................................................................................................... 1-11Bild 1.3-1: SPARC 3-Schichten-Modell .......................................................................... 1-15Bild 1.3-2: Zusammenhang zwischen den Schemata..................................................... 1-16Bild 1.3-3: Modellierung ................................................................................................. 1-17Bild 1.3-4: Strukturhierarchie ......................................................................................... 1-20Bild 1.3-5: Naiver Entwurf .............................................................................................. 1-23Bild 1.3-6: Stellung der ER-Schemata im Entwurfsprozeß............................................. 1-25Bild 1.3-7: Konzept des ERM ......................................................................................... 1-26Bild 1.3-8: Symbole des ERD......................................................................................... 1-26Bild 1.3-9: Beschriftungsprobleme ................................................................................. 1-28Bild 1.3-10: Beispiel eines ER-Diagramms .................................................................... 1-29Bild 1.3-11: Weak Entity................................................................................................. 1-29Bild 1.3-12: Beispiel eines ERD ..................................................................................... 1-30Bild 1.3-13: Modifiziertes ERD ....................................................................................... 1-31Bild 1.3-14: ERD mit beidseitiger Beziehungsangabe ................................................... 1-31Bild 1.3-15: Krähenfußvariante der ERD........................................................................ 1-31Bild 1.3-16: Konditionale Beziehungen .......................................................................... 1-31Bild 1.3-17: Variante mit zentraler Symbolik .................................................................. 1-32Bild 1.3-18: Darstellung der 1:? Beziehungen im Lilith System ..................................... 1-33Bild 1.3-19: Auflösung von m:m Beziehungen im Lilith System ..................................... 1-34Bild 1.3-20: Elemente des SERM................................................................................... 1-35Bild 1.3-21: Beziehungen im SERM ............................................................................... 1-35Bild 1.3-22: Assoziativer Beziehungstyp ........................................................................ 1-36Bild 1.3-23: Referentielle Integrität................................................................................. 1-38Bild 1.3-24: ERD in ARIS ............................................................................................... 1-39Bild 1.3-25: ERD-Attribute.............................................................................................. 1-39Bild 1.3-26: ERD in CASE/4/0 ........................................................................................ 1-40Bild 1.3-27: Relationenmodell ........................................................................................ 1-40

Page 49: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbank – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202 Seite: 1-43

1.4.2 Definitionsverzeichnis

Definition 1-1: Modell ....................................................................................................... 1-9Definition 1-2: Sicht.......................................................................................................... 1-9Definition 1-3: Datenbank .............................................................................................. 1-11Definition 1-4: Transaktion............................................................................................. 1-22Definition 1-5: Komplexität ............................................................................................. 1-34Definition 1-6: Referentielle Integrität ............................................................................ 1-37Definition 1-7: 1:m Relation ........................................................................................... 1-37

1.4.3 Index

Page 50: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.4 Anhang © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 44 D:\Eigene\Doku\DB\DBMS\DB01Ein\DB01Ein.doc – 97202

Page 51: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC - 14.02.99 22:36/14.02.99 22:36 Seite: 2-I

Datenbanken – Modelle

2 Datenbanken – Modelle .............................................................................................. 2-1

2.1 Relationales Datenmodell (RDM) ....................................................................... 2-1

2.1.1 Grundlagen..................................................................................................... 2-1

2.1.2 Modellierung................................................................................................. 2-11

2.1.3 Integritätsregeln ........................................................................................... 2-19

2.1.4 Werkzeugunterstützung ............................................................................... 2-19

2.1.5 Klassifizierender Beziehungstyp .................................................................. 2-22

2.1.6 Abfragen....................................................................................................... 2-23

2.1.7 Zusammenfassung ....................................................................................... 2-27

2.1.8 Normalformen............................................................................................... 2-28

2.1.8.1 1. Normalform (1NF) ............................................................................. 2-29

2.1.8.2 2. Normalform (2NF) ............................................................................. 2-35

2.1.8.3 3. Normalform (3NF) ............................................................................. 2-40

2.1.8.4 Boyce-Codd-Normalform (BCNF).......................................................... 2-43

2.1.8.5 4. Normalform (4NF) ............................................................................. 2-48

2.1.8.6 5. Normalform (5NF) ............................................................................. 2-52

2.1.9 Erzeugung der Normalformen ...................................................................... 2-57

2.1.10 Die Regeln von Codd ................................................................................. 2-59

2.1.11 Beispiel....................................................................................................... 2-60

2.2 Hierarchisches Datenmodell (HDM) ................................................................. 2-66

2.3 Netzwerkdatenmodell (NDM) ............................................................................ 2-73

2.3.1 Grundlagen................................................................................................... 2-73

2.3.2 Bewertung des NDM .................................................................................... 2-76

Page 52: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3
Page 53: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-1

2 Datenbanken – Modelle

2.1 Relationales Datenmodell (RDM)

2.1.1 Grundlagen

Im vorherigen Kapitel haben wir den Begriff Relation schon eingeführt. Eine Relation isteine relativ schwache Aussage zu einer Menge von Mengen. Andererseits hat die Veröf-fentlichung von Codd 1970 zum Durchbruch des relationalen Datenmodells geführt, sodaß wir es vor den anderen Datenmodellen besprechen wollen. 1990 faßte Codd das Er-gebnis der vielen Konferenzen und seiner eigenen Überlegungen in einer zweiten Versiondes Relationalen Modells zusammen. Nach dieser Version muß ein RDBMS (RelationalesDatenbankmanagementsystem) 333 Kriterien erfüllen. Bis heute erfüllt keines der ange-botenen System alle diese Kriterien.

Wir beginnen mit den mathematischen Grundlagen

Definition 2.1-1: MengeEine Menge M ist eine Zusammenfassung von bestimmten, wohlunterschiedenen Ob-jekten, den Elementen ai der Menge. Wir schreiben eine Menge als

M = {a1,a2,a3,...,an}

Um auszusagen, daß z. B. a2 der Menge angehört schreiben wir a2∈M.

Der Mengenbegriff enthält keinerlei Ordnungsbegriff. Ist die Menge geordnet, dannspricht man explizit von geordneten Mengen. Eine Menge sagt dagegen positiv aus, daßalle Elemente unterscheidbar sind. Es gibt also explizit keine Elementwiederholung.Übertragen auf unsere Tabellen heißt dies, daß es keine identischen Zeilen innerhalbeiner Tabelle gibt. Die Reihenfolge der Zeilen ist unwichtig, sie müssen z. B. nicht sortiertsein usw.

Der Begriff der Menge enthält somit die grundlegende Festlegung eines Primärschlüssels.Durch dieses Attribut oder diese Attributkombination sind die Elemente alle voneinanderwohlunterschieden. In diesem Zusammenhang ist der Primärschlüssel nicht minimal, d. h.wir können jede Attributkombination wählen, die die Elemente voneinander unterscheidet.

Die sog. Entitäts-Integritätsregel nimmt diese Tatsache auf, indem sie verlangt, daß Attri-bute, die Teil des Primärschlüssels niemals den Wert „Undefiniert“ (NULL) haben dürfen,da NULL nicht gleich NULL ist.

Definition 2.1-2: Kartesisches ProduktEs seien M1, M2 beliebige, nichtleere Mengen. Dann ist die Menge aller geordnetenPaare (a1,a2) mit a1∈M1, a2∈M2 das kartesische Produkt M1×M2.

Das kartesische Produkt wird daher auch geordnetes Produkt zweier Menge genannt. DieAusgangsmengen können durchaus gleich sein, so daß das kartesische Produkt einerMenge M mit sich selbst Sinn macht. (a1,a2) und (a2,a1) sind in geordneten Pro-dukten unterschiedliche Elementpaare, ausgenommen der Fall a1=a2.

Page 54: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-2 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Da wieder eine Menge entsteht, sind die Elemente des Produktes wohlunterschieden,d. h. im kartesischen Produkt treten die Kombinationen nicht zweimal auf.

Um sich einmal eine Vorstellung von der Mächtigkeit solcher kartesischen Produkte zumachen, stellen wir uns einmal eine Tabelle mit zwei Spalten vor. Die Domäne (Wertebe-reich) für die Spalten enthalte m bzw. n Elemente. Dann berechnet sich die Mächtigkeitdes Produktes nach der Formel m·n. Bei drei Spalten finden wir bereits m·n·k Ele-mente.

(a1&a2) ist analog dazu ein ungeordnetes Elementepaar. Die Menge aller voneinanderverschiedener, ungeordneter Elementpaare heißt das ungeordnete Produkt der Menge Mmit sich selbst M&M. Hier sind (a1&a2) und (a2&a1) äquivalente Symbole für dieselbeAussage. Auch hier ist a1=a2 zugelassen.

Enthält die Menge M genau k Elemente, so besteht das geordnete Produkt M×M ausk² geordneten Paaren, während das Produkt M&M aus k(k+1)/2 voneinander ver-schiedenen, ungeordneten Paaren besteht.

Wir können uns ein solches Produkt als die Menge aller Punkte in der Fläche (kartesi-sches Koordinatensystem) mit Ordinate und Abszisse vorstellen. Der Produktbegriff istauf beliebig viele Dimensionen erweiterbar. Aus dieser oft auch nur Produkt oder Men-genprodukt genannten Obermenge werden nun Teilmengen abgeleitet. So ist eine Funk-tion die Teilmenge bei der die a2 eindeutig a1 zugeordnet sind (als y=a2 hängt ein-deutig von x=a1 ab, geschrieben a2=f(a1)). Bei endlichen Mengen umfaßt das kartesi-sche Produkt sämtliche Kombinationen (ohne Wiederholung) der Elemente beider Men-gen. Die Anzahl der Elemente, genannt Kardinalität oder Mächtigkeit, ergibt sich als Pro-dukt aus der Mächtigkeit der Definitionsbereiche

card(M1×M2) = card(M1)·card(M2)

Definition 2.1-3: Relation genauer n-stellige RelationEs seien M1,M2,M3,...,Mn beliebige, nichtleere Mengen. Eine Relation R (auf M1,M2,M3,...,Mn) ist eine Teilmenge des kartesischen Produkts M1×M2×M3×...×Mn

R ⊆ M1×M2×M3×...×Mn

Die Elemente einer Relation werden Tupeln genannt. Ein Tupel t=(a1,a2,a3,...,an)mit ai∈Mi besitzt n Komponenten. n ist der Grad der Relation. Die i-te Komponen-ten von t ist a

i. Die Anzahl der Tupel in einer Relation ist deren Kardinalität (Mächtig-

keit). Diese Kardinalität sollte man nicht mit der Kardinalität des ERDs verwechseln!

Die Relation ist, wie schon gesagt, eine relativ schwache Aussage. Es gibt irgendwelchedenkbaren Kombinationen der Elemente aus den verschiedenen Mengen. Es wird z. B.nicht verlangt, daß sämtliche Elemente einer der Definitionsmengen an der Relation be-teiligt sind (wie dies für den Definitionsbereich einer Funktion gilt). Es sei aber noch ein-mal darauf hingewiesen, daß die Relation als Teilmenge wiederholungsfrei ist, d. h. auchin einer Relation gibt es einen Primärschlüssel, der die Elemente der Relation voneinan-der unterscheidet.

Page 55: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-3

Da wir bei der Normalisierung den Begriff der funktionalen Abhängigkeit brauchen, seinoch einmal die Funktion „sauber“ definiert.

Definition 2.1-4: FunktionGegeben seien zwei nichtleere Mengen X und Y. Die Relation F mit

F = {(x,y), x∈X und y∈Y}

heißt Funktion, wenn für alle x∈X gilt, aus (x,y1)∈F und (x,y2)∈F folgt y1=y2.

X ist der Definitionsbereich, Y der Wertebereich der Funktion. Nach klassischer Defini-tion muß der Definitionsbereich vollständig auf den Wertebereich abgebildet werden. Eskann aber durchaus Elemente des Wertebereiches geben, denen kein Element zugeord-nete ist. Es ist aber auch möglich, daß zwei Elemente oder mehr Elemente des Definiti-onsbereichs zugeordnet sind. Diese Funktionen sind dann nicht mehr monoton, d. h. be-sitzen mehrere lokale Extrema im Definitionsbereich.

Existiert eine solche (einseitige) Abhängigkeit zwischen Definitions- und Wertebereich, sospricht man von funktionaler Abhängigkeit der Menge Y von der Menge X und schreibt

X → Y

Bei dieser Abhängigkeit verzichtet man in der Datenbanktheorie auf die Vollständigkeit,d. h. es können im Definitionsbereich Elemente existieren, die keinen Partner haben. Exi-stieren aber keine solchen Elemente, so spricht man von voll funktionaler Abhängigkeit.Diese definiert man folgendermaßen

∀X'⊂X: ¬∃X' → Y

Für alle echten Teilmengen X' aus dem Definitionsbereich X gilt, daß es keine solcheTeilmenge existiert, von der Y funktional abhängig ist. Y ist also vom gesamten Defini-tionsbereich X und nicht nur von (einer) Teilmengen abhängig. Man schreibt

X Ã→ Y

Gilt die Eindeutigkeitsbeziehung auch umgekehrt,dann ist die Abbildung eineindeutig oder umkehr-bar eindeutig mit der Symbolik

X ↔ Y

Aufgezeichnet in einem kartesischen Koordina-tensystem ist eine Funktion über das gesamtex-Intervall definiert (Bild 2.1-1). Hat sie im Inter-vall ein Extremum, dann handelt es sich um eine„normale“ Funktion. Ist sie dagegen monoton(steigend oder fallend), so handelt es sich um

umkehrbar eindeutige(monotone) Funktion

Funktion

Bild 2.1-1: Mathematische Funktion

Page 56: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-4 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

eine umkehrbare (eineindeutige, injektive) Funktion. Jeder Wert von y hat dann genaueinen Wert von x.

Funktionale Abhängigkeit bedeutet also nicht, daß jeder y-Wert nur einmal vorkommt.

Zur Beschreibung Eigenschaften von Datenbanken haben wir oder werden wir noch fol-gende Bezeichnungen benutzen

Ai AttributW(Ai) Wertebereich (Domäne) des Attributs Aiai∈W(Ai) Wert des Attributs Ai(a1,a2,a3,...an) Tupel(A1,A2,A3,...,An) TupeltypR RelationR(A1,A2,A3,...,An) Relationstyp (Relation, basierend auf dem Tupeltyp in Klammern)ri Instanz, Entität, Element, Individuum, Ausprägung, Exemplar

Bitte beachten Sie die Sprachverwirrung, die sich durch die Literatur und auch durch die-ses Manuskript zieht. Eine Relation ist hier eine Teilmenge und keine Einzelinstanz. Sieentspricht der Entitätsmenge. Ein Tupel ist eine mit Werten versehene Instanz. Eine Re-lation sagt eigentlich nichts weiter, als daß zwei oder mehr Elemente verschiedener Defi-nitionsbereiche (ebenfalls Mengen) irgendeine Beziehung zueinander haben. Somit kön-nen wir Relationen von Relationen bilden usw. Bei den Datenbanken betrachten wir aberin bescheidener Zurückhaltung eigentlich nur binäre Relationen höherer Ordnung, d. h.wir beschränken uns auf die Beziehung zwischen zwei Entitätsmengen untereinander.Nur beim OOD (objektorientierten Design) setzen wir dreistellige Relationen ein.

Nun haben wir des öfteren schon Relationstypen eingesetzt, ohne diese eigentlich wirk-lich zu definieren. Bei den zweistelligen Relationen, die wir mit den Abbildungen zweierMengen aufeinander vergleichen können, existieren 16 Fälle, wobei die m:m Relation diegrößten DV-technischen Probleme bereitet. Bitte beachten Sie wieder, daß wir hier einezweistellige Relation 2. Ordnung (Beziehung) zwischen zwei Relationen 1. Ordnung(Entitäten) betrachten.

Page 57: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-5

Beginnen wir mit den Variationen zur 1:1 Beziehung (Bild 2.1-2). Ist jedem Element dereinen Menge (Mann) ein Element der zweiten Menge (Frau) zugeordnet, dann liegt eine1:1 Beziehung vor. Als 1:c Beziehung wollen wir diejenige bezeichnen, bei denen esMänner geben kann, die keine Frau haben, wobei dies aber nur daran liegt, das zuwenigFrauen vorhanden sind. Alle Frauen haben einen Mann. Selbstverständlich ist auch derumgekehrte Fall, nämlich c:1 möglich. Gibt es aber noch „Jungmänner“ und „Jungfrauen“,dann liegt der allgemeine Fall c:c vor.

In der Abbildung sind auch die mathematischen Begriffe „Funktion“ und die beiden daten-banktechnischen Begriffe „funktional“ und „voll funktional“ eingefügt, die später noch defi-niert werden. Wir erkennen aber, daß dem mathematischen Begriff der Funktion in derDB-Technik die Eigenschaft „voll funktional“ zugeordnet wird.

F Hinweis: Es sei ausdrücklich darauf verwiesen, daß bei der Aufstellung eines ERDsdie gesamte Lebenszeit der Beziehung zu betrachten ist. Eine zufälligeAuswahl kann durchaus 1:c sein. Ist aber der theoretische Fall c:c möglich,dann ist die Relation als c:c Beziehung einzutragen.

1:1 1:1 1:1 1:1

Funktion„voll funktional“ „funktional“

Funktion„voll funktional“ „funktional“

Bild 2.1-2: Variationen der 1:1 Beziehung (Einehe)

Page 58: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-6 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Die Varianten der 1:m Beziehung sehen wir in Bild 2.1-3.

Alle Männer können wenigstens eine Frau haben, wobei jede Frau genau einen Mannhat. Einige Männer können wenigsten eine Frau haben, wobei jede Frau genau einenMann hat. Alle Männer können wenigsten eine Frau haben, wobei es aber einige Frauenohne Männer gibt. Einige Männer können wenigstens eine Frau haben, wobei jede Frauentweder einen oder keinen Mann hat. Dasselbe geht natürlich auch umgekehrt.

1:m 1:mc c:m c:mc

Bigamie

m:1 mc:1 m:c mc:c

Funktion Funktion Polyandrie

Bild 2.1-3: Varianten der 1:m Beziehung

Page 59: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-7

Bei der m:m Beziehung ist sichergestellt, daß jeder Mann mindestens eine Frau und jedeFrau mindestens einen Mann hat (Bild 2.1-4). Dies gilt bei der m:mc Bedingung nur für dieMänner, bzw. bei der mc:m Beziehung nur für die Frauen. Die mc:mc Beziehung ist derallgemeinste Fall, der entsprechend schwer DV-technisch zu handhaben ist.

Relationen der Stufe 1 werden häufig als Tabellen dargestellt. Aus diesem (und noch an-deren Gründen, wimmelt es leider vor unterschiedlichen Bezeichnungen)

studentsnr sname sgeschl sgeb svord1 Mayer M 10.10.63 Ja2 Müller W 01.04.65 Ja3 Schulze M 17.02.64 Nein4 Huber M 05.11.62 Ja5 Adam M 27.09.64 Ja6 Bergmann W 16.03.66 Ja7 Zuse M 31.01.63 Nein

Die Tabelle (Relation, Entitätsmenge, table) besteht aus Zeilen (n-Tupel, Relation, Daten-satz, Entität, Instanz, Ausprägung, row, record) und Spalten (Datenfeld, Attribut, Eigen-schaft, Merkmal, column). Die Reihenfolge der Datensätze und der Attribute ist dabei(vorläufig) unerheblich (Bild 2.1-5)

m:m m:mc mc:m mc:mc

Promiskuität

Bild 2.1-4: Variationen der m:m Beziehung

Page 60: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-8 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Jedes Attribut (Spalte,Feld) hat einen Attri-butnamen (Bezeich-ner, Spaltenüber-schrift) und einen At-tributtyp, der denWertebereich (Domä-ne, Wertemenge,value set) festlegt.Codd benutzte denBegriff domain, der alsDomäne übersetztwurde. In jedem Tupelfinden wir die Attri-butwerte aus den je-weiligen Domänen.

Etwas verschämt wer-den Sie die Zeilennu-merierung erkennen,die neben der Tabellesteht. Diese Satznummer ist zwar in vielen DBMS vorhanden und könnte daher als Unter-scheidungskriterium benutzt werden. Werden aber Sätze gelöscht, so rutscht die Tabellezusammen und die für Mengen eindeutige Bezeichnung jedes Elementes ginge verloren.Es muß also ein Attribut oder eine allgemeiner eine Attributkombination existieren, derenWertebelegung eine eindeutige Identifikation des Tupels erlaubt.

Neben den schon erwähnten Forderungen aus der Mengendefinition heraus (Eindeutig-keit der Elemente, unsortiert) fordert Codd zusätzlich, daß die Reihenfolge der Spaltenohne Belang ist. Attributwerte werden über den Attributnamen und nicht über ihre Stellungbestimmt.

Wegen der vielen bereits erwähnten Begriffe sei hier noch einmal der Versuch gemacht,diese mit den original Coddschen Begriffen zu vergleichen

1 2 n

A1 A2 An

1 a11 a12 a1n

2

3 a31 a32 a3n

m am1 am2 amn

Primärschlüssel Attributbezeichner

Kardinalität Spalte, Attribut

Zeile, Tupel

Grad

Zelle, Attributwert, Wert

1

Domäne, Wertebereich

375

Bild 2.1-5: Elemente einer Entität (Relation 1. Ordnung)

Page 61: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-9

Codd: SynonymeRelation Tabelle, table, Datei, File, Entitätsmenge, Entitätstyp, Relation 1. Ord-

nungRelation Beziehung, Beziehungstyp, Beziehungsmenge, Relation 2. OrdnungAttribut Eigenschaft, Merkmal, Feld, Spalte, rowAttributbezeichner Attributname, SpaltenüberschriftAttributwert Eigenschaft, Eigenschaftswert, ZelleDomain Wertebereich, Definitionsbereich, DomäneDegree Grad, Mächtigkeit, Anzahl der Spalten, BreiteTupel Datensatz, Record, Entität, Zeile, Objekt, Instanz, Individuum, Ausprä-

gung, Element, ExemplarCard Kardinalität, Cardinality, Anzahl der Tupel, ... Zeilen, Mächtigkeit, HöheCandidate-Key Schlüsselkandidat (auch Kandidatenschlüssel), eindeutiger SchlüsselPrimary-Key Primärschlüssel, Hauptschlüssel, -indexAlternate-Key Zweitschlüssel, Sekundärschlüssel, Secondary-Key, -indexForeign-Key Fremdschlüssel, Verbindungsschlüssel, -index

Hier sollten wir die doppelte Bedeutung der Kardinalität beachten.

Definition 2.1-5: Identifizierende Attributkombination (Schlüssel)Gegeben sein ein Relationstyp R(A1,A2,A3,...,An) und eine Attributkombination(Ak1,Ak2,...,Akl) mit 1<l<n und in gleicher Ordnung 1<k1<k2<...<kl<n wie imTupeltyp (A1,A2,A3,...,An).

Diese Attributkombination heißt identifizierende Attributkombination, wenn für je zwei In-stanzen ri,rj∈R gilt

Wenn (aik1,aik2,...,aikl)=(ajk1,ajk2,...,ajkl) gilt, dann ist ri=rj.

Mit anderen Worten bedeutet dies, daß zwei Tupel (Datensätze) gleich sind, wenn ihreidentifizierende Attributkombinationen gleich sind. Es heißt nicht, daß diese Kombinationminimal ist.

Definition 2.1-6: PrimärschlüsselIst eine identifizierende Attributkombination minimal, so nennt man sie Primärschlüssel.Minimal heißt hierbei, daß die Kombination beim Weglassen eines der Attribute nichtmehr identifizierend ist (Bild 2.1-6).

Definition 2.1-7: SchlüsselkandidatGibt es mehrere solcher identifizierender Attributkombinationen, so werden diese Schlüs-selkandidaten genannt. Diese sind dann funktional voneinander abhängig (Bild 2.1-7). Indiesem Fall muß der Primärschlüssel aus den Schlüsselkandidaten ausgewählt werden.

F Hinweis: In den folgenden Darstellungen stellt ein Rechteck mit abgerundeten Eckenein Attribut dar. Mit einem Rechteck werden dagegen Entitätstypen markiert.

Page 62: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-10 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Die Existenz eines Primär-schlüssels gehört bereits zumMengenbegriff, auf den die Re-lationen aufbauen.

DBMS, die diese Existenz nichtexplizit fordern (wie die DBMSder xBase-Klasse), sind im

strengen Sinne keine relationalen Datenbanksysteme. dBa-se „wehrt“ sich nicht gegen Doppeleinträge, ja nicht einmal,wenn wir einen der Schlüssel als UNIQUE (eindeutig) deklariert haben. Der Satz ver-schwindet einfach in der Schlüsseldatei und ist über diesen Schlüssel nicht mehr an-sprechbar. Solche DBMS werden daher häufig als pseudorelational bezeichnet.

Die Existenz und Verwendung eines Primärschlüssels ist bei der weiteren Modellierungdes RDM von zentraler Bedeutung. Diese Forderung wird uns noch einmal bei der Nor-malformtheorie begegnen.

Neben den Schlüsselkandidatenaus denen einer zum Primär-schlüssel gewählt wird, kennen wirnoch die Sekundärschlüssel oderbesser Sekundärindizes. Diesedienen einzig der beschleunigtenSuche und sind für das Relatio-nenmodell unerheblich. Sekundä-

rindizes können daher auch nicht eindeutig sein (Bild 2.1-8). Beispielsweise können wirdie verbleibenden Schlüsselkandidaten zu Sekundärindizes machen.

Das Beispiel zeigt die Indizierung des Attributes port. Dabei stellt sich die grundlegen-de Frage, ob der Index die Reihenfolge der Datentabelle (wie eingezeichnet) einhält odernicht. Ohne besondere Maßnahmen ist dies nicht der Fall. Wir könnten nämlich auch aufdie Idee kommen und eine Sortierung nach den Namen usw. zu verlangen. Bei einemmehrdeutigen (Sekundär) Index gibt es vorerst keine Regel, nach der die Datensätze in-nerhalb eines gleichlautenden Indexes sortiert sind.

Wird ein Attribut ineine Relation nur zudem Zweck eingefügt,damit über sie eineBeziehung zu einerzweiten Relation her-gestellt werden kann,so nennen wir diesesAttribut Verbindungs- oder Fremdschlüssel (Bild 2.1-9).

svorn

sstrasse

sort

stelefon

sname

sgeb

Bild 2.1-6: Primärschlüssel

svorn sstrasse

sort

stelefon

sname

sgeb

snr

Bild 2.1-7: Schlüsselkandi-dat

sort (Index) student (Tabelle)Aachen l 1 Müller 20 BerlinBerlin l 2 Mayer 10 HamburgBerlin l 3 Scheibl 30 HamburgHamburg l 4 Huber 20 BerlinHamburg l 5 Czimmek 30 Aachen

Bild 2.1-8: Sekundärindex

student (Tabelle) klasse (Tabelle)1 Müller 20 Berlin 1 l 1 31996SD6TI 22 Mayer 10 Hamburg 3 l 2 31996SD3NT 13 Scheibl 30 Hamburg 1 l 3 31996WD6TI 24 Huber 20 Berlin 2 l5 Czimmek 30 Aachen 3 l

Bild 2.1-9: Verbindungsschlüssel

Page 63: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-11

Es ist ohne weiteres möglich, mehrere Attri-bute zu einem Schlüssel zusammenzuschlie-ßen (Bild 2.1-10). Dies kann explizit oder im-plizit geschehen, wobei wir uns in diesemFalle besonders vorsehen müssen. Zusam-mengesetzte Schlüssel liegen immer dannvor, wenn sie „sprechend“ angelegt sind, d. h.wir aus den Teilen des Schlüssels eine Be-deutung herauslesen können. Erinnern wiruns nur an die Klassenbezeichnung31995SD6TI 1. Im Beispiel sind der Name,der Vorname und das Geburtsdatum zusammengefaßt. Das Datum ist in seiner internenSpeicherung dargestellt. (Achten Sie auf die Trennzeichen. Sie sind international festge-legt. Der Punkt weist ein teutonisches, der Bindestrich ein angelsächsisches und derSchrägstrich ein internationales Datum aus).

Einen praktischen Aspekt sollten wir bei der Wahl der Schlüssel nicht außer Acht lassen.Die Mengenlehre fordert nur einen eindeutigen Primärschlüssel. Die Praxis fordert einenmöglichst kurzen Primärschlüssel. Wollen wir Personen identifizieren, so können wir diesüber ihren Namen, Vornamen, ihr Geburtsdatum und zur Sicherheit über eine laufendeNummer machen. Andererseits speichern wir nicht Milliarden von Kunden, sondern viel-leicht einige Tausend. Hier genügt in den meisten Fällen ein kurzer Zähler statt einerkomplexen Schlüsselkombination.

2.1.2 Modellierung

Die Festlegung der Entitätstypen gehört natürlich auch zur Modellierung eines Systems.Der entscheidende Schritt wird aber in der Aufstellung der Beziehungen durchgeführt.Hier erfordert das RDM mehr Formalismus als das ERM. Ist das ERM entworfen, so stelltsich die Frage, wie es in ein RDM umgewandelt wird. Dabei müssen wir eigentlich nur dieBeziehungen betrachten (vorausgesetzt die Entitätstypen erfüllen die Normalformen).

Zuerst wollen wir einmal Beziehungen zwischen den Begriffen der ERM und den Begriffender RDM herstellen

Entity-Relationship-Modell RelationenmodellEntity Relationship TupelEntity Set Relationship Set RelationEntity Type Relationship Type Relationstyp (Tabelle)Attribut Attribut AttributEntityschlüssel Relationshipschlüssel Primärschlüssel

Betrachten wir nun die Relationen 2. Stufe (Beziehungstypen) und untersuchen 2 Enti-tätstypen R und S, wobei in der Relationendarstellung

R(A1,A2,A3,...,An) und S(B1,B2,B3,...,Bn)

student (Tabelle)

sname svorn sgeb sort

Müller Peter 1945/12/10 Berlin

Mayer Hans 1953/04/09 Hamburg

Scheibl Jürgen 1938/05/30 Hamburg

Huber Franz 1964/07/21 Berlin

Czimmek Ulf 1972/01/05 Aachen

Bild 2.1-10: Zusammengesetzter Schlüs-sel

Page 64: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-12 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

die Primärschlüssel unterstrichen sind. Existiert nun zwischen beiden Entitätstypen eine(von uns gewünschte) Beziehung, dann bezeichnen wir diese Beziehungstyp T mit

T(A1,B1,B2)

Ist die Beziehung noch durch weitere Attribute charakterisiert (durch Bedingungen einge-schränkt), so schreiben wir

T(A1,B1,B2,C1,C2,....,Ck)

Ø Beispiel:Nehmen wir an, daß ein Klassensprecher volljährig sein muß, dann ist dies eine Zusatz-bedingung unserer Beziehung ist_klassensprecher. n

Die Darstellung soll andeuten

− Die Zuordnung der Elemente erfolgt über die Primärschlüssel der Entitätstypen,die eine eindeutige Identifikation jedes Elementes ermöglichen;

− Die Beziehungsmenge ist eine Relation des relationalen Schemas (Ausnahmenhierzu werden noch erläutert);

− Der Primärschlüssel dieser Beziehungsrelation ist die Vereinigung der Attribut-kombinationen der beteiligten Entitätstypen (Relationen).

Pragmatisch bedeutet dies, daß wir für jeden Entitäts- und jeden Beziehungstyp unseresERM eine Tabelle anlegen. Eine solche Vorgehensweise ist recht aufwendig und führtschnell zu ressourcenfressenden Anwendungen mit langen Laufzeiten. Unser Ziel muß essein, den Übergang zum RDM zu optimieren.

F Hinweis: Hier liegt das entscheidende Problem. Wandeln wir die Entitäts- undBeziehungstypen wie formal vorgesehen um, dann müssen wir bei Änderun-gen in der Kardinalität der Beziehungen keine Änderungen an den Daten-strukturen vornehmen. Mit der Beschleunigung der Verarbeitung reduzierenwir diese Flexibilität mit der Gefahr, später Änderungen mit großem Aufwanddurchführen zu müssen.

Damit haben wir die Grundlagen des relationalen Datenmodells gelegt und können zu-sammenfassen

− Das RDM stellt für die Datenmodellierung einen einzigen Strukturtyp zur Verfü-gung, nämlich die Relation;

− Attribute der Entitäts- und der Beziehungsmengen werden Attribute der Relatio-nen;

− Für jede Relation wird ein Primärschlüssel festgelegt;− Da die Relationen Mengen im mathematischen Sinn sind, gibt es kein Mehr-

fachauftreten von Tupeln (sowohl in den Entitätsmengen wie auch in den Bezie-hungsmengen) und keine Ordnung zwischen den Tupeln.

Unser Hochschulbeispiel hat folgende Entitätstypen

student(snr,sname,sgeschl,sgeb,svord)

Page 65: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-13

klasse(knr,kname,kanzahl)thema(tnr,tname,tstunden)professor(pnr,pname,port)

In unserem ersten Modellierungsversuch am Ende des letzten Kapitels haben wir folgen-de Relationen 2. Stufe (Beziehungstypen)

gehoert_zu(snr,knr,gseit) m:1ist_klassensprecher(snr,knr) 1:1hoert(knr,tnr) m:mliest(pnr,tnr) m:m

Die nähere Betrachtung der Beziehungstypen läßt uns wieder die Art der Relation erken-nen

− ein Student gehört zu einer Klasse, in einer Klasse sind mehrere Studenten;− eine Klasse hat höchstens einen Klassensprecher;− eine Klasse hört mehrere Themen, ein Thema wird von mehreren Klassen ge-

hört;− ein Professor liest mehrere Themen, ein Thema wird von mehreren Professoren

gelesen.

Präziser müssen wir die obigen Relationen alle noch obligat bzw. konditional (optional)formulieren. In den meisten Fällen werden wir feststellen, daß die Relation auch leer seinkann, d. h. es gibt Studenten, die noch keiner Klasse zugeordnet sind; Klassen, die nochkeine Studenten enthalten; Themen, die entworfen aber noch von keiner Klasse gehörtbzw. von keinem Professor gelesen werden usw.

gehoert_zu(snr,knr,gseit) mc:cist_klassensprecher(snr,knr) c:choert(knr,tnr) mc:mcliest(pnr,tnr) mc:mc

Zur Realisation eines 1:1, c:1, 1:c, c:c Beziehungstyps können wir, wie bereit erwähnt,eine Verbindungsrelation (genauer einen Verbindungsentitätstyp) einfügen (Variante 1)

ist_klassensprecher(snr,knr)

Schon beim Lilith Projekt haben wir festgestellt, daß nur die m:m Relationen mit Hilfe ei-ner neuen Entität aufgelöst werden muß. Somit können wir einen weiteren (einfacheren)Modellierungsversuch starten.

Die c:c-Relation des Beziehungstyps ist_klassensprecher legt eine Variante 2 na-he, bei der wir den Entitätstyp klasse um ein Attribut ksprecher ergänzen

klasse(knr,kname,kanzahl,ksprecher)

Die Beziehung wird bei dieser Varianten dadurch modelliert, daß die Wertebereicheübereinstimmen W(snr)=W(ksprecher). Wir sehen, daß beide Schemavarianten un-ser Modell ohne Informationsverlust darstellen. Sie sind äquivalent. Bei äquivalenten Va-rianten können wir diejenige aussuchen, die leichter zu implementieren ist. Wobei dies

Page 66: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-14 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

natürlich hauptsächlich von den operationellen Anforderungen abhängt. Bevor wir diesaber tun, überlegen wir uns weitere Varianten.

Die Variante 3 bestände darin, den Beziehungstyp als Attribut ssprecher vom Typlogisch (mit den Werten J, N) im Entitätstyp student zu modellieren

student(snr,sname,sgeschl,sgeb,svord,ssprecher)

Die Klasse zum Sprecher erhalten wir über die Zuordnung des Studenten zur Klasse. Eshandelt sich hier um keinen Verbindungsschlüssel. Die Beziehung wird sozusagen indi-rekt implementiert. Diese Variante ist nur aufgrund der besonderen Doppelverknüpfungvon student und klasse möglich, d. h. sie kann nicht als allgemeiner Ansatz zurAuflösung eines c:c Beziehungstyps angesehen werden.

Beurteilung

Bei mehreren Lösungsmöglichkeiten sollten wir folgende Entscheidungsmatrix aufbauenund die Einschätzungen eintragen

Var Vorteile Nachteile Fehlermöglichkeiten1 Konsistenz unnötige Redundanz Sprecher gehört nicht zur Klasse2 leichtere Abfragelogik Sprecher gehört nicht zur Klasse3 Konsistenz Speicherbedarf mehrere Klassensprecher

Bei der Variante 1 legen wir einen Beziehungstypen

ist_klassensprecher(snr,knr) 1:1

an. Zusätzlich müssen wir noch jedes Attribut als eindeutigen Index (Sekundärschlüssel)deklarieren. Durch diese Modellierung ist sichergestellt, daß jeder Student nur Klassen-sprecher höchstens einer Klasse ist (Eindeutigkeit von snr) und jede Klasse nur einenSprecher (Eindeutigkeit von knr) hat. Nicht automatisch sichergestellt ist, daß die Kom-bination snr,knr auch im Beziehungstyp

gehoert_zu(snr,knr,gseit)

auftritt. Nur dadurch ist sicherstellt, daß der Klassensprecher zur Klassengemeinschaftgehört. Nachteilig ist, daß wir eine neue Tabelle mit den zugehörigen drei Indizes benöti-gen, was erheblichen Speicherplatz kostet.

Positiv zu sehen ist, daß in der Relation nur die Paare auftreten, die wirklich in Beziehungzueinander stehen. Es treten keine Felder mit Nulleinträgen auf. Bei einer automatischenGenerierung der Beziehung wäre deshalb dies die Variante der Wahl.

Die Variante 2 führt die Beziehung in ein Attribut der Entität mit der wesentlich kleinerenMächtigkeit (Verhältnis 1:20 oder noch besser, je nach Klassenstärke) über.

klasse(knr,kname,kanzahl,ksprecher)

Außerdem ist die Abfrage

Page 67: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-15

Wer ist der Klassensprecher der Klasse 95WD6TI1?

wesentlich wahrscheinlicher als die Abfragen

Ist der Student xyz Klassensprecher?Von welcher Klasse ist der Student xyz der Klassensprecher?

Das Modell sagt aber nur aus, daß ein Klassensprecher aus den Studenten kommenmuß. Die weitere Einschränkung der Klassenzugehörigkeit ist nicht automatisch sicherge-stellt. Eine Klasse hat aber nur einen einzigen Klassensprecher.

Variante 2 führt zu Feldern mit Nullwerten, wenn die Klasse noch keinen Klassensprecherhat. Sie hat auch Schwierigkeiten mit der zweiten Gruppe von Abfragen. Die letzte Abfra-ge führt dazu, daß wir erst den Student identifizieren müssen. Anschließend ist dieser inder Tabelle klasse zu suchen. Dazu muß der Verbindungsschlüssel ksprecher indi-ziert werden, womit durch die Eindeutigkeit der Einträge sichergestellt werden kann, daßkein Student Klassensprecher von zwei Klassen ist.

Ist dieser Sekundärindex aber ein Nachteil gegenüber Variante 1. Nun, die Relation

gehoert_zu(snr,knr,gseit)

benötigt einen kombinierten Primärschlüssel. Bei beiden Abfragen ermitteln wir zuersteinen der beiden Teilschlüssel (Ist die Klasse gegeben, so kennen wir knr. Ist der Stu-dent gegeben, so kennen wir snr.). Um nun in gehoert_zu schnell suchen zu kön-nen, müssen wir beide Teilschlüssel als Sekundärindex aufbauen, was erneut einen zu-sätzlichen Verwaltungsaufwand für die Alternative 1 bedeutet.

Wir könnten auf den Sekundärschlüssel snr verzichten, wenn wir uns ein „unscharfes“Suchen im Primärschlüssel vorstellen. Bei dieser Suchtechnik wird der erste Treffer aufeinen verkürzten Suchschlüssel bestimmt. Dieser wäre in unserem Fall der richtige Ein-trag, da beide Sekundärschlüssel eindeutig sind. Eine bittere Pille müssen wir aberschlucken. Diese Suchtechnik ist satzorientiert und nicht mengenorientiert. Sie wird nor-malerweise nicht automatisch vom DBMS unterstützt.

Bei der Alternative 3 tritt das Problem der mehrfachen Klassenzuordnung eines Studen-ten nicht auf. Diese Modellierung sorgt dafür, daß ein Student, wenn er Klassensprecherist, automatisch der Klassensprecher seiner eigenen Klasse ist, da nur über diese Bezie-hung überhaupt festgestellt werden kann, von welcher Klasse er wirklich Klassensprecherist. Andererseits könnten aber auch zwei oder mehr Studenten der Klasse ein J in die-sem Feld haben, so daß es mehrere Klassensprecher geben könnte.

Wenn wir nun versuchen, diese Erkenntnisse zu verallgemeinern, so können wir Regelnfür alle auftretenden Fälle definieren:

Page 68: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-16 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

ERM führt beim RDM zu1:1 einer Relation mit dem (gemeinsamen) Entitätsschlüssel beider Entitätstypen1:cc:1

Hier stehen folgende Alternativen zur Verfügung:− Eine Relation mit Nullwerten in den c-Attributen.− Zwei Relationen mit (normalerweise gleichem) Primärschlüssel. Der fehlen-

de Partner wird vom DBMS beim Suchen in der c-Relation festgestellt.− Zwei Relationen mit Primärschlüsseln. Der Primärschlüssel der c-Relation

wird als Attribut (Verbindungsschlüssel) in die 1-Relation aufgenommen. DerVerbindungsschlüssel enthält ggf. Nullwerte (Standardlösung)

c:c Hier stehen folgende Alternativen zur Verfügung:Eine Relation mit Nullwerten in den c-Attributen.Drei Relationen für die Entitätstypen und den Beziehungstyp. Die Beziehungsrela-tion enthält die Schlüssel der beiden Entitätsrelationen als Attribute. Diese Kombi-nation kann als Primärschlüssel der Beziehungsrelation dienen (Standardlösung).

Diese Tabelle geht davon aus, daß zwischen beiden Entitätstypen nur ein (nämlich dieuntersuchte) Beziehung besteht.

Eine ähnliche Überlegung können wir für den Beziehungstyp gehoert_zu anstellen,indem wir den Entitätstyp der Studenten ändern in (Variante 4) und sknr einführen

student(snr,sname,sgeschl,sgeb,svord,sknr)

Verallgemeinert finden wir folgende Regeln

ERM führt beim RDM zu1:mm:1c:mm:c

Zwei Relationen mit Primärschlüsseln. Der Primärschlüssel der 1-Relation wird alsAttribut (Verbindungsschlüssel) in die m-Relation aufgenommen.Im Falle der 1:m Beziehung muß sichergestellt werden, daß ein 1-Tupel nur danngelöscht wird, wenn keine m-Tupel mit einem Verweis auf es existierten. DieseBedingung nennt man „referentielle Integrität“ bzw. „Existenzabhängigkeit“. Siesorgt dafür, daß keine m-Tupel mit einem falschen Verbindungsschlüssel einge-tragen werden können bzw. nachträglich „verwaisen“.Sozusagen eine Steigerung der referentiellen Integrität ist die Lösch- bzw. Ände-rungsweitergabe. In ersten Fall werden mit dem Löschen des 1-Tupels auch au-tomatisch alle verknüpften m-Tupel gelöscht. Die Änderungsweitergabe beziehtsich auf die Änderung des Primärschlüssels der 1-Relation, die bei den m-Tupelnzu einer Anpassung des Verbindungsschlüssels führt.Problematisch ist hier die Forderung, daß ein 1-Tupel mindestens einen Partnerauf der m-Seite haben muß. Dieser muß bei der Ersteingabe gleich mit eingege-ben werden. Beim Löschen des m-Tupels muß geprüft werden, ob es nicht viel-leicht das letzte seiner Art ist. Diese Forderung geht über die erwähnte referenti-elle Integrität hinaus.Die c-Beziehungen führen zu Nullwerten im Verbindungsschlüssel.

1:mcmc:1c:mcmc:c

Hier gilt das eben Gesagte, wobei aber eine Prüfung der letzten Art nicht notwen-dig ist. Dies stellt also einen einfacheren Fall dar.

Page 69: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-17

Als letztes verbleiben uns noch die m:m Beziehungen, die wir schon als eigenständigeRelation implementiert haben. Dies ist tatsächlich die einzige Möglichkeit, so daß alsletzte Regel übrigbleibt

ERM führt beim RDM zum:mmc:mm:mcmc:mc

Drei Relationen für die beiden Entitätstypen und den Beziehungstyp. In derBeziehungsrelation werden die beiden Primärschlüssel als Attribute(Verbindungsschlüssel) aufgenommen. Die Kombination beider Attributekann als Primärschlüssel der Beziehungsrelation dienen.

Damit entfallen im RDM vier Beziehungstypen, diewie beschrieben aufgelöst werden.

F Hinweis: In einem RDM gibt es keine Beziehun-gen mit Doppelpfeilen an beiden Enden.Leider wird dies in der Literatur nichtimmer sauber durchgeführt, da die RDM-Pfeile auch oft in abgewandelten ER-Diagrammen benutzt werden. Prüfen Sie daher immer, um welchen Dia-grammtyp es sich handelt!

Ø Beispiele:Bekanntlich können wir jede Relation als Tabelle darstellen. Dies wollen wir einmal durch-führen, wobei uns natürlich die Beziehungen besonders interessieren. Beginnen wir mitden Entitätstypen zur Realisation von ist_klassensprecher in der Variante 2.

Da die Unterstreichung nicht immer gut erkennbar ist, sind die Attribute des Primärschlüs-sels in der Tabellendarstellung zusätzlich gegraut dargestellt. Verbindungsschlüssel sindgestrichelt unterstrichen.

1. 1:1 Beziehungen

studentsnr sname sgeschl sgeb svord1 Mayer M 10.10.63 Ja2 Müller W 01.04.65 Ja3 Schulze M 17.02.64 Nein4 Huber M 05.11.62 Ja5 Adam M 27.09.64 Ja6 Bergmann W 16.03.66 Nein7 Zuse M 31.01.63 Nein

klasseknr kname kanzahl ksprecher1 95SD6TI1 4 12 95SD6NT1 1 23 95SD1NT1 2 3

Zugegebenermaßen ist natürlich die Anzahl nicht aus dem Leben gegriffen, aber wir ha-ben eben nur 7 Studenten.

1 c m mc1 1:1 1:c 1:m 1:mcc c:1 c:c c:m c:mcm m:1 m:cmc mc:1 mc:c

Verbindungsschlüssel

Primärschlüssel

Page 70: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-18 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

2. 1:m Beziehungen

h02a Die 1:m Beziehung gehoert_zu ist in der neben-stehenden Form zwar machbar, aber wenig sinnvoll.

Die Tabelle zeigt sehr deutlich, daß wir zwischenstudent und gehoert_zu eine 1:c Relation er-zeugt haben, während zwischen gehoert_zu undklasse eine mc:1 Relation besteht. Sehen wir unsdaher die Variante 3 an, d. h. ergänzen wir den Pri-märschlüssel und alle Beziehungsattribute in derDetailtabelle

studentsnr sname sgeschl sgeb svord sknr sgseit1 Mayer M 10.10.63 Ja 1 01.01.19912 Müller W 01.04.65 Ja 1 01.10.19913 Schulze M 17.02.64 Nein 3 01.01.19934 Huber M 05.11.62 Ja 2 01.10.19925 Adam M 27.09.64 Ja 3 01.01.19946 Bergmann W 16.03.66 Nein 1 01.10.19947 Zuse M 31.01.63 Nein 1 01.10.1991

3. m:m Beziehungen

thematnr tname tstunden1 Datenbanken 642 Rechnungswesen 1283 Rechnerarchitekturen 324 Schaltungstechnik 64

Die m:m Beziehungstypen enthalten wieschon erwähnt die Primärschlüssel der En-titätstypen und ggf. weitere Attribute. Wirlegen daher die Verbindungsrelation hoertmit den Attributen knr und tnr an. DieKombination beider übernommenen Attribute

ist der Primärschlüssel der Verbindungsrelation hoert.

Die Grundanforderung erfüllt gleich die Integritätsbedingung, daß kei-ne Klasse ein Thema zweimal hören darf, da jede Kombination höch-sten einmal (oder keinmal) auftreten darf (nur dann ist sie Primär-schlüssel).

Analog definieren wir eine weitere Verbindungsrelation liest.

gehoert_zusnr knr gseit1 1 01.01.19912 1 01.10.19913 3 01.01.19934 2 01.10.19925 3 01.01.19946 1 01.10.19947 1 01.10.1991

hoertknr tnr1 11 32 32 43 2

professorpnr pname port1 Scheibl Fürstenfeldbruck2 Matschke Berlin3 Kern Augsburg4 Mayer Stuttgart

liestpnr tnr1 11 31 42 22 33 45 3

Page 71: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-19

2.1.3 Integritätsregeln

Wir wollen noch einmal die eben erwähnten Integritätsregeln (I-Regeln) für das Löschenbzw. Neueingeben näher betrachten.

I-Regel Löschen

Diese Regel legt fest, welche Integritätsregel angewandt werden soll, wenn ein Tupel ei-ner der an der Beziehung beteiligten Relationen gelöscht wird:

1. Weitergabe der LöschungAlle Tupel mit Verbindungsschlüsselwerten, die dem zu löschenden Primär-schlüsselwert entsprechen, werden ebenfalls gelöscht.

2. bedingte LöschungSolange noch ein Verbindundsschlüsselwert existiert, der dem zu löschendenPrimärschlüsselwert entspricht, wird die Löschung nicht durchgeführt.

3. Nullsetzung bei LöschungAlle Verbindungsschlüsselwerte, die dem zu löschenden Primärschlüsselwertentsprechen, werden auf den Nullwert gesetzt, um anzuzeigen, daß kein ent-sprechender Primärschlüsselwert existiert.

I-Regel Aktualisieren

Diese Regel legt fest, welche Integritätsregel angewandt werden soll, wenn ein Tupel ei-ner der an der Beziehung beteiligten Relationen geändert wird:

1. Weitergabe der ÄnderungAlle Tupel mit Verbindungsschlüsselwerten, die dem zu ändernden Primär-schlüsselwert entsprechen, werden ebenfalls geändert.

2. bedingte ÄnderungSolange noch ein Verbindungsschlüsselwert existiert, der dem zu änderndenPrimärschlüsselwert entspricht, wird die Änderung nicht durchgeführt.

3. Nullsetzung bei ÄnderungAlle Verbindungsschlüsselwerte, die dem zu ändernden Primärschlüsselwertentsprechen, werden auf den Nullwert gesetzt, um anzuzeigen, daß kein ent-sprechender Primärschlüsselwert existiert.

Eine sinnvolle Grundeinstellung ist bedingte Löschung und Weitergabe der Änderung. Indiesem Fall können wir keinen Eintrag in der Mastertabelle löschen. Eine (erlaubte) Ände-rung des Primärschlüssels zieht ein Nachführen aller Verbindungsschlüssel nach sich.

2.1.4 Werkzeugunterstützung

Um zu testen, ob unsere Überlegungen stimmen, wollen wir die Umsetzung im WerkzeugCASE/4/0 beobachten. Hierzu legen wir verschiedene Entitätstypen und Relationstypenan. Innerhalb der Entitätstypen definieren wir einen Primärschlüssel s. Das Ergebnis istim Bild 2.1-11 zu sehen. Hierbei beachten wir die Beschriftungen! Zum Beispiel hat E10eine c-Beziehung zu E11. Umgekehrt besteht eine mc Beziehung.

Page 72: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-20 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Der Aufruf der Transformationsfunktion erzeugt das RDMnach Bild 2.1-12. Wir sehen, daß beim c:c Beziehungstypund bei allen xm:xm Beziehungstypen neue Relationen an-gelegt wurden. CASE/4/0 benutzt die nebenstehenden

Pfeiltypen.

F Hinweis: Achten Sie unbedingt auf die Richtung der Pfeile! Diese ist genau „umge-kehrt“ zur Beschriftung im ER-Modell! Aus diesem Grund ist auch die aufden ersten Blick überraschende Beschriftung der neuen Beziehungstypengewählt worden.

Für die Transformation können wir folgende Tabelle aufstellen. In ihr ist eine Spalte fürdie neu erzeugten Tabellen zu sehen. In den Zellen sind die Schlüssel in folgender Syn-tax aufgeführt:

<Typ> <Name>

Der Typ setzt sich aus folgenden Kürzeln zusammen

E1 E2

E3 E4

E5 E6

E7

E8

E9

E10 E11

E12

E13

E14

1 1 1

1 C 1

C C C

N N

CN N

NCN

C CN

N

CN

CN

1zu1

czu1

czuc

nzu1

cnzuc

cnzuncnzu1

nzuccnzucn

nzun

Bild 2.1-11: ERM mit allen (unsymmetrischen) Beziehungstypen

1-Beziehungc-Beziehungn-Beziehungnc-Beziehung

czuc E9

nzun

E8

E7

E6E5

E4E3

E2

E14

E13

E12

E11E10

E1

cnzucn

cnzun

Beziehung

Beziehung Beziehung

Beziehung Beziehung

BeziehungBeziehung Beziehung

BeziehungBeziehung

Beziehung

Beziehung

Beziehung

Beziehung

Bild 2.1-12: Generiertes RDM

Page 73: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-21

P PrimärschlüsselF Fremdschlüssel (Verbindungsschlüssel)n nicht Null

Bei der Transformation werden neue Attribute eingeführt, deren Namen sich aus demEntitätstypnamen und dem Attributnamen zusammensetzen. E2_s bedeutet, daß diesdas Attribut s aus dem Entitätstyp E2 ist. Ein x soll eine variablen Typ darstellen.

Somit bedeuten

P n s Primärschlüssel s ohne Nullwerte der aktuelles aktuellen Entitätstyps(Relation)

Fn E2_s neu eingeführtes Attribut E2_s als Verbindungsschlüssel aus der RelationE2. Dort hat es den Namen s.

1. Relation neue Relation 2. Relation Anmerkung1:1 P n s

Fn E2_sP n s Einführung eines Verbindungsschlüs-

sels bei einer der beiden Relationen.Die zweite Verbindlichkeit muß geson-dert überwacht werden. Beide Mengenmüssen gleich mächtig sein. Die Wer-tebereiche von E2_s und s in E2müssen gleich sein. Dies gilt ebenfallsfür die tatsächlich benutzte Wertemen-ge.

c:1 P n s Fn E4_s

P n s Einführung eines Verbindungsschlüs-sels in der c-Relation. Eine Entität derc-Relation muß einen (vorhandenen)Eintrag im Verbindungsschlüssel besit-zen. Nicht jeder belegte Schlüssel ist inder Spalte E4_s zu finden.

c:c P n s PFn E6_sPFn E5_s

P n s Einführung einer neuen Relation mitzusammengesetztem Primärschlüssel.Die einzelnen Attribute sind Verbin-dungsschlüssel ohne Nullwerte.

m:1mc:1m:cmc:c

P n s Fn Ex_s

P n s Ergänzen eines Verbindungsschlüsselsin der m-Relation. Die Verbindlichkeit 1ist nicht durch den Ansatz gegeben,sondern muß überwacht werden. DieVerbindlichkeit m wird durch fehlendeNullwerte im Verbindungsschlüssel er-zwungen.

m:mmc:mmc:mc

P n s PFn Ex1_sPFn Ex2_s

P n s Einführen einer neuen Relation mit zu-sammengesetztem Primärschlüssel.Die Verbindlichkeiten m müssen ge-sondert überwacht werden.

Die Überwachung der Verbindlichkeiten (Mußbeziehungen) ist darauf zurückzuführen,daß ein Entitätstyp durch Überwachung ihrer eigenen Attribute nicht feststellen kann, ob

Page 74: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-22 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

die Verbindlichkeit gegeben ist. Zum Beispiel verlangt eine m:m Beziehung, daß jederSchlüssel von Ex1 und jeder Schlüssel von Ex2 genau einmal in der Beziehungsrelati-on auftritt. Dies ist bei allen ändernden Operationen zu beachten. Sollte ein Fehler in derDatenbank auftreten, so müssen die Integritätsbedingungen explizit überprüft werden.

Bei der 1:m, 1:mc Beziehung genügt es, den Verbindungsschlüssel auf Nullwerte zu prü-fen.

Die nebenstehende Tabelle gibtnoch einmal einen Überblick überalle neu generierten Schlüssel.Neben den ursprünglichen Rela-tionen sind auch die neu gene-rierten eingetragen, die die Pri-märschlüssel der beteiligten Re-lationen übernehmen. Beide ge-meinsam bilden dann den Primär-schlüssel der neuen Relation.

An dieser Stelle soll auch nocheine Anmerkungen zu den bereitserwähnten assoziativen Bezie-hungstypen gemacht werden. Diezusätzlichen Attribute „wandern“logisch mit den Verbindungs-schlüsseln mit, d. h. bei einer 1:mBeziehung werden die assoziati-ven Attribute wie der Verbindungsschlüssel bei der m-Relation ergänzt.

2.1.5 Klassifizierender Beziehungstyp

Wir haben bisher neben den normalen Beziehungstypen auch schon den assoziativenBeziehungstypen kennengelernt. Letzterer sogt dafür, daß ein Beziehungstyp auch dieEigenschaft eines Entitätstyps besitzt.

Der klassifizierende Beziehungstyp (Ist-Ein-Beziehungstyp) erlaubt es uns nun, Relatio-nenhierarchien aufzubauen.

Definition 2.1-8: Klassifizierender BeziehungstypKönnen wir zwischen den Entitäten zweier Entitätstypen eine Ist-Ein-Beziehung herstelle,so nennen wir diesen Typ klassifizierenden Beziehungstyp.

Der klassifizierenden Beziehungstyp wird durch Spezialisierung eines Entitätstyps bzw.durch Generalisierung einer Gruppe von Entitätstypen gebildet. Die durch Spezialisierunggefundenen Entitätstypen nennen wir auch Subentitätstypen, den durch Verallgemeine-rung gebildeten Entitätstyp entsprechend Superentitätstyp.

Schließt die Zugehörigkeit einer Entität zu einem Subentitätstyp die Zugehörigkeit zu ei-nem anderen aus so sprechen wir von einer exklusiven Beziehung. Sind die Subenti-

Entitätstyp 1. Fremdschlüssel 2. FremdschlüsselE1 E2_sE2 E7_sE3 E4_sE4 E8_sE5E6 E9_sE7E8E9E10 E11_sE11E12E13E14czuc E6_s E5_snzun E7_s E11_scnzun E8_s E13_scnzucn E9_s E14_s

Page 75: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-23

tätstypen nicht paarweise disjunkt, so sprechen wir von einem inklusiven klassifizierendenBeziehungstyp.

Somit können wir festlegen, ob eine Entität nur einem einzigen Superentitätstyp odermehreren angehören kann.

Weiterhin können wireinen klassifizieren-den Beziehungstyphinsichtlich seinerVollzähligkeit spezifi-zieren. Damit wirdangegeben, ob dieMenge der darge-stellten Subentitätsty-pen vollzählig ist oderob sie nur eine Teil-menge der durch denSuperentitätstyp be-zeichneten Entitäten ausmacht. In diesem Fall gibt es Entitäten, die nicht einem der Su-bentitätstypen angehören.

Betrachten wir dies von der Mengentheorie aus, so überdeckt die Vereinigung der Su-bentitätsmengen die Superentitätsmenge nicht vollständig.

Insgesamt ergeben sichvier Varianten (Bild 2.1-13). Auch hier trans-formieren wir das ERMin ein RDM (Bild 2.1-14). Es ergeben sich inallen Fällen 1:c Bezie-hungen. Die unter-schiedlichen Typen(in/exklusive, unvoll-ständig/vollständig)müssen durch Pro-grammierung abgesi-chert werden. CASE/4/0 erzeugt im Gegensatz zu den „normalen“ Beziehungstypen beimklassifizierenden Beziehungstyp keine zusätzlichen Fremdschlüssel.

Ø Beispiel:Wir können z. B. die Klasse der Professoren spezialisieren in die ordentlichen, die Hono-rarprofessoren, die Lehrkräfte mit besonderen Aufgaben usw. n

2.1.6 Abfragen

Da die Modellierung nicht Selbstzweck ist, betrachten wir nun die Operationen, die auf einsolches Schema anwendbar sind. Die bisherige Modellierung wird durch die DDL (Data

K10

K2 K3

K30 K40

K5 K6K4

K20

K1

inklusiv nichtvollzählig

exklusiv nichtvollzählig inklusiv vollzähligexklusiv vollzählig

Bild 2.1-13: Klassifizierende Beziehungstypen

K6K5

K40

K4

K30

K3

K20

K2

K10

K1

kann sein

kann sein

kann sein kann sein

kann sein

kann sein

kann seinkann sein

kann sein

kann sein

kann sein

kann sein

Bild 2.1-14: RDM der klassifizierenden Beziehungstypen

Page 76: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-24 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Definition Language) in geeigneter Form abgehandelt. Jetzt kommen wir zur DML (DataManipulation Language), die wir noch einmal um die DQL (Data Query Language) ergänzthaben, die zum Aufsuchen (Retrieval) von Daten und nicht zu deren Änderung (Update)dient.

Bei den DQL können wir Anweisungen unterscheiden, die

− Anfragen nach einzelnen Tupeln (festgelegt durch den Primärschlüsselwert) er-möglichen. Die Abfragen können dabei sowohl auf Entitäten wie auch auf Bezie-hungen angewandt werden.

− Mengen als Ergebnisse haben (unscharfe Anfragen), d. h. wieder eine Relationliefern.

Wir können weiterhin zwischen navigierenden und allgemeinen Anfragen differenzieren.Die mengenorientierten Anfragen in relationalen Datenbanken sind

− Vereinigung zweier Relationen mit gleichem Relationstyp (ODER)− Durchschnitt zweier Relationen mit gleichem Relationstyp (UND)− Differenz zweier Relationen mit gleichem Relationstyp (NICHT)− Selektion (Auswahl, Restriktion)− Projektion− Verbindung (Join)

Selektion

Diese Operation wählt alle Tupel (Zeilenauswahl) einer Relation aus, die ein bestimmtesPrädikat (Bedingung) erfüllen, also z. B.

Selektiere alle weiblichen Studenten! ⇒ Relation: studentPrädikat: sgeschl = "W"

Selektiere alle Themen des Professors Scheibl! ⇒ Relation: liestPrädikat: pnr = 1

Wir sollten bei der zweiten Selektion beachten, daß nur eine Liste mitNummern geliefert wird (mehr ist in liest nicht vorhanden). Die Themenwerden nicht automatisch ergänzt. Hierzu benötigen wir einen zusätzlichenJoin.

Selektion 1snr sname sgeschl sgeb svord sknr sgseit2 Müller W 01.04.65 Ja 1 01.10.19916 Bergmann W 16.03.66 Nein 1 01.10.1994

Selek. 2pnr tnr1 11 31 4

Page 77: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-25

Projektion

Diese Operation liefert als Ergebnis eine Relation, die aufeinem neuen Tupeltyp mit ausgewählten Attributen beruht(Spaltenauswahl). Anschaulich bedeutet dies die Auswahlvon einigen Spalten einer bestehenden Relation, also z. B.

Gib eine Liste aller Studenten mit den Spalten Nameund Geburtstag aus!

Verbindung (Join)

Die Joinoperation verbindet zwei Relationen zu einer Ergebnisrelation über je ein Attribut,deren Wertebereiche gleich sind. Anhand der Wertebelegung dieser Joinattribute erfolgtdie Zusammenstellung der Ergebnisrelation, also z. B.

JOIN klasse MIT student ÜBER ksprecher=snr

mit dem Ergebnis ks, einer temporären Tabelle (Dynaset)

kssnr sname sgeschl sgeb svord sknr sgseit knr kname kanzahl ksprecher

1 Mayer M 10.10.1963 Ja 1 01.01.1991 1 95SD6TI1 4 12 Müller W 01.04.1965 Ja 1 01.10.1991 2 95SD6NT1 1 23 Schulze M 17.02.1964 Nein 3 01.01.1993 3 95SD1NT1 2 3

Wie wir sehen, sind beide Joinattribute in der Ergebnistabelle vorhanden. Es ist redun-dant. Die gesamte Tabelle enthält die Attribute beider beteiligten Tabellen. Da es nochVerallgemeinerungen gibt, wird diese Verbindung natürlicher Join genannt. Nähere De-tails werden wir im Kapitel SQL behandeln.

Interessant ist natürlich die Frage, was geschieht, wenn das Attribut nicht wie im Beispielein Primärschlüssel eines der Entitätstypen ist. Dann kann in der zweiten Entitätsmengeder Attributwert mehrfach auftreten. In diesem Fall werden in der Ergebnisrelation mehre-re Tupel angelegt

Wiederhole für alle Tupel der 1. Relation (oder: bis EOF der 1. Relation)Extrahiere den Wert des JoinattributsWiederhole für alle Tupel der 2. Relation

Wenn Joinattributwerte gleich, dannVerbinde beide Tupel. Lasse ein Joinattribut wegSchreibe dieses Tupel in die Ergebnisrelation

EndewennEndewiederhole

Endewiederhole

Mit den 6 Operationen können wir beliebig komplexe Abfragen mengenorientiert realisie-ren

Projektionsname sgebMayer 10.10.63Müller 01.04.65Schulze 17.02.64Huber 05.11.62Adam 27.09.64Bergmann 16.03.66Zuse 31.01.63

Page 78: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-26 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Ø Aufgabe 2-1fhsql Finde Namen und Geburtsjahr aller Personen, die entweder männliche Klassensprecher

sind oder ihre Diplomvorprüfung schon bestanden haben. n

Interessant bei dieser Aufgabe ist, daß es mehrere Lösungsmöglichkeiten gibt. Welche istdie optimale?

1. Vereinige (Join) klasse mit student über kspecher=snr, Ergebnisrelation ks2. Selektiere in ks alle Tupel mit sgeschl = "M", Ergebnisrelation ksm3. Projiziere snr, sname, sgeb aus ksm in ksmp (snr wegen Eindeutigkeit)4. Selektiere in student alle Tupel mit svord = Ja, Ergebnisrelation sv5. Projiziere snr, sname, sgeb aus sv in svp6. Vereinige ksmp mit svp ohne Doppeleinträge in ergebnis17. Projiziere snname, sgeb aus ergebnis1 in ergebnis.

Die folgenden Tabellen zeigen die Verarbeitungsschritte. Die Zwischentabelle ks istschon früher dargestellt worden.

ksmsnr sname sgeschl sgeb svord sknr sgseit knr kname kanzahl ksprecher

1 Mayer M 10.10.1963 Ja 1 01.01.1991 1 95SD6TI1 4 13 Schulze M 17.02.1964 Nein 3 01.01.1993 3 95SD1NT1 2 3

Es geht aber auch so

1. Vereinige (Join) klasse mit student über kspecher=snr, Ergebnisrelation ks2. Selektiere in ks alle Tupel mit sgeschl = "M", Ergebnisrelation ksm3. Projiziere alle Felder, die aus student stammen in ksms4. Selektiere in student alle Tupel mit svord = Ja, Ergebnisrelation sv5. Vereinige ksms mit sv, Ergebnisrelation ksmsv6. Projiziere sname, sgeb aus ergebnis1 in erg.

ksmssnr sname sgeschl sgeb svord sknr sgseit

1 Mayer M 10.10.1963 Ja 1 01.01.19913 Schulze M 17.02.1964 Nein 3 01.01.1993

ksmpsnr sname sgeb

1 Mayer 10.10.19633 Schulze 17.02.1964

svsnr sname sgeschl sgeb svord sknr sgseit

1 Mayer M 10.10.1963 Ja 1 01.01.19912 Müller W 01.04.1965 Ja 1 01.10.19914 Huber M 05.11.1962 Ja 2 01.10.19925 Adam M 27.09.1964 Ja 3 01.01.1994

svpsnr sname sgeb

1 Mayer 10.10.19632 Müller 01.04.19654 Huber 05.11.19625 Adam 27.09.1964

ergebnis1snr sname sgeb

1 Mayer 10.10.19632 Müller 01.04.19653 Schulze 17.02.19644 Huber 05.11.19625 Adam 27.09.1964

ergebnissname sgeb

Mayer 10.10.1963Müller 01.04.1965Schulze 17.02.1964Huber 05.11.1962Adam 27.09.1964

Page 79: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-27

ksmsvsnr sname sgeschl sgeb svord sknr sgseit

1 Mayer M 10.10.1963 Ja 1 01.01.19912 Müller W 01.04.1965 Ja 1 01.10.19913 Schulze M 17.02.1964 Nein 3 01.01.19934 Huber M 05.11.1962 Ja 2 01.10.19925 Adam M 27.09.1964 Ja 3 01.01.1994

mit dem bekannten Ergebnis. Wobei durchaus die Frage im Raume steht, welche Vari-ante schneller ist. Wobei aber auch der Speicherbedarf eine große Rolle spielt. Hier hilftnur die Simulation mit großen Datenbeständen.

Die Änderungsoperationen (Update) sind bei allen Datenmodellen gleich

− Neuanlegen− Ändern− Löschen

Dabei können die Operationen auf ein einziges Tupel oder einen Bereich von Tupeln (se-lektiert durch ein Prädikat) angewandt werden.

In allen drei Fällen müssen die Integritätsbedingungen der Datenbank gewahrt bleiben.Dies sind

− die Erhaltung der Eindeutigkeit beim Neuanlegen eines Tupels oder beim Än-dern des Primärschlüssels eines Tupels, wobei die Frage noch offen ist, ob die-se Änderungsfunktion überhaupt erlaubt sein sollte;

− die Integrität von Beziehungen beim Löschen eines Tupels in den beteiligtenRelationen.

Löschen wir in unserem Beispiel einen Studenten, dann hat dies immer Auswirkungen aufdie Relation gehoert_zu und ggf. auf klasse (Löschen des Klassensprechers, ein-mal von der Problematik des Attributes kanzahl ganz abgesehen).

Das physische Löschen ist daher nur mit aller größter Vorsicht durchzuführen.

2.1.7 Zusammenfassung

Die Übungen zeigen uns einige Vor- und Nachteile des RDM auf

Vorteile− Das RDM stützt sich auf eine mathematisch fundierte Grundlage ab, die einfach

und leicht verständlich ist;− Entitätstypen und alle Abbildungen in Form von Beziehungstypen lassen sich mit

einem einzigen Strukturtyp - der Relation -. modellieren;− Die Manipulationen auf relationalen Schemata sind deskriptiv beschreibbar. Im

Gegensatz zur prozeduralen Beschreibung muß nicht beschrieben werden, wieeine Manipulation im einzelnen abzulaufen hat.

− Relationale Schemata gewährleisten ein hohes Maß an physischer Datenunab-hängigkeit;

Page 80: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-28 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

− Relationale Schemata sind flexibel. Nachträgliche Anforderungen sind deutlichleichter einzuarbeiten als bei Schemata, die bereits bei der Modellierung diespätere operationelle Nutzung einbeziehen.

Nachteile− Die aufgeführten Vorteile werden durch schlechtere Effizienz erkauft. RDBMS

benötigen ausreichende „Hardwarepower“. Diese wird aber immer billiger.

2.1.8 Normalformen

Fehler bei den Datenbankentwürfen bemerkt man erst nach einiger Zeit. Meist kommt esdurch sog. Anomalien zu Problemen, die mit großem Programmieraufwand umgangenwerden müssen. Da es sich immer wieder um die gleichen Probleme handelt, führtengrundsätzliche Überlegungen zur sog. Normalformtheorie. Sie hilft einerseits, wesentlicheFehler zu vermeiden. Andererseits ist sie jedoch nicht dazu geeignet, einelaufzeitoptimale Anwendung zu entwerfen. Ja, selbst die Frage der speicheroptimalenAnwendung kann nicht mit letzter Sicherheit beantwortet werden.

Die Normalisierung führt zu stabilen, logisch entkoppelten, redundanzarmenDatenbanken. Die Stabilität zeigt sich bei notwendigen Änderungen in der Funktionalität.Redundanzarm bedeutet, daß Datenredundanzen in Schlüsselredundanzen umgewandeltwerden, die normalerweise wesentlich speicherplatzsparender sind.

Grundsätzlich sollten wir einen normalformkonformen Entwurf durchführen. Wenn wirgegen Normalformen verstoßen, dann sollten wir dies bewußt und begründet machen.Eine Verletzung der Normalformen kann nicht dadurch entschuldigt werden, weil alleanderen es auch so machen. Nur DBMS-Verkäufer behaupten heute noch, man könneeine komplexe Datenbank „intuitiv“ erstellen.

Greift man heute zu einem „populärwissenschaftlichen“ Buch über ein DBMS wie Access,Paradox oder dBase, dann findet man in jedem (!) grundsätzliche Verstöße gegen dieNormalformtheorie, wenn sie nicht gleich ganz verschwiegen wird.

Das Überführen einer Relation in eine höhere Normalform ist ein Vorgang, der sich nichtan der formalen Struktur der Daten orientiert, sondern an deren inhaltlicher Bedeutung.

Ø Beispiel:Wenn eine Relation wuerfel neben dem Primärschlüssel die Attributewkantenlaenge, wumfang und wvolumen besitzt, so ist sie Kandidat für eineÜberführung in die dritte Normalform; denn die lokalen Attribute wumfang undwvolumen hängen vom lokalen Attribut wkantenlaenge ab. nDiese Abhängigkeit ist aber inhaltlicher, nicht datentechnischer Art. Zu ihrer Feststellungist die Identifikation des Wortes „Würfel“ als Bezeichnung eines geometrischen Körpersebenso erforderlich wie die Kenntnis der Formeln, nach denen Umfang und Volumeneines Würfels berechnet werden. Soches Wissen hat kein DBMS, so daß dieNormalisierung nicht automatisch vorgenommen werden kann.

Codd unterschied im Jahre 1970 nur 3 Normalformen. Inzwischen sind weitere hinzuge-kommen, die einige Sonderfälle abdecken.

Page 81: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-29

Die Normalformen bauen aufeinander auf, so daß das Erfülltsein einer Normalform vor-aussetzt, daß die vorangehende Normalform erfüllt ist (siehe Diagramm).

Zur Erinnerung sei noch einmal erwähnt, daß die Normalformtheorie

1. auf (ungeordneten) Mengen beruht;2. jedes Element einer Menge wohlunterschieden von anderen Elementen sein muß, so

daß die Menge (Relation 1. Ordnung) bereits einen Primärschlüssel besitzt, der aus ei-nem oder mehreren Schlüsselkandidaten ausgewählt wurde.

Ziel der Normalformtheorie ist es, Redundanzen zu verringern und zu vermeiden. Hiermüssen wir genauer sagen, Attributredundanzen in Verbindungsschlüsselredundanzenumzuwandeln. Was dies bedeutet, werden wir im folgenden kennenlernen.

2.1.8.1 1. Normalform (1NF)

Definition 2.1-9: 1. Normalform (1NF)Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in 1. Normalform, wenn die Mengen Mi keine Relationen, sondern elementareMengen sind. Jede Menge erhält einen eindeutigen Namen, d. h. keine Menge darfmehrfach vorkommen.

Diese Forderung heißt, daß

− alle Attribute Datenprimitiva einfachen Datentyps sind (nicht selbst wieder Ver-bunde sind);

− es keine Wiederholungsattribute in einer Relation gibt.

F Achtung! Die erste Normalform (wie auch die anderen) wird aus der Aufgabenstellungabgeleitet. Benennen wir zwei Felder mit unterschiedlichem Namen z. B.kind1 und kind2, dann ist keine Datenbanksystem in der Lage, diese lo-gische Wiederholung zu erkennen. Daß Access z. B. diese zwei Felder ohneProbleme akzeptiert, bedeutet nicht, daß kein Verstoß gegen die Normal-formenlehre existiert. Die Normalformen sind also ein semantisches und keinsyntaktisches Problem.

Sehen wir uns als Beispiel einen Entitätstyp Mitarbeiter ma an, den wir folgendermaßendefinieren

ma(kst,manr,name,ort,kstort,kstleiter,gnr,kind1,kind2,kind3)

und der die folgenden Entitäten (Datensätze) enthält

Page 82: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-30 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

makst manr name ort kstort kstleiter gnr kind1 kind2 kind3

01 102 Mayer München München Becker G102 Eva

01 110 Müller Eching München Becker G110

02 204 Scheibl Berlin Berlin Alber G204 Julia Katha Flori

03 302 Huber München Stuttgart Schneider G302

03 308 Schuler Ulm Stuttgart Schneider G308 Hans

04 401 Schulze München München Alber G401

04 404 Adam Berlin München Alber G404 Uwe

Diese Tabelle ist nicht in 1. Normalform. Die Attributkombination kst,manr identifiziertzwar jedes Tupel eindeutig, es existiert aber ein logisches Wiederholungsfeld kind. DieAttribute kind1, kind2, kind3 sind entweder nicht oder nur teilweise belegt, d. h.die Tupel der Relation sind unterschiedlich lang. Die Felder können u. U. bei mehr als 3Kindern nicht ausreichen. Es handelt sich um eine 1:m Beziehung, die im Tupel „ver-steckt“ werden soll. Diese Felder müssen in einen eigenen Entitätstyp kind zusammen-gefaßt werden. Eigentlich müßten wir die Zeilen unterschiedlich lang machen

makst manr name ort kstort kstleiter gnr kind1 kind2 kind3

01 102 Mayer München München Becker G102 Eva

01 110 Müller Eching München Becker G110

02 204 Scheibl Berlin Berlin Alber G204 Julia Katha Flori

03 302 Huber München Stuttgart Schneider G302

03 308 Schuler Ulm Stuttgart Schneider G308 Hans Ulla

04 401 Schulze München München Alber G401

04 404 Adam Berlin München Alber G404 Uwe

Diese unterschiedliche Länge der Datensätze ist ein untrügliches Zeichen für einen Ver-stoß gegen die 1NF.

F Hinweis: Ein Verstoß gegen die 1NF liegt vor, obwohl jedes Attribut einen eindeutigenAttributnamen besitzt. Formal (syntaktisch) ist also eine Verletzung der 1NFnicht erkennbar. Die Normalformen müssen semantisch geprüft werden.

Die Tabelle können wir folgendermaßen „plätten“

Page 83: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-31

makst manr name ort kstort kstleiter gnr kind

01 102 Mayer München München Becker G102 Eva

01 110 Müller Eching München Becker G110

02 204 Scheibl Berlin Berlin Alber G204 Julia

02 204 Scheibl Berlin Berlin Alber G204 Katha

02 204 Scheibl Berlin Berlin Alber G204 Flori

03 302 Huber München Stuttgart Schneider G302

03 308 Schuler Ulm Stuttgart Schneider G308 Hans

03 308 Schuler Ulm Stuttgart Schneider G308 Ulla

04 401 Schulze München München Alber G401

04 404 Adam Berlin München Alber G404 Uwe

Sicher sehen Sie die jetzt entstandene Redundanz. Ist diese Tabelle eigentlich immernoch eine Menge, d. h. ist der Primärschlüssel immer noch ein solcher? Der alte Primär-schlüssel ist nicht Primärschlüssel dieser Datei, da er mehrfach vorkommt. Die Redun-danz und die Antwort auf die Frage (nämlich Nein) zeigen uns, daß „Plätten“ nicht die Lö-sung unseres Problems sein kann. Es ist daher müßig, einen neuen Primärschlüssel zufinden (Es wäre kst, manr und kind).

Auch folgendes Beispiel ist bereits ein Verstoß gegen die 1NF:

ma(manr,name,vorname,adresse)

Das Feld adresse ist zusammengesetzt. Natürlich erhebt sich hier eine Diskussionüber den Begriff „zusammengesetzt“. Dies ist semantisch und nicht syntaktisch zu inter-pretieren. Es könnte durchaus der Fall existieren, daß die Adresse nie in ihre Einzelteilezerlegt werden muß, dann ist sie nicht zusammengesetzt. Normalerweise drucken wir sieaber in mehreren Zeilen usw.

ma(manr,name,vorname,plz,ort,strasse)

Auch hier erhebt sich die Frage: Ist strasse zusammengesetzt? Im Grunde ja! Norma-lerweise benötigen wir aber die Hausnummer nicht getrennt. Wenn wir aber ein Verwal-tungssystem zum Austragen von Zeitungen entwerfen, wäre die Straße hier nicht atomareingetragen! Dieses Verwaltungssystem legt z. B. den Weg des Austrägers fest.

Aussagen zu den Normalformen hängen vom betrachteten Kontext ab. Sie sind nicht ab-solut zu verstehen.

Sehen wir uns ein anderes Beispiel an, indem wir eine Buchverwaltung untersuchen

buch(signatur,titel,stichw)

Auch hier haben wir wieder keinerlei syntaktische Schwierigkeiten, ein Feld stichw ineinem Datenbanksystem (fast) beliebiger Länge anzulegen. Eine Obergrenze ist durch

Page 84: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-32 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

das System meist festgelegt. Semantisch begehen wir aber einen eklatanten Verstoß ge-gen die 1NF, wenn wir das folgende zulassen

buchsignatur titel stichw4711 Turbo-Pascal Programmieren, Pascal, Algorithmus5588 C++ Programm, C++, Algorithmen7289 Turbo Vision Prog., Pascal, Grafik, SAA8132 Word Textverarbeitung, Windows8312 Visual C++ SAA, C, C++, Windows, C++

Hier handelt es sich bei stichw um ein implizites Wiederholungsfeld. Suchen wir in ei-ner solchen Datei nach C++, dann muß jeder Datensatz eingelesen werden, um mit ei-ner Textverarbeitungsfunktion das Stichwort zu suchen. Wir erkennen weiterhin eine Viel-zahl weiterer Nachteile wie

− die Anzahl der Stichwörter ist begrenzt;− die Begrenzung ist nicht starr, sondern hängt von der Länge der einzelnen

Stichwörter ab;− die Stichwörter sind nicht einheitlich. Sie können nur mit erheblichem Aufwand

gegen eine Liste erlaubter Stichwörter (sog. Thesaurus) geprüft werden (sieheAlgorithmus, Algorithmen oder die verschiedenen Schreibweisen fürProgramm)

− Es können Stichwörter mehrfach auftreten (C++ in der letzen Zeile)

Natürlich können wir auch hier„plätten“ (nebenstehende Ta-belle). Es ergeben sich wiederdie Probleme mit dem Primär-schlüssel, z. B. ist die Kombi-nation signatur+stichweindeutig.

Wir können aber schon einmalim Hinterkopf eine möglicheLösung des Problems entwik-keln. Ist der erste Entwurf nichtin 1NF, so können wir ihndurch eine Transformation(d. h. eine Zerlegung in zweioder mehrere Entitätstypen)normalisieren. Dabei werdendie Spalten auf die neuen En-titätstypen aufgeteilt. Dies nen-nen wir, wie in diesem Manuskript schon erläutert, Projektion. Für unsere Beispiele wärendies folgende Projektionen (Bild 2.1-15)

ma(kst,manr,name,ort,kstort,kstleiter,gnr)ki(kind,manr)

buchsignatur titel stichw4711 Turbo-Pascal Programmieren4711 Turbo-Pascal Pascal4711 Turbo-Pascal Algorithmus5588 C++ Programm5588 C++ C++5588 C++ Algorithmen7289 Turbo Vision Prog.7289 Turbo Vision Pascal7289 Turbo Vision Grafik7289 Turbo Vision SAA8132 Word Textverarbeitung8132 Word Windows8312 Visual C++ SAA8312 Visual C++ C8312 Visual C++ C++8312 Visual C++ Windows8312 Visual C++ C++

Page 85: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-33

buch(signatur,titel)thesaurus(snr,stichw)

Es sind also 1:m oder m:m Bezie-hungen denkbar. Die m:m Bezie-hung erkennen wir daran, daß imzweiten Fall kein Attribut zur Ver-knüpfung beider Tabellen exi-stiert. Ein Buch kann mehrereStichwörter haben. Ein Stichwortverweist auf mehrere Bücher.

Im ersten Beispiel setzen wir still-schweigend voraus, daß nichtbeide Elternteile in der gleichenFirma arbeiten. Wenn wir ehrlichsind, müßten wir auch dort zu-mindest ein (1,2):m Beziehungeinführen (was letztendlich einem:m Beziehung ist). Im Bild 2.1-15 ist die m:m Beziehung bereitsin zwei 1:m Beziehungen mit derVerbindungsdatei stichw auf-gelöst worden

buch(signatur,titel)stichw(signatur,snr)thesaurus(snr,stichw)

Die Zerlegung des Buches istaber schon wieder diskutabel.Warum wird für ein eindeutigesAttribut stichw ein weiteresAttribut snr eingeführt? Nun,einfach weil snr kürzer ist (z. B. als Zähler 4 Byte im Gegensatz zu 10 oder mehr Bytefür ein Stichwort). Der folgende Entwurf wäre aber nicht falsch

buch(signatur,titel)stichw(signatur,stichw)thesaurus(stichw)

In diesem Fall dient die Tabelle thesaurus als reine Nachschautabelle (lookup table),um die Eindeutigkeit der Stichwörter sicherzustellen.

Schauen wir uns nun zur Anschaulichkeit die Projektionen konkret an:

wird zu

bzw. mit Entitätstypen (1:m) dargestellt:

Das 2. Beispiel führt zu einer m:m Beziehung

kst+manr kstort

gnr

kstleiter

name ortma

kind1 kind2

kind+manr

ki

kind3

kst+manr kstort

gnr

kstleiter

name ortma

ma kihat

buch thesaurusstichw

buch stichw thesaurus

Bild 2.1-15: Erzeugung der 1NF durch Projektion

Page 86: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-34 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

ma kindkst manr name ort kstort kstleiter gnr kind manr

01 102 Mayer München München Becker G102 Eva 102

01 110 Müller Eching München Becker G110 Julia 204

02 204 Scheibl Berlin Berlin Alber G204 Katha 204

03 302 Huber München Stuttgart Schneider G302 Flori 204

03 308 Schuler Ulm Stuttgart Schneider G308 Hans 308

04 401 Schulze München München Alber G401 Ulla 308

Uwe 404

buch stichwort thesaurussignatur titel signatur snr snr stichw4711 Turbo-Pascal 4711 1 1 Programmieren5588 C++ 4711 2 2 Pascal7289 Turbo Vision 4711 3 3 Algorithmus8132 Word 5588 1 4 C++8312 Visual C++ 5588 4 5 Grafik

5588 3 6 SAA7289 1 7 Textverarbeitung7289 2 8 Windows7289 5 9 C7289 68132 78132 88312 68312 98312 48312 8

1NF kurzgefaßtDie 1NF verhindert logische Feldwiederholungen in der waagrechten Richtung einer Ta-belle. Die Feldinhalte sind atomar. Die Datensätze sind alle gleich breit.

Anzeichen für Verstöße gegen die 1NF sind

1. Ein Attribut enthält durch Trennzeichen aufgereihte Elemente. Die Trennzeichen kön-nen die üblichen Zeichen Leerstelle, Komma, Semikolon usw. sein. Wenigerauffällig ist der Schrägstrich oder der Rückstrich. Tatsächlich ist der Pfadname einerDatei auf einem Datenträger kein atomares Attribut. Vielmehr besteht er aus einer Rei-hung von Verzeichnisnamen, die durch Rückstriche getrennt sind wie \doku\db\txt

2. Mehrere Attribute haben den gleichen Namen, die durch angehängte Ziffern eindeutiggemacht wurden.

3. Unterschiedliche Länge der Zeilen in einer Tabelle.

Noch ein letztes Mal der eindringliche Hinweis, daß kein DBMS in der Lage ist, semanti-sche Entwurfsfehler abzufangen. Daß eine Entwurf von einem DBMS ohne Fehlermel-

Page 87: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-35

dung verarbeitet wird, ist keine Bestätigung für einen normalformengerechten Entwurf.Lassen Sie Aufzählungen in einem Feld zu, dann wird dies ohne weiteres verarbeitet.

Eine andere Frage ist, ob Sie normalformgerecht entwerfen wollen. Die Entscheidungdarüber kann Ihnen dieses Manuskript nicht abnehmen. Es ist nur aus leidvoller Erfah-rung heraus dringlich empfohlen, einen sauberen Entwurf anzustreben. Glauben Sie esmir, er bewährt sich, auch wenn er auf den ersten Blick umständlicher aussieht.

2.1.8.2 2. Normalform (2NF)

Kehren wir nun zu unseren Mitarbeitern zurück und lassen vorerst die Kinder aus unserenBetrachtungen heraus (schließlich haben wir sie völlig abgespalten). D. h. wir untersu-chen nur noch den Rest auf die möglichen Schlüsselkandidaten

ma(kst,manr,name,ort,kstort,kstleiter,gnr)

Definition 2.1-10: SchlüsselEin Schlüssel einer Relation ist ein Attribut oder eine Kombination mehrerer Attribute derRelation, die ein Tupel der Relation eindeutig bestimmen. Der Primärschlüssel wird dabeizur Identifikation der Tupel gewählt.

Sie sollten bei dieser Definition die Eindeutigkeit beachten. In der Literatur wird häufigzwischen dem eindeutigen Primärschlüssel und ein- oder mehrdeutigen Sekundärschlüs-seln unterschieden. Die mehrdeutigen Sekundärschlüssel sind eigentlich keine Schlüsselim obigen Sinne! Vielfach nennt man sie einfach Index. Ein Index dient zum schnellenSuchen, ist aber nicht notwendigerweise ein Schlüssel. Nicht verwechseln dürfen wir ei-nen Sekundärindex mit Datensatzzählern bei einigen DBMS. Hier erhält jeder Eintrag eineabsolute Nummer. Dadurch ist es möglich, den Datensatz direkt anzuspringen. In men-genorientierten RDBMS ist diese Funktion einerseits nicht notwendig. Andererseits ver-ändern bestimmte Reorganisationsläufe (physikalisches Löschen von Datensätzen usw.)die Numerierung. Somit finden wir auch in PC-gestützten DBMS solche Satzzähler nichtmehr.

Die Attribute des Schlüssels identifizieren also eindeutig dierestlichen Attribute jedes Tabelleneintrages. Nun müssen wirnur noch bei der Wahl des/der Schlüssel darauf achten, daßdie gewählten Attribute eine Minimalmenge bilden, d. h. kei-ne unnötigen Attribute in den Schlüssel aufgenommen wer-den. Der Begriff Primärschlüssel wird i. a. in diesem Sinne,d. h. als identifizierender, minimaler Schlüssel benutzt.

manr

kst

name

ort

kstort

kstleiter

gnr

Bild 2.1-16: AktuelleAbhängigkeiten

Page 88: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-36 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Die Abhängigkeiten der Attribute untereinander stellen wiram besten in einem Abhängigkeitsdiagramm dar (Bild 2.1-16). Die abgerundeten Rechtecke sollen verdeutlichen, daßes um die Attribute einer einzelnen Entität und nicht um En-titätstypen geht.

Untersuchen wir nun unter diesem Gesichtspunkt die Mitar-beitertabelle genauer, so erkennen wir (Bild 2.1-17), daß

1. der gewählte Schlüssel nicht minimal ist. Die kst ist un-nötig, der Mitarbeiter ist bereits durch die manr eindeutig identifiziert;

2. die Gehaltsnummer gnr ist ebenfalls ein Schlüssel, so daß wir zwei Schlüsselkandi-daten finden, die in einer 1:1 Relation stehen.

Wir ändern also unseren Entwurf so, daß wir die Gehalts-nummer eliminieren und den Primärschlüssel zu manrfestlegen (Bild 2.1-18)

ma(kst,manr,name,ort,katort,kstleiter)

Dieser Entwurf ist bereits in 2NF. Es existiert aber noch einetransitive Abhängigkeit, die wir noch einmal bei der 3NFaufgreifen werden.

Die Gehaltsnummer könnenwir direkt aus der manr ab-leiten. Wir müssen nur ein Gdavor setzen. Es entstehtdaher kein Informationsver-lust, wenn wir sie weglassen.

Betrachten wir die jetzt korri-gierte Mitarbeitertabelle nocheinmal, so erkennen wir eineganze Reihe sog. Anomalien

Definition 2.1-11: EinfügeanomalieEine Einfügeanomalie (insertion anomaly) liegt vor, weil ein Tupel nur dann eingefügtwerden kann, wenn alle Daten vorliegen, d. h. ein Mitarbeiter kann nur dann eingestelltwerden, wenn die Abteilung, der Ort und der Abteilungsleiter bekannt sind. Eine „leere“Abteilung kann nicht vorzeitig angelegt werden.

Definition 2.1-12: LöschanomalieEine Löschanomalie (deletion anomaly) liegt vor, weil durch das Löschen eines Mitarbei-ters (z. B. Scheibl) alle Abteilungsinformationen verloren gehen (weil dies der einzige Mit-arbeiter dieser Abteilung ist).

manr

kst

name

ort

kstort

kstleiter

gnr

Bild 2.1-17: Abhängigkeiten

manr

name

ort

kstort

kstleiter

kst

Bild 2.1-18: korrigierterEntwurf

makst manr name ort kstort kstleiter

01 102 Mayer München München Becker

01 110 Müller Eching München Becker

02 204 Scheibl Berlin Berlin Alber

03 302 Huber München Stuttgart Schneider

03 308 Schuler Ulm Stuttgart Schneider

04 401 Schulze München München Alber

04 404 Adam Berlin München Alber

Page 89: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-37

Definition 2.1-13: ÄnderungsanomalieEine Änderungsanomalie (update anomaly) liegt vor, wenn durch Änderung eines Attri-butwertes mehrere Tupel verändert werden müssen. Im Beispiel hängen der Ort und derAbteilungsleiter nur von der Abteilungsnummer ab, d. h. nicht vom ganzen Primärschlüs-sel. Zieht die Abteilung um, dann muß in allen betroffenen Tupeln der Ort geändert wer-den (Änderungsanomalie). Wechselt der Leiter einer Abteilung, so muß in allen betroffe-nen Tupeln der Leiter geändert werden. Die Daten über die Abteilung sind in dieser Ta-belle redundant.

Offensichtlich ist unser Entwurf noch immer nicht perfekt. Wir benötigen noch weitereNormalformen.

Mit einem kritischen Blick auf die Wertebelegung der zusammengestellten Daten kannman frühzeitig Verstöße gegen die Normalformen erkennen

Wiederholungen in waagerechter Richtung (in den Spalten) sind Verstöße gegen die1. Normalform. Wiederholung in senkrechter Richtung (in den Zeilen) weisen auf eineVerstoß gegen die 2. oder 3. Normalform hin. Dies ist aber nur hinreichende und nichtnotwendig.

Letzteres erkennen wir daran, daß auch im Wohnort der Mitarbeiter Wiederholungen(München) auftreten. Bei einem Umzug einer Entität (d. h. eines Mitarbeiters) muß abernur dessen Wohnort geändert werden. Der Umzug einer Kostenstelle sorgt aber für einevielfache Änderung. Auch der gemeinsame Name zweier Kostenstellenleiter ist zufällig(es sei denn, der Stellenplan erlaubt die Leitung mehrerer Abteilungen durch eine Per-son).

Definition 2.1-14: 2. Normalform (2NF)Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in 2. Normalform, wenn sie in 1. Normalform ist und zusätzlich alle Nichtschlüsse-lattribute voll funktional von den Schlüsselattributen abhängig sind.

Alle Relationen, die in 1. Normalform sind und einen Primärschlüssel aus einem einzigenAttribut haben, sind automatisch in 2. Normalform.

Die Anomalien treten in unserem Beispiel nur auf, weil die Attribute kstort,kstleiter nicht vom ursprünglichen Primärschlüssel (kst,manr), sondern nur voneinem Teil nämlich kst abhängen. Hierdurch kommt es zu den Wertewiederholungen insenkrechter Richtung innerhalb einer Spalte. Die Reduktion des Schlüssels auf manrlöst aber noch nicht das Redundanzproblem, obwohl alle Attribute direkt von ihm abhän-gen.

Page 90: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-38 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Das Wiederholungsproblem können wir dadurch beseitigen,daß wir zwei Relationen (Entitätstypen) aufstellen, die in 2NFsind

ma(manr,name,ort)abt(kst,kstort,kstleiter)

wobei wir aber feststellen, daß so ein Informationsverlust(Beziehung Mitarbeiter zur Abteilung) entstanden ist.

Eine solche Transformation ist natürlich nicht zufrie-denstellen. Richtig wäre es, wenn diese Beziehungvom Mitarbeiter zur Abteilung erhalten bliebe. Hierzuführen wir einen Fremdschlüssel (Verbindungs-schlüssel, Verknüpfungsschlüssel) beim Mitarbeiterein

ma(manr,name,ort,kst)

In dieser Tabelle haben wir jetzt wieder eine Werte-wiederholung in der letzten Spalte. Dies ist aber ei-ne erlaubte Wiederholung, da sie innerhalb einesVerbindungsschlüssels auftritt.

Wir haben durch die-se Transformation dieWertewiederholung ineiner Attributspalte ineine Schlüsselwie-derholung eines Ver-bindungsschlüssels

umgewandelt.

Es handelt sich hierbei aber bereits um eine Normalisie-rung in 3NF, da unsere Abhängigkeiten gegenseitig unab-hängig sind. Um dies besser zu verstehen, wandeln wirnoch einmal unser Beispiel ab.

2NF kurzgefaßt2NF liegt vor, wenn der Primärschlüssel chaotisch ist. Ist er selbsterklärend, d. h. ist erzusammengesetzt, so darf keines der Attribute nur von einem Teil des Schlüssels abhän-gen. Der Schlüssel muß also minimal sein.

Wird also die Mitarbeiternummer aus der Kostenstelle und einer laufenden Nummer zu-sammengesetzt (so macht das eben die Personalabteilung schon immer), dann darf derMitarbeitersatz keine Informationen über die Abteilung mehr enthalten.

mamanr name ort

102 Mayer München

110 Müller Eching

204 Scheibl Berlin

302 Huber München

308 Schuler Ulm

401 Schulze München

404 Adam Berlin

abtkst kstort kstleiter

01 München Becker

02 Berlin Alber

03 Stuttgart Schneider

04 München Alber

mamanr name ort kst

102 Mayer München 01

110 Müller Eching 01

204 Scheibl Berlin 02

302 Huber München 03

308 Schuler Ulm 03

401 Schulze München 04

404 Adam Berlin 04

manr

kst

name

ort

kstort

kstleiter

kst

Bild 2.1-19: Erfüllung der2NF und der 3NF

Page 91: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-39

Grundsätzlich falsch ist die Aussage in einigen Büchern und Zeitschriften, daß bereits dieExistenz eines Primärschlüssels die 2NF erfüllt.

F Tip: Der Verstoß gegen die 2NF ist häufig auf die unbedachte Benutzung eines zu-sammengesetzten Schlüssels (concatenated key) zurückzuführen. Ein solcherSchlüssel sollte also immer zur höchsten Vorsicht mahnen. Wer genau hinschautsieht, daß auch diese Zerlegung noch nicht in 2NF ist, da in der Mitarbeiternummerdie Kostenstelle steckt. Hier müssen wir die Regel, wie die Mitarbeiternummer ver-geben wird, untersuchen.

Alternative

Hierzu gilt folgende Erläuterung. Daß in unserem Beispieldie Abteilung zum Schlüssel gehört, ist genau betrachtetüberflüssig, da die Mitarbeiternummer bereits eindeutig ist.Hätten wir dagegen die Mitarbeiter pro Abteilung laufenddurchnumeriert, dann wäre der zusammengesetzte Schlüs-sel unbedingt notwendig (Bild 2.1-20). Beachten Sie bitte,daß jetzt die Pfeile zum Namen und Ort von der Attributkom-bination manr+kst ausgehen. Dies ist eine andere Situati-on als in Bild 2.1-17.

makst malfnr name ort kstort abtleiter

01 02 Mayer München München Becker

01 10 Müller Eching München Becker

02 04 Scheibl Berlin Berlin Alber

03 02 Huber München Stuttgart Schneider

03 08 Schuler Ulm Stuttgart Schneider

04 01 Schulze München München Alber

04 04 Adam Berlin München Alber

Um nun auch diesen Ansatz trotz des zusammensetzten Schlüssels in 2NF zu bringen,würden wir folgendermaßen zerlegen

abtkst kstort kstleiter

01 München Becker

02 Berlin Alber

03 Stuttgart Schneider

04 München Alber

malfnr

kst

name

ort

kstort

kstleiter

Bild 2.1-20: Zusammenge-setzter Schlüssel

makst malfnr name ort

01 02 Mayer München

01 10 Müller Eching

02 04 Scheibl Berlin

03 02 Huber München

03 08 Schuler Ulm

04 01 Schulze München

04 04 Adam Berlin

Page 92: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-40 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

In diesem Modell enthält der Entitätstyp abt alle Attribute,die voll funktional vom Schlüssel kst abhängen, währendder Entitätstyp ma alle anderen Attribute enthält, die vomvollständigen Schlüssel abhängen. Der Schlüssel diesesEntitätstyps wird zusammengesetzt aus kst,manr. EinInformationsverlust liegt nicht vor, da die Verknüpfung zwi-schen dem Mitarbeiter und der Abteilung über kst si-chergestellt ist (Bild 2.1-21). (Zur Erinnerung: Einzelne En-titäten oder Felder sind mit abgerundeten Ecken darge-stellt.)

Das Beispiel hinkt an dieser Stelle etwas, da wahrscheinlich eine solche Numerierung inder Praxis nicht erfolgen wird. Denken Sie nur einmal an einen Wechsel eines Mitarbei-ters von einer in eine andere Abteilung. Erhält er dann etwa eine neue Nummer?

Wir werden aber noch weitere Beispiele kennenlernen, bei denen das Problem nicht soauffällig ist. Es zeigt aber deutlich, daß die 2NF etwas anderes als die 3NF ist. Es sollaber noch einmal darauf hingewiesen werden, daß das doppelte Auftreten eines Attribut-wertes nicht notwendigerweise auf einen Verstoß gegen eine Normalform hinweist. VieleMitarbeiter wohnen am gleichen Ort. Dies ist aber zufällig. Zieht ein Mitarbeiter um, dannändert sich nur sein Ort, nicht der Ort der Mitarbeiter, die vorher in diesem Ort schonwohnten.

Wird der Ort dagegen umbenannt, dann liegt eine Änderungsanomalie vor. Die Frage, diesich für uns stellt, ist die, ob ein solcher Vorgang überhaupt vorkommt und wenn ja, wieoft.

2.1.8.3 3. Normalform (3NF)

Die 2NF stellt noch keine Garantie für Änderungsanomalien dar. Denken Sie nur an diezurückliegende Umstellung der Postleitzahlen.

Um diese Abhängigkeit darzustellen, führen wir den Begriff der transitiven Abhängigkeitein.

Definition 2.1-15: Transitive AbhängigkeitGegeben sei eine Relation R

R ⊆ M1×M2×...×Mn

Das Attribut Ma heißt transitiv abhängig vom Attribut Mu, wenn es ein Attribut Mv gibt,so daß gilt

Ma ist abhängig von MvMv ist abhängig von MuMu ist nicht abhängig von Mv.

Dies bedeutet, daß Mu und Mv keine (getrennten) Schlüssel der Datei sind, die ausge-tauscht werden können.

malfnr

kst

name

ort

kstort

kstleiter

kst

Bild 2.1-21: Korrektur

Page 93: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-41

Definition 2.1-16: 3. Normalform (3NF)Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in 3. Normalform, wenn sie in 2. Normalform ist und zusätzlich für alle Nichtschlüs-selattribute Ma kein Primärschlüssel existiert, von dem Ma transitiv abhängig ist.

Wir können diese Definition auch anders angeben

Alternative: 3. Normalform (3NF)

Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in 3. Normalform, wenn sie in 2. Normalform ist und alle Nichtschlüsselattribute

unabhängig voneinander sindfunktional vom Primärschlüssel abhängen

Zur Erklärung dieser Normalform benutzen wir folgendes Beispiel. Es erfaßt unsere Liefe-ranten und deren Produkte

lieferlnr lname lplz lort pnr pname pfarbe pgewicht mengeL1 Mayer 1000 Berlin P1 Floppy rot 20 300L1 Mayer 1000 Berlin P2 Papier grün 500 200L1 Mayer 1000 Berlin P3 Toner schwarz 30 400L1 Mayer 1000 Berlin P4 Stift rot 40 200L1 Mayer 1000 Berlin P5 Kuli gelb 50 100L1 Mayer 1000 Berlin P6 Marker gelb 100 100L2 Müller 3000 Hannover P1 Floppy rot 20 300L2 Müller 3000 Hannover P2 Papier grün 500 400L3 Huber 6000 Frankfurt P2 Papier grün 500 200L4 Schulz 1000 Berlin P2 Papier grün 500 200L4 Schulz 1000 Berlin P4 Stift rot 40 300L4 Schulz 1000 Berlin P5 Kuli gelb 50 400...

Erst wenn wir den Primärschlüssel festlegen, wir diese Tabelle zu einer ordentlichenMenge und damit zu einer Entität

liefer(lnr,lname,lplz,lort,pnr,pname,pfarbe,pgewicht,menge),

Der Entitätstyp befindet sich in 1NF, alle Attribute enthalten atomare Werte, kein Attributtaucht doppelt auf. Es ist keine logische Wiederholung in waagrechter Richtung festzu-stellen.

Page 94: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-42 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Der Entitätstyp befindet sich sicher nicht in 3NF, ggf. auch nicht in 2NF. Wir erkennenWiederholungen in senkrechter Richtung. Wir benutzen einen zusammengesetzten(sprechenden) Schlüssel.

Die funktionalen Abhängigkeiten der Attribute wollen wir wiederum in einer Diagrammformdarstellen. Hierzu zeichnen wir einfach Pfeile von den führenden Attributen zu den ab-hängigen (geführten) Attributen. So können wir die erkannten Abhängigkeiten in Bild 2.1-22 darstellen.

Die Lieferantennummer bestimmt den Namen,die Postleitzahl und den Ort. Die Produkt-nummer bestimmt den Produktnamen, dieFarbe und das Gewicht. Beide Nummern zu-sammen legen die Menge fest.

Zur Erzeugung der 2NF zerlegen wir unsereTabelle in drei getrennte Tabellen mit denAbhängigkeiten nach Bild 2.1-23.

Untersuchen wirnun die Nicht-

schlüsselattribute, so sehen wir sofort, daß die Produktattributeunabhängig voneinander sind. So ist die Farbe unabhängig vomGewicht und dem Namen usw. Bei der Lieferantenadresse fin-den wir aber eine transitive Abhängigkeit. Sowohl der Ort wieauch die Postleitzahl sind eindeutig durch die Lieferantennum-mer festgelegt. Beide sind jedoch voneinander abhängig (gilt sofür die alten Postleitzahlen, für die neuen Postleitzahlen müßtenwir noch Straße und Hausnummer ergänzen. Aber wir wollendas Beispiel nicht zu kompliziert gestalten).

Die zurückliegende Umstellung der Postleitzahlen führte diesetransitive Abhängigkeiten in den Adreßbeständen der meistenFirmen deutlich vor Augen. Ein Entwurf, der die 3NF erfüllt wür-de wie in Bild 2.1-24 aussehen.

Im Grund haben wir zwei Freiheitsgra-de, denn wir hätten auch die Postleit-zahl beim Lieferanten belassen können, um über diese den Ortzu suchen (Bild 2.1-25). Welche der Zerlegungen ist nun diebessere? Bei den neuen Postleitzahlen ist dies klar. Hier kön-nen wir aus der Postleitzahl den Ort, aber nicht mehr die Straßeoder die Hausnummer ableiten.

menge

lnr

pnr

lname

lplz

lort

pname

pfarbe

pgewicht

Bild 2.1-22: Abhängigkeiten

pnrpname

pfarbe

pgewicht

lnr

lname

lplz

lort

mengelnr

pnr

lnr

Bild 2.1-23: Erzeugungder 2NF

lnr

lname

lplz

lort

lort

Bild 2.1-24: Erzeugungder 3NF

Page 95: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-43

Nun könnten wir Postleitzahl und Straße+Hausnummer spei-chern, um daraus den Ort zu bestimmen, wobei dieser wiederumnur von der Postleitzahl abhängt usw. Diese Überlegungen füh-ren zu recht komplexen Überlegungen. Aber ist es auch im vor-liegenden, vereinfachten Fall möglich, für eine der Zerlegungenzu plädieren?

Hier spielen bei völliger Gleichberechtigung Überlegungen zumSpeicherverbrauch eine Rolle. So ist die Speicherung der Post-leitzahl als komprimierte Kennung eines Ortes platzsparenderals das Anhängen des Ortes an den Lieferanten.

Viel häufiger wird aber die Entscheidung von den Änderungenabhängen, die notwendig sind. Haben wir uns für die Postleit-zahl entschieden, dann können wir den Ortsnamen ohne Probleme ändern. Hätten wiruns für den Ort entschieden, so müßten wir die gesamte Datei durchsuchen, um den Ortan vielen Stellen zu ändern.

3NF kurzgefaßtEin Verstoß gegen die 3NF liegt mit hoher Wahrscheinlichkeit dann vor, wenn in einerTabelle immer wieder Attributpaare (auch in kombinierter Form) zwischen den Nicht-schlüsselattributen vorkommen.

Nun wollen wir uns noch einmal die Mitarbei-ter anschauen. Schließlich steht die Behaup-tung im Raum, daß auch bei ihr eine transitiveAbhängigkeit vorliegt. Hierzu zeichnen wirBild 2.1-26 und sehen, wie kstort undkstleiter von kst abhängt. Nun könnteman argumentieren, wozu eigentlich das At-tribut kst notwendig ist. Auch wenn es feh-len würde, wäre eine transitive Abhängigkeit zwischen Kostenstellenleiter und Ort festzu-stellen.

2.1.8.4 Boyce-Codd-Normalform (BCNF)

Definition 2.1-17: Boyce-Codd-Normalform (BCNF)Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in Boyce-Codd-Normalform, wenn kein Attribut in R von einem Schlüssel transitivabhängt.

Die BCNF ist eine Verschärfung der 3NF. Bitte beachten Sie den kursiv hervorgehobenenUnterschied. Bei der 3NF steht an dieser Stelle Nichtschlüsselattribut. Die originale 3NFhatte Probleme mit den Fällen, daß ein Entitätstyp

lnr

lplz

lort

lnr

lplz

lort

So

oder so?

Bild 2.1-25: Wahlmög-lichkeiten

manr

name

ortkstort

kstleiterkst

Bild 2.1-26: Transitive Abhängigkeit

Page 96: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-44 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

a) mehrfache Schlüsselkandidaten hatte, wobeib) diese Schlüsselkandidaten zusammengesetzt waren undc) die Schlüsselkandidaten sich überlappten, d. h. mindestens ein gemeinsames Attribut

hatten.

Diese Form ist deutlich strenger als die 3NF. Daher wäre es falsch, sie auch 3NF zu nen-nen. Sie wird daher nach ihren Erfindern Boyce/Codd Normalform (BCNF) genannt.

Da die aufgeführten Bedingungen a) - c) nicht sehr häufig in der Praxis auftreten, genügtes i. a. die 3NF nachzuweisen.

Auch die BCNF kann alternativ definiert werden. Hierzu ist es notwendig, die Determi-nante einzuführen. Eine Determinante ist ein Attribut, von dem andere Attribute (voll)funktional abhängen. In unserem letzten Beispiel sind lnr, lort, (lnr,pnr) undpnr Determinanten. Damit formulieren wir positiv

Alternative: Boyce-Codd-Normalform (BCNF)Eine Relation R

R ⊆ M1×M2×...×Mn

heißt in BCNF, wenn jede Determinante Schlüsselkandidat ist.

Unser Entitätstyp liefer ist nicht in BCNF, da lort nicht zu den Schlüsselkandida-ten gehört. Dies bedeutet, daß wir in unseren funktionalen Abhängigkeitsdiagrammen nurPfeile von den Schlüsselkandidaten (also nicht nur vom Primärschlüssel) zu allen Attri-buten haben und keine Pfeile zwischen den Attributen. Von den Schlüsselkandidaten ge-hen immer Pfeile aus.

F Hinweis: Die BCNF setzt nicht voraus, daß eine der drei anderen Normalformengelten oder daß die transitive Abhängigkeit gilt. Somit ist ihre Definition sehrviel einfacher und leichter nachzuweisen.

Wir sehen auch, daß unsere Zerlegungen zur Erfüllung der 1NF und 2NF gegen dieBCNF verstoßen, da immer lort als Determinante ohne die Eigenschaft Schlüsselkan-didat existiert. Erst die letzte Zerlegung führt dazu, daß unser in Relationen und Entitäts-typen zerlegter Ausgangsentitätstyp sowohl in 3NF wie auch in BCNF vorliegt.

Um nun ein Beispiel für die BCNF zu konstruieren betrachten wir zuerst einmal zwei ele-mentfremde (nichtüberlappende) Schlüsselkandidaten. Hierzu nehmen wir an, daß derLieferantenname lname eindeutig sei. Somit sind im Entitätstyp

liefer(lnr,lname,lplz,lort)

Page 97: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-45

lnr und lname Schlüsselkandidaten. Nehmen wir weiterhinan, daß die Postleitzahl und der Ort unabhängig voneinandersind, dann ergibt sich das funktionale Abhängigkeitsdiagrammwie in Bild 2.1-27.

Obwohl das funktionale Abhängigkeitsdiagramm recht komplexist, erkennen wir sofort die BCNF. Das Attribut lname kannalso als Aliasschlüssel für diesen Entitätstyp verwendet wer-den.

Nun wollen wir ein Beispiel konstruieren, bei dem sich die Schlüsselkandidaten überlap-pen. Zu diesem Zweck gehen wir von gerade besprochenen Beispiel aus, d. h. wir neh-men einen eindeutigen Lieferantennamen an, und ergänzen Produktnummer und Mengezum Entitätstyp

llp(lnr,lname,pnr,menge)

Die Schlüsselkandidaten sind (lnr,pnr)und (lname,pnr). Ist dieser Entitätstyp inBCNF? Hier müssen wir schon etwas genauerüberlegen (Bild 2.1-28). Dadurch daß wir in-nerhalb der beiden Schlüsselkandidaten nocheinmal zwei Determinanten lnr und lnamehaben, die selbst nicht Schlüsselkandidatensind, ist die BCNF nicht erfüllt. Dies können wiruns an der Tabelle selbst schnell klar machen.

Schließlich hat sich an der Tabelle eigentlich nichtviel dadurch geändert, daß lname nun eindeutig ist.Wir haben all die beschriebenen Anomalien wie inunserem Ausgangsentitätstyp. Mit anderen Wortenhaben wir die gleichen Wiederholungen in senk-rechter Richtung. Um Mayer in Müller zu än-dern, müssen wir alle Datensätze anschauen.

Interessant ist nun, daß diese Relation in 3NF nach der ursprünglichen Definition ist.

Wir können nun dieses Problem wieder durch Zerlegung (Projektion) lösen, indem wirfolgende beiden Entitätstypen kreieren

ll(lnr,lname) lp(lnr,pnr,menge)

wobei es eine äquivalente Lösung der Art

ll(lnr,lname) lp(lname,pnr,menge)

gibt. Die Wahl des Primärschlüssels in ll ist willkürlich.

lnr lplz

lortlname

Bild 2.1-27: Entitätstyp inBCNF

lnr

lname

pnr menge

Bild 2.1-28: Überlappende Schlüssel

llplnr lname pnr mengeL1 Mayer P1 300L1 Mayer P2 200L1 Mayer P3 400L1 Mayer P4 200...

Page 98: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-46 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Ø Beispiel:Ein weiterer interessanter Fall ergibt sich ausunserem Hochschulbeispiel, das wir dadurchvereinfachen, indem wir die Studenten weg-lassen und nur die Klassen betrachten

Eine Klasse kname wird in einem Thema tname von einem Professor pname unter-richtet. Wir wollen noch folgende Bedingungen annehmen

• in jeder Klasse unterrichtet nur ein Professor ein Thema;• jeder Professor unterrichtet nur ein Thema (aber ein Thema kann von verschiedenen

Professoren unterrichtet werden).

Wie sehen nun die funktionalen Abhängigkeiten in derRelation ktp aus? Klasse und Thema bestimmeneindeutig den Professor (1. Bedingung). Die zweiteEinschränkung besagt aber, das das Thema vom Pro-fessor selbst abhängt, da dieser und nur dieser dasThema unterrichtet. Da umgekehrt ein Thema vonmehreren Professoren gehalten wird, gibt es keinefunktionale Abhängigkeit pname von tname (Bild2.1-29). Diese rekursiven Abhängigkeiten sind garnicht so selten. Denken Sie nur an die neuen

Postleitzahlen (Bild 2.1-30). Zwar bestimmen Ort und Straße (inklusive Hausnummer) diePostleitzahl. Aus der Postleitzahl können wir aber immer den Ort herauslesen.

Wir haben erneut zwei überlappende Schlüsselkandi-daten, nämlich (kname,tname) und(kname,pname). Wiederum ist eine Relation in 3NFaber nicht in BCNF und wir sehen, daß die RelationÄnderungsanomalien besitzt, was sich in denWiederholungsfeldern in senkrechter Richtung be-merkbar macht. Nehmen wir nur an, daß für die KlasseElektrotechnik das Thema Physik gestrichen wird. Dann geht auch die Informati-on verloren, daß Prof. Rehnitz dieses Thema lehrt. pname ist zwar eine Determi-nante aber kein Schlüsselkandidat. Das Problem lösen wir wiederum durch Zerlegung(Projektion) in zwei Entitätstypen

kp(kname,pname) und TP(tname,pname)

kp tpkname pname pname tname395WD6TI1 Scheibl Scheibl Datenbanken395WD6TI1 Neuner Neuner Physik395WD7NT2 Scheibl Rehnitz Physik395WD7NT2 Rehnitz

ktpkname tname pname395WD6TI1 Datenbanken Scheibl395WD6TI1 Physik Neuner395WD7NT2 Datenbanken Scheibl395WD7NT2 Physik Rehnitz

kname

tthema

pname

Bild 2.1-29: Rekursive Abhän-gigkeit

ort

strasse

plz

Bild 2.1-30: Postleitzahlen

Page 99: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-47

Im kp Entitätstyp ist das ganze Tupel Primärschlüssel, da nur die Kombination eindeutigist. Im Entitätstyp tp ist pname der Primärschlüssel, von dem tname abhängig ist.

Wir lösen zwar eine Reihe von Problemen, handeln uns aber umgekehrt ein neues,schwerwiegendes Problem ein. Die beiden Projektionen kp und tp können nicht unab-hängig voneinander verändert werden. Genaugenommen können wir die funktionale Ab-hängigkeit des Professors von Klasse und Thema

(kname,tname) → pname

nicht aus der einzig entstandenen Abhängigkeit

pname → tname

ableiten. Nehmen wir einmal an, wir wollten in kp für die Klasse 95WD6TI1 nochProf. Rehnitz eintragen, was vom Aufbau des Entitätstyps ohne weiteres möglichwäre. Dies würde aber dazu führen, daß die Klasse zweimal Physik hat, was wir wie-derum nur durch Rückgriff auf tp feststellen können. Wir müssen leider feststellen, daßunser Wunsch, eine Relation in BCNF und unabhängige Komponenten zu zerlegen, nichtgleichzeitig erfüllbar ist. n

Ø Beispiel:In unserem letzten Beispiel stellen wir uns vor, eine Ergebnisliste (Rangfolgeliste) derPrüfungsnoten der Studenten in einem Fach erstellen zu wollen. Ein Eintrag in unsererEntitätsmenge ste zeigt an, welcher Student in welchem Fach geprüft wurde und wel-ches Ergebnisposition er im Vergleich zu den anderen Studenten der Klasse erreicht hat.Zur Vereinfachung des Problems wollen wir annehmen, daß es keine Doppeltreffer gibt,d. h. alle Studenten erreichen unterschiedliche Noten. Statt der Rangfolge könnten wirauch die Punktzahl, die differenzierten Noten o. ä. nehmen.

Nun ist leicht einzusehen, daß die Angabe des Studenten und des Themas eindeutig dasErgebnis bestimmen. Umgekehrt können wir Thema und Ergebnis vorgeben, um den Stu-denten zu bestimmen. Nur der Fall, daß wir Student und Ergebnis vorgeben, ist nicht lös-bar, da ein Student bei mehreren Themen z. B. der Beste sein kann. Die zugehörigenfunktionalen Abhängigkeitsdiagramme finden wir in Bild 2.1-31.

Erneut haben wir zweiüberlappende Schlüs-selkandidaten, nämlich(student,thema)und (thema,ergebnis). Die Rela-tion ist in BCNF, da bei-de Schlüsselkandidatendie einzigen Determi-

nanten der Relation sind. Stellen wir eine Tabelle auf, so erkennen wir, daß es zu keinenÄnderungsanomalien kommt. Somit führen überlappende Schlüsselkandidaten nicht un-bedingt in allen Fällen zu Problemen.

sname

tthema

eposit

tthema

eposit

sname

Bild 2.1-31: Funktionale Abhängigkeiten in der Relation ste

Page 100: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-48 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

stesname tname epositsname tname epositMayer Datenbanken 3Mayer Rechnungswesen 5Mayer Rechnerarchitekturen 1Mayer Schaltungstechnik 2

nZusammenfassend können wir feststellen, daß das Konzept der BCNF ein Reihe vonProblemen, die bei der 3NF auftreten können (zumindest theoretisch), beseitigt. Die Prü-fung auf BCNF ist grundsätzlich einfacher als auf 3NF, da kein Bezug auf 1NF, 2NF, Pri-märschlüssel oder transitive Abhängigkeit gemacht wird. Der Bezug zu den Schlüs-selkandidaten kann auf die grundlegendere Betrachtung zur funktionalen Abhängigkeitzurückgeführt werden.

Andererseits sind die Konzepte des Primärschlüssels, der transitiven Abhängigkeit usw.für die Praxis recht hilfreich, wie wir im nächsten Kapitel sehen werden.

2.1.8.5 4. Normalform (4NF)

Ø Beispiel:Zur Erläuterung der 4. Normalform (4NF) stellen wir uns vor, eine Liste der Lehrveran-staltungen inklusive der Lehrinhalte aufstellen zu müssen. Diese Relation tpi bestehtjeweils aus dem Thema, einer Liste der Professoren, die das Thema halten können, undeinem Inhaltsverzeichnis, d. h. einer Liste von Einzelthemen

tpithema professor inhaltDatenbanken Scheibl

Oßwald Pieper

Grundlagen Entwurf Realisierung

Physik Neuner Rehnitz Scheibl

Grundlagen Mechanik Optik

... ... ...

Die in den Listen aufgeführten Professoren können alle im Inhalt aufgeführten Kapitel leh-ren, wobei beide Listen beliebig lang sein können. Abweichend von der Realität nehmenwir an, daß die Professoren die Lehrinhalte völlig gleich unterrichten, was nichts anderesheißt, daß die Inhalte unabhängig von den Professoren sind. Weiterhin wollen wir an-nehmen, daß sowohl die Professoren wie auch die Kapitel beliebig oft auftreten können(auch wenn sich dann die Studenten über die dauernden Stoffwiederholungen beschwe-ren). Es wird also künstlich angenommen, daß die Grundlagen von Datenbanken undPhysik gleich wären (hihi).

so oder so?

Page 101: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-49

Wir versuchen nun diese Tabelle zunormalisieren. Dabei stellen wir sehrschnell fest, daß eigentlich keine funk-tionalen Abhängigkeiten existieren.Damit können wir die bisherigenÜberlegungen nicht dazu benutzen,diese Liste in Projektionen zu zerle-gen, die möglichst unabhängig von-einander sind und weiteren Kriteriengenügen. Da wir diese Liste aufgrundihrer „doppelten Unendlichkeit“ nichtspeichern können, „plätten“ wir siedurch redundante Daten. Damit verliertsie natürlich ihren Primärschlüssel.

Alle drei Felder zusammen sind eineindeutiger Schlüssel.

Die Ziele einer normalisierten Versionvon tpi müssen sein

ein Tupel (Kombination) (thema,professor,inhalt) erscheint in tpi nur, wennein Thema thema von einem Professor professor gelehrt werden kann und dieserden Inhalt inhalt vorträgt. Wir erkennen, daß für ein bestimmtes Thema alle Kombi-nationen von Lehrer und Inhalte existieren. Somit gilt

Wenn tupel(thema,professor1,inhalt1),(thema,professor2,inhalt2) existierendann exisitieren auch tupel(thema,professor1,inhalt2),(thema,professor2,inhalt1)

Diese Aussage geht davon aus, daß wir (noch) keine getrennten Listen für die Inhalte derThemen haben. Treffen wir also auf zwei Kombinationen, so können wir behaupten, daßes auch die zugehörigen Permutationen (außer Thema natürlich) in der Tabelle gibt.

Wir erkennen sofort, daß diese Tabelle eine Menge Redundanz enthält und daß vieleAnomalien existieren. Soll ein weiterer Prof. Schebesta für das Thema Datenban-ken eingetragen werden, so müßten wir zuerst einmal die Inhalte suchen und dann dreineue Datensätze (Tupel) in unsere Liste eintragen. Wird ein Kapitel des Inhaltes umbe-nannt, so müssen wir sequentiell die gesamte Datei durchsuchen.

Wir könnten nun einwenden, daß es aufgrund der obigen Bedingung genügt, nur ein Tu-pel mit dem neuen Professor und einem beliebigen Inhalt einzutragen. Wir könnten ja dieanderen Themen bei irgendeinem anderen Professor suchen. Einer müßte vollständig mitallen Inhalten verknüpft sein. Stellen wir uns aber nur vor, wenn wir diesen löschen, dannverschwindet u. U. der gesamte Inhalt, weil wir zufälligerweise alle anderen Professorenimmer nur mit dem 1. Kapitel z. B. Grundlagen verknüpft haben. Wir wollen die weite-ren Probleme beim Einfügen eines neuen Inhaltes, beim Ändern oder Löschen gar nichtweiter verfolgen.

Die Tabelle ist in BCNF, denn nur der gesamte Datensatz ist Schlüssel

tpithema professor inhaltDatenbanken Scheibl GrundlagenDatenbanken Scheibl EntwurfDatenbanken Scheibl RealisierungDatenbanken Oßwald GrundlagenDatenbanken Oßwald EntwurfDatenbanken Oßwald RealisierungDatenbanken Pieper GrundlagenDatenbanken Pieper EntwurfDatenbanken Pieper RealisierungPhysik Neuner GrundlagenPhysik Neuner MechanikPhysik Neuner OptikPhysik Rehnitz GrundlagenPhysik Rehnitz MechanikPhysik Rehnitz OptikPhysik Scheibl GrundlagenPhysik Scheibl MechanikPhysik Scheibl Optik... ... ...

Page 102: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-50 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

tpi(thema,professor,inhalt)

Es ist klar, daß die Probleme durch die Unabhängigkeit der Inhalte von den Professorenherrührt. Wir erkennen auch, daß wir eine erste Verbesserung durch die Zerlegung inzwei Projektionen

tp(thema,professor) und ti(thema,inhalt)

erreichen, die beide in BCNF sind

tp tithema professor thema inhaltDatenbanken Scheibl Datenbanken GrundlagenDatenbanken Oßwald Datenbanken EntwurfDatenbanken Pieper Datenbanken RealisierungPhysik Neuner Physik GrundlagenPhysik Rehnitz Physik MechanikPhysik Scheibl Physik Optik... ... ...

Obwohl dieses Problem der BNCF sehr früh erkannt wurde, dauerte es doch bis zum Jahr1977, bis eine saubere, theoretische Basis geschaffen wurde. Hierzu führte Fagin denBegriff der mehrwertigen Abhängigkeiten (multivalued dependencies MVD) ein. Unabhän-gig von den komplexen theoretischen Grundlagen besteht unser Ziel unabhängige Wie-derholungsgruppen zu separieren, was wir durch die obigen Tabellen durchgeführt ha-ben.

Die durchgeführte Zerlegung ist korrekt und weiterführend. Die Schwierigkeit bestehtdarin, daß es keine funktionalen Abhängigkeiten gibt, auf deren Basis wir diese Zerlegungdurchführen. Statt dessen haben wir die Zerlegung intuitiv aufgrund der mehrwertigenAbhängigkeiten realisiert. Die mehrwertigen Abhängigkeiten sind Verallgemeinerungender funktionalen Abhängigkeiten, d. h. jede funktionale Abhängigkeit ist eine mehrwertigeAbhängigkeit. Das Umgekehrte gilt aber nicht, d. h. es existieren mehrwertige Abhängig-keiten, die keine funktionale Abhängigkeiten sind.

In unserem Beispiel finden wir zwei mehrwertige Abhängigkeiten

tpi.thema þ tpi.professortpi.thema þ tpi.inhalt

Wir sagen hierzu „tpi.professor ist mehrfach abhängig von tpi.thema“. Dies be-deutet, daß ein Thema nicht einen einzigen, zugeordneten Professor besitzt. Vielmehrhandelt es sich um eine wohldefinierte Menge von Professoren. Dabei bedeutet ‘wohl-definiert’, daß die Menge der Professoren, die bei einem vorgegebenem Thema themaund einem vorgegebenen Inhalt inhalt das Paar (thema,inhalt) in tpi erfüllen,nur vom thema abhängt. Es ist also für die Menge unwichtig, welchen Inhalt wir vorge-ben.

Page 103: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-51

Definition 2.1-18: Mehrwertige AbhängigkeitGegeben sei eine Relation R mit den ggf. zusammengesetzten Attributen A, B und C.Dann existiert eine mehrwertigen Abhängigkeit

R.A þ R.B

in R dann und nur dann, wenn die Menge der b-Werte b∈B, die ein gegebenes Paar(a,c) erfüllen, nur von a abhängt und von c unabhängig ist.

Nach dieser Definition kann eine mehrwertige Abhängigkeit nur dann existieren, wenn dieRelation R wenigstens drei Attribute hat.

Wir können weiterhin zeigen, daß in einer gegebenen Relation R(A,B,C) die mehrwer-tige Abhängigkeit R.A þ R.B dann und nur dann gilt, wenn gleichzeitig R.A þ R.Cgilt. Mehrwertige Abhängigkeiten treten immer in Paaren auf. Aus diesem Grund stelltman i. a. beide mehrwertigen Abhängigkeiten in einer einzigen Notation dar

R.A þ R.B | R.C

also unter Verzicht auf den Relationenqualifizierer z. B.

thema þ professor | inhalt

Die Schwierigkeiten in unserem Beispiel liegen nun darin, daß wir dieses mehrwertigeAbhängigkeitspaar vorfinden, das gleichzeitig keine funktionalen Abhängigkeiten besitzt.Die von uns erzeugten Relationen tp und ti enthalten keine mehrwertigen Abhängig-keiten mehr, wodurch wir einen wesentlichen Fortschritt gemacht haben. Diese Zerlegungwird nun durch einen Satz von Fagin theoretisch untermauert

Satz 2.1-1: ZerlegungEine Relation R mit den Attributen A, B und C kann dann und nur dann verlustlos inihre zwei Projektionen R1(A,B) und R2(A,C) zerlegt werden, wenn die mehrwertigeAbhängigkeit A þ B | C in R existiert

Definition 2.1-19: 4. Normalform (4NF)Eine Relation R mit einer mehrwertigen Abhängigkeit A þ B ist dann und nur dann in4. Normalform, wenn alle Attribute von R auch funktional von A abhängig sind.

Somit sind die einzigen erlaubten Abhängigkeiten in R von der Form K→X, d. h. funk-tionale Abhängigkeiten eines Attributs von einem Schlüsselkandidaten K.

Alternative Definition:Eine Relation R ist dann und nur dann in 4. Normalform, wenn sie in BCNF ist und allemehrwertigen Abhängigkeiten in R auch funktionale Abhängigkeiten sind.

Unsere Beispielrelation tpi ist nicht in 4NF, da es mehrwertige Abhängigkeiten enthält,die nicht funktional sind. Die beiden Projektionen tp und ti sind dagegen in 4NF.

Page 104: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-52 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Die 4NF beseitigt eine weitere unerwünschte Struktur. Sie stellt somit einen Fortschrittgegenüber der BCNF dar. Fagin hat übrigens nachgewiesen, daß wir jede Relation in4NF bringen können, obwohl dies durchaus nicht immer sinnvoll ist.

Wir bringen eine Relation in 4NF mit dem Ziel, alle voneinander unabhängigen, mehrwer-tigen Abhängigkeiten im Schlüssel der Relation zu beseitigen. Der Schlüssel wird dadurchminimiert.

2.1.8.6 5. Normalform (5NF)

Wir wollen uns nun der 5. Normalform zuwenden. Zu unserer Überraschung werden wirlernen, daß diese Normalform nicht wie die bisherigen durch verlustlose Zerlegung er-reicht werden kann.

Zur Vorbereitung führen wir noch einen Begriff ein.

Definition 2.1-20: n-zerlegbare RelationEine Relation R wird n-zerlegbar (n≥2) genannt, wenn sie sich verlustlos in n Projektio-nen aber nicht in m Projektionen (m>n) zerlegen läßt.

Eine Relation, die sich verlustlos in zwei Projektionen zerlegen läßt, heißt somit 2-zerleg-bar.

Betrachten wir nun einmal die nachfolgende Relation lpr. Der Primärschlüssel dieserRelation besteht aus allen Feldern. Sie enthält keine funktionalen und keine mehrwertigenAbhängigkeiten. Somit ist sie in 4NF. Wir zerlegen nun diese Relation in drei binäre Re-lationen lp, pr und rl. Anschließend vereinigen (join) wir die Relationen stufenwei-se.

Page 105: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-53

lprlnr pnr rnrL1 P1 R2L1 P2 R1L2 P1 R1L1 P1 R1

lp pr rllnr pnr pnr rnr rnr lnrL1 P1 P1 R2 R2 L1L1 P2 P2 R1 R1 L1L2 P1 P1 R1 R1 L2

JOIN über pnr

lnr pnr rnrL1 P1 R2L1 P1 R1L1 P2 R1L2 P1 R2L2 P1 R1

JOIN über (rnr,lnr)

ursprüngliches lpr

Zuerst vereinigen wir lp mit pr über pnr. Dabei entsteht ein zusätzliches Tupel, dasin der Tabelle grau unterlegt ist. Die zweite Vereinigung mit rl über (rnr,lnr) be-seitigt dieses Tupel. Das Endergebnis ist wieder die ursprüngliche Relation. Das Verfah-ren können wir nun für die beiden anderen noch möglichen Erstvereinigungen durchfüh-ren. Grundsätzlich erhalten wir wieder die Ausgangsrelation.

Diese Eigenschaft hängt auf den ersten Blick von der aktuellen Werteverteilung in lprab und kann zu einem anderen Zeitpunkt so nicht mehr funktionieren. Tatsächlich könnenwir aber eine Reihe von zeitunabhängigen Bedingungen aufstellen, die eine solche ver-lustlose 3-Zerlegung garantieren.

Betrachten wir zuerst die Aussage „lpr ist gleich den Vereinigungen seiner drei Projek-tionen lp, pr und rl“, was gleichbedeutend mit den Aussagen

WENN das Paar (lnr1,pnr1) in lp existiertUND das Paar (pnr1,rnr1) in pr existiertUND das Paar (rnr1,lnr1) in rl existiertDANN existiert das Tripel (lnr1,pnr,rnr) in lpr.

Diese Bedingung können wir umschreiben in eine Bedingung für lpr

WENN (lnr1,pnr1,rnr2), (lnr2,pnr1,rnr1), (lnr1,pnr2,rnr1) inlpr existieren, DANN existiert auch (lnr1,pnr1,rnr1) inlpr.

Page 106: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-54 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Sollte also die letzte (zugegebenermaßen ungewöhnliche) Bedingung für alle denkbarenKombinationen gelten, dann eine zeitunabhängige Aussage über lpr. Wir erkennen diezyklische Natur der Beschränkung.

Eine Relation ist dann und nur dann n-zerlegbar (n>2), wenn sie einige solcher zyklischerBeschränkungen erfüllt.

Nehmen wir einmal an, daß unsere Relation diese zeitunabhängige Bedingung, die wirder Einfachheit halber 3Z (3-Zerlegung) Bedingung nennen wollen. Was bedeutet diesnun im Konkreten? Für den durch die Relation beschriebenen Ausschnitt aus der realenWelt gilt

a) Wenn Mayer Papier liefert undb) Papier in der Abteilung Verkauf eingesetzt wird undc) Mayer die Abteilung Verkauf versorgt,

dann

d) liefert Mayer das Papier für die Abteilung Verkauf.

Wir sollten darauf achten, daß a) bis c) normalerweise nicht d) implizieren. Dies ist einklassischer Fehlschluß. Durch die zusätzliche 3Z Bedingung ist aber der Schluß in die-sem speziellen Fall richtig.

Da die 3Z Bedingung dann und nur dann erfüllt ist, wenn die betrachtete Relation gleichder Vereinigung bestimmter Projektionen ist, bezeichnen wir die Bedingung als Vereini-gungsabhängigkeit (join dependency JD). Die Vereinigungsabhängigkeit ist also eine Ei-genschaft (Beschränkung der Allgemeinheit) wie mehrwertige oder funktionale Abhängig-keit.

Definition 2.1-21: VereinigungsabhängigkeitEine Relation R erfüllt dann und nur dann die Vereinigungsabhängigkeit

*(X,Y,...,Z),

wenn R gleich der Vereinigung ihrer Projektionen X,Y,...,Z ist, wobei X,Y,...,ZUntermengen der Attributmenge von R enthalten.

Im Beispiel erfüllt die Relation lpr die Vereinigungsabhängigkeit *(lp,pr,rl). Da-mit ist die Relation lpr 3-zerlegbar.

Die Frage, die sich erhebt, ist natürlich: „Sollen wir zerlegen?“ Die Antwort ist nicht ganzeindeutig: „Möglicherweise ja.“ Die Relation lpr leidet unter einer Reihe von Ände-rungsanomalien, die durch die 3-Zerlegung beseitigt werden. Wir wollen nur die Anomali-en an der vollständigen Relation betrachten

Page 107: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-55

Wenn wir (L2,P1,R1) eintragen, so muß auch (L1,P1,R1)eingetragen werden.Die Umkehrung ist nicht richtig, d. h. wenn wir (L1,P1,R1) eintra-gen, so müssen wir nicht (L2,P1,R1) ergänzen.

lp pr rllnr pnr pnr rnr rnr lnrL1 P1 P1 R2 R2 L1L1 P2 P2 R1 R1 L1

JOIN über pnr

lnr pnr rnrL1 P1 R2L1 P1 R1

JOIN über (rnr,lnr)

lprlnr pnr rnrL1 P1 R2L1 P2 R1

Wir können (L2,P1,R1) ohne Seiteneffekte löschen.

Wenn wir (L1,P1,R1) löschen, dann müssen wir auch(L2,P1,R1) löschen.

Fagins Satz (Satz 2.1-1) über die verlustlose Zerlegung von R(A,B,C) in R1(A,B)und R2(A,C) unter der notwendigen und hinreichenden Bedingung der mehrwertigenAbhängigkeit AþB|C kann nun neu definiert werden

Satz 2.1-2: Mehrwertige AbhängigkeitDie Relation R(A,B,C) erfüllt dann und nur dann die Vereinigungsabhängigkeit*(AB,AC), wenn für sie die mehrwertige Abhängigkeit AþB|C gilt.

Da wir diesen Satz auch als Definition der mehrwertigen Abhängigkeit benutzen können,folgt daraus, daß die mehrwertige Abhängigkeit nur ein Sonderfall der Vereinigungsab-hängigkeit ist, bzw. daß die Vereinigungsabhängigkeit eine Verallgemeinerung der mehr-wertigen Abhängigkeit ist (genauso wie die mehrwertige Abhängigkeit eine Verallgemei-nerung der funktionalen Abhängigkeit ist).

Bei unserem Beispiel der Relation lpr stellen wir nun fest, daß diese eine Vereini-gungsabhängigkeit enthält, die aber keine mehrwertige Abhängigkeit (und damit keinefunktionale Abhängigkeit) ist. Es kann durchaus sinnvoll sein, so eine Relation in kleinerKomponenten, nämlich ihre Projektionen zu zerlegen, die durch die Vereinigungsabhän-

lprlnr pnr rnrL1 P1 R2L1 P2 R1

lprlnr pnr rnrL1 P1 R2L1 P2 R1L2 P1 R1L1 P1 R1

Page 108: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-56 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

gigkeit festgelegt sind. Dieser Zerlegungsprozeß kann solange wiederholt werden, bis dieRelation in 5. Normalform (5NF) ist.

Definition 2.1-22: 5. Normalform (5NF)Eine Relation R ist dann und nur dann in 5. Normalform (5NF) - auch Projektions-Ver-einigungs-Normalform (projection-join normal form PJ/NF) genannt - wenn jede Vereini-gungsabhängigkeit in R eine Konsequenz der Schlüsselkandidaten von R ist

Die Beispielrelation lpr ist nicht in 5NF, da sie eine bestimmte Vereinigungsabhängig-keit erfüllt, nämlich die 3Z Bedingung. Dies ist sicherlich keine Konsequenz ihres einzigenSchlüsselkandidaten (der Kombination aus allen Attributen). Anders ausgedrückt, dieRelation lpr ist nicht in 5NF, weil sie 3-zerlegbar ist und diese 3-Zerlegbarkeit nichtdadurch hervorgerufen wird, daß die Kombination (lnr,pnr,rnr) der Schlüsselkandi-dat der Relation ist. Nach der 3-Zerlegung sind die drei Projektionen lp, pr und rljede in 5 NF, da sie keine Vereinigungsabhängigkeiten beinhalten.

Obwohl wir immer noch nicht wissen, was „Konsequenz der Schlüsselkandidaten“ heißt,soll doch darauf hingewiesen werden, daß die 5NF die 4NF automatisch einschließt. dadie mehrwertige Abhängigkeit ein Sonderfall der Vereinigungsabhängigkeit ist.

Wir sollten nun noch erläutern, wie eine Vereinigungsabhängigkeit die Konsequenz einesSchlüsselkandidaten ist. Hierzu betrachten erneut unsere Lieferanten/Produktrelation,wobei die Lieferantenrelation wieder zwei Schlüsselkandidaten lnr und lname habensoll. In diesem Fall erfüllt die Relation verschiedene Vereinigungsabhängigkeiten, z. B.

*((lnr,lname,lplz),(lnr,lort))

Die Relation liefer ist gleich der Vereinigung ihrer Projektionen (lnr,lname,lplz)und (lnr,lort). Diese Vereinigungsabhängigkeit wird durch die Tatsache hervorge-rufen, daß lnr Schlüsselkandidat ist.

Analog erfüllt die Relation auch die Vereinigungsabhängigkeit

*((lnr,lname),(lnr,lplz),(lname,lort))

Diese Vereinigungsabhängigkeit wird dadurch hervorgerufen, daß lnr und lname bei-des Schlüsselkandidaten sind. Die Relation liefer ist in 5NF.

Fagin hat zwar ein Verfahren angegeben, mit dem wir testen können, ob eine bekannteVereinigungsabhängigkeit von einer bekannten Menge an Schlüsselkandidaten impliziertwird. Das Problem ist aber, alle Vereinigungsabhängigkeiten und alle Schlüsselkandida-ten zu bestimmen. Dies ist leider i. a. nicht so einfach wie die Bestimmung der mehrwerti-gen oder der funktionalen Abhängigkeit, die eine einigermaßen geradlinige Interpretationin der realen Welt besitzen. Insbesondere suchen wir ja die Vereinigungsabhängigkeiten,die keine mehrwertigen oder der funktionalen Abhängigkeit sind. Daher ist das Verfahrenzur Bestimmung, ob eine gegebene Relation in 5NF ist, wenn sie in 4NF ist, immer nochunbestimmt. Zum Glück tauchen aber solche Relationen in der Praxis so gut wie nie auf,so daß wir sie als pathologische Fälle akzeptieren können.

Page 109: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-57

Zusammenfassend können wir sagen, daß aus der Definition der 5NF folgt, daß diese dieultimative Normalform bezüglich der Projektion und Vereinigung ist. Dies bedeutet, daßeine Relation in 5NF garantiert frei von Anomalien ist, die durch Projektionen beseitigtwerden können. Dies heißt aber nicht, daß die Relation frei von allen möglichen Anomali-en ist.

Dies rührt daher, daß für eine Relation in 5NF nur die Vereinigungsabhängigkeiten exi-stieren, die Konsequenzen der Schlüsselkandidaten sind. Damit sind die einzigen er-laubten Zerlegungen solche, die auf den Schlüsselkandidaten aufsetzen, d. h. jede Pro-jektion besitzt mindesten einen solchen Schlüsselkandidaten (oder mehrere) und eineReihe weiterer Attribute (oder keines). Die Lieferantenrelation ist in 5NF. Sie kann zwarweiter verlustlos zerlegt werden und zwar auf verschiedenen Wegen, aber jede Projektionin jeder beliebigen Zerlegung enthält mindestens einen Schlüsselkandidaten, so daß sichdurch die Zerlegung kein weiterer Vorteil ergibt.

2.1.9 Erzeugung der Normalformen

Das vorangegangene Kapitel hat sich mit der verlustlosen Zerlegung von Relationen alsHilfsmittel des Datenbank Designs beschäftigt. Ziel dieser Zerlegung ist es, eine allge-meine Datensammlung mit Hilfe einiger semantischer Randbedingungen in eine Samm-lung kleinerer Relationen überzuführen, die einerseits zur Ausgangsrelation äquivalentist, andererseits aber einige zusätzliche, wünschenswerte Eigenschaften besitzt.

Die allgemeinen Ziele des Normalisierungsprozesses sind

• bestimmte Arten von Redundanzen zu beseitigen (Umwandlung von Daten- in Schlüs-selredundanzen);

• bestimmte Änderungsanomalien zu vermeiden;

• ein klares und damit änderungsfreundliches Modell der realen Welt zu erstellen; dasauch intuitiv von einem Normalbürger verstanden werden kann;

• die Durchsetzung bestimmter Integritätsbedingungen zu erleichtern.

Der letzte Punkt ist noch etwas erklärungsbedürftig. Wir unterscheiden interne und exter-ne Plausibilitätsbedingungen. So ist die Forderung, daß pgewicht>0 eine intern Be-dingung, die ohne andere Attribute prüfbar ist. Referentielle Integrität ist dagegen eineexterne Bedingung, die mehrere Attribute insbesondere die Schlüssel betrifft.

Normalerweise finden wir ein mehr oder weniger strukturiertes Datenkonglomerat vor.Dieses sammeln wir erst einmal. Es handelt sich üblicherweise um Belege, Listen, Tabel-len usw. In einem voranlaufenden Schritt geben wir jedem Feld einen eindeutigen Attri-butnamen und verteilen die Attribute sinnvoll auf Relationen (1. Stufe, d. h. auf Entitätsty-pen). Diese Einteilung wird nicht von der Normalformtheorie berücksichtigt, d. h. es gibtkeine Regeln dafür, welches Attribut sie welcher Relation zuordnen. Auch die Frage, obes nicht sinnvoll ist, zwei gleiche Relationen anzulegen wie z. B. alle Lieferanten aus Ber-lin in einer Relation und dazu alle anderen Lieferanten in einer zweiten oder dritten, wirdvon der Normalformtheorie nicht beantwortet.

Page 110: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-58 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

1. Zuerst müssen wir alle Attribute einer Relation untersuchen und sie in elementareMengen zerlegen (1NF). Dies geschieht durch „Plätten“, d. h. Erzeugen von Tupeln mitredundanten Daten.

2. Im zweiten Schritt verwenden wir Projektionen um jede nicht voll funktionale Abhängig-keiten zu beseitigen. Hierdurch entsteht eine Sammlung von 2NF Relationen.

3. Wir benutzen wieder Projektionen, um die 2NF Relationen zu beseitigen, die irgendei-ne transitive, funktionale Abhängigkeit besitzen. Dieser Schritt erzeugt eine Sammlungvon 3NF Relationen

4. Mit Hilfe weiterer Projektionen eliminieren wir in den 3NF Relationen alle funktionalenAbhängigkeiten, bei denen die Determinanten keine Schlüsselkandidaten sind. In die-sem Schritt erreichen wir die BCNF.Hinweis: Die Schritte 2 bis 4 können wir unter dem Motto „Zerlege die Ausgangsrela-tion, um alle funktionalen Abhängigkeiten zu beseitigen, in denen die Determinantekein Schlüsselkandidat ist.“ zusammenfassen.

5. Wir erzeugen Projektionen dieser BCNF Relationen, um alle mehrwertigen Abhängig-keiten zu beseitigen, die keine funktionalen Abhängigkeiten sind. Hierdurch entstehen4NF Relationen.Hinweis: In der Praxis wird man diese mehrwertigen Abhängigkeiten schon vor demSchritt 2 beseitigen, indem wir rechtzeitig unabhängige Wiederholungsgruppen ab-spalten.

6. Mit Hilfe weiterer Projektionen können wir nun aus den 4NF Relationen alle Vereini-gungsabhängigkeiten beseitigen, die nicht von den Schlüsselkandidaten impliziert wer-den (vorausgesetzt wir finden welche). Dieser Schritt erzeugt 5NF Relationen.

Einige Anmerkungen können hier durchaus hilfreich sein.

Es existiert eine hochinteressante Parallelität zwischen den Definitionen von BCNF, 4NFund 5NF in der folgenden Art

• Eine Relation R ist dann und nur dann in BCNF, wenn jede funktionale Abhängigkeiteine Konsequenz der Schlüsselkandidaten von R ist.

• Eine Relation R ist dann und nur dann in 4NF, wenn jede mehrwertige Abhängigkeiteine Konsequenz der Schlüsselkandidaten von R ist.

• Eine Relation R ist dann und nur dann in 5NF, wenn jede Vereinigungsabhängigkeiteine Konsequenz der Schlüsselkandidaten von R ist.

Die besprochenen Änderungsanomalien sind letztendlich Anomalien, die durch die Ab-hängigkeiten erzeugt werden, die keine Konsequenzen der Schlüsselkandidaten sind.

Merkregel: Die Normalisierung ist die Umwandlung von Datenredundanzen (-wiederho-lungen) in Schlüsselredundanzen.

Die bisher aufgeführten Schritt sind Empfehlungen und keine Forderungen. Wir müssenim Einzelfall genau überprüfen, ob sich eine Zerlegung „lohnt“, da diese häufig Daten-

Page 111: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-59

redundanz bzw. Anomalieprobleme auf Kosten der Laufzeit beseitigt. Das klassische Bei-spiel, daß eine vollständige Normalisierung nicht zum optimalen Entwurf führt, ist dieAdressenrelation

adresse(name,straße,lk,plz,ort)

in der wir neben den funktionalen Abhängigkeiten, die durch den (eindeutigen) Namenimpliziert werden, noch die funktionale Abhängigkeit

(ort,straße) → (lk,plz)

finden (lk Landeskenner). Diese Relation ist somit nicht in 5NF. Der Vorgehensplanverlangt nun die Zerlegung in

nso(name,straße,ort)oslp(ort,straße,lk,plz)

Einmal abgesehen von den Problemen durch die unterschiedliche Organisation der ver-schiedenen Länder, wird man wohl kaum eine Anwendung finden, in der diese Zerlegungwirklich durchgeführt wird. Dies liegt in der Stabilität der Anschrift. Auch die Postleitzahländert sich nur einmal im Jahrhundert usw. Dazu kommt der enorme Suchaufwand. Den-ken wir nur an das Erstellen von Versandlisten oder nur an die Erzeugung einer kleinenAuswahltabelle auf dem Bildschirm. Selbst wenn wir die zweite Relation oslp auf unse-rem Rechner implementieren, um dem Benutzer die Möglichkeit zu geben, fehlende Post-leitzahlen zu suchen, werden wir diese Datei nicht mit der Adressentabelle verknüpfen.

2.1.10 Die Regeln von Codd

Wie bereits erwähnt, hat Codd in der zweiten Version seines Relationalen Datenbankkal-küls 333 Regeln für ein RDBMS aufgestellt. Sozusagen als Schnellprüfung können diefolgenden 12 Regeln dienen, die auf einer zentralen Regel 0 aufbauen.

0. Jedes RDBMS muß in der Lage sein, die gesamte Datenbank mit relationalen Fähig-keiten, wie im Relationalen Modell spezifiziert, zu verwalten.

1. Alle Informationen in einer relationalen Datenbank werden explizit auf der logischenEbene als Werte in einer Tabelle dargestellt.

2. Jedes einzelne Datenelement der relationalen Datenbank muß über eine Kombinationaus Tabellennamen, Primärschlüsselwert (Zeile) und Attributwert (Spalte) logisch er-reichbar sein.

3. Unbekannte Werte (NULL-Werte, nicht zu verwechseln mit leeren Werten) müssenexplizit unterstützt werden. Sie stellen nichtdefinierte oder nichtzutreffende Informa-tionen dar. Die Datenbank muß Funktionen zur Behandlung solcher Werte bereitstel-len.

4. Die Datenbankbeschreibung wird auf der gleichen logischen Ebene dargestellt wiegewöhnliche Daten. Jeder autorisierte Nutzer soll sie mit der gleichen relationalenSprache abfragen können, mit denen er auch seine Daten behandelt.

5. Ein relationales System muß mindestens eine Sprache des interaktiven Zugriffs un-terstützen, deren Anweisungen nach einer definierten Syntax als Zeichenketten dar-gestellt werden können. Hierbei müssen folgende Punkte erfüllt werden:

Page 112: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-60 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

DatendefinitionSichtendefinitionDatenmanipulationIntegritätsregelnAutorisierungTransaktionspakete.

6. Alle Datensichten (Views), die Änderungen an Daten zulassen, können auch durchdas System geändert werden.

7. Datenbestände müssen mengenorientiert eingefügt, geändert oder gelöscht werdenkönnen.

8. Anwendungsprogramme und Terminalaktivitäten müssen bei Änderungen der physi-kalischen Datendarstellung oder der Zugriffsmethoden logisch unbeeinflußt bleiben.

9. Die logische Integrität gilt auch, wenn Änderungen der Basistabellen informationser-haltend sind.

10. Integritätsregeln einer relationalen Datenbank müssen ein Teil der relationalen Sub-sprache sein. Sie müssen im Systemkatalog und nicht im Anwendungsprogramm ge-speichert sein.

11. Ein relationales Datenbankmanagementsystem (RDBMS) ist unabhängig gegenüberVerteilung der Datenbestände.

12. Falls ein relationales System über eine niedere (satzorientierte) Sprache verfügt,kann diese nicht benutzt werden, um die Integritätsregeln und die Bedingungen zuverletzen oder zu umgehen, die in der höheren (mengenorientierten) Sprache formu-liert worden sind (Unterwanderungsverbot).

2.1.11 Beispiel

Wir wollen noch einmal die Erkenntnisse der Relationentheorie an einem etwas umfängli-cheren Beispiel demonstrieren. Hierzu stellen wir uns folgendes Szenario vor:

Der Chefarzt einer Klinik will die Lei-stungen seines Hauses an den Pati-enten gegenüber der Krankenkasseabrechnen. Einer der neuenAssistenzärzte wird zum fachlichenProjektleiter ernannt. Da er in seinemMedizinstudium in schon einige EDVKenntnisse erlangt hat, kommt er mitfolgendem Vorschlag zu uns.

Er hat einen Entitätstyp patiententworfen, der nach seiner Meinungalle Attribute besitzt, die die Klinik fürdas angestrebte Ziel benötigt

Als Primärschlüssel hat er den Namendes Patienten auserkoren. Da meistens mehrere Diagnosen und Therapien gestelltwerden, hat er dafür je zwei Felder vorgesehen.

Grundsätzlich untersuchen wir einen solchen Entwurf schrittweise:

patientname Name des Patientengeb Geburtsdatum des Patientenadresse Heimatadresse des Patientenversicher Versicherung des Patientenvpnr Versicherungsnummerudatum Untersuchungsdatumgroesse Größegewicht Gewichtbdruck Blutdruckdiag Diagnosethera Therapiediag Diagnosethera Therapiebeleg Belegung

Page 113: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-61

1. Handelt es sich überhaupt um einen Entitätstyp?Hierzu muß jedes Datenelement eindeutig mit einem Attributnamen bezeichnet sein.Schon dies ist nicht der Fall. Nun, wir können die Attribute diag1,thera1,diag2,thera2 nennen, um aus diesem Dilemma herauszukommen.Weiterhin muß jede Entität eindeutig über einen Primärschlüssel ansprechbar sein.Dies ist sicher über das Attribut name nicht gegeben. Auch das Erfassen des Vorna-mens sowie das Hinzufügen des Geburtsdatums stellt die Eindeutigkeit nicht sicher.Noch dazu wird der Schlüssel unnötig lang. Ein Primärschlüssel dient meist in eineranderen Tabelle als Verbindungsschlüssel, so daß er dort noch einmal in voller Längeauftritt. Wir führen also auf jeden Fall eine Patientennummer pnr ein.

2. Ist die 1NF erfüllt?Sie fordert bekanntlich atomare Felder und gleichlange Datensätze.Hier stellen wir Verstöße bei den Feldern adresse,versicher,beleg,bdruckund bei den gerade korrigierten Feldern diag1,thera1,diag2, thera2 fest. Zu-sammengesetzte Felder können wir ja gerade noch weiter zerlegen. Wiederholungsfel-der führen aber immer zu einer Projektion unserer Ausgangstabelle in mehrere andereTabellen.

Nun können wir weiter so formal vorgehen, würden aber dabei immer tiefer auf eineSackgasse geraten. Hier hilft nur eine grundlegende Frage, die wir noch vor der weiterenZerlegung stellen müssen.

3. Sind eigentlich alle Wiederholungen erkannt?Schon diese Frage müssen wir verneinen, wenn unser Blick auf die Felder udatumoder beleg fällt. Kann es nicht sein, daß ein Patient zu mehreren Untersuchungenkommt, die jedesmal zu einer anderen Diagnose und Therapie führen. Ist die Größedabei stabile, schwankt nicht das Gewicht langsam aber stetig, verändert sich nicht derBlutdruck sehr viel deutlicher? Kann es nicht sein, daß ein Patient mehrmals in die Kli-nik aufgenommen und behandelt wird?Wir sehen, daß das Datenmodell als solches noch nicht vollständig ist, so daß eineformale Behandlung nach der Normalformtheorie nicht zielführend ist.

Wir müssen also offensichtlich unsere kompakte Tabelle patient in eine Vielzahl vonuntereinander verknüpften Tabellen zerlegen.

Hierzu starten wir einen erstenVersuch. Hierzu ordnen wir ersteinmal den Urentwurf wie neben-stehend. Dabei fällt schon einegewisse Affinität zwischen denDiagnosen und den Therapienauf.

name geb adresse

udatum

groesse gewicht bdruck

diag thera

diag thera

beleg

versicher vpnr

Page 114: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-62 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Daraus entsteht durch Ersatz von nichtatomaren Feldern und Ergänzung von weiterenFeldern ein Entwurf in 1NF.

Die neuen Feldersind in diesemEntwurf unterstri-chen. Einige sinddurch Zerlegungentstanden. Ande-re dienen dazu, die1NF sicherzustel-len.

Wir ergänzen diegesamte Anschriftder Versiche-rungsgesellschaft(nur einige Feldereingetragen) undzerlegen sowohldie Adresse wieauch den Blutdruckin einzelne Attri-bute, wobei letzterein den systolischen rrs und den diastolischen Blutdruck rrd zerfällt.

Die Wiederholfelder diag und thera spalten wir in eine eigene Tabelle ab, die alsPrimärschlüssel die Kombination Patientennummer, Untersuchungsdatum und laufendeNummer der erkannten Krankheit knr erhält. Damit ist dieser Schlüssel mit Sicherheiteindeutig.

Über das obskure Feld belegung erfahren wir durch Befragung, daß es sich um einzusammengesetztes Wiederholungsfeld handelt. Also wird es gleich in eine eigene Ta-belle übergeführt mit den Feldern

handelt, wobei wir natürlich den Primär-schlüssel zusammensetzen müssen, da einPatient mehrere Besuche in unserem Kran-kenhaus (Belegungen) nötig haben kann.

Durch Umwandlung alle Wiederholfelder ineigene Tabellen sind aus unserem ursprünglichen Entwurf drei Tabellen geworden, diedie 1NF erfüllen. Damit kein Informationsverlust auftritt, nehmen wir die Patientennummerin die neuen Tabellen mit auf.

Die 2NF fordert nun die volle Funktionale Abhängigkeit aller Nichtschlüsselattribute vonden Schlüsselattributen. Somit müssen wir die Schlüssel selbst untersuchen, ob sie nichtimplizit zusammengesetzt sind (sprechende Schlüssel), oder ob bei einem zusammenge-setzten Schlüssel nicht einige Attribute nur von Teilen des Schlüssels abhängen.

pnr+udat

geb

strasse

groesse gewicht

diag

thera

rnr

plz ort

name vorname

adresse

rrs rrd bdruck

patient

erkrankung

pnr+udat+knr

pnr+abdatum

station

kategorie

status

vpnr vname

belegungbisdatum

vstrasse vort... versicher

abdatum 1. Belegungstagbisdatum letzter Belegungstagstation aufnehmende Stationrnr Raumnummerkategorie Zimmerkategoriestatus Wahl der Behandlungsart

Page 115: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-63

Hier fällt un-ser Blick aufden Patientenselbst. Name,Vorname,Geburtsdatum usw. sindstatisch, d. h.vom Untersu-chungsdatumunabhängig.Nur das Ge-wicht und die beiden Blutdrücke sind vom ganzen Schlüssel abhängig.

Der Normalisierungsschritt zur 2NF beseitigt Wiederholungen in senkrechter Richtung.Bei jeder Untersuchung hätten wir alle statischen Daten des Patienten neu erfassen müs-sen. Selbst wenn uns dieses immer in gleicher Form fehlerfrei gelungen wäre, so hättez. B. ein Umzug des Patienten dazu geführt, daß wir alle Datensätze nach ihm durchsuchthätten. Dies ist eine typische Änderungsanomalie.

Da wir bei der Aufspaltung nur das Feld pnr noch einmal benötigen, ist dieses als einzi-ges unterstrichen.

Wir halten nun Ausschau nach Verstößen gegen die 3NF. Hierbei handelt es sich be-kanntlich um „Dreiecksverhältnisse, bei denen der Chef (Primärschlüssel) von der weite-ren Beziehung nichts weiß“. Gleichzeitig klingelt das Telefon und die Buchhaltung be-schwert sich, daß sie nicht weiß, wohin sie die Rechnungen zu senden hat, sprich ihrfehlen die Versicherungsanschriften. Also schauen wir uns den Patienten noch einmal an.

Zum einen bestehtdie bekannte Bezie-hung zwischenOrt/Straße undPostleitzahl als Ver-stoß gegen die 3NF.Aber auch die Datender Versicherungwie z. B. ihre An-schrift führt zu einem Verstoß gegen die 3NF. Den ersten Verstoß wird man – wie üblich –nicht beseitigen. Den zweiten reparieren wir durch Einführung einer Tabelle versich.Bei dieser neuen Tabelle führen wir einen neuen Primärschlüssel vnr ein, der deutlichkürzer als der (ebenfalls eindeutige) Versicherungsname vname ist.

pnr

geb

strasse

groesse

gewicht

plz ort

name vorname

rrs rrd

patient

pnr+udat

messwert

vpnr vname vstrasse vort... versicher

pnr

geb

strasse

groesse

plzort

name vornamepatient

vname

vpnr

vstrasse vort usw.

Page 116: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-64 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Bei der Auftrennung tragen wirbereist unbewußt das Feld vnrbeim Patienten ein. Dies stelltsicher, daß wir keinen Informati-onsverlust produzieren (Im Ge-gensatz zu den anderen Abhän-gigkeiten, bei denen der Patientdie Mastertabelle darstellt, ist hierder Patient die Detailtabelle unddie Versicherung die Masterta-belle).

Als nächstes betrachten wir die Belegung. Bei jeder Belegung muß die Stationszugehö-rigkeit und die Kategorie eines Raumes eingegeben werden, obwohl sich diese eigentlichnicht ändert. Löschen wir dagegen alle Belegungen für einen Raum, dann gehen dieseInformationen grundsätzlich verloren (Löschanomalie).

Auch hier liegt ein Verstoß gegen die3NF vor. Die Raumnummer, die nichtTeil des Primärschlüssels ist, legt dieStation sowie die Kategorie fest.

Somit müssen wir auch diese Tabelle in zwei Tabellen zerlegen (Projektion), die zusam-men über die Raumnummer verknüpft sind und die 3NF erfüllen.

Nun wollen wir die entstandenen Tabellen in 4NF brin-gen. Die meisten erfüllen das Kriterium und sind somit in4NF. Nur die Erkrankungen wehren sich dagegen.

Betrachten wir die Diagnosen und die Therapien, so se-hen wir, daß sie nicht funktional voneinander abhängen.In 3NF ist die Tabelle also. Trotzdem können wir nichtleugnen, daß eine gewisse Abhängigkeit zwischen bei-den besteht. Eine Erkrankung kann durch verschiedeneTherapien behandelt werden. Umgekehrt kann eine Therapie bei mehreren Diagnosenangewandt werden (Wir wollen einmal annehmen, daß bei einer Diagnose nur eine The-rapie zur Anwendung kommt und nicht mehrere gleichzeitig). Wir wollen uns dies einmalan einem Beispiel (Orthopäde) ansehen

erkrankungpnr udat knr diag thera1111 96/01/10 1 Chondropathia patellae Schonung1111 96/01/10 2 Chondropathia patellae Genutrain-Bandage2222 96/01/10 1 Distorsion der HWS Halskravatte2222 96/01/10 2 Chondropathia patellae Fango Knie2222 96/01/10 3 Chondropathia patellae Zeel-Spritzen3333 96/01/11 1 Sehnenscheideentzündung Gips4444 96/01/12 1 Fraktur des US Gips4444 96/01/12 2 Frkatur des UA Gips

pnr

geb

strasse

groesse

plzort

name vornamepatient

vnr vpnr

vname vort usw.vnr

versicher

rnrpnr+abdatumstation

kategoriestatus

belegungbisdatum

rnrpnr+abdatum

station

kategorie

status

belegung bisdatum

rnr

raum

Page 117: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-65

Diagnose und Therapie sind wechselseitig voneinanderabhängig, wobei dies nicht vom Primärschlüssel gesteuertwird. Wir müssen sie unabhängig voneinander machen.

Dies geschieht sichernicht durch die Tech-nik, Verbindungsschlüssel einzuführen. Hier ersetzenwir nur die langen Namen durch kurze Zeiger. Die Ab-hängigkeiten bleiben aber unverändert. Gleichzeitigerkennen wir aber, daß das Attribut knr überflüssigist, wenn wir die Diagnose und die Therapie zumSchlüssel hinzufügen.

diagnose therapiednr diag tnr thera1 Chondropathia patellae 1 Schonung2 Distorsion der HWS 2 Genutrain-Bandage3 Sehnenscheideentzündung 3 Halskravatte4 Fraktur des US 4 Fango-Knie5 Fraktur des UA 5 Zeel-Spritzen

6 Gips

Eine wirkliche Trennung erreichen wir nur durch folgende Projektionen

erkrankung_d erkrankung_tpnr udat dnr pnr udat tnr1111 96/01/10 1 1111 96/01/10 12222 96/01/10 1 1111 96/01/10 22222 96/01/10 2 2222 96/01/10 33333 96/01/11 3 2222 96/01/10 44444 96/01/12 4 2222 96/01/10 54444 96/01/12 5 3333 96/01/11 6

4444 96/01/12 6

Die Information, welche Therapie für welche Diagnose angewandtwird, geht verloren. Diese ist beim Patienten aber uninteressant. Inunserem Primitivbeispiel wird das vielleicht nicht so deutlich. Aberes ist z. B. egal, ob die Einnahme eines (bestimmten) Antibiotikumsgegen die Lungenentzündung oder Nebenhöhlenentzündung wirkt,wenn der Patient beide Diagnosen hat. Er sollte sicher nicht diedoppelte Dosis nehmen. Wollen wir aber wissen, welche Therapiebei welcher Diagnose statistisch angewandt wird, so können wirnicht so vorgehen. In diesem Fall muß der Zusammenhang erhaltenbleiben.

Die Auswertung der letzen Frage führt zu einer ausgelagerten m:m Beziehung, die allge-meingültig ist. Für eine Diagnose stehen mehrere Therapien zur Verfügung. Eine Thera-pie kann bei verschiedenen Diagnosen eingesetzt werden. Solch eine Tabelle behandlg

diag

thera

erkrankung

pnr+udat+dnr

erkrankungpnr udat dnr tnr1111 96/01/10 1 11111 96/01/10 1 22222 96/01/10 2 32222 96/01/10 1 42222 96/01/10 1 53333 96/01/11 3 64444 96/01/12 4 64444 96/01/12 5 6

behandlgdnr tnr wahr1 1 901 2 301 4 401 5 102 3 903 6 104 6 755 6 87

Page 118: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.1 Relationales Datenmodell (RDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-66 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

ist sicher für den Arzt hilfreich, um ihn bei der Therapie zu unterstützen. m:m Beziehun-gen sollten stets dahingehend untersucht werden, ob nicht assoziative Attribute sinnvollsind. Hier wäre es z. B. angebracht, eine Wahrscheinlichkeit (in Prozent) zu ergänzen. Damehrere Therapien gleichzeitig eingesetzt werden können, überschreitet ggf. die Summeden Wert 100%.

Die Aufteilung erkrankung_d und erkrankung_t läßt aber berechtigte Zweifel auf-kommen, ob diese Lösung besser als erkrankung ist. Wir erkaufen uns die Redun-danzfreiheit der Kombination dnr+tnr durch Wiederholung des Schlüssels pnr+udatunter Verlust der Zuordnung. Wiederum sehen wir sehr schön, wie wir durch Normalisie-rung Datenredundanz in Schlüsselredundanz umgewandelt haben.

Auch im Fall, daß wir die erste Lösung implementieren, ist die neue Tabelle hilfreich(obwohl aus dem ursprünglichen Entwurf nicht durch Normalisierung ableitbar), da wir siezur Absicherung benutzen können. Es dürfen bei den Krankheiten nur die Diagnose-Therapie Kombinationen eingesetzt werden, die in behandlg eingetragen sind.

2.2 Hierarchisches Datenmodell (HDM)

Das HDM ist das älteste Datenmodell. Es ist unmittelbar aus der konventionellen Daten-verarbeitung mit indexsequentiellen Dateien entstanden und eng mit dem Datenbankma-nagementsystem IMS (Information Management System) der Fa. IBM verknüpft.

Basis des HDM ist die Graphentheorie.

Ein (abstrakter im Gegensatz zum geometrischen)Graph G ist ein Paar <X,K>, bestehend auseiner nichtleeren Menge X von Knoten, einer(eventuell leeren) Menge K von Kanten, die mitX elementfremd ist und einer Abbildung R vonK in X&X, der sog. Inzidenzabbildung (Bild 2.2-1).

Ist k∈K und xi,xj∈X mit R(k)=(xi&xj), dann heißt die Kante k inzident mit derKnoten xi,xj, d. h. die Kante berührt die Knoten, die Knoten sind die Endpunkte derKante, die Kante verbindet die Knoten. Alle anderen Knoten bezeichnet man als nichtinzi-dent mit k. Ist die Abbildung R bekannt, so schreibt man kurz für „k verbindet x

i mit

xj"

k ~ (xi & xj)

Ist die Inzidenzabbildung wichtig, so bezeichnet man G auch mit <X,K,R> ansonstennur mit <X,K>.

Die Menge der Knoten darf nicht leer sein, wohl aber die Menge der Kanten. Dies er-scheint auf den ersten Blick uninteressant zu sein, ist aber für manche destruktiven Ver-fahren (Entfernen von Kanten) von Vorteil. Ein Graph heißt entartet, wenn er keine Kan-

x1

x2

x3

x4

x5

x6

k1

k4

k3k2

k5

k6

Bild 2.2-1: Graph

Page 119: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-67

ten besitzt. Ein Graph heißt endlich, wenn X und K endliche Mengen sind (leere Men-gen sind ebenfalls endlich).

Wichtig in der Graphentheorie ist die gegenseitige Abbildung von Graphen. Wir werdenz. B. Modelle der Datenverarbeitung grafisch in Kästchen und Kanten darstellen. Diesheißt aber nichts anderes, als daß wir die Datenzusammenhänge auf einen geometri-schen Graphen abbilden. Zu diesem Zweck müssen Graphen identisch oder genauerisomorph sein.

Die Graphen G=<X,K> und G'=<X',K'> heißen isomorph, wenn zwischen X und X'einerseits und K und K' andererseits eineindeutige Zuordnungen existieren, die dieInzidenzbeziehung erhalten.

Mit einfachen Worten heißt dies, daß die Kanten in beiden Fällen die gleichen Knotenverbinden. Interessant für uns ist die Abbildung auf geometrische Graphen, die man alsgeometrische Realisierung von G bezeichnet.

Weiterhin werden wir hauptsächlich planare Graphen unter-suchen. Ein Graph heißt dann und nur dann planar, wenn ereine geometrische Realisierung im R2 hat (d. h. dort kreu-zungsfrei darstellbar ist). Es gibt nur eine beschränkte Men-ge planarer Graphen. Alle endlichen Graphen lassen sichaber immer im R3 realisieren. Der gezeigte Graph z. B. istnicht planar (Bild 2.2-2).

Wir arbeiten (normalerweise) mit geometrischen Graphen,bei dem jeder geometrischen Kante zwei (eventuell zusam-menfallende) geometrische Knoten zugeordnet sind. Dahersind einige weitere Begriffe hilfreich

Gilt die Beziehung k~(xi&xj) dann heißen xi und xj die Endpunkte von k, gleich-gültig, ob es sich um einen geometrischen Graphen handelt oder nicht. Ist xi=xj, so istxi der einzige Endpunkt von k, und k heißt eine Schleife. Die Kanten k1 und k2heißen parallel, wenn k1~(xi&xj) und k2~(xi&xj) gilt. Zwei Schleifen mit den glei-chen Endpunkten sind ebenfalls parallel. Zwei Knoten xi,xj heißen benachbart, wenndie Bedingung k~(xi&xj) für wenigstens eine Kante erfüllt ist. Insbesondere ist xi mitsich selbst benachbart, wenn eine Schleife mit xi als Endpunkt existiert. Genauso hei-ßen xi,xj benachbart, wenn sie wenigsten einen gemeinsamen Endpunkt besitzen. DieEigenschaft „benachbart" verbindet also gleichartige Elemente, „inzident" dagegen ver-schiedene Elemente.

Die Anzahl der mit einem Knoten x inzidenten Kanten (dabei zählen Schleifen doppelt)heißt Grad δ(x) des Knotens. Ein Knoten heißt isoliert, wenn sein Grad δ(x)=0 ist.Ein entarteter Graph besteht also nur aus isolierten Knoten.

Die Anzahl der Knoten wird mit |X|, die Anzahl der Kanten mit |K| bezeichnet. Dajede Kante den Grad ihrer Endknoten um 1 erhöht, gilt

Bild 2.2-2: NichtplanarerGraph

Page 120: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.2 Hierarchisches Datenmodell (HDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-68 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

δ( )x Kx X∈∑ = 2

In einem geometrischen Graphen kann man, mit einem gegebenen Knoten beginnend,eine Folge geometrischer Kanten kontinuierlich durchlaufen und schließlich an einem an-deren bestimmten Knoten gelangen oder zum ursprünglichen Knoten zurückkehren. DieKanten müssen dabei nicht notwendigerweise verschieden sein. Eine solche endlicheFolge von Kanten k1,k2,...,kn bildet eine Kantenprogression oder Kantenfolge derLänge n. Die Kantenprogression heißt geschlossen, wenn Anfangs- gleich Endknotenist, ansonsten offen. Eine einzelne Kante kann als Kantenprogression der Länge 1 auf-gefaßt werden.

Sind die Kanten einer Kantenprogression alle voneinander verschieden, so spricht manvon einer Kettenprogression. Die Menge der Kanten (ohne Berücksichtigung der Reihen-folge) bildet bei einer offenen Progression eine Kette, bei einer geschlossenen Progressi-on einen geschlossenen Kantenzug. Eine Kantenprogression heißt eine einfache Ketten-progression, wenn alle berührten n+1 Knoten verschieden sind. Die Kanten sind in die-sem Fall notwendigerweise verschieden, die Progression „schneidet" sich nicht.

Ein Graph heißt zusammenhängend, wenn sich zwei verschiedene Knoten durch minde-stens eine Kette miteinander verbinden lassen. Alle anderen Graphen sind nichtzusam-menhängend.

Ein zusammenhängender Graph, der keine geschlossenen Kantenzüge enthält, heißtBaum.

Wir finden folgende Eigenschaften

− Ein Graph ist dann und nur dann ein Baum, wenn für je zwei seiner Knoten ge-nau eine Kette existiert, die diese beiden Knoten verbindet. (Die Eigenschaft'zusammenhängend' garantiert die Existenz wenigstens einer Kette, das Fehlengeschlossener Kantenzüge bedeutet die Existenz höchstens einer Kette);

− Wird eine Kante des Baumes entfernt, so zerfällt der Baum in einen Wald mit 2Komponenten;

− Ein Baum ist aufgrund der letzten Eigenschaft ein minimal zusammenhängenderGraph;

− Ein zusammenhängender Graph G wird durch einenBaum T als Untergraph aufgespannt (Bild 2.2-3). DieKanten des Baumes nennt man dann Äste, alle anderenKanten Sehnen bezüglich T. Es gibt (außer für Bäumeselbst) mehrere aufspannende Bäume;

− Ein Baum mit n Knoten hat n-1 Kanten;

Wir haben schon einmal die Graphen eingeteilt in planar und nicht-planar. Andere Einteilungen sind ebenfalls interessant. Ein Graphheißt einfach, wenn er weder Schleifen noch parallele Kanten ent-hält. Damit haben einfache Graphen keine geschlossenen Kantenzüge mit weniger als 3Kanten. Ein Graph heißt vollständig, wenn je zwei voneinander verschiedene Knoten be-nachbart sind, d. h. jeder Knoten ist mit jedem anderen verbunden.

Bild 2.2-3: Aufspan-nender Graph

Page 121: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-69

Ein Graph heißt zweifach teilbar (Bild 2.2-4), wenn sich die Menge seinerKnoten in zwei elementfremde Mengen X1 und X2 derart zerlegen läßt,daß von jeder Kante der eine Endpunkt in X1 und der andere in X2 liegt.Allgemeiner heißt ein Graph k-fach teilbar, wenn sich seine Menge in kelementfremde Mengen zerlegen derart läßt, daß keine Kante zwei Knotenderselben Menge miteinander verbindet.

Nach dem allgemeinen Graphen wenden wir uns nun dem gerichteten Gra-phen zu, da sie in unserem Kontext die weitaus wichtigere Bedeutung ha-ben. Bei einem gerichteten Graphen erhalten die Kanten eine Vorzugsrich-tung.

Im Unterschied zum ungerichteten Graphen bilden beim gerichteten Graphen (auch Dia-graph genannt) die ein geordnetes Knotenpaar. Die Relation ist daher über einem karte-sischen Produkt definiert:

R ist eine Relation (gerichtete Inzidenzabbildung) in X, d. h. R⊆X×X mit R={(xi,xj)|xi,xj∈X, 1<i,j<n}. Die Paare (xi,xj)∈R sind die Kanten. n ist unter der Voraus-setzung, daß die Menge X endlich ist, deren Mächtigkeit.

Ist mit (xi,xj)∈R nicht unbedingt (xj,xi)∈R so spricht man von einem gerichtetenGraphen. Mit dem gerichteten Graphen kön-nen wir unsymmetrische Beziehungen dar-stellen. Ein Knoten wird zum Anfangs- derandere zum Endknoten.

Die Aussagen zum ungerichteten Graphenkönnen natürlich weitgehend übernommen

werden, wobei einige Eigenschaften hinzukommen bzw. eingeschränkt werden. So wirdaus der Kantenprogression eine gerichtete Kantenprogression, bei der alle Kanten diegleiche Richtung haben müssen. Eine Kantenprogression wird also nicht automatisch zurgerichteten Kantenprogression, weil eine der Kanten durchaus eine falsche Richtung ha-ben kann.

Eine gerichtete Kantenprogression ohne Kantenwiederholung heißt Wegprogression oderZyklusprogression, je nachdem ob sie offen oder geschlossen ist. Die zugehörigen Kan-tenmengen ohne Berücksichtigung der Reihenfolge heißen Weg bzw. Zyklus. Sind alleKnoten verschieden, so sind die beide Progressionen jeweils einfach. Ein gerichteterGraph heißt zyklisch, wenn er wenigsten einen Zyklus (oder als Sonderfall eine Schleife)enthält.

Diesen gibt es natürlich auch als gerichteten Baum. Er kann auch folgendermaßen defi-niert werden

Ein gerichteter Baum ist ein gerichteter Graph G=<X,R>, in dem ein Knoten w∈X exi-stiert, der Wurzel heißt und für den gilt:

Bild 2.2-4:TeilbarerGraph

x1

x2

x3

x4

x5

x6

k1

k4

k3k2

k5

k6

Bild 2.2-5: gerichteter Graph

Page 122: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.2 Hierarchisches Datenmodell (HDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-70 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

− zu w führt keine Kante hin, d. h. (xi,w)∉R;− zu allen anderen Knoten führt genau eine Kante;− jeder Knoten in X ist von w aus über einen eindeutigen Weg erreichbar.

Besteht ein nichtzusammenhängender Graph aus k Bäumen, so spricht man von einemWald aus k Bäumen.

Ein gerichteter Baum hat folgende Eigenschaften

− Es existiert höchsten ein Knoten als Wurzel;− Im allgemeinen sind Bäume in gerichteten Graphen keine gerichteten Bäume;− Wird die Wurzel des Baumes (samt der zugehörigen Kanten) entfernt, dann

zerfällt der Baum in einen Wald;− Ein Knoten in einem gerichteten Baum, von dem keine Kante ausgeht, heißt

Terminalknoten oder Blatt.

Die Begriffe Wurzel und Blätter beziehen sich also immer auf gerichtete Bäume.

Nicht aus der Graphentheorie stammt der Begriff der Hierarchie. Trotzdem handelt es sichoffensichtlich um ein „natürliches" Prinzip, da keine höhere Population ohne es aus-kommt. Wir können die Knoten eines Baumes so anordnen, daß Hierarchien entstehen.

In der strengen,baumartigenHierarchie wirdkeine Ebeneübersprungen,während diesbei der allge-meinen baum-artigen Hierar-chie nicht derFall ist. Natür-

lich können wir auch in allgemeinen Netzen Hierarchien einführen, dann hat ein Sohnmehrere Väter.

Ein hierarchisches Datenbankschema ist im allgemeinen ein Wald. In einem ersten Schrittentwerfen wir die Entitätstypen, die sich natürlich erst einmal nicht von den bisherigenunterscheiden

student(snr,sname,sgeschl,sgeb,svord)klasse(knr,kname,kanzahl)thema(tnr,tname,tstunden)professor(pnr,pname,port)

3

11 12 21 23

221 222 223

strenge, baumartige Hierarchie baumartige Hierarchie

3

11 12 21 23

221 222 223

22

21 2

22

ww

Page 123: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-71

In der nächsten Stufe modellieren wir einen ersten Baum mit dem Be-ziehungstyp gehoert_zu.

Gehen wir nun eine Stufe zurück auf die Entitäten selbst, d. h. be-trachten wir die Wertebelegung, dann entsteht aus dem Baum einWald (Bild 2.2-6).

17 1996WD6TI1 3

1111 Mayer M 01.10.1963 F

4422 Zuse W 19.05.1962 F

1122 Müller M 10.02.1962 T

29 1996WD3NT2 1 33 1997SD5WI1 1

2233 Adam M 09.09.1962 T

2222 Huber M 27.11.1964 T

Bild 2.2-6: Hierarchisches Datenmodell

Aus den beiden Abbildungen können wir folgende Eigenschaften ableiten

− Jeder Entitätstyp wird als Satztyp modelliert (logischer Datensatztyp, Segment).− Eine Entität ist eine Instanz (Ausprägung, Element, Exemplar, Individuum) die-

ses Satztyps. Sie wird Datensatz genannt.− Attribute sind die (Daten-) Felder des Datensatzes.− Die Modellierung der Beziehungstypen zwischen den Entitätstypen erfolgt durch

die Einordnung der Satztypen in einen Baum mit hierarchischer Abhängigkeit(Vater-Sohn).

Wie HDM schon ausdrückt, werden in der Modellierung die hierarchischen Beziehungen(1:1, m:1, 1:m) bevorzugt.

m:m Abbildungen müssen daher gesondert modelliert werden. Dies geschieht (wie üblich)durch Einführung eines neuen Satztyps. Sehen wir uns das am Beispiel des Stundenpla-nes an. Zwischen

klasse(knr,kname,kanzahl)thema(tnr,tname,tstunden)

herrscht eine m:m Beziehung. Wir führen einen neuen Satztyp hoert

hoert(hnr,tnr)

gehoert_zu

klasse

student

Page 124: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.2 Hierarchisches Datenmodell (HDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-72 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

mit einem eindeutigen Schlüssel hnr ein, der eine 1:m Bezie-hung zur klasse ermöglicht. Der Entitätstyp thema wird ineinen Satztyp überführt. Dieser Satztyp bildet die Wurzel einesBaumes, der nur aus diesem besteht.

Diese Konstruktion hat nur auf der logischen Ebene Bedeutung,da der Schlüssel hnr physikalisch nicht auftaucht.

Die Operationen auf hierarchischen Schemata stützen sich natürlich vornehmlich auf denBaumeigenschaften ab. Jeder Knoten eines Baumes ist von der Wurzel über einen ein-deutigen Weg erreichbar. Da wir mit einem Wald arbeiten, müssen wir jedoch die Aus-wahl eines Baumes vorschalten, bevor wir über die Wurzel (Entry Point) zur gesuchtenInformation gelangen.

Retrievaloperationen

Für den Suchvorgang in einem hierarchischen Baum benötigen wir folgende zwei Opera-tionen

− Traversieren, d. h. Wechsel einer Hierarchiestufe beginnend bei der Wurzel;− Wählen, d. h. Zugriff auf den nächsten Satz innerhalb der Menge aller Sätze der

gleichen Hierarchiestufe in der vorgegebenen Ordnung.

Updateoperationen

Das Ändern eines Datensatzes setzt eine erfolgreiche Retrievaloperation voraus. Dannwird der Datensatz einfach ersetzt.

Das Neueinfügen eines Satzes führt zu einer Erweiterung der Datensatzmenge eines be-stimmten Satztyps. Es können aber nur Datensätze eingefügt, werden, wenn die Vater-Sohn-Beziehung fest definiert ist. So kann sich ein Student an der Hochschule anmelden,der noch nicht weiß, was er genau studieren will. Als Student wird er der 2. Hierarchie-stufe zugeordnet. Somit fehlt die notwendige Beziehung zur Klasse in der 1. Hierarchie-stufe. Man wird also für solche Fälle eigentlich „unlogische" Parkplätze einrichten.

Das Löschen eines Satzes (insbesondere einer höheren Hierarchiestufe) führt zumDurchtrennen eines Weges. Wir können also nicht unbedingt eine Klasse auflösen, ohneuns Gedanken zu machen, was mit den Studenten geschieht.

Die Darstellung der Operationen zeigt uns, daß

− die anwendbaren Operationen abhängig vom Aufbau des hierarchischen Sche-mas sind;

− umgekehrt die Modellierung die gewünschten Operationen berücksichtigen muß.Mögliche Varianten sind daher unter dem Gesichtspunkt der Optimierung be-stimmter Operationen zu bewerten.

klasse

hoert

thema

Page 125: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-73

Betrachten wir unser Beispiel mitzwei möglichen Varianten, die jenach Anforderungen Vor- undNachteile besitzen (Bild 2.2-7).

Sehen wir uns die Vor- undNachteile des HDM noch einmalzusammenfassend an.

Grundsätzlich entspricht derhierarchische Entwurf den „na-türlichen" Gegebenheiten, die wirallerorten antreffen. Auch unserDenken ist sehr stark hierar-chisch geprägt. Die Nachteileliegen in

− notwendigen Ausrichtung des Modells auf die späteren Operationen;− die notwendigen Kenntnisse des Benutzers über die Struktur des Waldes, um

geeignet navigieren zu können;− der relativ schwierig zu modellierenden m:m Beziehungen;− der besonderen Anstrengungen, die das Neueinfügen und Löschen von Daten in

HDM erfordern.

2.3 Netzwerkdatenmodell (NDM)

2.3.1 Grundlagen

Das Netzwerkdatenmodell (NDM) wurde von der CODASYL (Conference On DAtaSYstem Languages) entwickelt. Sie existiert seit 1959 als freiwilliger Zusammenschlußvon Computerherstellern, -anwendern und staatlichen Institutionen.

Zur Weiterentwicklung der Programmiersprache COBOL (COmmon Business OrientedLanguage), die neben FORTRAN einer der ersten einsatzfähigen Programmiersprachendarstellte, wurde die Arbeitsgruppe DBTG (Data Base Task Group) gebildet, die 1971wesentliche Teile des NDM vorstellte. 1973 erfolgte ein weiterführender Bericht durch dieDDLC (Data Description Language Committee), der 1978 noch einmal leicht modifiziertund durch eine DSDL (Data Storage Description Language) zur Beschreibung internerSchemata ergänzt wurde.

Da das NDM auf dem HDM aufbaut, sind keine weiterenmathematischen Ergänzungen notwendig. Auch beim NDMwerden die Entitätstypen als Datensätze (RECORD-Typ)modelliert. Die Attribute werden zu (Daten-) Feldern desRecords. Zur Modellierung der Beziehungstypen finden wirim NDM den SET-Typ mit der Einschränkung, daß es sichum eine 1:m Beziehung ohne zusätzliche Attribute handelt(Bild 2.3-1).

student hoert

professor themaklasse

liest

student hoert

professorklasse

thema

Bild 2.2-7: Hierarchisches Datenmodell

SET-Typ V

Ownertyp

Membertyp

RECORD-Typ A

RECORD-Typ B

Bild 2.3-1: NDM Begriffe

Page 126: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Netzwerkdatenmodell (NDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-74 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

Der RECORD-Typ umfaßt eine Menge von Rekords, der SET-Typ eine Menge von Sets.Ein Set ordnet einem Record des Ownertyps somit n Rekords des Membertyps zu (1:mAbbildung. Der Record des Ownertyps heißt Owner, ein Rekord des Membertyps heißtMember. Die Abhängigkeit wird durch einen gerichteten Graphen dargestellt.

Eine wichtige Neuerungbesteht nun darin, daßdie an einem Set betei-ligten Member geordnetsind (Bild 2.3-2). DerCODASYL Vorschlagerweitert noch dazu denSET-Typ , daß verschie-

dene Membertypen an einem SET-Typ beteiligt sein können.

Um nun auchm:m Beziehun-gen und/oderBeziehungsattri-bute modellie-ren zu können,wird der Bezie-hungstyp durch

einen RECORD-Typ und zwei SET-Typen modelliert.

Der RECORD-Typ ist Membertypder beiden SET-Typen. Auf dieseWeise werden die beidenRECORD-Typen miteinander ver-kettet. Daher nennt man die Sätzedes eingeführten Typs auch gernals Kettsätze.

Mit diesen Möglichkeiten entfälltdie Beschränkung auf reineBaumstrukturen, es entstehen

beliebige Netzstrukturen.

Die Operationen haben natürlich große Ähnlichkeiten zum HDM

− Die Operationen sind satzorientiert;− Zum Navigieren muß ein Weg durch das Netzwerk beschrieben werden, um auf

einen Datensatz zugreifen zu können.− Die Datenmanipulationen erfolgen prozedural, satzorientiert (im Gegensatz zur

Mengenorientierung).

a2

b1 b3b2 b4 b5 b6

a1 a3

b9b8b7

Bild 2.3-2: NDM Einführung einer Ordnung

RECORD-Typ A

RECORD-Typ CRECORD-Typ B

a1

b1 b2 c1 b3 c2 c3

Bild 2.3-3: NDM Modellierung einer m:m Beziehung

Beziehungstyp V

SET-Typ AV SET-Typ BV

RECORD-Typ A RECORD-Typ V RECORD-Typ B

Entity-Typ A Entity-Typ A

Bild 2.3-4: Modellierung einer Beziehung

Page 127: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Modelle © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945 Seite: 2-75

Retrievaloperationen

Die Suche nach einen Datensatz in einem RECORD-Typ ist sehr einfach direkt durchzu-führen. Schwieriger wird es, wenn Zugriffe unter Benutzung eines SET-Typs notwendigsind.

Ø Beispiel: Finde die jüngste Studentin in der Klasse 17.

1. Finde den Record des RECORD-Typs klasse mit knr=17!2. Interpretiere den gefundenen Record als Owner eines Sets vom SET-Typgehoert_zu und suche alle Member dieses Sets!

3. Wähle aus allen Membern diejenigen aus mit sgeschl="W"!4. Suche denjenigen Satz mit minimalem Wert in sgeb also MIN(sgeb)!

Kann unser Modell auch die umgekehrte Frage beantworten? In welcher Klasse studiertdie jüngste aller Studentinnen? Diese Frage muß nicht unbedingt auf das gleiche Ergeb-nis wie eben führen.

1. Finde den Record des RECORD-Typs student mit MIN(sgeb) undsgeschl="W"!

2. Dieser Satz ist Member eines geordneten Sets gehoert_zu, was uns ermöglicht,den zugehörigen Owner zu finden.

Noch komplexere Anfragen müssen entsprechend viele SET-Typen und/oder (Kett-)RECORD-Typen nutzen, wobei die Variationsmöglichkeiten stark ansteigen. Zur Optimie-rung der Suche müssen dann Implementierungsdetails mit einbezogen werden, was zumVerlust der physischen Datenunabhängigkeit führt.

Updateoperationen

Das Einfügen bereitet keine Schwierigkeiten. Ist er ein Set-Member, dann muß er richtigeingeordnet werden.

Ändern und Löschen setzen eine Retrievaloperation voraus. Beim Löschen finden wir fol-gende Möglichkeiten

− Der Satz gehört nicht zu einem Set. Dies führt zu keinen Problemen;− Der Satz ist Member eines Sets. Das Set muß nachgeführt werden:− Der Satz ist Owner eines Sets. Mit dem physischen Löschen des Satzes muß

auch der Set gelöscht werden. Werden auch die Member gelöscht? Diese Mem-ber können nun wieder Owner eines anderen SET-Typs sein, so daß weitrei-chende weitere Löschoperationen notwendig sind.

Unser Hochschulbeispiel modellieren wir jetzt als NDM. Dabei gehen wir von den be-kannten Entitätstypen student, klasse, thema und professor aus, die wir alsRECORD-Typen modellieren. Die Attribute werden auf die Felder der Rekords abgebildet.

Die identifizierenden Schlüssel wählen wir wie beim RDM aus

student(snr,sname,sgeschl,sgeb,svord)

Page 128: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Netzwerkdatenmodell (NDM) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-76 D:\Eigene\Doku\DB\DBMS\DB02Mod\DB02Mod.DOC – 9945

klasse(knr,kname,kanzahl,ksprecher)thema(tnr,tname,tstunden)professor(pnr,pname,port)

Durch das Feld ksprecher im RECORD-Typ klasse modellieren wir den Bezie-hungstyp ist_klassensprecher als 1:1 Beziehung zwischen klasse undstudent.

Uns fehlen nun noch die Beziehungen gehoert_zu, hoert und liest. Die erste isteine m:1, die anderen beiden sind m:m Beziehungen, so daß wir einen SET-Typ

SET-Typ gehoert_zu: Ownertyp: klasseMembertyp: student

und zwei Kett-RECORD-Typen

RECORD-Typ hoert: knr,tnrSET-Typ k-h: Ownertyp klasse

Membertyp hoertSET-Typ t-h: Ownertyp thema

Membertyp hoert

RECORD-Typ liest: pnr,tnrSET-Typ T-H: Ownertyp thema

Membertyp liestSET-Typ P-H: Ownertyp professor

Membertyp liest

benötigen.

2.3.2 Bewertung des NDM

Vorteile:1. Die Modellierung ist relativ einfach. Es existieren eindeutige Regeln, m:m Beziehungen

aufzulösen.2. Die mangelnde Datenunabhängigkeit führt bei frühzeitiger Einbeziehung der geplanten

Operationen zu einer sehr effizienten Datenbank.

Nachteile:1. Die Bearbeitung der Daten erfolgt prozedural, wobei ein Navigieren durch das Schema

notwendig ist.2. Das Navigieren setzt genaue Kenntnisse des Schemas voraus. Das Navigieren hängt

dabei auch von der Umsetzung des Schemas (der m:m Beziehungen) ab. Diese Um-setzung gehört aber strenggenommen zum internen Schema der Datenbank.

3. Das Modell ist weder auf der logischen noch auf der physischen Ebene unabhängigvon den gespeicherten Daten.

4. Nachträgliche Anforderungen können nur bedingt in das bestehende Schema einge-paßt werden. Die Flexibilität des DBMS ist eingeschränkt.

Page 129: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 11.10.98 20:30/11.10.98 20:30 Seite: 3-I

Datenbanken – Entwurf

3 Datenbanken - Entwurf ............................................................................................... 3-1

3.1 Prinzipien des Datenbankentwurfs .................................................................... 3-1

3.1.1 Abstraktion ..................................................................................................... 3-1

3.1.2 Modularisierung.............................................................................................. 3-3

3.1.3 Hierarchisierung ............................................................................................. 3-3

3.2 Konzept der abstrakten Datentypen .................................................................. 3-3

3.2.1 Grundlagen..................................................................................................... 3-3

3.2.2 Entwurfstechniken .......................................................................................... 3-7

3.2.2.1 Entwurf des konzeptuellen Schemas (Unternehmensdatenmodell)........ 3-8

3.3 Praktische Fragen.............................................................................................. 3-14

3.3.1 Zeit-/Mengengerüst ...................................................................................... 3-14

3.3.2 Historienproblem .......................................................................................... 3-14

Page 130: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3
Page 131: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-1

3 Datenbanken – Entwurf

In einem „populärwissenschaftlichen“ Buch über Access ist folgendes zu lesen:

Beim Entwurf von EDV.MDB mußte ich die Anforderungen höchst unterschiedlicher Le-sergruppen berücksichtigen, mit dem Resultat, das EDV.MDB zwangsläufig einen Kom-promiß darstellt. Die Profis unter Ihnen werden meine Demo-Datenbank sicherlich als zusehr vereinfacht einstufen, weil darin beispielsweise verschiedene Spezialfälle (Stellen meh-rerer Teilrechnungen statt einer Gesamtrechnung etc.) überhaupt nicht berücksichtigt sind.Datenbank-Laien wird sie eventuell gerade umgekehrt bereits viel zu komplex sein.

Es ist alles richtig, was der Autor schreibt. Dies ist aber kein Datenbankproblem sondernein grundsätzliches Entwurfsproblem. Die Datenbanktheorie soll nur das optimal umset-zen, was die Anforderungsbeschreibung (Spezifikation) festlegt, nicht mehr aber auchnicht weniger. Somit darf auch in einem vereinfachten Modell kein Fehler enthalten sein.

3.1 Prinzipien des Datenbankentwurfs

Wir hatten schon an verschiedenen Stellen festgehalten, daß es für den Einsatz einerDatenbank notwendig ist, diese geeignet zu entwerfen. Die entscheidende Frage ist nun,ob dieser Vorgang formalisierbar (d. h. auch algorithmierbar) ist oder nicht. Sollte dies derFall sein, so kann der Entwurfsvorgang programmtechnisch unterstützt werden.

Natürlich gibt es nicht eine einzige Methode, die zum Ziel führt, da sowohl Ausgangslagewie auch Zielsystem unterschiedlich sind. Trotzdem lassen sich einige Grundregeln ab-leiten.

Basis des Datenbankentwurfs sind

− Abstraktion− Modularisierung− Hierarchisierung

3.1.1 Abstraktion

Jede Abbildung eines realen Objektes in eine andere Darstellung ist letztlich eine Ab-straktion. Sobald wir also einen Apfel verbal beschreiben, abstrahieren wir bereits. DiePhysiologen werden uns erklären, mit welcher Auflösung unser Auge ausgestattet ist, sodaß unsere Darstellung eines Apfels diese Auflösung mindestens unterschreiten muß, umrealistisch zu erscheinen. Der Künstler wird Licht und Schatten setzen, der Biologe unsetwas über den Zellaufbau erläutern usw.

Uns interessiert aber gerade aktuell das Herkunftsland, die Handelsklasse, das Gewichtund der Preis. Also alles Dinge, die wir (außer dem Gewicht) dem Apfel gar nicht mehransehen, wenn er in seiner Pracht so vor uns liegt.

Abstraktion heißt Klassenbildung, d. h. Festlegung von Klasseneigenschaften, und Zu-ordnung bestimmter Individuen zu den Klassen. Ist es für uns interessant, ob der Apfel rot

Page 132: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.1 Prinzipien des Datenbankentwurfs © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-2 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

oder grün ist? Wenn ja, dann müssen wir die Eigenschaft (Attribut, Prädikat) "Farbe" ein-führen und ggf. den zugelassenen Wertebereich (rot, grün, gelb usw.) festlegen.

Eine abstrakte Beschreibung eines Systems behandelt also immer Klassen von Objekten.Die Wörter, die diese Abstraktheit der Beschreibung anzeigen, werden Abstaktoren ge-nannt. Nun ist unsere Sprache nicht sehr präzise, so daß wir abstrakte Eigenschaften im-plizit verstecken können. Andererseits deuten bestimmte Wörter wie „Zahl, Funktion,Menge, Begriff, Sachverhalt, Eigenschaft“ usw. auf eine solche Abstraktion hin. Die Ma-thematik ist mit ihrem auf wenigen Grundaussagen aufgebauten Kalkül ein typisches Bei-spiel einer Abstraktion.

Die Teildisziplin, die sich mit dem Umsetzen natürlichsprachlicher Beschreibungen (Dia-loge zwischen den Beteiligten) auseinandersetzt, wird Sprachkritik genannt. Sie will einenmethodischen Weg aufzeigen, von natürlichsprachlichen Beschreibung zu formalen Be-schreibungen zu gelangen.

Sprachkritik wird dabei folgendermaßen als Konstruktionsmethode verstanden:

Wenn wir Sprache benutzen, beschreiben wir Sachverhalte. Wir stellen etwas alsFakt (Wahrheit) hin, geben Anweisungen oder formulieren Fragen. Solche Sprach-prozesse (Aufstellen einer Frage, Betrachtung der Antworten usw.) finden in allenAnwendungsbereichen in einer gewissen Fachsprache statt, so auch in der Infor-mationsverarbeitung. Durch kritische Untersuchung der Struktur und des Inhaltessollte es möglich sein, die Begriffe (Termini, Objekte) und die Aussagen über sie zukonstruieren. Ziel dabei ist, eine konsistente Menge (widerspruchsfrei) von Fach-begriffen zu finden, aus denen heraus präzise Sachverhalte beschreibbar sind.

Wir wollen mit dieser Methode von einem oft vagen, unpräzisen Sprachgebrauch zu ei-nem geklärten, disziplinierten Gebrauch einer Fachsprache kommen. Hier mag es denGermanisten ob der ständigen Wiederholungen gleicher Begriffe innerlich schütteln

Lassen Sie uns aber einmal ruhig wesentliche Gegensätze zu einer literarischen Spracheherausarbeiten.

Wesentliches Merkmal einer literarischen Sprache ist die Verwendung von Synonymen,d. h. die Beschreibung gleicher oder sehr ähnlicher Sachverhalte mit unterschiedlichenWörtern bis hin zur Verfremdung. Ganz anders gehen wir beim Datenbankentwurf vor.Wir versuchen aus den vorgefundenen Tatsachen eine minimale, widerspruchsfreie Men-ge von Begriffen zu konstruieren.

Jeden Morgen geht Müller mit schleppendem Gang zur Firma xy. Dort angekom-men fährt er in den zweiten Stock, in dem sich in den Zimmern 212-224 die Abtei-lung A25 befindet. Müller findet seinen unaufgeräumten Arbeitsplatz im Zimmer220.

Wir leiten folgende Tatsachen ab (soweit sie uns im entsprechenden Zusammenhang =Kontext) interessieren

Müller ist MITARBEITERA25 ist eine ABTEILUNG

Page 133: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-3

Müller ARBEITET in A25

Wir müssen also abklären, was ein Mitarbeiter und eine Abteilung ist und was unter demBegriff arbeiten zu verstehen ist. Sobald dies geschehen ist, können wir schon zu einermathematisch, formalen Darstellung der Sachverhalte übergehen

mitarbeiter(x)abteilung(y)arbeitet in(x,y)

Die Aussagefunktionen legen über die Argumentvariablen x und y nun die Sachver-halte dar. Der Wertebereich dieser einfachen Aussagefunktion ist wahr oder falsch,der Definitionsbereich umfaßt bei x alle Menschen, bei y alle Abteilungen. Nun ist esmühsam, die Sachverhalte so theoretisch darzustellen. Wir verzichten einfach auf alleFalschaussagen und stellen nur noch die wahren Aussagen (Fakten, Tatsachen) zusam-men.

Die Hauptaufgabe der Abstraktion besteht jetzt darin, diese Fachbegriffe aufzustellen. Siemüssen letztendlich aus der Begriffswelt der Fachabteilungen stammen, die später mitdem System umgehen wollen.

3.1.2 Modularisierung

Die nun folgende Modularisierung entspringt der Zweckmäßigkeit der

− begrenzten Aufnahmefähigkeit des Menschen− angestrebten Wiederverwendbarkeit

Tatsache ist, daß ein Mensch höchstens 6 bis 7 komplexe Objekte (eher weniger) gleich-zeitig überblicken kann. Es ist daher ein Ziel der Entwurfsmethoden, einen Entwurf nichtgrößer als ein DIN A4-Blatt mit höchstens 6 wichtigen Objekten darauf werden zu lassen.Mit einem Vergrößerungsglas lassen sich dann die Einzelobjekte untersuchen.

3.1.3 Hierarchisierung

Die Hierarchisierung ist ein Sonderfall der Modularisierung, bei dem bereits Abhängig-keiten der Moduln untereinander berücksichtigt werden. Wenn wir hierarchische Modelleaufbauen, so implizieren wir oft auch das Prinzip der Vererbung. Einzelne Stufen unsererHierarchie enthalten die Eigenschaften der Vorgängerstufen.

3.2 Konzept der abstrakten Datentypen

3.2.1 Grundlagen

D. Scott, C. A. R. Hoare, D. L. Parnas u. a. entwickelten eine abstrakte Sichtweise undBehandlung von Programmen vor, die wir inzwischen in vielen Programmiersprachenwiederfinden.

Page 134: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-4 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

Ein Programm(-modul) P besteht im wesentlichen aus

− einem Datenbereich D− einem Tupel (f1,f2,...,fn) von Operationen auf D.

Alle Prozeduren von P mit Ausnahme einer funktionalen Sicht (Schnittstelle) derf1,f2,...,fn zugeordneten Prozeduren bleiben bei dieser Betrachtungsweise verbor-gen (Prinzip des "Information Hiding"). Ihre Existenz wird durch die Reaktion der Schnitt-stelle auf Parameterübergabe abstrahiert. Weiterhin wird gefordert, daß der DatenbereichD mit Hilfe der (z. T. nullstelligen) Operationen f1,f2,...,fn aufgebaut, gelesen odergeändert werden kann.

Sicher erinnert Sie diese etwas trockene Darstellung an die den Aufbau einer Unit vonBorland Pascal, bei dem in einem Block INTERFACE diese

UNIT zpolygon;{verwaltet und zeichnet ein Polygon}{$R-} { Turn off range check because Windows message parameters don't distinguish between INTEGER and WORD. }INTERFACE USES WinTypes,Objects,OWindows,stift;

TYPE ppolypunkt = ^tpolypunkt; tpolypunkt = OBJECT(TObject) {----- Datenfelder -----} {----- Methoden -----} CONSTRUCTOR init(ax,ay:INTEGER); CONSTRUCTOR lade(VAR s:TStream); PROCEDURE speichere(VAR s:TStream); {----- private Datenfelder -----} PRIVATE x,y : INTEGER; {----- private Methoden -----} END; {tpolypunkt}..IMPLEMENTATION USES WinProcs; {----- Implementierung der Methoden von tpolypunkt ------------} CONSTRUCTOR tpolypunkt.init(ax,ay:INTEGER); BEGIN x:=ax; y:=ay; END; {tpolypunkt.init}

CONSTRUCTOR tpolypunkt.lade(VAR s:TStream); BEGIN s.Read(x,SIZEOF(x)); s.Read(y,SIZEOF(y)); END; {tpolypunkt.lade}..BEGIN {=========================================================} RegisterType(rpolypunkt);

Page 135: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-5

RegisterType(rpolygon);END. {UNIT zpolygon}

Diese abstrakte Sichtweite von Programmen führt zwangsläufig zu einer strengen Typisie-rung der Daten in den Schnittstellen (obwohl dies inzwischen durch die objektorientierteProgrammierung wieder aufgeweicht wird). Ein Datentyp wird somit in enger Verbindungmit dem Begriff Programm gebraucht, ja vereinigt sogar beide Sichtweiten

Eine Aussage über ein als Datentyp P abstrakt zu betrachtendes Programm P isteine Aussage über all die Programme x, die in einem festgelegten Sinne funkti-onsgleich zum Programm P sind.

In einer formalen Notation schreiben wir

Aussage(Datenttyp(P)) ≡ ∀x (funktionsgleich(P,x) → Aussage(x))

Die Aussagen über den so eingeführte Abstraktor Datentyp sind also invariant bezüglichdes Ersatzes von P durch ein funktionsgleiches Programm x. Damit liegt eine klareTrennung zwischen der auf einer höheren Systemebene vorgenommenen Beschreibungdes funktionalen Systemverhaltens und der auf einer unteren Ebene vorgenommenenRealisierung der Programme vor.

Der Einsatz des Prinzips der abstrakten Datentypen erfordert fast zwingend eine Modula-risierung und Hierarchisierung des Anwendungssystems. Der Entwurf wird in zwei einfa-chen, aufeinander aufbauenden Schritten durchgeführt

− Entwurf des funktionalen, benutzerorientierten Verhaltens− Technische Realisation

Einfache Dinge hören sich trivial an. Vergleichen Sie aber ruhig einmal Programme, diemit bzw. ohne dieses Prinzip entwickelt wurden. Entscheidend ist, daß sich die abstrakteBeschreibungsebene nicht ändert, wenn sich die technische Realisierung z. B. wegeneines Systemwechsel o. a. ändert.

Ziel dieses Ansatzes ist es, die komplexen DBMS und die Anwendungsprogramme daraufmit Hilfe des Abstraktors „(abstrakter) Datentyp“ so zu beschreiben und zu realisieren,daß leicht zu realisierende, einfach wartbare Moduln entstehen, aus denen sich das Ge-samtsystem zusammensetzt.

Bei dieser Methode erhalten wir eine hierarchisch strukturierte Menge von Systemsichten.Jede dieser Systemsichten (Systemebenen) realisiert dabei für die nächst höhere Syste-mebene einen Datentyp, dessen Daten und Methoden (Operationen) Basis für die Be-schreibung und Realisierung dieser Ebene sind. Wir erreichen dabei eine optimale Ent-kopplung der verschiedenen Ebenen.

Jede Systemebene realisiert einen Datentyp, dessen Daten und Methoden in der direktdarüberliegenden Ebene zur Realisierung eines übergeordneten Datentyps benutzt wer-den. Die Kommunikation der Ebenen untereinander erfolgt dabei einzig über eine einheit-liche, wohldefinierte Schnittstelle (Interface).

Page 136: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-6 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

Dieses Prinzip der Schichtenbildung finden wir an vielen Stellen der Technik wieder. Ingestandenen Wissenschaften spricht man nicht mehr darüber (oder wird die Schraube imMaschinenbau jedesmal neu definiert?). In der Datenverarbeitung wird noch kräftig darangearbeitet. Auf dem Gebiet der Datenübertragung ist das Prinzip in Form des ISO-OSI-Modells (International Standardization Organization Open Systems Interface) als Grund-lage eines für verschiedene Hersteller offenen System mit Erfolg eingesetzt.

In der Literatur finden wir als Beispiel für eine solche Schichtenbildung Modelle, die aufdem Vorschlag "Data Independent Accessing Model (DIAM)" von Senko basieren (Bild3.2-1). Die (bis zu) 5 Systemebenen sind

− logisch-begriffliche Datenstrukturen (Entity Set Model)− logische Zugriffspfade (String Model)− Speicherungsstrukturen (Encoding Model)− Seitenzuordnungsstrukturen (Paging Model)− Speicherzuordnungsstrukturen (Physical Device Model)

Die physische Schnittstelle ist (hardwaremäßig) durch die verwendeten Speichermedienvorgegeben, die über entsprechende Treiber bedient werden. Diese sind in der Extern-speicherverwaltung (DOS) eingebunden und enthalten die Beschreibung der Datenträgerin Form des Speichertyps, der Anzahl der Köpfe, Spuren, Sektorgröße usw.

Page 137: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-7

Die Systempufferverwaltung stellt auf dernächst höheren Ebene Seiten aus derDatei zur Verfügung. Sie trennt also Seg-ment und Datei, Seite und Block.

Die physische Verwaltung von Sätzenerfolgt in der Ebene Zugriffspfadverwal-tung durch den Record-Manager. Hierwerden interne Sätze gebildet und Zei-ger(-ketten) auf Seiten und Segmente an-gelegt. Auf der anderen Schnittstelle wer-den Operationen auf interne Sätze undZeiger zur Verfügung gestellt.

Die Ebene der logischenZugriffspfadtrukturen stellt dem DB-Anwender eine satzorientierte logischeDB-Schnittstelle zur Verfügung.

Die obersten, der logisch-begrifflichenEbene stellt dem DB-Anwender einemengenorientierte DB-Schnittstelle zurVerfügung. Auf dieser Ebene muß derBenutzer nicht mehr selbst über die Zei-ger in der DB navigieren.

Die "Außenwege" zeigen uns die z. Z. inDB-Systemen realisierten drei Möglich-keiten.

3.2.2 Entwurfstechniken

In diesem Kapitel wollen wir einige Ent-wurfstechniken kennenlernen, die eine optimale DB-Realisation zum Ziel haben.

Generell können wir folgende Entwurfstechniken unterscheiden

1. grafischer Entwurf2. formalsprachlicher Entwurf (Pseudocode)3. kombinierter Entwurf

Im Rahmen der modernen grafischen Oberflächen (Windows, OS/2 usw.) gibt es kaumnoch diese strengen Unterscheidungen. Der Trend geht zu den kombinierten Entwürfen,die beide Darstellungen zulassen, wobei die Datenbankbeschreibung (DDL) und die Ma-nipulationsprogramme (DML) in beiden Darstellungen entworfen werden können. Durch(unsichtbare) Transformation kann der Benutzer beliebig wechseln und die jeweils günsti-gere Darstellung wählen.

DB-Anwendungen

Logisch-begriffliche DatenstrukturenDaten: Relationen, Sichten, TupelOperationen: logisch-begrifflicheVerknüpfungen

Logische ZugriffspfadstrukturenDaten: Logische Sätze und Zugriffspfade,

Sets, Schlüssel

Operationen: FIND NEXT satznameSTORE satzname

SpeicherungsstrukturenDaten: interne (physische) Sätze und Zeiger

(z.B. B*-Bäume, Hash-Zeiger)

Operationen: Verwaltung interner Sätze undZeiger

Seitenzuordnungsstrukturen(Systempufferverwaltung)

Daten: Seiten, SegmenteOperationen: Verwaltung dieser Daten

Speicherzuordnungsstrukturen(Externspeicherverwaltung)

Daten: Dateien, Blöcke, Sektoren, ClusterOperationen: Verwaltung dieser Daten

Physischer Datenträger

Bild 3.2-1: Schichtenbildung

Page 138: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-8 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

3.2.2.1 Entwurf des konzeptuellen Schemas (Unternehmensdatenmodell)

Das konzeptionelle Schema beruht auf denFachsprachen der Anwendungsbereiche.Seine Aufgabe besteht darin, diese zu er-fassen und einheitlich festzulegen. Da zwi-schen den Fachbegriffen Abhängigkeitenbestehen, entsteht ein Netz aus Begriffenund Beziehungen (Bild 3.2-2).

Diese Netz ist noch relativ grob und gibtkeine Auskunft über Beziehungen zu denanderen Schemata. Es ist daher vorteilhaft,die vorliegenden Informationen weiter aus-

zuschlachten.

In den allgemeinen Aussagen (Tatsachen und Regeln) der Fachabteilungen finden wirbereits genügende Hinweise für ein konzeptuelles Schema

AussagenFolgende Aussagen zu einer SOZIETÄT aus DATEV-Sicht gelten derzeit als gesichert:A0 MITGLIEDER der DATEV können NATÜRLICHE PERSONEN oder

GESELLSCHAFTEN sein.A1 Zusammenschlüsse von DATEV-MITGLIEDERN (GENOSSEN) mit einer gemein-

samen BERUFLICHEN NIEDERLASSUNG zum Zwecke der gemeinsamen Berufs-ausübung werden SOZIETÄTEN genannt.

A2 Nur NATÜRLICHE PERSONEN können sich zu SOZIETÄTEN zusammenschlie-ßen.

A3 Die DATEV erkennt SOZIETÄTEN als Nutzer ihre DIENSTLEISTUNGEN nur an,wenn alle SOZIETÄRE (oder SOZII) auch MITGLIEDER der DATEV sind.

A4 Der Sitz (ADRESSE) einer SOZIETÄT ist die (gemeinsame) BERUFLICHENIEDERLASSUNG aller ihrer Mitglieder (SOZII).

A5 Aus DATEV-Sicht werden BERATERNUMMERN(NUTZUNGSBERECHTIGUNGEN) nicht der SOZIETÄT, sondern den Mitgliedern(SOZII) zugeordnet.

A6 Auftraggeber für in Anspruch genommene DATEV-DIENSTLEISTUNGEN ist lautDATEV-Geschäftsbedingungen die SOZIETÄT:

A7 DATEV-MITGLIEDER können neben ihrer Tätigkeit als SOZII der DATEV gegen-über auch als Einzelauftraggeber unter einer eigenenNUTZUNGSBERECHTIGUNG auftreten.

A8 Jede SOZIETÄT kann über die gemeinsame BERUFLICHE NIEDERLASSUNG hin-aus WEITERE BERATUNGSSTELLEN besitzen.

A9 Eine SOZIETÄT hat die Rechtsform einer Gesellschaft des Bürgerlichen Rechts.Sie basiert auf einem SOZIETÄTS-Vertrag.

...

das wir mit den Symbolen Inklusion, Aggregation und Konnexion erzeugen.

Die Inklusion zeigt an, daß ein Objekt (Gegenstandsbereich, Fachbegriff) unter ver-

abteilung(y)

mitarbeiter(x)

arbeitet_in(x,y)

Bild 3.2-2: Netz aus Fachbegriffen und Ab-hängigkeiten

Page 139: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-9

schiedenen Blickwinkeln, d. h. Begriffen gesehen wird. Fachlich liegen sprachliche Nor-mierungen von Wörtern vor, die zu einer Klassenhierarchie im Sinne einer Generalisie-rung oder Spezialisierung von Betrachtungsweisen eines Gegenstandsbereiches führen.Die Begriffe NATÜRLICHE PERSON und GESELLSCHAFT (juristische Person) speziali-sieren den Begriff MITGLIED.

Die Aggregation zeigt eine Zusammenfassung von Objekten eines Begriffs unterden Objekten eines anderen Begriffs an. So werden Objekte des Begriffs

NATÜRLICHE PERON unter Objekten des Begriffs SOZIETÄT zusammengefaßt.

Konnexionen dienen der Einführung neuer Begriffe. Hier werden Beziehungen, diezwischen Objekten spezifischer Begriffe konstruiert werden können, selbst zu Objektenund unter einem neuen Begriff zusammengefaßt. Jede Inanspruchnahme einerDIENSTLEISTUNG durch ein MITGLIED wird als neu gebildetes Objekt unter dem neuenBegriff NUTZUNGSRECHT explizit aufgeführt. Der neuen Begriffsbildung geht in diesemBeispiel die Feststellung voraus, daß ein MITGLIED mehrere DIENSTLEISUNGEN nut-zen kann, während eine DIENSTLEISTUNG von mehreren MITGLIEDERN genutzt wird.Da es dabei gilt, spezifische Informationen über die Inanspruchnahme einzelner Dienst-leistungen festzuhalten, wird der neue Begriff NUTZUNGSRECHT in das Datenmodellaufgenommen.

Die über die aufgeführten Beziehungssymbole dargestellten Symbole werden zusammenmit ihren Objekttypen Beziehungskomplexe genannt.

Nachdem wir nun eine Technik für den Entwurf des konzeptuellen Schemas haben, müs-sen wir aktiv daran gehen, das Unternehmensdatenmodell zu konstruieren (Bild 3.2-3).Diese wird sicher nicht in einem Durchlauf möglich und dazu noch vollständig sein.

Letztlich wird es schrittweise und iterativ erfolgen müssen. Dabei gibt es mehrere Vorge-hensweisen

Naiver Entwurf

Wenn man diesen Standpunkt einnimmt, dann geht man davon aus, daß die dargestellteNotation alle komplexen Zusammenhänge adäquat darstellen kann. Zusammenhängewerden als gegeben hingenommen und nicht kritisch an der zu lösenden Aufgabenstel-

SOZIETÄT

MITGLIED

NUTZUNGSRECHT

DIENSTLEISTUNG

NATÜRLICHEPERSON

GESELLSCHAFT

Bild 3.2-3: Konzeptuelle Schema des Unternehmensdatenmodells

Page 140: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-10 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

lung überprüft. Das Gesamtsystem muß nachträglich rekonstruiert werden, wobei der Be-nutzer irgendwann "aussteigt".

Dogmatischer Entwurf

Hier geht man von einer starken DV-orientierten Darstellung aus (PROLOG, Relationen-modell usw.). Durch den Zwang, gültige Regeln einzuhalten (Normalformen usw.) kann esdazu kommen, daß die Diskussion des Entwurfs mit den Benutzern erschwert oder garunmöglich wird.

Konstruktiver Entwurf

Die natürlichsprachlichen Beschreibungen sind schrittweise in ein formales Begriffssy-stem überzuführen, wobei Unschärfen, Widersprüche und Störungen an und zwischenden Begriffen zu beseitigen sind. Hierbei lernt die Fachabteilung methodisch mit.

In einem ersten Schritt werden die Begriffe und Zusammenhänge kritiklos aufgenommen,geordnet und analysiert (siehe Beispiel). Dabei werden unscharfe, falsche oder wider-sprüchliche Begriffe erkannt. Dies führt zu Fragen wie

− Wie unterscheiden sich NATÜRLICHE PERSONEN und GESELLSCHAFTEN(im Sinne von DATEV)?

− Was sind SOZIETÄRE?− Sind SOZIUS, SOZIETÄR und SOZIETÄRPARTNER Synonyme?− Was sind die DIENSTLEISTUNGEN?− Wie wird DATEV definiert?− Sind die Singular- und Pluralformen gleich zu behandeln?

Im nächsten Schritt sind die Fachbegriffe zu definieren, die die Basis weiterer Aussagenbilden und nicht weiter zerlegt werden, bzw. von anderen Begriffen abhängig sind.

In der traditionellenScholastik wird ein Be-griff durch das Be-griffswort (Bezeichner),seine Extension (Um-fang) und seine Inten-sion (Inhalt) beschrie-ben. Die Extension be-schreibt die Menge derObjekte, die unter ihmzusammengefaßt wer-den sollen. Die Intensi-on wird durch die Defi-nition der Merkmale ,anhand der festgestellt

werden kann, ob ein Objekt unter den Begriff fällt oder nicht. In der DB-Technik lernen wirdiese drei Dimensionen eines Begriffs ständig kennen. Der Bezeichner entspricht demBegriffswort (MITARBEITER). Die festgelegten Merkmale (Personalnummer, Name, Ort)bilden die Intension, die Werte einer Instanz des Begriffs (Datensatz Mayer) die Extensi-

Datenverarbeitungsorga-nisation des steuerbera-tenden Berufs in derBundesrepublik Deutsch-land, eingetragene Genos-senschaft

DATEV e. G.

diejenige Organisation,die diesen "Namen"trägt

Individualbegriff

Intension

Bezeichner

Extension

In der Liste der Genos-sen beim Amtsgerichteingetragene, zur unbe-schränkten Hilfeleistungin Steuersachen befugtePerson oder Gesellschaft

MITGLIED

z. Z. ca. 27.000 derDATEV angeschlossenen"Steuerberater"

Allgemeinbegriff

Bild 3.2-4: Definition der Fachbegriffe

Page 141: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-11

on. Dieses (historische) 3-Tupel wird heutzutage in der KI (Künstlichen Intelligenz) alsKonzept bezeichnet.

Individualbegriffe haben nur eine Extension, Allgemeinbegriffe beliebig viele davon.

Es ist wichtig, sich jedem Begriff einzeln zuzuwenden und keinen als gegeben hinzuneh-men. Probleme zwischen der Fachabteilung und der DV-Abteilung sind größtenteils aufunklare Begriffsdefinitionen zurückzuführen

Es ist doch selbstverständlich, daß ...Natürlich beinhaltet der Begriff, daß ...

sind die gegenseitigen Killerphrasen. Hilfreich ist die Beachtung folgender Anweisungen

1. Synonyme kontrollierenWörter, die dieselbe Bedeutung (Extension und Intension) haben und gegenseitig aus-getauscht werden können, müssen als solche erkannt werden.Beispiel: MITGLIED und GENOSSE bedeuten für DATEV "dasselbe"

2. Homonyme beseitigen

Wörter, die gleich geschrieben und/oder gleich gesprochen werden, aber eine deutlichandere Bedeutung (Extension und Intension) haben, müssen eliminiert werden.Beispiel: STEUER könnte in diesem Zusammenhang mit einer Lenkvorrichtung ver-wechselt werden.

3. Äquipollenzen aufdeckenDieselben Objekte (Extension) werden unter verschiedenen Blickwinkeln (Intensionen)betrachtet und unterschiedlich bezeichnet.Beispiel: LAGERBESTAND (mengenmäßig) und WARENKONTO (wertmäßig)

4. Unschärfen klären

Überschneidungen in Inhalt und Umfang legen den Verdacht auf Unschärfen nahe.Hier muß es zu einer echten Abgrenzung kommen.Beispiel: Gehört WOHNSITZ als Ort der Berufsausübung eines BERATERS noch zumBegriff KANZLEI bei DATEV oder nicht?

5. Falsche Bezeichner ersetzen

Tatsächliche und durch den Bezeichner suggerierte Bedeutung (Extension und Inten-sion) müssen erkannt und beseitigt werden.Beispiel: Bei DATEV hat die BERATERNUMMER nicht die Funktion, SteuerBERATERzu identifizieren. Sie identifiziert vielmehr ein von mehreren NUTZUNGSBERECHTI-GUNGEN, die ein SteuerBERATER hat.

Auf dem geklärten Bestand an Fachbegriffen mit seinen gesicherten Aussagen baut nundie Konstruktion von Objekttypen, Operationen, Ereignisse, die Operationen auslösenund Integritätbedingungen auf. Hier hilft uns die Untersuchung der Aussagen auf be-stimmte Reizwörter, wobei Mehrfachzuordnungen durchaus möglich sind (Bild 3.2-5).

Die so in vier Klassen vorstrukturierten Aussagen werden nun im nächsten Schritt aufVerbindungswörter oder Partikel hin untersucht, um Inklusionen (Bild 3.2-6), Aggregate(Bild 3.2-7) und Konnexionen (Bild 3.2-8) für die Objekttypkonstruktion zu erkennen.

Page 142: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-12 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

Aussagen über

ObjekteObjekteigenschaften

Aussagen über

Operationen

Aussagen über

Ereignisse

Aussagen über

Integritätsbe-dingungen

der Form: der Form: der Form: der Form:

... ist ein ...

... besteht aus ...

... hat ...

... gehört zu ...usw.

... eintragen ...

... entfernen ...

... ermitteln ...

... aufnehmen ...usw.

Wenn ...

Nachdem ...Sobald ...

Bevor ...usw.

... muß ...

... darf ...

... hat immer ...

... dürfen nicht ...usw.

Aussagensammlung

Bild 3.2-5: Klassifizierung von Aussagen

grafische Darstellung

MITGLIED

NATÜRLICHEPERSON

GESELLSCHAFT

korrespondierende Aussagen:

Ein Mitglied ist eineNATÜRLICHE PERSONoder eineGESELLSCHAFT.

*

Sowohl NATÜRLICHEPERSONEN wie auchGESELLSCHAFTENsind MITGLIEDER.

Alle GESELLSCHAFTENsind MITGLIEDER.

Kennzeichnung:

Betrachtung desselbenObjektbereichs unterverschiedenen Blick-winkeln (Begriffen).

Sprachmuster:

Ein ... ist ein ... oder ein ...

Sowohl ... als auch ... sind ...

Alle ... sind ...

*

*

Bild 3.2-6: Inklusion

Page 143: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-13

Die Diagrammdarstellung istschon sehr komprimiert. Siestellen daher nur für denerfahrenen Entwerfer eineDiskussionsgrundlage dar.Die Diagramme sind einHilfsmittel, um die sprachli-chen Aussagen darzustellenund zu überprüfen, d. h.Fragestellungen daraus ab-zuleiten.

Die Forschung auf diesemGebiet geht in zwei Richtun-gen. Zum einen werden der-zeit DV-gestützte Werkzeu-ge zur Unterstützung ent-wickelt. Zum anderen willman ein System von Aussa-gen entwickeln, daß aufviele Unternehmen anwend-

bar ist, ähnlich einer Sammlung von Objekten. Hierzu ist es notwendig, eine Orthosprachezu definieren.

Orthogonale Systeme sindin der Mathematik Basis-system, die einen vorge-gebenen Raum vollständigaufspannen (z. B. einenVektorraum, einen Funk-tionenraum usw.) und da-bei orthogonal (senkrechtaufeinander) stehen, sodaß das VektorproduktNull wird. Die Basisvekto-ren lassen sich dann nichtineinander überführen, siesind voneinander unab-hängig. Die Begriffe über-decken sich nicht, bildenaber zusammen eine voll-ständige Menge, umsämtliche betrieblichenInformationen zu reprä-sentieren.

grafische Darstellung

SOZIETÄT

korrespondierende Aussagen:

Eine SOZIETÄT besteht

LICHEN PERSONEN.

*

Eine NATÜRLICHEPERSONEN gehört

Kennzeichnung:

Zusammenfassung vonObjekten eines Begriffsunter den Objekten einesanderen Begriffs (verschie-

Sprachmuster:

Ein ... besteht aus ... mehreren ...

Ein ... gehört einer ... an.

Es gibt ..., die nicht einer ...

NATÜRLICHEPERSON

aus mehreren NATÜR-

einer SOZIETÄT an.

Es gibt NATÜRLICHEPERSONEN, die nichteiner SOZIETÄT ange-hören.

dene Objektbereiche).

*

*

Bild 3.2-7: Aggregation

grafische Darstellung

NUTZUNGS-

korrespondierende Aussagen:

Ein MITGLIED kann

LEISTUNGEN nutzen.

*

Eine DIENSTLEISTUNGkann von mehreren MIT-

Kennzeichnung: Sprachmuster:

Ein ... kann ... mehrere ...

Ein ... kann von mehreren ...

Die ... einer ... durch ein ...

mehrere DIENST-

GLIEDERN genutzt werden.

GLIED wird NUTZUNGS-

*

*

RECHT

MITGLIEDDIENST-LEISTUNG

Die Nutzungsmöglich-keit einer DIENSTLEI-STUNG durch ein MIT-

Beziehungen zwischen denObjekten spezifischer Ob-jekte werden als eigenstän-dige Objekte unter einem Be-griff (neuer Objektbereichzusammengefaßt).

wird ... genannt

RECHT genannt.

Bild 3.2-8: Konnexion

Page 144: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-14 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

3.3 Praktische Fragen

3.3.1 Zeit-/Mengengerüst

Nachdem unsere Fachhochschule jetzt einige Jahre besteht, fiel eigentlich jährlich auf,daß sich etwa jährlich ihre Matrikelnummer geändert hat. Es wurden Nullen vorangestellt,es kamen Ziffern am Ende hinzu.

Solche Erscheinungen lassen den aufmerksamen Datenbankprofessor vermuten, daßkein Zeit-/Mengengerüst aufgestellt wurde. Diese Tätigkeit ist durchaus wichtig, da sieganz erheblich dazu beiträgt, Umstellungsprobleme in der Zukunft zu vermeiden. Dabeiist die Technik ganz einfach. Es müssen nur die folgenden Fragen beantwortet werden:

1. Wie groß ist der aktuelle Datenbestand, d. h. wie viele Entitäten enthält jeder Enti-tätstyp?

2. Wie groß ist der periodische Zuwachs?3. In welchen Perioden sollen die Bestände bereinigt werden, oder umgekehrt, wie lange

müssen bestimmte Daten aufgehoben werden?4. Welche Daten können überhaupt ohne Folgeprobleme gelöscht werden?5. Müssen die Daten überhaupt langfristig (online) in der Datenbank gespeichert werden,

reicht nicht Sicherungs- oder Papierarchiv aus?

Die Aufstellung dieser Zahlen legt den Speicherbedarf und die Schlüsselgröße fest.

Beispiel:In einer Datenbank zur Zeiterfassung fallen pro Arbeitstag für jeden Mitarbeiter minde-stens zwei Einträge an (Kommen und Gehen). Dazu kommen Dienstgänge, Dienstfahrten,Pausen usw. Eine Speicherung dieser Daten über mehrere Jahre hinaus würde jede nochso große Festplatte in die Knie zwingen. Es muß daher überlegt werden, nach welchemZeitraum nur noch verdichtete Daten (wöchentliche, monatliche Arbeitszeit) aufbewahrtwerden. n

3.3.2 Historienproblem

Auch Daten haben ihre Geschichte bzw. eine Zukunft. Ist es notwendig, auf solche Datenzuzugreifen, so muß der Datenbankentwurf entsprechend gestaltet werden.

Eigentlich muß der Entwerfer alle Auswertungsfunktionen dahingehend untersuchen, obsie Einfluß auf den Entwurf haben. Die Beispiele hierzu sind beliebig. Eines hatten wirschon erwähnt, daß ein Mitarbeiter die Kostenstelle wechselt, aber kostenstellenspezfischseine Weiterbildung verrechnet bekommt. Hier ist das Problem nicht auf den ersten Blickerkennbar. Als es dann auftauchte, kam der verantwortliche Praktikant auf die Lösung, beijedem Kostenstellenwechsel einen neuen Datensatz des Mitarbeiters mit seiner neuenKostenstelle anzulegen.

Als erfahrene Datenbankentwerfer erkennen Sie sofort das Problem der Datenwiederho-lung in senkrechter Richtung. Bei jeder Änderung der anderen Daten des Mitarbeitersmüssen mehrere Datensätze geändert werden. Das ist eine klassische Änderungsanoma-lie.

Page 145: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-15

Einfacher ist es, den Einsatz der Firmen- oder Mietwagen zu verwalten. Hier wird manschon zu Anfang des Entwurfsprozesses daran denken, daß irgend jemand die „Knöll-chen“ bezahlen muß. In einer Bibliothek ist es selbstverständlich, den Zeitbereich derAusleihe festzuhalten. Ein Arbeitgeber benötigt i. a. nur die aktuelle Anschrift seiner Mit-arbeiter. Das Einwohnermeldeamt oder die Bewilligungsstelle für Mietzuschüsse brauchtdagegen die Historie usw. usw.

Soll also in einer Datenbank der Zustand einer Date zu bestimmten Zeiten (genau in be-stimmten Zeitabschnitten) festgehalten werden, so muß dies von Anfang an eingeplantwerden. Die Lösung des Problems ist einerseits simpel, andererseits doch auch zeitauf-wendig.

Es genügt, die Basistypen 1:1, 1:m und m:m zu untersuchen. Mit Ausnahme des letztenFalle rutscht dabei die Komplexität um eine Stufe nach oben.

Beispiele:Statt die Anschrift beim Mitarbeiter direkt zu speichern, legen wir eine zweite Tabelle an,in der alle Anschriften des Mitarbeiters und der dazu gehörige Zeitbereich notiert sind.Aus der 1:1 Beziehung innerhalb der Tabelle wird eine 1:m Beziehung:

mitarbeiter mitarbeiter anschrifthat

Es könnte sich aus einer c:c Beziehung aber auch eine m:m Beziehung ergeben. Ein Mit-arbeiter kann zu einem Zeitpunkt nur einen Firmenwagen steuern. Unter Berücksichtigungder Zeit wird daraus eine mc:mc Beziehung:

mitarbeiter mitarbeiter kfzfährt

kfzfährt

Ein Kunde kann mehrere Mietwagen mieten. Ein Mietwagen ist aber zu einem bestimmtenZeitpunkt nur an einen Kunden vermietet, also eine c:mc Beziehung. Um den Zeitbereichder Anmietung festzuhalten müssen wir aus der c:mc Beziehung eine mc:mc Beziehungmachen:

kunde kunde kfzmietet

kfzmietet

Im RDM müssen wir dann schon eine Verbindungstabelle mietet einführen, um dieseneue Beziehung zu realisieren.

Richtig schwierig wird es, wenn wir von einer m:m Beziehung ausgehen müssen:

auftrag positionumfaßt

artikelbetrifft

Eine Steigerung der Komplexität ist hier nicht ohne weiteres möglich. Umgekehrt sind dieÄnderungsmöglichkeiten umfangreicher. Angefangen von Erweiterungen des Auftrages

Page 146: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-16 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

über Stornierungen einzelner Positionen bis hin zur Frage einer Preiserhöhung bis zurLieferung. Wobei dieses Problem wiederum von der einfacheren Form des Überganges1:m auf m:m ist. Wie aber soll das Problem behandelt werden, wenn die Frage gestelltwird, wie die Bestellung vor wenigen Tagen aussah? n

Welche Lösungsmöglichkeiten haben wir?

Hierbei wollen wir uns erst einmal auf das letzte Beispiel beschränken, weil die andereneigentlich mit dem richtigen Entwurf trivial werden. Mit Ausnahme der Frage, ob nur dasAnfangsdatum oder auch das Enddatum gespeichert werden sollte. Diese Frage kannaber auch im letzten Beispiel behandelt werden.

Kopieren zeitkritischer Daten

Eine einfache und wirkungsvolle Methode, um den Preis zu stabilisieren, besteht im Um-kopieren. Hierzu nehmen wir folgende Ausgangssituation an (Primärschlüssel unterstri-chen, Verbindungsschlüssel kursiv):

auftrag(anr, adatum, …)position(panr, plfnr, partnr, pmenge, …)artikel(artnr, artname, artpreis, …)

und übernehmen den Preis zu einem bestimmten Zeitpunkt (Eingabe des Auftrages) indie position.

position(panr, plfnr, partnr, pmenge, …, partpreis)

Spätere Änderungen des Preises wirken sich nun für aktuelle Aufträge nicht mehr aus.Daneben können wir vielleicht auf eine Verknüpfung (Join) zur Artikeltabelle verzichten,wenn wir keine weiteren Informationen aus dieser benötigen (wie z. B. den Artikelnamen).

Nachteilig ist die Redundanz des Attributs artpreis, die sich je nach Anzahl der Posi-tionen beliebig steigern lassen kann. Auch Änderungsanomalien, wie rückwirkende Preis-senkungen, sind denkbar.

Redundanzarme Erweiterungen

Der Begriff „arm“ wird benutzt, weil auf jeden Fall Verbindungsschlüssel zusätzlich nötigsind, die sich in senkrechter Richtung wiederholen.

Wir lehnen uns an das Beispiel „Firmenwagen“ an und lagern den Preis in eine weitereTabelle artpreis aus, die wir um ein Attribut artpgueltig_ab ergänzen. Kann dieProduktion eines Artikels auslaufen, dann ergänzen wir ggf. ein logisches Feldartpausgelaufen.

auftrag(anr, adatum, …)position(panr, plfnr, partnr, pmenge, …)artikel(artnr, artname, …)artpreis(artpartnr, artpvon, artpausgelaufen, artppreis)

Page 147: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-17

Ändert sich der Preis, so wird ein Datensatz in artpreis ergänzt, der den neuen Preisund das Startdatum (ggf. in der Zukunft) enthält. Läuft der Artikel aus, so wird wieder einDatensatz mit dem Auslaufdatum und gesetztem artpausgelaufen ergänzt.

Diese Lösung hat gegenüber der nächsten den Nachteil, daß wir mindestens einen Da-tensatz in der Tabelle artpreis nachlesen müssen, um festzustellen, ob nicht einneuerer Preis gilt. Sind die Preisänderungen häufig, kann dies zu einer langwierigen, se-quentiellen Suche ausarten.

Eine kleine Variante zur ersten Lösung besteht darin, statt artpvon das Enddatumartpbis zu speichern. Hier könnte auf das Auslauffeld verzichtet werden. Andererseitsmüßte bei jedem neuen Preis immer zwei Datensätze geändert werden, wie es in derdritten Alternative beschrieben wird.

Ersetzen wir in unserer Tabelle das Auslauffeld durch ein Enddatum, dann bauen wir indi-rekt Redundanz ein, da das Enddatum immer einen Tag vor dem nächsten Anfangsdatumliegt, somit berechnet werden könnte:

artpreis(artpartnr, artpbis, artpvon, artppreis)

so müssen wir bei einem neuen Preis artpbis auf seinen höchsten Wert setzen. Ande-rerseits muß im Vorgängerdatensatz (wenn vorhanden) dieses Feld auf den vorherigenTag geändert werden. Die Suche könnte dadurch beschleunigt werden, daß man in denPreisen zeitlich rückwärts sucht (wenn das DBMS dies kann), so daß immer der neuestePreis zuerst gefunden wird. Dies ist der Grund, warum der Schlüssel auf artpbis um-gestellt wurde. Die Suche erfolgt daher immer mit dem höchsten Datum. Wird kein Daten-satz gefunden, so ist der Artikel nicht mehr lieferbar.

So würde man die Abfrage in klassisch satzorientierter Art optimiert werden. In SQL siehtdas wiederum etwas anders aus.

Wir wenden uns daher ausschließlich der Frage zu, wie wir aus der Tabelle artpreisden zu einem bestimmten Zeitpunkt (Auftragsdatum) gültigen Preis bestimmen können.

Wir beginnen mit unserer ersten Alternativen:

artpreis(artpartnr, artpvon, artpausgelaufen, artppreis)

und entwickeln folgende Abfrage:

SELECT artpreis.artpartnr, artpreis.artpgueltig_ab, artpreis.artpausgelaufen,artpreis.artppreis

FROM artpreis WHERE artpartnr=[artnr] AND artpgueltig_ab= ( SELECT MAX(artpgueltig_ab) FROM artpreis WHERE (artpgueltig_ab <= [adatum]) AND ((artpreis.artpausgelaufen)=False));

Wie wäre es aber mit dieser, bei der die äußere Select-Anweisung eigentlich nur einenDatensatz sucht:

Page 148: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Konzept der abstrakten Datentypen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-18 D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329

SELECT artpreis.artpartnr, artpreis.artpgueltig_ab, artpreis.artpausgelaufen,artpreis.artppreis

FROM artpreis WHERE artpgueltig_ab= (SELECT MAX(artpgueltig_ab) FROM artpreis WHERE artpartnr=[artnr] AND (artpgueltig_ab <= [adatum] AND ((artpreis.artpausgelaufen)=False)));

Zuerst suchen wir für den nicht ausgelaufenen Artikel den Datensatz (logisch sequentiell)mit dem höchsten Datum vor unserem Auftragsdatum. Anschließend benutzen wir dasErgebnis, um die zugehörigen Datenfelder zu extrahieren.

In der dritten Alternative

artpreis(artpartnr, artpvon, artpbis, artppreis)

sieht die Abfrage deutlich einfacher aus:

SELECT DISTINCTROW artpreis1.artpartnr, artpreis1.artpgueltig_ab,artpreis1.artpgueltig_bis, artpreis1.artppreis

FROM artpreis1 WHERE (artpreis1.artpartnr=[artnr] AND [adatum] BETWEEN artpreis1.artpgueltig_ab AND

artpreis1.artpgueltig_bis);

Hier erhebt sich natürlich die Frage, wie das DBMS die Klausel BETWEEN verarbeitet.Gehen wir von einer gewissen Intelligenz aus, so sollte sie deutlich schneller als die dop-pelte Select-Anweisung funktionieren. Hier müssen (fast) keine Zwischentabellen ange-legt werden, d. h. es muß (fast) nichts geschrieben werden usw.

Unser logisches Datenmodell sieht derzeit mit der ergänzten Tabelle so aus:

auftrag positionumfaßt

artikelbetrifft

artpreishat

Damit sind die Aufträge mit ihren Positionen weitgehend von den Artikelpreisen entkop-pelt.

Diskutiert man diese Aufgabenstellung weiter, so existieren auch Beispiele. Bei denen esden Artikel in mehreren Versionen gibt. Zur Vereinfachung wollen wir dabei davon ausge-hen, daß die Preise einer Version stabil sind. In diesem Fall erhielte unsere Artikeldateieinen Datumsstempel der Form:

artikel(artnr,artvon, arbis, artname, …)

Damit würde sich im logischen Datenmodell

auftrag positionumfaßt

artikelbetrifft

Page 149: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Entwurf © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB03Entw\DB03Entw.doc – 96329 Seite: 3-19

der Primärschlüssel von artikel ändern. Dies würde wiederum bei „ordnungsgemä-ßem“ Vorgehen (z. B. beim Einsatz eines Werkzeuges, der die Tabellen generiert), daßdie Verbindungsdatei diesen kombinierten Schlüssel übernehmen würde (fett dargestellt):

auftrag(anr, adatum, …)position(panr, plfnr, partnr, partvon, pmenge, …)artikel(artnr,artvon, artbis, artname, …)

In diesem Fall müssen wir bereits beim Anlegen einer Position die zum Auftragsdatumadatum gültige Version des Artikels finden und dessen Primärschlüssel übernehmen. Indiesem Fall verhält sich das System wie eine normale m:m Beziehung:

SELECT DISTINCTROW position.panr, position.plfnr, artikel.artnr, artikel.artvon,position.pmenge, artikel.artpreis

FROM artikel INNER JOIN position ON (artikel.artvon = position.partvon) AND(artikel.artnr = position.partnr)

WHERE (((position.panr)=[anr]));

F Hinweis: Lassen wir Änderungen von adatum bzw. von artvon oder artbis zu,dann müssen die Positionen neu zugeordnet werden. Eine einfache Ände-rungsweitergabe von artvon reicht z. B. nicht aus, da hierbei adatumals weiteres Kriterium zu berücksichtigen ist. Eine Änderung von adatumbetrifft alle Positionen des Auftrages, eine Änderung von artvon, arbisbetrifft alle Positionen des Artikels.

Die Idee, auf artvon als Teil des Primärschlüssels zu verzichten, verstößt gegen dieGrundregeln des Relationenmodells (eindeutige Elemente). Wir könnten aber auf die Ideekommen, in der Tabelle position einen unvollständigen Verbindungsschlüssel einzu-führen, indem wir auf artvon verzichten:

auftrag(anr, adatum, …)position(panr, plfnr, partnr, pmenge, …)artikel(artnr,artvon, artbis, artname, …)

Hierdurch wandeln wir die statische Zuordnung in eine dynamische Zuordnung um. JedeAbfrage muß dann den gültigen Preis über adatum ,wie bereits beschrieben, suchen.

Bei der Abfrage ändert sich die Where-Klauseln vom direkten Vergleich in eine Between-Klausel:

SELECT DISTINCTROW position.panr, position.plfnr, artikel.artnr, artikel.artvon,position.pmenge, artikel.artpreis

FROM artikel, position WHERE ([adatum] BETWEEN artikel.artvon AND artikel.artbis);

Page 150: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 11.10.98 20:35/11.10.98 20:35 Seite: 5-I

Aufbau von Datenbanken

4 Aufbau von Datenbanken........................................................................................... 5-1

4.1 Grundlagen........................................................................................................... 5-1

4.2 Externspeicherverwaltung .................................................................................. 5-1

4.3 Systempufferverwaltung ..................................................................................... 5-4

4.3.1 Aufgaben der Systempufferveraltung ............................................................. 5-4

4.3.2 Optimierung der Systempufferverwaltung ...................................................... 5-7

4.3.3 Verhalten bei Überlast.................................................................................. 5-12

4.3.4 Verwaltung der Seiten-Block-Zuordnung ..................................................... 5-12

4.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen)........ 5-13

4.4.1 Freispeicherverwaltung ................................................................................ 5-14

4.4.2 Adressierung der Sätze................................................................................ 5-14

4.4.3 Record-Manager .......................................................................................... 5-16

4.4.4 Verwaltung der Zugriffspfade (Indexverwaltung).......................................... 5-17

4.4.4.1 Grundlagen ........................................................................................... 5-17

4.4.4.2 Primärzugriffspfade ............................................................................... 5-18

4.4.4.3 Sekundärzugriffspfade .......................................................................... 5-28

4.4.4.4 Hierarchische Zugriffspfade .................................................................. 5-31

Page 151: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3
Page 152: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-1

5 Aufbau von Datenbanken

5.1 Grundlagen

In diesem Abschnitt wollen wir die theoretischgelegten Grundlagen noch weiter vertiefen.Zu diesem Zweck betrachten wir die fünfEbenen unseres datenunabhängigen Zu-griffsmodells im Detail.

Unser Modell besteht aus Schichten, die übereine Schnittstelle kommunizieren (Abbildung5-1). Die übertragenen Nachrichten könnenwir einerseits in Daten (lesend, schreibend)und andererseits in Dienstelemente (Befehle,Meldungen) unterscheiden. Die Daten sindSinn und Zweck einer Datenbank, die Dien-stelemente dienen zur Steuerung. Über dieBefehle teilt die übergeordnete Schicht der darunterliegenden mit, welche Dienste sie zuerbringen hat. Mit den Meldungen signalisiert die tiefere Schicht den Erfolg ihrer Arbeit.

5.2 Externspeicherverwaltung

Die Externspeicherverwaltung erfüllt folgende Aufgaben

1. Verwalten des physischen Speichers auf externen Speichermedien;2. Verbergen der Geräteeigenschaften an der Schnittstelle zu den höheren Ebenen

des DBMS;3. Abbilden von Datenblöcken der externen Speicherstruktur (Sektoren, Cluster ei-

ner Platte) auf einen Pufferbereich im Zentralspeicher. Auslagern von Daten ausdem Pufferbereich auf Datenblöcke der Externspeicher;

4. Kontrolle und Überwachung des Datentransportes von und zu den Externspei-chern;

5. Realisierung einer mehrstufigen Speicherhierarchie (data staging) unter Nut-zung von schnellen Cache-Speichern usw.

Häufig wird sich die Externspeicherverwaltung auf ein Betriebssystem abstützen. Umge-kehrt kann es sich aber auch um ein spezialisiertes Betriebssystem handeln (z. B. aufeinem Datenbankserver).

Auch wenn die Hardware bestimmte Blockbildungen vorgibt, weil z. B. Daten auf einePlatte nur in Sektoren oder Clustern gelesen bzw. geschrieben werden können, ist essinnvoll die Daten in größeren, disjunkten (elementfremden) Einheiten wie Dateien oderSegmenten zu unterteilen. Dies hat folgende Vorteile

1. Selektive ArchivierungDateien lassen sich selektiv archivieren (auf Band, Platte) und bei Bedarf gezieltaktivieren durch Einlegen des entsprechenden Datenträgers in ein Laufwerk.

Schicht n+1

Daten

Befehle

Meldungen

Schicht n

Schnittstelle

Abbildung 5-1: Hierarchisches Schich-tenmodell

Page 153: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.2 Externspeicherverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-2 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

2. StrukturierungDaten mit gleichen oder ähnlichen Zugriffsanforderungen lassen sich zusam-menfassen. Die Speicherform kann entsprechend optimiert werden. Beispiel: In-dexdateien auf RAM-Laufwerken, oft gebrauchte Daten auf schnellen Platten,selten gebrauchte Daten auf langsamen Großspeichern. (Dies war in der Ver-gangenheit noch viel ausgeprägter, als es angefangen vom Magnetband überden Plattenspeicher, den Trommelspeicher, den Kernspeicher usw. die ver-schiedensten Speichermedien mit unterschiedlichen Eigenschaften gab.

3. Verkürzte ZeigerDurch die mehrstufige Speicherung können die Daten mit kürzeren Adressen(relativ zur Datei und nicht zum Gesamtdatenbestand) versehen werden.

Eine Datei kann dabei mehrere Satzsysteme (Relationen) enthalten. Ggf. besteht ein sol-ches System aus mehrere Dateien, z. B. aus der Datendatei, den Indexdateien und denBeschreibungsdateien.

Nicht verschweigen kann man den Nachteil der höheren Empfindlichkeit eines Mehrdatei-ensystems gegen Fehler. Änderungen müssen in mehreren Dateien durchgeführt werden.Hierbei kann es zu Systemabstürzen kommen, so daß die Integrität des Dateiensystemsgestört wird.

Die Dateien der Externspeicherverwaltung unterliegen wie schon erwähnt der hardware-mäßig notwendigen Unterteilung in Blöcken. Eine Datei Dj besteht daher aus einzelnenBlöcken Bji (1<i<dj) mit einer festen Länge Lj. Im Normalfall gibt das Betriebssy-stem die Blocklänge vor, die von Speichermedium zu Speichermedium (Floppy, Festplat-te, Band usw.) variiert.

Die dargestellte Struktur bietet bereits auf dieser niedrigen Ebene verschiedene Realisie-rungsmöglichkeiten von der lückenlosen Abbildung der Blöcke auf dem Datenträger (z. B.sequentiell auf Bändern) bis hin zum virtuellen Speicherkonzept

A) Die sicher einfachste Möglichkeit besteht darin, Dateien und Blöcke auf dem Datenträ-ger sequentiell sowohl in logischer wie auch in physischer Reihenfolge anzulegen.Hierbei umfaßt jeder Block einen bestimmten, zusammenhängenden Speicherbereich(einen Sektor, ein Cluster, mehrere Sektoren...).

Vorteile:1. Bei konstanter Blocklänge (Satzlänge) kann die Adresse des Blocks (Satzes)

einfach aus der Blocknummer (Satznummer) berechnet werden, wenn die An-fangsadresse (Offset) bekannt ist. Die Formel für den Block n lautet

adr := startadr + (n-1) * länge 2. Diese Art der Speicherung eignet sich besonders für die sequentielle Verarbei-

tung, wobei eine entsprechende Pufferung weitere Geschwindigkeitsvorteilebringt.

3. Diese Art der Speicherung ist die einzige, die man auf linearen Speichermedien

(Bändern) einsetzen kann.

Page 154: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-3

Nachteile:1. Ein dynamisches Wachsen oder Schrumpfen der Dateien ist nicht oder nur mit

großem Aufwand (Umkopieren) möglich. Ggf. werden große, u. U. unbenutzte Be-reiche für diesen Zweck freigehalten.

Trotz der vermeintlichen Primitivität sind fast alle Programmiersprachen nur mitdieser Art der Datenspeicherung ausgestattet, angefangen von Basic (AusnahmeVisual Basic mit der Access-Maschine) über Pascal bis hin zu C. Alle diese Spra-chen lassen sich selbstverständlich durch entsprechende Toolboxen ausbauen.Der Sprachumfang selbst hört aber mit den sog. Random (Wahlfreien) Dateienauf.

B) Die heutigen (PC-)Betriebssysteme erreichen mit sog. Bereichstabellen (File AllocationTable FAT) eine deutlich größere Flexibilität in der Verwaltung von Blöcken.

Vorteile:1. Das dynamische Wachsen wird nur noch durch die Gesamtkapazität des Ex-

ternspeichers begrenzt, da die Blöcke beliebig über den Speicher verteilt wer-den können.

2. Beim Schrumpfen einer Datei werden die frei gewordenen Blöcke zur Wieder-

verwendung bereitgestellt. 3. Die sequentielle Verarbeitung kann dadurch unterstützt werden, daß möglichst

große hintereinander liegende Speicherbereiche belegt werden.

Nachteile:1. Das Belegen und Freigeben von Blöcken führt auf die Dauer zur Fragmentierung

des Datenträgers, was durch den vermehrten Plattenzugriff und die verlängertenPositionierungszeiten zu einer Verlangsamung der Verarbeitung führt. Dies kanndurch Reorganisation des Datenträgers (Defragmentierung) beseitigt werden.

2. Probleme können sich durch die Verwaltung der Belegungstabelle ergeben. Die-

se muß entweder bei jedem Zugriff auf einen Block eingelesen werden, was zueinem doppelten Plattenzugriff führt. Deshalb wird man die Belegungstabelledynamisch einlesen. Veränderungen (Belegungen, Freigaben von Blöcken)müssen dann aber unbedingt zurückgeschrieben werden, damit der Datenträgernicht logisch zerstört wird. Auch muß ein Datenträgerwechsel automatisch er-kannt werden usw. Dies ist durchaus nicht immer sichergestellt.

Eine sehr einfache Technik besteht in folgender Kettenbildung unter DOS(Abbildung 5-2)

Page 155: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.2 Externspeicherverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-4 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Im Inhaltsverzeichnis steht der Dateiname und neben anderen Einträgen(Datum, Uhrzeit usw.) ein Zeiger auf die FAT. In der FAT ist für jeden Sektor(Cluster) der Platte genau ein Eintrag vorgesehen, d. h. die Nummer des FAT-Eintrages bestimmt den zugehörigen Block. Jeder Eintrag hängt in einer Kette.Dies ist entweder die Kette der freien Blöcke oder eine Kette zu einer Datei.Über den Anfangsblock findet man einen Zeiger auf den nächsten Block(genauer auf den nächsten FAT-Eintrag. Der letzte Eintrag signalisiert das Endeder Kette.

Die Externspeicherverwaltung stellt folgende Grundfunktionen zur Verfügung

− Neuanlegen einer Datei− Löschen einer Datei− Öffnen einer Datei− Schließen einer Datei− Lesen eines Blockes− Schreiben eines Blockes

Alle Betriebssysteme ob PC oder Mainframe besitzen diese Primitiva (Grundfunktionen).

Natürlich gibt die Externspeicherverwaltung auch Meldungen ab. Diese signalisieren, obdie Primitiva erfolgreich waren, oder ob ein Fehler aufgetreten ist.

Die Schnittstelle zu den höheren Schichten unseres DBMS abstrahiert nun diese physika-lischen Detail und stellt eine einheitliche Schnittstelle zur Verfügung. Hardwaredetails wieAnzahl der Köpfe, Anzahl der Spuren, Anzahl der Sektoren, Größe der Sektoren, Inter-leaf-Faktor usw. bleiben den höheren Ebenen verborgen.

Sicher kann man einige Eigenschaften nicht verbergen, da die Simulation erheblichenAufwand bereiten würde. Ein Band ist nun einmal ein Band und wird nur mit Mühe einzweidimensionaler Speicher wie ein Platte.

5.3 Systempufferverwaltung

5.3.1 Aufgaben der Systempufferveraltung

Die Systempufferverwaltung hat folgende Aufgaben

Dateiname Anfangsblock

zu den Speicherblöcken

Abbildung 5-2: Diskettenverwaltung mit Hilfe der FAT unter DOS

Page 156: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-5

1. Bereitstellen eines Systempuffers2. Einlesen oder Übergeben von Daten an die Externspeicherverwaltung3. Manipulation der Daten im Puffer4. Synchronisation paralleler Zugriffe durch

− Scheduling zur Auswahl und Aktivierung der Transaktionslast in Abhängig-keit der Prioritätssteuerung

− Systempufferverwaltung für den parallelen Zugriff− Lastkontrolle (Dispatching) zur Optimierung des Durchsatzes

Gerade für die letzten Punkte kann diese Schicht nur Hilfsdienste leisten, da ihr z. B. dieTransaktionen selbst nicht bekannt sind. Der Hauptteil der Arbeit ist daher auf der höhe-ren Schicht abzuwickeln.

Analog zur Unterteilung des Adreßraumes der Externspeicherverwaltung in Dateien undBlöcke teilt man den Adreßraum der Systempufferverwaltung in

Segmente und Seiten

auf. Für die Systempufferverwaltung besteht also eine Datenbank aus n Segmenten.Jedes Segment i besteht seinerseits aus mi Seiten. Im Systempuffer selbst kann nor-malerweise nicht die gesamte Datenbank gehalten werden. Der Ausschnitt umfaßt NSeiten. Diese bezeichnet man auch als Pufferrahmen.

Vorteile:1. Spezialisierung

Durch die Segmentierung können die Verarbeitungsalgorithmen optimiert wer-den.

2. AbbildungDurch geeignete Abbildung der Segmente auf Dateien bleiben alle Vorzüge desDateienkonzepts erhalten.

3. Zugriffskontrolle, SicherungSegmente können das Sperrkonzept, die Zugriffskontrolle und das Wiederher-stellungsverfahren nach Systemabstürzen wirkungsvoll unterstützen.

In der Datenbanktheorie unterscheidet man

1. Öffentliche SegmenteDiese Segmente speichern Datensätze und Zeiger, die konkurrierenden Zugrifferlauben. Sie erlauben ein automatisches Wiederherstellen der gespeichertenDaten im Fehlerfall.

2. Private SegmenteDiese Segmente dienen der Verwaltung, z. B. für die Leistungsmessung und dieAbrechnung.

3. Temporäre SegmenteDiese Segment dienen zur temporären Verarbeitung (z. B. beim Sortieren, Druk-ken usw.).

Ein typisches Beispiel für die Segmentverwaltung zeigt die folgende Tabelle

Page 157: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.3 Systempufferverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-6 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Segment Benutzung Lebensdauer Öffnen/Schließen Wiederherstellung imFehlerfall

Typ 1 öffentlich permanent automatisch d. System automatisch durch SystemTyp 2 privat permanent automatisch d. System automatisch durch SystemTyp 3 privat permanent explizit d. Benutzer explizit d. BenutzerTyp 4 privat permanent explizit d. Benutzer keine WiederherstellungTyp 5 privat temporär in

Transaktionenexplizit d. Benutzer keine Wiederherstellung

Die Systempufferverwaltung bleibt dem Benutzer bis auf wenige Ausnahmen verborgen.Nur diejenigen Teile, die als Datentyp in der Schnittstelle deklariert sind, werden sichtbar.

Segmente können als Behälter für ein oder mehrere Satzsysteme (Relationen) der DB-Benutzer angesehen werden. Diese Satzsysteme werden durch Hilfsinformationen wieIndexdateien und Beschreibungen ergänzt.

Die Hauptfunktionen der Systempufferverwaltung sind

− Definieren und Freigeben von Segmenten− Öffnen und Schließen von Segmenten− Bereitstellen von Seiten im Systempuffer zum Lesen bzw. Schreiben− Freigeben von Seiten des Systempuffers− Unterstützungsfunktionen zum Sperren und Wiederherstellen.

Die Systempufferverwaltung stellt das Bindeglied zwischen der Schnittstelle Externspei-cherverwaltung und der Zugriffspfadverwaltung (Indexverwaltung).

Sie erhält von letzterer die Informationen über den Zugriffspfad und muß daraus die Sei-tenadresse ermitteln.

Werden Seiteninhalte verändert, so bedeutet dieses natürlich erhöhten Aufwand. DieVerwaltungsdaten im sog. Puffer-Kontrollblock enthalten eine spezielle Marke, den Ände-rungsvermerk, der in diesem Fall gesetzt wird.

Ein Wesensmerkmal einer Transaktion besteht darin, Seiten aus verschiedenen Seg-menten zu benötigen. In diesem Fall können die Seiten nicht einzeln angefordert und frei-gegeben werden, da sonst Inkonsistenzen auftreten können. In diesem Fall müssen meh-rere Seiten über eine längere Zeit im Hauptspeicher, gesperrt gegen Fremdzugriff ver-bleiben. Diese Fix-Phase wird durch eine Fix-Operation eingeleitet und durch Unfix been-det. Nach dieser Phase können die Seiten wieder durch Seiten auf den Externspeichernausgetauscht werden.

Die Seitenersatzstrategien sind ein wesentlicher Bestandteil dieser Ebene. Es könnenfolgende Fälle auftreten

1. Die benötigte Seite ist bereits im Systempuffer, was am Eintrag in einer Seitentabelleerkannt wird. In diesem Fall wird

− die Seite lokalisiert;− die Seite gefixed;

Page 158: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-7

− der Puffer-Kontrollblock aufbereitet;− die Adresse des Systempuffers an die Systempufferverwaltung des aufrufenden

Programms übergeben.2. Die benötigte Seite ist nicht im Systempuffer. In diesem Fall muß eine physische Ein-

/Ausgabeoperation gestartet werden. Hierbei ist noch zu unterscheiden, ob ein Puffer-rahmen frei ist oder nicht. Ist nämlich keiner frei, so muß ein belegter ausgewählt undauf den Externspeicher zurückgeschrieben werden. In diesem Fall sind zwei getrenntephysische Operationen notwendig.

5.3.2 Optimierung der Systempufferverwaltung

Da gerade der zuletzt beschriebene Vorgang des Seitenwechsels ganz erhebliche Zeitbeansprucht, kommt der Optimierung dieser Aufgabe besondere Bedeutung zu.

Die zeitliche Folge der logischen Seitenanforderungen aller Transaktionen (innerhalb ei-nes endlichen Zeitabschnitts) in einem Multiuser-System bezeichnet man als logischenSeitenreferenzstring. Dies ist eine Silospeicher, in den Anforderungen oben eingefüllt,erledigte Anforderungen unten entnommen werden. Die Art der Anforderungen hängensehr stark von den Anwendungen und der Parallelität der aktiven Transaktionen ab. DerDialogbetrieb führt zu einem anderen Transaktionsmix als die Stapelverarbeitung.

Viele der Transaktionen werden besondere Seiten gemeinsam benutzen wie z. B. Adreß-umsetztabellen, Freispeichertabellen, Wurzelseiten in B*-Bäumen usw. Diese Seitensollten möglichst dauerhaft im Systempuffer gehalten werden.

Der physische Seitenreferenzstring (Blockreferenzstring) ergibt sich nicht automatisch ausdem logischen. Je nach Puffergröße und Ersetzungsstrategie ergeben sich sehr unter-schiedliche Strings. Eine optimale Systempufferverwaltung wird die Länge der physischenSeitenreferenzstrings minimieren. Diese Aufgabe teilt sich noch einmal auf in

− Optimierung der Seitensuche− Optimierung der Speicherzuteilung im Systempuffer− Optimierung der Seitenersetzungsstrategie.

Optimierung der Seitensuche

Die Seitensuche setzt ein, wenn eine Seite nicht im Seitenpuffer gefunden wird. Wir un-terscheiden folgende Suchstrategien

Page 159: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.3 Systempufferverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-8 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Bei der direkten (sequentiellen) Suche wer-den alle Pufferrahmen von vorn beginnendmit der gesuchten Seitennummer verglichen.Im Durchschnitt werden bei jedem Suchvor-gang die Hälfte der Pufferrahmen untersucht.Dies ist bei großen Systempuffern zeitlichnicht zu vernachlässigen.

Wird der Systempuffer in einem virtuellenAdreßraum verwaltet, so kann der Suchvor-gang selbst wieder einen Paging-Vorgangmit Zugriff auf die Externspeicher auslösen,was die Suchzeiten noch einmal deutlichverlängert. Für ein (Betriebs-)System mit Paging ist daher die direkte Suche nicht zuempfehlen.

Beim Hashing wird eine Rechenregel zur Berechnung der Seitenadresse eingesetzt. Diesist die sog. Hash-Funktion (siehe extra Kapitel). Über eine Hash-Tabelle wird dann dieAdresse im Systempuffer gefunden. Ein Seitenwechsel muß natürlich in dieser Tabelleprotokolliert werden.

Nun kann es vorkommen, daß die Hash-Funktion für zwei verschiedene Seitennummerndie gleiche Hash-Adresse im Systempuffer berechnet. Hierfür ist ein besonderer Überlauf-Algorithmus einzusetzen, der diese Seiten logisch miteinander verkettet. Diese Seitenwerden sequentiell durchsucht.

Die direkte Suche kann man durch eine sequentielle Suche in Listen ersetzen. Erst wennder Eintrag in der Liste gefunden wurde, erfolgt ein Zugriff auf den Systemspeicher. Insortierten Tabellen können wir binär suchen. Die Tabellen können im Systemspeicherstatisch oder dynamisch als verkettete Listen angelegt werden.

Optimierung der Speicherzuteilung

Die Speicherzuteilung stellt für jede aktive Transaktion einige Pufferrahmen zur Speiche-rung längerfristig benötigter Seiten zur Verfügung. Hierzu steht ein entsprechender Poolfür alle Transaktionen zur Verfügung.

Die Verteilung dieser Pufferrahmen erfolgt nach ähnlichen Strategien wie das Paging inBetriebssystemen mit virtueller Adressierung. Grundsätzlich geht es darum, eine beliebi-ge Anzahl von Seiten auf eine beschränkte Anzahl von Pufferrahmen abzubilden und da-bei die Anzahl der Zugriffe zu minimieren. In Abweichung zum Betriebssystem ergebensich im DBMS einige Besonderheiten

1. Mehrere Anwender können auf dieselbe Seite im Systempuffer zugreifen;2. Die Lokalität der Zugriffe kommt i. a. nicht durch das Verhalten eines Anwen-

ders, sondern durch die gemeinsame Nutzung bestimmter Seiten durch alle Be-nutzer zustande;

3. Die Zugriffe einzelner Benutzer sind überwiegend sequentiell;4. Seiten mit Verwaltungs- und Indexdaten haben eine weit höhere Wiederbenut-

zungswahrscheinlichkeit als Datenseiten eines Anwenders.

Suchstrategien derSystempufferverwaltung

direkte Suche inden Pufferrahmen

sequentielle Suche

indirekte Sucheüber Hilfsstrukturen

Hashing Tabellen

Abbildung 5-3: Suchstrategien

Page 160: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-9

So unterscheidet sich das Verhalten von Datenbanken und Programmen z. B. deutlich beider LRU-Verteilung (Last Recently Used). Durch Wartezustände (z. B. das Sperren vonDatensätzen) können auch Seiten einer älteren Generation eine hohe Wiederbenut-zungswahrscheinlichkeit haben.

Grundsätzlich können wir, wie bei der Speicherzuteilung in Betriebssystemen, unterteilenin

− Lokale StrategienDie Speicherzuteilung erfolgt ohne Berücksichtigung paralleler Prozesse nuraufgrund der Anforderungen einer Transaktion

− Globale StrategienDie Speicherzuteilung berücksichtigt das gesamte Anforderungsprofil.

Im ersten Fall ist das Verfahren recht einfach. Eine Transaktion wird dann gestartet, wenngenügend Speicherplatz zur Verfügung steht. Im zweiten Fall wird die Belastung desRechners gemessen und daraus die Anzahl und die Zusammensetzung der aktuellenTransaktionen bestimmt.

Neben der Festlegung des Speicherumfangs sind die Ersetzungsstrategien von besonde-rer Bedeutung. Ein Ersetzungsvorgang wird durch eine fehlende logische Seitenreferenzausgelöst und kann

− bei globaler Speicherzuordnung im gesamten Systempuffer erfolgen;− bei lokaler Speicherzuteilung mit statischen Bereichen in dem Bereich des Sy-

stempuffers erfolgen, der der logischen Seitenreferenz zugeordnet ist, die dieErsetzung auslöst;

− bei lokaler Speicherzuordnung mit dynamischen Bereichen in der Menge der er-setzbaren Seitenerfolgen, d. h. in den Seiten, die momentan nicht zum Arbeits-bereich einer Transaktion gehören.

Die Ersetzungsstrategien lassen sich grob in zwei Kategorien einteilen

1. Demand-Paging-VerfahrenBei diesem Verfahren wird bei Bedarf genau eine Seite im Systempuffer ersetzt.

2. Prepaging-VerfahrenHier werden neben der aktuell benötigten Seite weiter Seiten eingelagert, die mit gro-ßer Wahrscheinlichkeit benötigt werden. Hierzu müssen aber die Abhängigkeiten be-kannt sein, was i. a. bei den hierarchisch organisierten Datenbanken der Fall ist.

Beim Demand-Paging-Verfahren ist unser Ziel, die Fehlerrate bei einer vorgegebenenGröße N des Systempuffers zu minimieren, d. h. möglichst alle Seiten im Speicher zubelassen, die in absehbarer Zeit benötigt werden.

Die obere Grenze für die Fehlerrate wird bei der Strategie RANDOM auftreten. Wir wähleneinfach per Zufallsgenerator eine der Seiten zum Wechsel aus. Mit anderen Worten be-deutet dieses, daß wir allen eingelagerten Seiten den gleichen Erwartungswert zuordnen.

Page 161: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.3 Systempufferverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-10 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Die theoretische Untergrenze für die Fehlerrate wird bei der Strategie OPTIMUM darinbestehen, immer genau die Seite auszuwählen, die am längsten nicht wieder neu ange-sprochen wird.

Betrachten wir einmal die Abhän-gigkeit der Fehlseitenrate in Ab-hängigkeit von der Größe desSystempuffers, dann können wirfeststellen, daß beide Strategiengleich sind, wenn wir nur einenPuffer zur Verfügung haben. Die-ser muß bei jeder Referenzver-letzung ausgetauscht werden.

Der andere Extremfall liegt vor,wenn unser Datenbank vollstän-dig in den Puffer paßt. In diesemFall sind keine Seitenwechselnotwendig, weil keine Referenz-verletzungen auftreten. Zwischen den beiden Grenzfällen wird unsere reale Strategie lie-gen.

Wir suchen also eine Strategie, die besser als RANDOM ist. Hierzu führen wir für die ein-zelnen Seiten Erwartungswerte ein. Diese stellen Vorhersagekriterien für die nächsteReferenz auf die entsprechende Seite dar. Typische Algorithmen arbeiten nach

− dem Alter der letzten Referenz− dem Alter der Einlagerung− der Anzahl der Referenzen innerhalb eines zurückliegenden Zeitabschnitts

Die Strategie FIFO (First-In, First-Out) ersetzt immer die Seite, die schon am längsten imSystempuffer ist, unabhängig von der Referenzfrequenz. Diese Strategie hat ihr Optimumbei sequentiellen Verarbeitungen.

Die Strategie LFU (Last Frequently Used) orientiert sich dagegen einzig an der Referenz-frequenz. Sie ersetzt immer die Seite im Puffer mit der niedrigsten Referenzhäufigkeit.Hierzu wird für jede Seite beim Einlagern ein Zähler initialisiert und bei jedem weiterenZugriff inkrementiert. Es wird immer die Seite ausgelagert, die den kleinsten Zählerstandhat, unabhängig vom Alter der Seite.

Wir können sehr schnell wenig optimale Fälle konstruieren. Werden alle Seiten z. B.zweimal angesprochen, so wird ständig die zuletzt eingelagerte Seite wieder überschrie-ben, weil ihr Zähler auf 1 steht. Wird eine Seite in einem kurzen Programmabschnittsehr häufig benutzt, dann verbleibt sie auf ewig im Speicher, obwohl sie später vielleichtnie wieder referenziert wird.

Hier können dann zusätzliche Strategien zum Einsatz kommen, indem wir z. B. periodischalle Zähler um 1 herabsetzen, d. h. die Seiten künstlich altern.

Fehlseitenrate in %

Größe des Systempuffers

P PMin Max

RANDOM

OPTIMUM

REAL

100%

Abbildung 5-4: Fehlseitenrate

Page 162: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-11

Die Strategie LRU (Last Recently Used) ist die am häufigsten praktizierte. Die Seitenwerden dabei in einen Kellerspeicher (Stack) geschrieben. Der oberste Eintrag enthältimmer die neueste Seite, der unterste die älteste Seite. Diese wird bei Bedarf ausgela-gert. Referenzen auf bereits gealterte Seiten frischen diese wieder auf.

Wegen des erwähnten FIX-Verfahrens zur Transaktionskontrolle werden in DBMS zweiVarianten implementiert, je nachdem wie man das „Used“ interpretiert

Last Recently ReferencedLast Recently Unfixed

wobei die zweite Variante i. a. die bessere ist.

Die beschriebenen Verfahren können noch dadurch verbessert werden, daß weiter Krite-rien berücksichtigt werden. So können wir zwischen gelesenen und veränderten Seitenunterscheiden, da bei letzteren der Ersetzungsaufwand erheblich ansteigt. Es kann dahergünstiger sein, mehrfach rein gelesene Seiten zu ersetzen bevor eine veränderte Seiteausgelagert wird.

Nun arbeitet ein DBMS nur selten allein in einem Rechner. Dieser ist ausgestattet mit ei-nem Hardware-Cache, einem Software-Cache, einer virtuellen Speicherverwaltung desBetriebssystems usw. Dies alles muß entweder optimal genutzt oder bewußt ausge-schaltet werden.

Sehen wir uns die Problematik kurz an.

Eine Datenbank besteht aus d Seiten und läuft unter einem virtuellen Betriebssy-stem. Das DBMS fordert N Seiten Systempuffer an. Das Betriebssystem stellt die-se virtuell zur Verfügung, arbeitet aber physisch nur mit M<N Seiten im Hauptspei-cher. Beide Seitenersetzungsmechanismen laufen unabhängig voneinander.

Bei einem Referenzfehler (Fehlseitenbedingung) treten nun folgende Fälle auf

1. Page FaulDie gesuchte Seite befindet sich zwar im Systempuffer aber nicht im Hauptspeicher,weil das BS diese in den Paging Buffer gestellt hat. Die Seite muß also vom Extern-speicher eingelesen werden.Dieser Fehler kann auch in der Fix-Phase einer Seite auftreten.

2. Database FaultDie gesuchte Seite befindet sich nicht im Systempuffer, die zu ersetzende Seite befin-det sich aber im Hauptspeicher. Die Seite kann also unmittelbar ersetzt werden.

3. Double Page FaultDie gesuchte Seite befindet sich nicht im Systempuffer, die zu ersetzende Seite befin-det sich aber nicht im Hauptspeicher. Wenn die zu ersetzende Seite nicht verändertwurde, dann muß sie nicht zum Zurückschreiben eingelesen werden usw.

Da dieses Verhalten sehr komplex ist, gibt es keine allgemeine Strategie zur Lösung desProblems.

Page 163: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.3 Systempufferverwaltung Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-12 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

5.3.3 Verhalten bei Überlast

Bei starker Belastung können weitere Probleme auftreten, die unabhängig von den er-wähnten Strategien zu Problemen führen können.

Neben der Möglichkeit der Verklemmung mehrerer Transaktionen auf logischer Program-mebene kann es zusätzlich zu einer Systempufferverklemmung kommen. Jede Transakti-on fordert zu einem Zeitpunkt in der Fix-Phase mehrere Pufferrahmen an. Sind diese nichtverfügbar, dann muß die Transaktion warten. Bei dieser Gelegenheit muß sie aber diebereits belegten Pufferrahmen wieder freigeben, sonst würden u. U. mehrere Transaktio-nen beliebig auf die Freigabe von Rahmen durch die anderen warten.

Mit der steigenden Zahl paralleler Transaktionen sinkt die verfügbare Puffergröße proTransaktion. Damit wächst aber die Häufigkeit der Referenzfehler, was zur Steigerung derlogischen Seitenanforderungen führt. Dies belastet die physischen Ein-/Ausgabekanälebis zu deren Kapazitätsgrenze. Dabei kann es zum sog. Thrashing (Seitenflattern) kom-men, bei dem sich das System fast nur noch mit der Auslagerung beschäftigt, statt Anfor-derungen der Benutzer zu erledigen.

Die Thrashing-Gefahr wird natürlich durch die allgemeine Optimierung des Systems kleingehalten, existiert aber ohne weitere Maßnahmen grundsätzlich weiter. Hierzu wird derWorking-Set-Dispatcher eingesetzt. Dieser erfüllt folgende Aufgaben

− Feststellen des Working-Sets (Ressourcen-Bedarfs) einer Transaktion vor demEintritt in die Ausführungsphase;

− Verzögerung der Ausführung, wenn der Bedarf größer als die aktuelle Zahl derfreien Pufferrahmen ist;

− Sicherstellung, daß bei einer Fehlseitenbedingung die zu ersetzende Seite nichtaus dem Working-Set einer aktiven Transaktion stammt.

5.3.4 Verwaltung der Seiten-Block-Zuordnung

Werfen wir noch einen Blick auf die Schnittstelle zwischen der Systempufferverwaltungmit ihrer Seitenverwaltung und der Externspeicherverwaltung mit ihrer Blockverwaltung.Da wir Lesen und Schreiben muß es eine eindeutige Beziehung zwischen den Seiten undden Blöcken geben.

Zur Erläuterung der Grundprinzipien gehen wir von folgenden Voraussetzungen aus

1. Ein Segment kann nicht über mehrere Dateien verteilt sein. Einer Datei Dj kön-nen mehrere Segmente mj zugeordnet sein.

2. Seiten- und Blockgröße sind gleich. Bei der Abbildung von Seiten auf Blöckegibt es daher keine Fragmentierungsprobleme.

Damit muß "nur" jeder Seite P genau ein Block B zugeordnet werden, wobei aber zujedem Zeitpunkt gewährleistet sein muß, daß die Semantik (Inhalt) von P und B gleichsind.

Page 164: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-13

Direkte Seiten-Block-Zuordnung

Diese einfache Zuordnung führt eine direkte Zuordnung zwischen den Seiten Pi(1<i<s) eines Segmentes S und den Blöcken Bj (1<j<d) einer Datei D aus. Da-bei gilt

j:=k-1+i bzw. i:=j-k+1

mit k als die Nummer des ersten für S reservierten Blocks.

Sind Datei und Segment deckungsgleich, so findet eine 1:1-Abbildung mit k=1 und s=dstatt.

Diese Zuordnung hat den Nachteil, daß der Externspeicher zum Zeitpunkt der Segment-erzeugung in voller Größe angelegt werden muß. Auch leere Seiten belegen Blöcke aufdem Externspeicher.

Indirekte Seiten-Block-Zuordnung

Die indirekte Zuordnung vermeidet den letztgenannten Nachteil, indem

1. für jedes Segment Sk eine Seitentabelle Vk angelegt wird, in der für jede nichtleerenSeiten Pi aus Sk eine zugeordnete Blockadresse Vk(i) eingetragen wird.

2. in jeder Datei Dj eine Bitliste Mj angelegt wird, in der für jeden Block aus Dj mar-kiert wird, ob ihm bereits eine Seite zugeordnet ist (Freispeicherverwaltung).

Wir erkennen sofort wieder eine gewisse Ähnlichkeit mit dem DOS.

Mit dieser Technik nutzen wir den Externspeicher optimal aus. Andererseits handeln wiruns doch einige Detailprobleme ein. Z. B. müssen wir bei großen Segmenten und Dateiendie Seitentabellen und Bitlisten wieder in Blöcke zerlegen und verwalten usw.

5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen)

In der dritten Hierarchiestufe kommen wir zum ersten Mal an einen Punkt, an dem wirreale DBMS wie z. B. die Systeme der xBase-Klasse einsetzen können. Sie arbeiten(zumindest in ihren ursprünglichen Versionen) auf der Ebene der Datensätze und Zu-griffspfade.

Die abstrakte Sicht dieser Ebene als Datentyp umfaßt die Klassen "physische Sätze" und"Zugriffspfade" in Form von Indextabellen. Darauf bauen die verfügbaren Operationen derDatenbanksprachen auf. Realisiert werden die Operationen und Indizes über den Daten-typ "Systempufferverwaltung" mit seinen Klassen "Segmente" und "Seiten".

Wir können folgende Teilfunktionen erkennen

Page 165: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-14 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

1. Freispeicherverwaltung2. Satzadressierung3. Record-Manager4. Zugriffspfadverwaltung

5.4.1 Freispeicherverwaltung

Die Freispeicherverwaltung operiert auf den Klassen Segmente, Seiten, physische Da-tensätze und Zugriffspfade. Ihre Aufgabe besteht darin, freien Platz für Neueinträge zurVerfügung zu stellen, bei Löschungen den aufgelassenen Platz in Freispeicherplatz um-zuwandeln und bei Bedarf wieder zu belegen.

Die Freispeicherverwaltung kann als dynamische Liste oder als über eine Freispeicherta-belle realisiert werden. Für diese Tabelle werden z. B. am Anfang des Segments n Sei-ten reserviert, die Informationen über den Inhalt der Datenseiten enthalten. Diese Technikbirgt natürlich Probleme beim Wachsen und Schrumpfen.

Bei einer typischen Implementation einer solchen Freispeicherverwaltung werden z. B.pro Seite 2 Byte reserviert, in denen die Anzahl der freien Bytes pro Seite (max. 64KByte)vermerkt werden. Beim Eintrag eines Satzes in eine Seite muß dann auch der Verweis inder Freispeichertabelle verändert werden, was einen zusätzlichen Externspeicherzugriffnach sich zieht (wenn nicht der Systempuffer entsprechend genutzt wird).

Bei großen Dateien steigt der Speicherbedarf für diese Tabellen, so daß man auf eineweniger genaue Zählung übergeht und z. B. nur ein Byte benutzt. Damit springt aber dieZählung in Schritten zu Seitengröße/256. Dies hat den Vorteil, daß die Freispei-chertabelle wenig Platz benötigt und ggf. im Pufferspeicher gehalten werden kann.

Neben dieser globalen Information müssen die einzelnen Seiten ihren freien Speicherselbst verwalten, da das System wissen muß, wo innerhalb der Seite freier Speicher zurVerfügung steht. Werden Daten nachgetragen, so erfolgt dies mit den Strategien

First-FitDie Daten werden in den ersten Bereich eingetragen, der mindestens die notwendigeLänge hat.

Best-FitDie Daten werden in den Bereich eingetragen der mindestens die notwendige Länge hat,aber darüber hinaus am wenigsten "Verschnitt" bietet.

5.4.2 Adressierung der Sätze

Der Zugriff auf physische Sätze erfolgt entweder direkt oder über Zugriffspfade in Index-segmenten. In den Indexsegmenten werden Verweise (Zeiger) auf diese Sätze gespei-chert. Diese Zeiger sollten folgenden Eigenschaften genügen

Page 166: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-15

1. schnelle, möglichst direkter Zugriff auf den physischen Satz2. möglichst geringer Änderungsaufwand bei Verschiebungen des physischen Sat-

zes innerhalb einer Seite oder eines Segments (z. B. beim physischen Löschen)

Auch hier finden wir wieder zwei Möglichkeiten

Direkte Adressierung

Der Zeiger enthält eine auf den Segmentanfang bezogene relative Byte-Adresse (Offset).

Vorteil: Schneller ZugriffNachteil: Der adressierte Satz muß immer (bis auf die Reorganisation) in der einmal

zugewiesenen Position innerhalb eines Segments bleiben.Einsatz: Ungeeignet für DBMS.

Indirekte Adressierung

Verschiebungen innerhalb einer Seite ohne Rückwirkungen auf die Zeiger in den Index-segmenten sind möglich. Dies sollte aber keine Nachteile mit sich bringen. Hierzu findenwir zwei Lösungsansätze

TID-Adressierung

Bei der TID-Adressierung (Tuple IDentifier) wird jedem Satz ein Tupel bestehend aus ei-ner Seitennummer und einem Index zu einer seiteninternen Tabelle zugeordnet, ebendieser TID. Die gesuchte Seite wird über den ersten Eintrag gefunden. Jede Seite enthälteine Adreßtabelle, die über den Index auf eine physische Adresse innerhalb der Seitezeigt (vergleichen Sie einmal die Software-Interrupt-Technik von MS-DOS damit). DiesesVerfahren hat folgende Vorteile

1. Innerhalb einer Seite können Sätze verschoben werden, ohne daß sich der TID ändert.Sätze können (in gewissen Grenzen) wachsen und schrumpfen. Alle Änderungen wer-den nur auf einer Seite im Hauptspeicher durchgeführt. Andere Externspeicherzugriffesind nicht notwendig.

2. Wächst ein Satz so stark an, daß er die Seitengrenze sprengt, so kann er in eineÜberlaufseite ausgelagert werden, ohne daß sich die TID ändert. Dies erreicht mandadurch, daß anstelle des ausgelagerten Satzes ein Zeiger auf die Überlaufseite ein-gelagert wird. Dies bedingt natürlich beim Zugriff auf diesen Satz einen weiteren Ex-ternspeicherzugriff.

3. Damit nun nicht lineare Ketten von Überlaufseiten entstehen, wird man bei einer er-neuten Änderung des Satzes wieder versuchen, diesen in seiner Originalseite unterzu-bringen. Gelingt dies nicht, dann wird eine neue Überlaufseite angelegt. Der Verweisauf diese wird aber in der Originalseite eingetragen, so daß spätestens nach zweiSeitenzugriffen der Satz gefunden ist.

4. Die dargestellte Technik erspart aufgrund ihres guten Verhaltens unnötige Reorgani-sationsläufe.

Page 167: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-16 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Adressierung über Datenbankschlüssel (data base key)

Pro Segment wird eine Zuordnungstabelle in benachbarten Seiten angelegt. Für jedenphysisch zu speichernden Satz wird eine fortlaufende Nummer, die Satzfolgenummer er-zeugt und mit der physischen Startadresse des Satzes in diese Zuordnungstabelle einge-tragen. Die Satzfolgenummer ist ein identifizierender Datenbankschlüssel (data basekey), dem über die Zuordnungstabelle eine beliebige physische Adresse zugeordnet wird.

Vorteile:1. Eine Änderung der physischen Adresse ist ohne Änderung des Datenbankschlüssels

möglich.2. Die physische Satzadresse kann z. B. wieder im TID-Verfahren gebildet werden.3. Die Forderung des CODASYL-Komitees nach einer lebenslangen Satznummer ist er-

füllt.

Nachteile:1. Es sind immer wenigstens zwei Seitenzugriffe notwendig.2. Es existieren eine ganze Reihe von Folgeproblemen für die Lock-(Sperr-) und

Recovery-(Wiederherstell-) Komponenten.

5.4.3 Record-Manager

Die Aufgaben des Record-Managers sind

− physische Abspeicherung der Sätze in die Seiten− Lesen, Schreiben, Ändern und Löschen der Sätze

Die Positionierung auf die Sätze erfolgt mit Hilfe der Zugriffspfadverwaltung.

Grundsätzlich können wir zwei Techniken feststellen

− die Sätze werden vollständig in den Seiten gespeichert;− die Sätze können auch über die Seitengrenzen hinweg gespeichert werden

(spanned records).

Die zweite Speichertechnik ist sehr kompliziert und wird daher selten eingesetzt. Die ersteTechnik ist sehr viel einfacher zu implementieren hat aber die Nachteile

− Die Satzlänge ist durch die Seitenlänge nach oben begrenzt;− Bestimmte Satzlängen führen zu recht ungünstigen Speicherausnutzungen.

Denken Sie nur an die Satzlänge l/2+1, die dafür sorgt, daß immer nur einSatz pro Seite gespeichert wird, wobei nur ca. 50 % des Speichers genutzt wird.

Datenbanken zeichnen sich andererseits dadurch aus, daß ein Segment n verschiedeneSatztypen enthalten kann, die unterschiedlich lang sind. Die Sätze werden durch spezi-elle Kennzeichen markiert, um sie den verschiedenen Satztypen zuordnen zu können.

Zur Verwaltung der Sätze dienen Formatbeschreibungen, die die einzelnen Datenfelderder Sätze definieren. Typische Feldbeschreibungen sind

Page 168: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-17

− Feldname (ggf. mit der Festlegung eines internen und eines externen Feldna-mens)

− Feldcharakter (fest, variabel, multiple)− Feldtyp (alphanumerisch, numerisch, gepackt, logisch, binär, Datum)− Feldlänge (Gesamtlänge, Vor-/Nachpunktlänge)− Feldspeicherung (Formatierungen, Verschlüsselungen)− Kennzeichnung undefinierter Werte.

Die Datenbanken unterscheiden sich dabei, wo sie diese Werte speichern. Dies kann

− in getrennten Beschreibungssegmenten− in Kopfseiten der Datensegmente

erfolgen.

Entscheidend für die Satzspeicherung sind die Feldcharakter

− Sätze mit fester LängeDurch Verkettung einer festen Zahl Datenfeldern mit fester Länge ergeben sichSätze konstanter Länge. Durch einfache Umrechnungen läßt sich aus der Satz-länge und der Satznummer die Adresse des Satzes finden.

− Sätze mit variabler LängeDieser Satztyp nutzt die Speicherkapazität optimal aus. Felder lassen sich ver-dichten, indem Wiederholungsstrukturen komprimiert werden. Undefinierte Fel-der am Satzende können implizit dargestellt werden, so daß sie völlig entfallen.Es ist nicht nur möglich, einzelne Datenfelder zu komprimieren, sondern auchWiederholungsfelder (multiple Felder), Wiederholungsgruppen und hierarchischaufgebaute Datensätze einzuführen.

5.4.4 Verwaltung der Zugriffspfade (Indexverwaltung)

5.4.4.1 Grundlagen

Die Verwaltung der Zugriffspfade dient der optimierten Suche nach Datensätzen. DieseSuche sollte natürlich besser als das sequentielle Durchsuchen des angesprochenenSegments sein. Hierzu werden Hilfsdaten angelegt, die sog. Zugriffspfade oder Indexe.

Die Zugriffspfade können

− in den Datensätzen integriert sein, d. h. physisch mit ihnen verarbeitet werden;− separat von den adressierbaren Datensätzen in eigenen Segmenten gespeichert

werden.

Im ersten Fall sind der Record-Manager und die Zugriffspfadverwaltung integriert, da fürdie Suche auch immer der Satz eingelesen werden muß.

Die Zugriffspfadverwaltung erledigt folgende Aufgaben

Page 169: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-18 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

1. Unterstützung des direkten Zugriffs auf Datensätze2. Unterstützung der sequentiellen Verarbeitung aller Datensätze eines Satztyps3. Unterstützung des navigierenden (relativen) Zugriffs auf eine Menge selektierter

Sätze.

Sie stützt sich dabei auf folgenden Strukturen ab

1. Segmentstruktur, d. h. die Möglichkeiten, eine Seite zu finden;2. Seitenstruktur, d. h. der Aufbau und die Suchstruktur innerhalb einer Seite;3. Datenbankstruktur, d. h. in welcher Form die Datenbank optimiert wird. Hierbei

handelt es sich hauptsächlich um Strategien die Zugriffspfade auf die verschie-denen Datensätze gegeneinander auszugleichen. Dies sind Fragen, was ge-schieht bei Überlauf von Seiten durch Neueintrag, bei Unterlauf von Seitendurch Löschen usw.

Wir unterscheiden folgende Zugriffspfad-Klassen

1. Primärzugriffspfade (Primärschlüssel, Primärindex)Primärschlüssel zeichnen sich durch Eindeutigkeit aus. Sie führen immer zu ei-nem einzigen Satz (oder zu keinem).

2. Sekundärzugriffspfade (Sekundärschlüssel, Sekundärindex)Sekundärschlüssel sind i. a. nicht eindeutig. Daher sind besondere Maßnahmenbei der Suche nach diesen Schlüsseln notwendig.

3. Hierarchische ZugriffspfadeRelativ zu einem Satz eines Satztyps (Owner) werden über eine definierte Be-ziehung Sätze des gleichen oder eines anderen Satztyps (Member) gefunden.

Wenn wir schon den Datensatz und die Zugriffspfade eintragen müssen, dann liegt esnahe, den Datensatz nicht chaotisch sondern in einer geeigneten Form einzuordnen.Hierzu bildet man sog. Cluster, die nach folgenden Kriterien gebildet werden können

− sequentiell nach dem Primärschlüssel− sequentiell nach einem Sekundärschlüssel− Owner-Member-Beziehungen− sequentiell nach zeitlicher Reihenfolge

Die physische Speicherung der Cluster wiederum erfolgt nach den Gesichtspunkten

− nur auf einzelne Seiten− auf benachbarte Seiten (d. h. auf Hardwarecluster = Spuren, Zylinder)− auf ein oder mehrere Segmente zur getrennten oder gemeinschaftlichen Zuord-

nung verschiedener Satztypen.

5.4.4.2 Primärzugriffspfade

Natürlich lassen sich auch die Zugriffsverfahren wieder klassifizieren. Wir unterscheiden

Page 170: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-19

− Schlüsselvergleich− Schlüsseltransformation

Beim Schlüsselvergleich werden Suchschlüssel und Zugriffspfadschlüssel in der vorgege-benen Reihenfolge miteinander verglichen. Je nach dem Ergebnis wird der Satz gefun-den, weiter gesucht oder eine Fehlermeldung abgegeben. Die physische Reihenfolgewird dabei bestimmt durch die eingesetzte Technik

− sequentiell geordnete Listen− Bäume

Bei der Schlüsseltransformation werden der Suchschlüssel über eine Transformations-formel umgerechnet und gespeichert bzw. gefunden. Dies führt zur physisch gestreutenSpeicherung der Sätze.

F Anmerkung Die verschiedenen Zugriffsverfahren basieren auf unterschiedlichen physi-schen Speicherorganisationen. Die Verfahren sind also auf dieser Ebenenicht ohne Auswirkungen auf die darunterliegenden Schichten zu wählen.

Sequentiell geordnete Listen

Bei den sequentiellen Organisationsformen unterscheiden wir zwischen Listen- und Ket-tenstrukturen.

Bei den Listenstrukturen sind die Sätze physisch hintereinander (auf Band)

− unsortiert− sortiert

abgelegt.

Bei unsortierter Speicherung ergeben sich im Mittel für n Sätze und b Sätze pro Seiten/(2b) Seitenzugriffe. Bei sortierter Speicherung mit fortlaufenden Seiten ergibt sicheine Reduzierung durch das binäre Suchen auf die Ordnung O(log2(n/b)).

Aufwendig ist das Einsortieren eines neuen Satzes, da im Durchschnitt n/2 Sätze ver-schoben werden müssen.

Durch eine Verkettung über Zeiger der chaotisch eingetragenen Sätze wird das Sucheneines Satzes nicht reduziert, so daß wir n/(2b) Seitenzugriffe benötigen. Dagegen wirddas Eintragen eines neuen Satzes sehr viel einfacher, da nur der Zeiger des Vorgänger-satzes korrigiert werden muß (bei einfacher Verkettung).

Aufgrund der dargestellten Eigenschaften werden diese Organisationsformen für Primär-schlüssel nicht eingesetzt.

Page 171: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-20 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Bäume

Bäume sind heutzutage die Technik der Wahl. Wir unterscheiden grundsätzlich zwischen

− binären Bäumen mit 2 Nachfolgern pro Knoten− Mehrwegebäume mit m Nachfolgern pro Knoten

Die Sätze werden dabei physisch sequentiell in Eingabereihenfolge, bzw. bei Nutzung derFreispeicherverwaltung unter Belegung vorhandener freier Sätze gespeichert und mit ggf.mehrstufigen Indextabellen verwaltet.

Die Nutzung der vorhandenen Seitenstruktur führt zu optimierten Mehrwegebäumen, de-ren Varianten B-Bäume oder B*-Bäume genannt werden. B kommt vom Namen des Ent-wicklers Bayer oder auch von Balanced Trees (je nach nationaler Einstellung).

B-Bäume

Ein B-Baum vom Typ (k,h) ist ein Baum mit folgenden Eigenschaften

1. Jeder Weg von der Wurzel zu einem Blatt hat die gleiche Länge h(Ausgeglichenheit);

2. Jeder Knoten (außer der Wurzel und den Blättern) hat mindestens k+1 Söhne. DieBlätter haben per Definitionem keine Söhne. Die Wurzel ist entweder ein Blatt (leererBaum) oder hat wenigstens zwei Söhne;

3. Jeder Knoten hat höchstens 2k+1 Söhne.

Aus Performancegründen ist es empfehlenswert, einen Knoten genau auf eine Seite ab-zubilden und k so zu wählen, daß die 2k+1 Einträge die Seite möglichst gut füllen.Daraus ergeben sich folgende Eigenschaften

1. Die Beschreibung der Knoten entspricht der Beschreibung der Seiten;2. Die Höhe h bestimmt beim wahlfreien Zugriff die Anzahl der höchstens notwendigen

Seitenzugriffe (plus dem Zugriff auf die Datenseite);3. B-Bäume sind vollständig ausgeglichen (balanced);4. Jede Seite außer der Wurzel ist mindestens halb voll;5. Der Baum wächst (und schrumpft) nach oben.

Ein Knoten sieht folgendermaßen aus

Z0

S1

D1

Z1

S2

D2

Zn-1

Sn

Dn

freier PlatzZn

Z Zeiger auf SöhneS SchlüsselD Zeiger auf Satz mit Schlüssel S

Z 0 zeigt auf Teilbaum mit Schlüsseln kleiner als S 1

Z i zeigt auf Teilbaum mit Schlüsseln zwischen S und S i+1

Zn

zeigt auf Teilbaum mit Schlüsseln größer als Sn

.....

In den Blättern sind die Z undefiniert.

i

Abbildung 5-5: Aufbau eines Knotens in B-Bäumen

Page 172: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-21

Die Anzahl k bestimmt die Höhe h und damit die Anzahl der Seitenzugriffe. Bei nDatensätzen und einer Füllung von k+1 Sätzen (ungünstigster Fall) ergibt sich sie Höheh des Baumes zu

h := INT(n/(k+1)) + 1

Im allgemeinen ist nicht der Datensatz selbst sondern nur ein Zeiger auf den Datensatzim Baum gespeichert, so daß sich noch ein weiterer Seitenzugriff ergibt. Andererseitssteigt durch den kleineren Speicherbedarf die Zahl k. Dies wirkt sich unmittelbar auf haus, so daß dieser zusätzliche Zugriff mehr als wett gemacht wird.

Nehmen wir einmal an, die Schlüsselbegriffe seien zweistellige Zahlen, dann sieht ein B-Baum wie in Abbildung 5-6 aus.

In diesen Baumwollen wir nun denSchlüssel 47eingeben. DasProgramm durch-läuft Block 1, 3 und9, um die Einfüge-stelle zu finden. Dader Block 9 keineNachfolger hat,muß der Schlüssel

47 in ihn eingetragen werden. Ein neues Element wird also grundsätzlich in einem Blatteingefügt. In unserem Fall läuft das Blatt aber über. Hier setzt nun folgender Algorithmusein.

Der neue Inhalt des Blattes wird linear aufgeschrieben

41 42 45 46 47

Es enthält 2k+1 Schlüssel, was zum Überlauf führt. Also wird ein neuer Speicherblockauf dem Datenträger angelegt. In diesen wird aber nicht 47 eingetragen. Vielmehr wirddas Blatt halbiert. Da die Anzahl ungerade ist, bleibt ein mittleres Element 45 übrig. Die-ses wird nun eine Ebene nach oben weitergereicht. Die restlichen Elemente werden aufdas alte und das neue Blatt verteilt.

Auf der nächsten Ebene geht das Spiel von vorne los. Hier hat der Block noch Platz, alsowird der Übertrag 45 samt seines Zeigers einsortiert (Abbildung 5-7). Wir können unsvorstellen, daß der überlaufende Knoten die Hälfte (+1) seiner Schlüssel in den neuenKnoten über den Vorgänger verschiebt. Der neue Knoten sagt bei k Einträgen: „Stopp“,so daß das mittlere Element im Vorgänger verbleibt.

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Abbildung 5-6: B-Baum

Page 173: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-22 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Sollte nun auch der Vorgängerknoten voll sein, so wird er aufgeteilt in zwei neue Knotenmit jeweils der Hälfte der Schlüssel. Der Übertrag (mittleres Element) wird nach obenweitergereicht. Dies kann sich bis zur Wurzel fortsetzen. Läuft nun diese über, dannwächst der Baum um eine Stufe. Die Wurzel wird halbiert. Das neue Element bildet dieneue Wurzel, die nur einen einzigen Eintrag besitzt. Sie ist der einzige Knoten, bei demdies erlaubt ist.

Wir gehen wieder von unserer Ausgangssituation (Abbildung 5-6) aus und wollen nun denSchlüssel 22 löschen. Der Knoten würde jetzt mit nur einem Schlüssel unterlaufen. Da-mit dies nicht geschieht, „borgen“ wir uns vom Nachbarknoten einen Schlüssel über denVorgängerknoten hinweg. Dies geht aber auch nicht, weil der Nachbar ebenfalls unter-laufen würde. Also borgen wir uns den Schlüssel vom Vorgänger. Die vier Schlüssel kön-nen wir aber gerade in einem Knoten unterbringen, so daß der Block 6 frei wird. Da nunBlock 2 unterläuft, versucht dieser, vom Nachbarn 3 einen Schlüssel zu borgen. Dies gehtaber nicht. Also wird die Wurzel angebettelt. Diese ist aber danach leer, so daß noch einBlock frei wird und der Baum um eine Ebene schrumpft. Gleichzeitig wird der Nach-barblock als dritter Block frei (Abbildung 5-8).

Jetzt sollte es Ih-nen nicht schwer-fallen, den Schlüs-sel 22 aus demB-Baum nachAbbildung 5-7 zulöschen. Es solltesich Abbildung 5-9ergeben

02 05

25

10 20 30 40 45

13 14 22 24 26 27 28 32 35 38 41 42

1

2

4 5 6 7 8 9

3

46 47

1 0

Abbildung 5-7: B-Baum nach Neueingabe

02 05

10 25 30 40

13 14 20 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Abbildung 5-8: B-Baum nach Löschung

Page 174: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-23

In beiden Fällenhaben wir dengleichen Schlüsselin einem Blatt ge-löscht. Was ge-schieht aber, wennwir einen Knoten-schlüssel löschen?Nehmen wir z. B.wider ausgehendvon Abbildung 5-6die Wurzel 25. Sicher können wir nicht die Blöcke 2 und 3 einfach zusammenfassen, dazwar die Anzahl der Schlüssel Platz finden würde, aber ein Zeiger auf die insgesamt 6Blätter übrig bliebe. Die geringsten Änderungen hätten wir, wenn wir den nächst größerenSchlüssel 26 nach oben ziehen würden (Abbildung 5-10).

Nun da geht gut.Was aber, wenn wirnun erneut dieWurzel 27 lö-schen. Nun, wirkönnen das Pro-blem in zweiSchritte aufteilen.Ersten ersetzen wirdie Wurzel durchdas nächst größereElement. Diese existiert immer, da die Wurzel immer zwei Nachfolger hat (es sei denn,der Baum selbst ist leer). Im zweiten Schritt löschen wir einfach dieses Element aus demBaum, wobei der allgemeine Algorithmus zum Löschen in Blättern eingesetzt wird. Auchhierbei kann der Baum schrumpfen. Stellen wir uns vor, wir hätten 38, 45 und 46 ge-löscht, bevor wir 27 löschen wollen. Die Ausgangssituation zeigt Abbildung 5-11.

02 05

30

10 25 40 45

13 14 20 24 26 27 28 32 35 38 41 42

1

2

4 5 6 7 8 9

3

46 47

1 0

Abbildung 5-9: B-Baum nach Löschung

02 05

26

10 20 30 40

13 14 22 24 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Abbildung 5-10: B-Baum nach Löschung der Wurzel

02 05

26

10 20 30 40

13 14 22 24 27 28 32 35 41 42

1

2

4 5 6 7 8 9

3

Abbildung 5-11: B-Baum mit minimaler rechter Seite

Page 175: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-24 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Die rechte Seitedes Baumes ist mi-nimal, d. h. wirkönnen keinenSchlüssel entfer-nen, ohne daß einKnoten unterläuft.In dieser Situationlöschen wir nun27. Wir borgenuns ein Schlüsselvom Vorgänger (Abbildung 5-12).

Dieser Knoten läuftjetzt aber unter, sodas er gerade dieneue aufgebauteWurzel anborgt.Diese löst sichgleich wieder auf(Abbildung 5-13).Auch dieser Lösch-vorgang setzt wie-der drei Blöcke frei.

Der programmtechnische Aufwand erscheint zwar sehr groß zu sein. Entscheidend istaber die Anzahl der Blockzugriffe. Lineare Verschiebungen in den Blöcken erfolgen imZentralspeicher, sind also zeitlich vernachlässigbar.

B*-Bäume

Abweichend von den B-Bäumen enthalten die B*-Bäume in den Knoten keine Zeiger aufdie Datensätze. Diese sind ausschließlich in den Blättern zu finden. Daher nennt mandiese Bäume auch blattorientierte oder hohle Bäume.

Im Gegensatz zu den B-Bäumen haben Knoten und Blätter unterschiedliche Strukturen,so daß ein weiterer Füllungsparameter k* eingeführt werden muß.

Ein B*-Baum vom Typ (k,k*,h) ist ein Baum mit folgenden Eigenschaften

1. Jeder Weg von der Wurzel zu einem Blatt hat die gleiche Länge h(Ausgeglichenheit);

2. Jeder Knoten (außer der Wurzel und den Blättern) hat mindestens k+1 Söhne. DieBlätter haben per Definitionem keine Söhne. Die Wurzel ist entweder ein Blatt (leererBaum) oder hat wenigstens zwei Söhne;

3. Jeder Knoten hat höchstens 2k+1 Söhne;4. Blätter besitzen mindestens k* und höchstens 2k* Einträge.

Ein Knoten sieht folgendermaßen aus

02 05

27

10 20 40

13 14 22 24 28 30 32 35 41 42

1

2

4 5 6 7 8 9

3

Abbildung 5-12: B-Baum nach Löschen der Wurzel (Zwischenschritt)

02 05

10 20 27 40

13 14 22 24 28 30 32 35 41 42

1

2

4 5 6 7 8 9

3

Abbildung 5-13: B-Baum nach Löschen der Wurzel

Page 176: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-25

Die Blätter haben, wie erwähnt eine andere Struktur

Bei dieser Technik existieren eini-ge Schlüssel als Referenzschlüs-sel und Seitenschlüssel mehrfachim Baum. So taucht R1 im linkenBlatt ganz rechts auf. Zwar steigt

durch die nochmalige Komprimierung der Daten in den Knoten k an, andererseits benö-tigen wir jetzt immer h Seitenzugriffe. Trotzdem hat der B*-Baum einen entscheidendenVorteil bei der sequentiellen Verarbeitung. Beim B-Baum können wir zwar bis zum Endedes Knotens sequentiell weiterlesen, dann müssen wir aber für den nächsten Schlüsselmindestens eine Stufe zurück. Im B*-Baum sind dagegen die Schlüssel in den Blätternsequentiell angeordnet. Wir müssen nur noch Zeiger für die Nachbarknoten verwalten,um sehr schnell sowohl vorwärts wie auch rückwärts lesen zu können.

Die Suche in den Bäumen ist leicht zu verstehen. In einem Knoten erfolgt ein Schlüssel-vergleich. Je nach Ausgang des Vergleichs wird nach links oder rechts weiter gesucht.Das Einfügen oder Löschen in einen Knoten entspricht dem sequentiellen Einfügen oderLöschen, solange kein der Unter- bzw. Überlaufbedingungen verletzt wird.

Kommt es (als Beispiel) zu einem Überlauf, weil ein Knoten voll ist, dann wird dieserKnoten geteilt. Der mittlere Schlüssel wandert nach oben in den Vaterknoten. Läuft auchdieser über, so geht das Spiel weiter, bis die Wurzel erreicht ist. Läuft die Wurzel über,dann wird diese geteilt. Dadurch ergibt sich eine Wurzel mit einem Schlüssel und zweiSöhnen. Gleichzeitig erhöht sich die Höhe des Baumes um 1. Die Bäume sind also selbst-ausgleichend, was ein erheblicher Vorteil ist.

Beim Unterlauf durch Löschung werden zwei Knoten zusammengelegt und ein Eintrag imVaterknoten gelöscht. Dies wandert ebenfalls nach oben weiter und führt ggf. zu einerErniedrigung des Baumes.

Die Höhe des Baumes hängt unmittelbar von

− der Seitengröße− der Anzahl der Einträge, d. h. von der Länge der Schlüssel und Zeiger

ab. Durch Kompression des Schlüssels aber auch durch Verkleinerung der Zeiger läßtsich Höhe einsparen. Da die Schlüssel durch die Sortierung fast gleich sind, genügt es,die Deltas zu speichern (front and rear compression bei VSAM).

Z0

R1

Z1

R2

Zn-1

Rn

freier PlatzZn

Z Zeiger auf SöhneR Referenzschlüssel

Z0

zeigt auf Teilbaum mit Schlüsseln nicht größer als R1

Zi

zeigt auf Teilbaum mit Schlüsseln zwischen R und Ri i+1

Zn zeigt auf Teilbaum mit Schlüsseln größer als R n

.....

Abbildung 5-14: Aufbau eines Knotens in B*-Bäumen

S1

D1

S2 Sn

freier PlatzDn.....P D

2N

P PRIOR-Zeiger N NEXT-Zeiger

Abbildung 5-15: Aufbau eines Blattes in B*-Bäumen

Page 177: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-26 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Hashing

Das Hashing beruht zum einen auf einer Schlüsseltransformation, zum anderen auf dersog. gestreuten Speicherung.

Grundidee des Hashing ist die Abbildung der Schlüsselmenge S mit der Mächtigkeit sauf ein Intervall N={1..n} der natürlichen Zahlen.

Die Hash-Funktion h: S→N ordnet jedem Schlüssel s∈S eine natürliche Zahl i∈Nzu. i wird nun als relative Satznummer eines Segments interpretiert.

Grundsätzlich sind wir frei in der Wahl der Funktion h und des Intervalls N. Wir könnenaber ohne tiefgründige Beweisüberlegungen einige Eigenschaften sofort ablesen

1. Ist das Intervall N, d. h. n deutlich größer als die Mächtigkeit s, dann sindviele Sätze unbelegt, d. h. unser Speicher schlecht ausgenutzt.

2. Im umgekehrten Fall wird es trotz gleichverteilender Funktion h spätestensnach n Schlüsseln zu Kollisionen, d. h. zum gleichen Ergebnis der Hash-Funktion kommen. Hier müssen wir verhindern, daß der neue Satz verlorengeht.

Man unterscheidet zwischen statischen und dynamischen Zuweisungen von Hash-Berei-chen (den jeweils vorgesehenen Intervallen). Bei der statischen Zuweisung müssen wirnoch zwischen den Möglichkeiten mit und ohne Kollision differenzieren.

Statische Hash-Bereiche mit kollisionsfreier Satzzuordnung

Hier gehen wir von einem Intervall N aus, daß gleich oder größer als die Mächtigkeit un-serer Schlüsselmenge ist. Weiterhin muß der Schlüssel eindeutig sein, da sonst zweiSchlüssel auf jeden Fall zu einer Kollision führen.

Sind (nahezu) alle erlaubten Schlüsselwerte besetzt, so kann die Hash-Funktion eine in-jektive (eineindeutige, umkehrbar eindeutige) Funktion sein. Stellen Sie sich nur fortlau-fende Rechnungs-, Buchungs-, Artikelnummern usw. vor. Hier können wir diese Nummernggf. nach Abzug einer Verschiebung direkt verwenden. Solche Idealfälle kommen relativhäufig als Primärschlüssel vor.

Statische Hash-Bereiche mit Kollisionsbehandlung

Im allgemeinen ist aber der belegte Schlüsselbereich K sehr viel kleiner als die MengeS der möglichen Schlüssel. Denken Sie nur an ein Telefon-, Telefax-, Telexregister. DieNamen sind verglichen mit der Kombinatorik unseres Alphabets sehr lückenhaft und nochdazu mehrdeutig. Sie wissen, daß kein Rechner der Welt genügend Kapazität für jedeMöglichkeit eines z. B. maximal 16-stelligen Namens hätte. Die Namen sind also (mit Clu-sterbildung bei Müller, Mayer, Maier,...) ziemlich im Schlüsselraum verstreut.

Page 178: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-27

Die Hash-Funktion soll nun diese Lücken einerseits komprimieren, andererseits die Kolli-sionsgefahr minimieren. Die Mächtigkeit von N wird also deutlich kleiner als die von Ssein. Somit ist die Hash-Funktion nicht mehr eineindeutig (eindeutig muß sie sein, da siesonst keine Funktion wäre). Wir müssen also mit Kollisionen leben.

Wir können hergehen, und die Hash-Funktion zur Berechnung einer Seitennummer (nichtder Satznummer) benutzen, in der mehrere Sätze mit dem gleichen Hash-Ergebnis unter-gebracht werden können. Innerhalb der Sätze wird sequentiell gesucht. Solche Seitenwerden Buckets genannt. Läuft nun solch ein Bucket über, so wird eine Überlaufseite ein-gerichtet und mit dem Bucket verkettet.

Leider gibt es keine allgemeinen Regeln zur Auswahl von Hash-Funktionen. Üblicherwei-se werden Divisionsrestverfahren (Modulo-Funktion) eingesetzt, da diese eine gleichmä-ßige Ausnutzung des Speicherraumes garantiert, wenn man eine Primzahl q als Divisorbenutzt (Aus diesem und aus kryptologischen Gründen sucht man ständig nach immergrößeren Primzahlen). Diese ist, wie erwähnt, kleiner als s etwa in der Größenordnungder zu erwartenden Gesamtsatzzahl k zu wählen. q sollte also größte Primzahl q<ksein.

Da wir üblicherweise in diesem Bereich alphanumerische Schlüssel haben, müssen wirdiese erst umwandeln. Dies geschieht z. B. dadurch, daß wir die Bitdarstellung desSchlüssel als positive Ganzzahl interpretieren.

Solange wir keine Kollisionen haben, liegt der Zugriffsfaktor praktisch bei 1, d. h. wir er-halten den gesuchten Satz sofort. Durch richtige (leider nicht geregelte) Wahl der ver-schiedenen Parameter wie

− Hash-Funktion− Bucket- bzw. Seitengröße− Belegungsfaktoren der Buckets− Ladereihenfolge der Sätze

kann dieser Wert näherungsweise erreicht werden.

Einige Nachteile sollen nicht verschwiegen werden

1. Eine sequentielle Verarbeitung ist nicht möglich. Benachbarte Schlüssel führen nichtzwangsläufig zu benachbarten Hash-Ergebnissen;

2. Aus dem gleichen Grund sind auch Ähnlichkeitssuchen erschwert.

Dynamische Hash-Bereiche

Das statische Festlegen der Parameter von Anfang an, führt zuerst zu guten Anwortzeitenaber einer schlechten Speicherausnutzung. Mit steigendem Datenbestand dreht sich die-ses genau um. Viele Datensätze werden zwangsläufig in den Überlaufbereich verdrängt.Diesem Effekt kann man entweder durch statische Reorganisation oder dynamische Zu-ordnung begegnen.

Bei der statischen Reorganisation wird in Abhängigkeit des vorhandenen Datenbestandeseine neue Hash-Funktion gesucht, d. h. im allgemeinen der Divisor q angepaßt. Dabei

Page 179: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-28 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

muß der gesamte Primärschlüsselzugriff neu aufgebaut werden. Dies führt zu längerenBetriebsunterbrechungen, die u. U. nicht möglich sind.

Wünschenswert ist daher ein dynamisches Hashing, das

− ein Anwachsen und Schrumpfen des Hash-Bereiches erlaubt;− Überlauftechniken und damit erforderliche statische Reorganisationsläufe ver-

meidet;− eine lückenarme Belegung des Speicherplatzes unabhängig vom Datenbestand

gewährleistet;− einen Zugriffsfaktor von höchstens 2 hat.

Zur Lösung dieser Aufgaben bieten sich drei Verfahren an

− erweiterbares Hashing− virtuelles Hashing− dynamisches Hashing.

5.4.4.3 Sekundärzugriffspfade

Sekundärzugriffspfade sind zwar alle Schlüssel aus Attributkombinationen, die keinen(vollständigen) Primärschlüssel darstellen. Wir wollen aber bei den folgenden Betrach-tungen davon ausgehen, daß diese Schlüssel mehrdeutig sind und somit bei einem Such-vorgang zu einer Ergebnismenge führen. Dies kann auch dadurch geschehen, daß derSuchschlüssel selbst verkürzt ist.

Grundsätzlich sind alle Verfahren (bis auf das Hashing) für die Sekundärschlüssel an-wendbar. Wir müssen aber unterscheiden, ob die Zugriffspfade permanent oder nur tem-porär vorhanden sind. Im ersten Fall muß die Zugriffspfadverwaltung einerseits dieseMöglichkeit vorsehen, andererseits aber bei der satzorientierten Verarbeitung die Mehr-fachheit eines Schlüssel signalisieren.

Im zweiten Fall des temporären Aufbaus der Zugriffspfade (nachträgliches Filtern) durcheine komplexe Anfrage erhebt sich die Frage, wie vorhandene Zugriffspfade optimal ge-nutzt werden können, um einen Vorteil gegenüber der sequentiellen Verarbeitung derDatenbank zu bieten.

Betrachten wir hierzu einige Verknüpfungstechniken von Satzmengen und untersuchenihre Eignung. Hierzu gehen wir wieder analog zu den Primärzugriffspfaden vor

1. Hilfsdaten sind eingebettetphysische Nachbarschaft der Sätze

Satz 1 Satz 2 Satz 3 Satz n

Hierzu müssen mehrere Listen mit redundanten Informationen angelegt werden. DerZugriff erfolgt zwar sehr schnell. Das Verfahren ist aber wegen der Redundanz weniggeeignet.

Page 180: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-29

Verkettung der Sätze

Satz 1 Z2

Satz 3 Z3

Satz nSatz 1Z1

Diese Kettungstechnik vermeidet die Speicherredundanz. Durch weiter Zeiger lassensich auch mehrere Schlüssel realisieren

Satz 1 Y Z1 1

Satz 2 Y Z2 2

Satz 3 Y Z3 3

Die Verkettung liefert nur beim Zugriff auf eines der verzeigerten Suchkriterien guteErgebnisse. Komplexe Abfragen lassen sich nur schwer realisieren. Bei Oder-Ver-knüpfungen sind alle Ketten zu bestimmen und zusammenzuführen, während bei derUnd-Verknüpfung die kürzeste Kette zu bestimmen ist.

2. Hilfsdaten sind ausgelagertphysische Nachbarschaft der Zeiger

Z1

Z2

Zn

Z3

Satz 1 Satz 2 Satz 3 Satz n

Diese Technik, Invertierungstechnik mit invertierten Listen genannt, läßt auch nur dieden effizienten Zugriff auf die betroffene Zeigermenge zu. Verfahren zur Optimierungkomplexer Zugriffe lassen sich aber relativ leicht implementieren, so daß dies dieStandardtechnik zur Implementierung von Sekundärschlüsseln ist.

Verkettung der Zeiger

Z1

Satz 1 Satz 2 Satz 3 Satz n

Y1

Z2

Y2

Z3

Y3

Zn

Diese Technik besitzt zwar einerseits die größten Freiheitsgrad aber auch den höch-sten Speicherbedarf, so daß sie i. a. nicht eingesetzt wird

Wegen der Wichtigkeit der Invertierungslisten wollen wir uns noch einige Besonderheitenbei der Realisierung betrachten.

Page 181: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-30 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Die Speicherung der Zeigerlisten kann in die Indexstruktur zur sortierten Speicherungaller Werte eines gegebenen Attributs (Sekundärschlüssels) eingebettet sein oder ge-trennt von dieser Indexstruktur erfolgen

S1

4

S2

3

Sn

1

Z Z Z Z

Z Z Z

Z

S1

4

S2

3

Sn

1

Z Z Z Z

Z Z Z

Z

SchlüsselAnzahl Zeigerliste

Die zu einem Sekundärschlüssel gehörende Zeigerliste verweist auf alle Sätze einesSatztyps, die diesen Schlüssel als Attributwert haben. Über ein Anzahlfeld kann die Aus-wertung einer Anfrage optimiert werden. Probleme bereitet natürlich die Einbettung varia-bel langer Zeigerlisten in die Indexstruktur (linke Lösung). Diese entfallen bei der rechtenVariante. Diese läßt sich auch leichter warten.

In der oberen Darstellung operieren wir mit Zeigerlisten. Es wäre aber auch eine Bitlistemöglich, bei der immer ein Bit pro Datensatz gesetzt oder nicht gesetzt wird. Dies ent-spricht der Sichtlochkarte, bei der für jedes zutreffende Attribut ein Loch gebohrt wird.Durch Übereinanderlegen der Bitlisten (Sichtlochkarten) lassen sich dann relativ einfachmengenorientierte Verknüpfungen (UND, ODER, NICHT) durchführen.

Bauen wir nun einen neuen Index auf mehreren bereist vorhandenen Sekundärindizes auf(Mehrattribut-Index), so können wir dies einerseits ohne Berücksichtigung dieser Informa-tionen durchführen, d. h. den Mehrattribut-Index wie einen Einattribut-Index behandeln.Interessanter ist aber die Variante, einen solchen Index als Und-Verknüpfung der Basi-sattribute zu realisieren.

Unter einem generischen Index versteht man die bewußte Verkürzung des Index auf einevorgegebene Länge. Diese Technik vereinfacht die Ähnlichkeitssuche bei Schlüsseln, diesich in diesen Präfixen nicht unterscheiden (z. B. SCHM für Schmid, Schmied, Schmitt,Schmidt, Schmidhuber usw.).

Ein Gesamtindex ist die Zusammenfassung aller invertierten Attribute in einer Index-struktur, indem jeder Schlüsselwert mit dem zugehörigen Attribut als Präfix konkateniertabgespeichert wird.

Die zuletzt aufgeführten Schlüssel weisen uns schon auf das Problem der Ähnlichkeitssu-che hin. Die Ähnlichkeitssuche kann entweder durch Maßnahmen im Schlüsselteil oderdurch Erweiterungen der Suchoperationen (oder durch beides) erreicht werden. Nebender exakten Suche (mit Ein- oder Mehrtreffer-Tabelle) wünschen wir uns häufig

Page 182: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-31

Approximative Suche

Die Treffermenge sind alle Schlüssel die größer (oder größer gleich) als der Suchschlüs-sel sind. Durch sequentielles Lesen bis zum Segmentende lassen sich die Sätze verar-beiten, so daß der Index dieses erlauben muß.

Bereichssuche

Die Bereichssuche unterscheidet sich von der approximativen Suche durch ein zusätzli-ches Abbruchkriterium, so daß die Trefferliste nicht bis zum Segmentende reicht.

Generische Suche

Der Suchschlüssel wird auf eine vorgegebene Länge gekürzt. Dann erfolgt eine Bereichs-suche für diesen gekürzten Schlüssel (exakte Präfix-Suche).

Maskensuche

In Erweiterung der generischen Suche lassen sich Schlüssel suchen, von denen nur Teilebekannt sind. Durch spezielle Platzhaltersymbole (z. B. durch * und ?) kann der Benut-zer die Maske steuern. Dabei gilt in Anlehnung an DOS

* beliebig viele Zeichen (auch am Anfang)? genau ein Zeichen

Bei langen Schlüsseln (in Texten) lassen sich ggf. noch weitere Bedingungen über denAbstand von Schlüsselteilen angeben, z. B. im Wort, im Satz usw.

Phonetische Suche

Durch phonetische Schlüssel kann man Schreibfehler in gewissen Grenzen ausgleichen.Nehmen Sie als Beispiel eine Telefonauskunft, bei denen die Namen nach dem Gehöraufgenommen werden. Hierbei werden phonetisch gleiche Buchstaben in Gruppen zu-sammengefaßt, z. B. dadurch, daß alle Vokale unberücksichtigt bleiben, Doppelbuchsta-ben eliminiert werden und die Konsonanten nach folgender Tabelle umgesetzt werden

Quelle: ABCDEFGHIJKLMNOPQRSTUVWXYZZiel: BSD FS SLMM BSRSD FFS S

So bleiben z. B. nur noch 7 signifikante Konsonanten übrig.

5.4.4.4 Hierarchische Zugriffspfade

Hierarchische sollen hauptsächlich den satzweisen Zugriff auf Sätze verschiedenen Typsunterstützen und zwar in einer 1:m Relation. Einer Instanz des einen Satztyps (sog.Owner) sind mehrere Instanzen eines anderen Satztyps (sog. Member) zugeordnet. Aufder Anwendungsebene spricht man bei derartigen Zusammenhängen auch von einer Set-oder Linkstruktur.

Page 183: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-32 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Die satzweise Verarbeitung erfolgt i. a. vom Owner zum Member (FIND FIRST, NEXT,PRIOR, LAST MEMBER) oder umgekehrt vom Member zu Owner (FIND OWNER). In die-sen Richtungen sind die hierarchischen Datenbanken optimiert, d. h. den Membern einerSetstruktur ist dabei i. a. eine bestimmte Reihenfolge aufgeprägt.

Für die Verarbeitung hierarchischer Zugriffspfade benötigen wir folgende Verarbeitungs-primitive

− Sortierung (ggf. mit Indexierung) entsprechend eines vorgegebenen Sortierkrite-riums in auf- oder absteigender Folge;

− Zugriff auf ausgezeichnete absolute Positionen in der momentane Folge derMember-Sätze (FIRST, LAST);

− Zugriff auf relative Positionen in der momentanen Folge der Member-Sätze(NEXT, PRIOR);

− Zugriff auf den Owner von einem beliebigen Member aus (OWNER);− Zugriff in einer systembestimmten Reihenfolge (IMMATERIAL).

Beispiel: Ein Satztyp Angestellter (pers) mit den Attributen Personalnummer (pnr),Abteilungsnummer (panr), Name (pname) und Gehalt (pgehalt) bildet zu-sammen mit einem Satztyp Abteilung (abt) mit den Attributen Abteilungs-nummer (anr), Abteilungsleiter (aleiter) und Abteilungsort (aort) eineSetstruktur. Für die Abteilung A02 hat sie folgende Ausprägung

Zusätzliche Aufgaben finden wir in

− der Forderung, gewisse Suchoperationen zu begünstigen (FIND ALLRECORDS);

− die Forderung, gewisse Ordnungskriterien einzuhalten (SORTED,SORTEDINDEX, FIRST, LAST, NEXT)

− der Größe der Satzmenge.

Noch deutlicher als bei den Sekundärschlüsseln unterscheidet man bei den hierarchi-schen Datenbanken zwischen dem Einstiegsmechanismus und der Verknüpfungsstruktur.

anr aleiter aort

A02 Müller BerlinOwner: abt

8972 A02 Mayer 6000 5734 A02 Schulz 45001234 A02 Adam 5000

prn panr pname pgehalt

NEXTPRIOR NEXTPRIOR

Member: persOWNER

FIRST/NEXT

LAST/PRIOR

NEXT

PRIOR

Page 184: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Aufbau von Datenbanken Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260 Seite: 5-33

Der Einstieg erfolgt über den Owner, die Verknüpfung innerhalb der Member.

Bei der Realisierung der Sekundärschlüssel hatten wir eigentlich nur die Invertierung alsdas Verfahren der Wahl kennengelernt. Bei hierarchischen Datenbanken gibt es abernoch eine Reihe weiterer erfolgreicher Implementierungen

− Listentechnik (SET MODE IS LIST)− Kettungstechnik (SET MODE IS CHAIN)− Invertierungstechnik (SET MODE IS POINTER ARRAY)

Die vierte Technik der Verkettung von Zeigern, die wir bei den Sekundärschlüsseln ken-nengelernt haben, ist i. a. zu aufwendig für hierarchische Datenbanken.

Sehen wir uns diese Techniken etwas näher an

Listentechnik (SET MODE IS LIST)

Alle Member einer Setinstanz werden in der vorgegebenen Reihenfolge in einer Seiteoder in mit Zeigern verknüpften Seiten gespeichert. Diese Technik hat also folgende Ei-genschaften

− Die Member-Sätze einer Setinstanz bilden ein Cluster;− Der Aufwand für eine fortlaufende Verarbeitung von Member-Sätzen ist minimal;− Die NEXT und PRIOR Operationen sind einfach zu realisieren und erfordern

nur in Ausnahmefällen einen neuen Seitenzugriff;− Beim Owner-Satz sind als Einstiegshilfen Zeiger auf die erste und ggf. letzte

Seite einer Memberinstanz gespeichert.

Wegen der Beschränkung auf einen Satztyp pro Member-Settyp ist die Listentechnik nichtallgemein einsetzbar.

Kettungstechnik (SET MODE IS CHAIN)

Über Zeiger werden die Verkettungen der Owner- und Member-Sätze in der vorgegebe-nen hergestellt. Dadurch ergeben sich folgende Eigenschaften

− Da die Seitenzuordnung für die Member-Sätze nicht explizit kontrolliert wird, er-gibt sich keine Clusterbildung;

− Der Aufwand für eine fortlaufende Verarbeitung der Member-Sätze ist wegen dervielen Seitenzugriffe groß;

− NEXT und PRIOR Operationen erfordern i. a. einen Seitenzugriff;− Beim Owner-Satz sind als Einstiegshilfen Zeiger auf die erste und ggf. letzte

Seite einer Memberinstanz gespeichert.

Der beschriebene Aufwand ist dadurch gerechtfertigt, daß die Sätze Member in mehr alseinem Settyp sein können. Dies hat Vorteile bei Anwendungen mit kleinen Setausprägun-gen (weniger als 10 Member-Sätze) und bei häufigem Wechsel der Settypen (z. B. bei derStücklistenverarbeitung).

Page 185: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.4 Verwaltung physischer Datensätze und Zugriffspfade (Indextabellen) Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-34 D:\Eigene\Doku\DB\DBMS\DB05Aufb\DB05Aufb.doc – 96260

Invertierungstechnik (SET MODE IS POINTER ARRAY)

Pro Setinstanz wird hier eine Zeigertabelle gespeichert. Die Reihenfolge der Zeiger in derTabelle definiert die Reihenfolge der Member-Sätze. Zur einfacheren Verwaltung der ge-gebenen Sortierung kann neben dem Zeiger auch der Schlüssel in der Tabelle geführtwerden. Dadurch ergeben sich folgende Eigenschaften

− Da die Seitenzuordnung für die Member-Sätze nicht explizit kontrolliert wird, er-gibt sich keine Clusterbildung;

− Der Aufwand für die sequentielle Verarbeitung ist i. a. noch größer als bei derKettungstechnik;

− NEXT und PRIOR Operationen erfordern zunächst immer einen Zugriff auf denOwner mit dem Pointer Array und dann auf die Seite mit dem Member-Satz;

− FIRST und LAST Zeiger verweisen vom Owner-Satz auf die erste und letzteSeite des Pointer-Arrays.

Die Invertierungstechnik wird dann gewählt, wenn die genaue Setgröße und die Häufig-keit der einzelnen Operationen nicht bekannt sind.

Page 186: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Glossar © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB06Glos.doc – 96260 Seite: 1

Datenbanken – Glossar

Begriff ErklärungAktualisierung(einer DB)

Daten einer DB auf einen neuen Stand bringen (Synonyme:Pflege, Wartung, Update)

Anomalien treten auf, wenn bei der Datenpflege (Neueingeben, Ändern,Löschen) unnötige Daten eingegeben werden müssen, alleDatensätze einer Entität durchsucht werden müssen oder wei-terhin relevante Daten verschwinden.

Attribut 1. Wert der Eigenschaft einer Entität oder einer Beziehung(Attributwert)

2. Bezeichnung der Eigenschaft eines Entitäts- oder eines Be-ziehungstyps (Attributbezeichner)

3. Bezeichnung der fachlichen Bedeutung einer Eigenschaft(Attributbedeutung)

Auswertung (einer DB) konkrete Nutzung der Daten einer DatenbankBenutzer (einer DB) Mitarbeiter, der die in einer Datenbank gespeicherten Daten für

seine fachliche Arbeit nutztBeziehung 1. relevante Verknüpfung zweier Entitäten

2. relevante Verknüpfung zweier Entitätstypen (Beziehungstyp)Datei (DB-Datei) Menge gleichartig strukturierter Daten mit einem eigenen Be-

zeichner innerhalb einer DB-Anwendung. Ggf. als Tabelle be-zeichnet, um sie vom Dateibegriff eines Betriebssystems zuunterscheiden.

Datenbank(Data Base)

1. zentral gesammelte, redundanz(freie)arme Daten, die überdas Datenbankverwaltungssystem (Data Base ManagementSystem DBMS) einer Vielzahl unterschiedlicher Anwendernzur Verfügung gestellt werden.

2. Funktionen und Daten zur Bearbeitung betrieblicher Aufga-ben

DB-Administrator Mitarbeiter, der für die Entwicklung (neuer) und die Betreuung(bestehender) DB-Anwendungen zuständig ist. Ggf. wird zwi-schen beiden noch einmal differenziert.

DB-Anwendung 1. Teilausschnitt aus den Geschäftsprozessen, die über eineDB bearbeitet werden, bei dem also die Daten im Vorder-grund stehen.

2. Bezeichnung für das Softwarepaket, das aufbauend auf dasDBMS die Bearbeitungsfunktionen realisiert.

Datenmodell semantische Abbildung der Realität mit dem Ziel, die beschrei-benden Daten in einer DB-Anwendung zu verarbeiten.

Datensatz Zusammenfassung der Attribute einer Entität (Zeile, Tupel)Datensatzzeiger Interner Zeige des DBMS innerhalb einer Tabelle, der auf den

aktuellen Datensatz zeigt (satzorientierte Verarbeitung)(Tabellencursor, Datensatzcursor usw.)

Datensicht (View) Menge aller für die Prozesse einer Modellierungsschicht rele-vanten Informationen

Page 187: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Glossar © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB06Glos.doc – 96260 Seite: 2

Begriff ErklärungDomäne Wertebereich (Wertevorrat) eines AttributsEntität (Entity) semantische Einheit mehrerer Attribute als Teil der realen Welt

oder unserer Vorstellung (Objekt)Entity-Relationship-Modell (ERM)

Modell zur Darstellung semantischer Datenbeziehungen

Entitätsmenge (EntitySet ES)

Menge gleichartiger Entitäten

Entitätstyp (Entity SetType EST)

Beschreibung der Entitätsstruktur durch die Potenzmenge(kartesisches Produkt) aller gleichartigen Entitäten

Existenzabhängigkeit siehe referentielle IntegritätFeld Bezeichnung der Spalte einer Tabelle (Attribut)Feldtyp Beschreibung der Domäne (Wertebereich) eines Felde durch

Angabe eines Basistyps der Form Integer, Real,Character usw.

Fremdschlüssel ein normalerweise nicht notwendiges Attribut F oder eine Attri-butkombination F1,...,FN einer Relation (Entitätstyp) R1,der sich auf den Primärschlüssel einer zweiten Relation R2 be-zieht (Verbindungsschlüssel). Beide Attribute müssen notwen-digerweise den gleichen (oder einen überlappenden) Wertevor-rat besitzen. Zu jedem Zeitpunkt ist ein Wert von F identischmit einem Wert des Primärschlüssels von R2.

Index Ein Index I über einem Attribut A oder einer Attributkombi-nation A1,...,AN der Relation R dient dem beschleunigtenZugriff auf R über entsprechende Suchwerte. Ein Index heißteindeutig, wenn keine zwei Tupel der Relation das gleiche Attri-but A oder die gleich Attributkombination A1,...,AN habenoder haben werden.

Integrität logische Widerspruchsfreiheit der in der DB erfaßten Daten(Konsistenz)

Integritätsregeln Regeln zur Beziehungsintegrität sind fachliche Aussagen zuden Beziehungen in einem Relationenmodell. Sie sollen bewir-ken, daß ein Verbindungsschlüsselwert immer einem Primär-schlüsselwert entspricht. Wir unterscheiden hauptsächlichWeitergabe (der Löschung/Änderung), Blockade oderNullsetzung.

Katalog Verzeichnis aller zu einer DB-Anwendung gehörigen Elemente(Dateien, Abfragen, Formulare, Berichte, Makros, Module).

Join (temporäre) Tabelle, die durch die Verknüpfung zweier Tabellenüber deren Beziehung entsteht. Wir unterscheiden Inner undOuter Join.

Master-Detail-Beziehung

1:m Beziehung, wobei die 1-Entität Mastertabelle, die m-EntitätDetailtabelle genannt wird. Üblicherweise wird bei einer solchenBeziehung die referentielle Integrität gefordert.

Konsistenz logische Widerspruchsfreiheit der in der DB erfaßten Daten(Integrität)

Page 188: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Glossar © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB06Glos.doc – 96260 Seite: 3

Begriff ErklärungModell vereinfachtes, begrenztes Abbild eines Teils der realen Welt

oder unserer Vorstellung, das die (im jeweiligen Zusammen-hang) wesentlichen Eigenschaften und Beziehungen des Origi-nals widerspiegelt. Es entsteht als Ergebnis einerzielgerichteten, zweckorientierten Tätigkeit (Prozeß), der Mo-dellierung oder Modellbildung.

Normalisierung Modellierungsverfahren, um Redundanzen und Anomalien ineinzelnen Entitätstypen zu beseitigen. Normalerweise (außer5NF) erfolgt eine Projektion (Aufteilung) in mehrere Tabellen.Datenredundanzen werden zu Schlüsselredundanzen.

Objekt 1. Ausschnitt aus der realen Welt oder unsere Vorstellung, be-schrieben durch Eigenschaften

2. Zusammenfassung von Individuen im Sinne einer KlassePrimärschlüssel Minimalmenge eines oder mehrerer Attribute eines Entitätstyps,

um die Entitäten eindeutig zu bezeichnen. Ggf. Festlegung ei-nes von mehreren Schlüsselkandidaten.

Projektion Erzeugung einer Tabelle durch Auswahl von Attributen(Spalten) aus einer bestehenden Tabelle. Verkleinerung derDatenmenge einer Tabelle in waagrechter Richtung.

Redundanz mehrfache Speicherung derselben DatenRelation mathematische Bezeichnung für die Menge aller Paare, die sich

durch geeignete Verknüpfung der Elemente zweier Mengenergeben. In der DB-Theorie bilden somit die Entitäten(Datensätze, Tupel) in Form der Tabelle wie auch die Bezie-hungsmenge zwischen den Entitätstypen eine Relation.Zur vollständigen Beschreibung gehört ein Kopfteil mit einerfesten, endlichen Anzahl von Attributbezeichnern und der Fest-legung einer Domäne pro Attributbezeichner sowie dem Rumpfaus einer endlichen Menge von Tupeln. Die festen Werte derTupelattributfelder stammen aus den jeweiligen Domänen.

Relationship Beziehung (Verknüpfung, Paarbildung) zwischen zwei konkre-ten Entitäten zweier (nichtleerer) Entitätstypen.

Relationship Set (RS) Menge gleichartiger Relationships (Klassenbildung)Relationship Set Type(RST)

durch die Potenzmenge des Relationship Sets definierte Be-schreibung der Relationshipstruktur

Schlüssel(-kandidat) ein oder mehrere Attribute, die die Entitäten einer Entitätsmen-ge eindeutig voneinander unterscheiden. Der Primärschlüsselwird aus den Schlüsselkandidaten ausgewählt. Umgangs-sprachlich leider etwas schlampig wird oft ein Index als Schlüs-sel bezeichnet.

Selektion Auswahl von Entitäten aus einer Entitätsmenge aufgrund einervorgegebenen Bedingung, die den Wertebereich eines odermehrerer Attribute einschränkt. Verkleinerung der Datenmengeeiner Tabelle in senkrechter Richtung.

Semantik Lehre von der Bedeutung betrachteter Elemente (im Gegensatzzur Syntaktik).

Syntaktik Lehre von der formalen Beschreibung betrachteter Elemente.Tabelle Darstellung von Relationen in Rechteckform mit Zeilen und

Spalten.

Page 189: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Glossar © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB06Glos.doc – 96260 Seite: 4

Begriff ErklärungVerbund 1. Zusammenfassung von Attributen (z. B. als Datensatz)

2. andere Bezeichnung für JoinVerbindungsschlüssel siehe FremdschlüsselView siehe SichtWertebereich (-vorrat) siehe Domäne

Page 190: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 02.02.98 18:50/02.02.98 18:50 Seite: 10-I

Datenbanken – Übungen Grundlagen

10 Übungen ....................................................................................................................10-1

10.1 Einführung .........................................................................................................10-1

10.1.1 Begriffe/Symbole .........................................................................................10-1

10.1.2 Normalformen ..............................................................................................10-4

10.2 Entwurf .............................................................................................................10-11

10.2.1 Fragen zu den Grundlagen........................................................................10-11

10.2.2 Erhebung der Aussagen............................................................................10-11

10.2.3 Erstellung konzeptueller Schemata...........................................................10-12

10.3 DB-Modellierung .............................................................................................10-12

10.3.2 Referentielle Integrität................................................................................10-17

10.3.3 Zeiterfassung für Projekte .........................................................................10-17

10.3.4 Reiseunternehmen ....................................................................................10-21

10.4 Leihbücherei ....................................................................................................10-21

10.5 DB-Aufbau .......................................................................................................10-24

10.5.1 Binäre Bäume ............................................................................................10-24

10.5.2 2. Übung ....................................................................................................10-26

10.5.3 B-Bäume....................................................................................................10-26

Page 191: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-1

10 Übungen

10.1 Einführung

10.1.1 Begriffe/Symbole

1. Erklären Sie den Begriff ISAM

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���3

2. Was bedeuten die Abkürzungen (nur Klartext)

ERM��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������

1

RDM��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������

1

3. Was war die Neuerung in der Datenhaltung, die mit dBase eingeführt wurde?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

4. Erklären Sie mit Ihren eigenen Worten

Entitätstyp��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

Entität��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

Relationstyp��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

Relation��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

Tupel��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

Attribut��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

1

5. Geben Sie Synonyme für folgende Begriffe an

Entitätstyp��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������

2

Entität��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������

2

Relationstyp��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������

2

Relation��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������

1

6. Ist eine Entität eine Relation oder nicht? Begründen Sie Ihre Antwort

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

Page 192: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-2 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������� 3

7. Erklären Sie die Bedeutung der im Chen-Diagramm verwendeten Symbole

student klasse

snr

sname

sgeschl

sgeb svord

knr kname

kanzahl

gseit

gehoertc mc

N 6;0

D

C 30

L

"M","W"D N 4;0 C 20

N 3;0

zu

student��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 3

c, mc ______________________________________________________

8. Erklären Sie den Begriff „Referentielle Integrität“. Benutzen Sie zur Erläuterung ein ge-eignetes Beispiel an.

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 4

9. Was versteht man unter Änderungsanomalie?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

gehört_zu

knr

N 6;2

Page 193: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-3

10. Was versteht man unter Löschanomalie?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

11. Erklären Sie den Unterschied zwischen einer sequentiellen und einer indexsequenti-ellen Datei.

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

12. Beschriften Sie die folgende Tabelle mit den Begriffen aus dem Relationalen Daten-bank Kalkül (Theorie der Relationalen Datenbanken)

13. Geben Sie Beispiele für folgende Begriffe an

Entitätstyp ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

Entität ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

Relationstyp ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

Relation ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������� 1

preisliste

Platine Aufgabe Preis

4711 Endstufe 17,15

5588 Flip-Flop 9,80

7289 Schmidt-

Trigger

7,60

8132 Verstärker 45,80

8312 Begrenzer 22,23

Page 194: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-4 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

14. Wie wird ein m:m Beziehungstyp des Entity-Relationship Modells in das RelationaleDatenmodell (also z. B. MS Access) übergeführt?

professoren themenlesen

Entitatstyp Beziehungstyp Entitätstyp

m m

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 4

10.1.2 Normalformen

Die vorgesehenen (Primär-)schlüssel sind in den Tabellenköpfen der verschiedenen Auf-gaben jeweils unterstrichen.

10.1.2.1 Stückliste

In welcher Normalform befindet sich (d. h. gegen welche andere Normalform verstößt) diefolgende Tabelle?

stücklisteplatine aufgabe transistor1 transistor2 transistor34711 Endstufe 01_215 01_312 02_22195588 Flip-Flop 01_122 01_2157289 Schmidt-Trigger 02_2219 01_1228132 Verstärker 01_2158312 Begrenzer 01_312 02_2219 03_123

erfüllte Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Verstoß gegen Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Wie kann die verletzte Normalform erfüllt werden? Zeichnen Sie die entstehenden neuenEntitätstypen und Beziehungstypen auf (Chen-Diagramm)

10.1.2.2 Auskunftssystem für Bücher

In welcher Normalform befindet sich (d. h. gegen welche andere Normalform verstößt) diefolgende Tabelle?

Page 195: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-5

buchbnr btitel bstichwörter4711 Turbo-Pascal Programmieren, Pascal, Algorit hmus5588 C++ Programm, C++, Algorithmen7289 Turbo V i sion Prog., Pascal, Grafik, SAA8132 Word Textverarbeitung, Windows8312 Visual C++ SAA, C, C++, Windows

erfüllte Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������������������������

Verstoß gegen Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������������������������

Beurteilen Sie die Stichwörter: ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������������

Wie kann die verletzte Normalform erfüllt werden?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

Zeichnen Sie die entstehenden neuen Entitätstypen und deren Beziehung(en) zueinanderauf (vereinfachtes Chen-Diagramm)

Legen Sie nun tatsächlich die Entitätstypen (Tabellen) an. Geben Sie den Tabellen in derobersten Zeile den von ihnen im Diagramm gewählten Namen. In die zweite Zeile schrei-ben Sie die Attributbezeichner. Tragen Sie dazu nur die bisher benutzten Attributnamenein. Erfinden Sie also nicht unnötig Felder (z. B. Verlag, Erscheinungsjahr usw.), auchwenn diese nach ihrer Meinung noch fehlen. Unterstreichen Sie die Schlüssel. Füllen Siedie Spalten mit den allen Daten der vorgegebenen Buchtabelle.

Kontrollieren Sie nun alle Daten. Welche Daten sind redundant?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

Treten bei Ihrem Entwurf noch Änderungsanomalien auf? Wenn ja, was kann man dage-gen tun?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

Page 196: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-6 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Erklären Sie die Suche nach dem Stichwort Pascal, d. h. in welcher Tabelle Sie zuerstsuchen, mit welchem Schlüssel Sie arbeiten, wie Sie den Buchtitel finden.

10.1.2.3 Lieferanten

In welcher Normalform befindet sich (d. h. gegen welche andere Normalform verstößt) diefolgende Tabelle?

Page 197: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-7

liefer

lnr status stadt tnr liefermenge

L1 20 Berlin T1 300L1 20 Berlin T2 200L1 20 Berlin T3 400L1 20 Berlin T4 200L1 20 Berlin T5 100L1 20 Berlin T6 100L2 10 Frankfurt T1 300L2 10 Frankfurt T2 400L3 10 Frankfurt T2 200L4 20 Berlin T2 200L4 20 Berlin T4 300L4 20 Berlin T5 400

erfüllte Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������

Verstoß gegen Normalform: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������

Wie kann die verletzte Normalform erfüllt werden? Zeichnen Sie die entstehenden neuenEntitätstypen und Beziehungstypen auf

10.1.2.4 Bücherei

Sie erhalten den Auftrag, ein neues DV-gestütztes Verwaltungssystem für eine Büchereizu entwerfen. Hierzu untersuchen Sie selbstverständlich das bisher angewandte Verfah-ren. Dabei stoßen Sie auf Karteikarten der nachfolgenden Form, auf den bisher die Aus-leihen vermerkt wurden

Name: Scheibl Geb.-Datum:1.1. Ort:: D 10318 Be r lin Tel: 50192775Vorname: Hans-Jürgen Kdn-Nr: 1001 Str: Treskowallee 8 Fax:50192781

Signatur Titel Auto-ren

Verlag Erschei-nungsort

Erscheinungs-datum

Preis Stich-wörter

Leih-datum

Rück-gabe

4711/3 Basic Ebel Sybex München 1991 86,50 Basic,Progr.

1.6.95

8592/2 C++ Pauly Springer

Hamburg 1993 157,20 C++,Progr.

9.6.95 9.8.95

1234/1 C++ EbelMaiZarndt

Sybex München 1992 59,30 C++,Algorithmen

4.7.95

2345/1 Word Ebel Sybex München 1994 86,50 Word,Text

7.7.95

Page 198: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-8 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Ein Buch existiert in mehreren Exemplaren. Die Exemplarnummer steht hinter Signatur.Ein Autor schreibt mehrere Bücher bzw. fungiert als Coautor. Ein Verlag verlegt mehrereBücher. Gemeinschaftsausgaben mit anderen Verlagen sollen nicht berücksichtigt wer-den. Neue Ausgaben eines Buches erhalten eine neue Signatur.

Entwickeln Sie ein ER-Modell zu dieser Karteikarte, das möglichst viele Normalformenerfüllt.

Legen Sie auch die Tabellen an, so daß alle Informationen der Karteikarte Platz finden.Tragen Sie die Werte aus der Karteikarte ein. Entwerfen Sie auch die Verbindungstabel-len der m:m-Beziehungen. Sollten Schlüssel fehlen, dann führen Sie solche ein. MachenSie dabei deutlich, welche Schlüssel zusammengehören. Geben Sie also z. B. einemVerlag nicht den Schlüssel 1001, weil dieser schon als Kundennummer benutzt wird.

Page 199: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-9

10.1.2.5 Entitätstyp klasse

Untersuchen Sie die folgenden Entitätstypen auf Verstöße gegen die Normalformtheorie(Primärschlüssel ist gegraut, wenn er festgelegt ist).

kname kanzahl kfbname kstgang95WD2TI 1 15 Informationstechnik/Elektronik Technische Informatik95WF6TI 1 28 Informationstechnik/Elektronik Technische Informatik95WA3MST1 12 Informationstechnik/Elektronik Mikrosystemtechnik95SF6NT 1 25 Informationstechnik/Elektronik Nachrichtentechnik95SD3WI 1 35 Wirtschaftsinformatik/... Wirtschaftinformatik95WD4WI 2 35 Wirtschaftsinformatik/... Wirtschaftinformatik

Feldname Bedeutungkname Name der Klasse (Zug)kanzahl Anzahl der Studenten in der Klassekfbname Name des Fachbereichskstgang Studiengang

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Page 200: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-10 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 1

Fehlerbeseitigung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 1

Im Attribut kname finden Sie in diesem Entwurf keinen Hinweis auf den Fachbereich.Unter welcher Voraussetzung können Sie auf die Speicherung des Fachbereiches in derTabelle verzichten?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Zeichnen Sie ein ER-Diagramm (in der Originalvariante nach Chen) auf, damit minde-stens die 3NF erfüllt wird. Vergessen Sie dabei keine der notwendigen Beschriftungen:

9Übertragen Sie die Informationen aus dem Entitätstypklasse in die von Ihnen entworfenen Entitätstypen.Zerlegen Sie eventuell vorhandene, zusammengesetzteAttribute. Markieren Sie die Primärschlüssel und zeichnenSie die Beziehungen zwischen den Primär- und den Ver-bindungsschlüsseln durch entsprechende Pfeile ein

Tabelle:kanzahl

15

28

12

25

35

35

Tabelle:stgang

Technische Informatik

Nachrichtentechnik

Mikrosystemtechnik

Wirtschaftsinformatik

zu c Bezieung

zu 1 Bezieung

zu mc Bezieung

zu m Bezieung

Page 201: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-11

Tabelle:fbname

Informationstechnik/Elektronik

Wirtschaftsinformatik/-ingenieurwesen/-kommunikation

18

10.2 Entwurf

10.2.1 Fragen zu den Grundlagen

1. Was bedeutet der Begriff „Sprachkritik“?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

2. Welche drei Aspekte hat ein Begriff (Wort) in unserer Sprache und was bedeuten sie?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

3. Was bedeuten die Begriffe Inklusion, Aggregation und Konnexion?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

10.2.2 Erhebung der Aussagen

1. Geben Sie einige Schlüsselwörter zur Erkennung von Inklusionen, Aggregationen undKonnexionen in einem Text an.

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

Page 202: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.2 Entwurf © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-12 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

10.2.3 Erstellung konzeptueller Schemata

1. Stellen Sie aufgrund der nachfolgenden Aussagen ein sprachkritisches Diagramm auf.

A0 MITGLIEDER der Raiffeisen e. G. können NATÜRLICHE PERSONEN oderGESELLSCHAFTEN sein.

A1 Zusammenschlüsse von Raiffeisen-MITGLIEDERN zur gemeinsamen Nut-zung von Geräten werden MASCHINENRINGE genannt.

A2 Nur natürliche Personen können sich zu MASCHINENRINGEN zusammen-schließen.

A3 Raiffeisen erkennt MASCHINENRINGE als Nutzer ihrer DIENSTLEISTUNGENnur an, wenn alle Ringmitglieder auch gleichzeitig MITGLIEDER von Raiffei-sen sind.

A4 MITGLIEDER nutzen Dienstleistungen unter einem von Raiffeisen vergebenenNUTZUNGSRECHT.

10.3 DB-Modellierung

10.3.1.1 Hochschulbeispiel

Setzen Sie das Hochschulbeispiel (Studenten, Klassen, Themen, Professoren) aus demManuskript in ein vollständiges Chen-Diagramm um

Page 203: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-13

Überlegen Sie, wie Sie die Beziehungen datenbanktechnisch realisieren können. WägenSie dabei Vor- und Nachteile verschiedener Alternativen ab.

Lösungsmöglichkeiten für 1:1, 1:c, c:c

Page 204: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-14 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Lösungsmöglichkeiten für 1:m, c:m , 1:mc, , c:mc

Page 205: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-15

Lösungsmöglichkeiten für m:n, m:mc, mc:m, mc:mc

10.3.1.2 Prüfung des Entwurfs

Realisieren wir das im nebenstehen-den ER-Diagramm dargestellte Be-ziehungsmodell, dann ergibt sich beider Abfrage

Welchen Professor hört derStudent XYZ?

ein auf den ersten Blick überraschender Effekt.

Erklären Sie den Effekt, wenn folgende Entitätstypen vorhanden sind

student klasse hoert themasnr sname sknr knr kname hknr htnr tnr tname4711 Müller 17 17 D6TI1 17 15 15 SWE4712 Mayer 17 17 16 16 Datenbanken

usw. usw. usw. usw.

liest professorltnr lpnr pnr pname15 1130 1130 Scheibl15 1140 1140 Schebesta16 1130 1150 Metzler16 1150

usw. usw.

Geben Sie in der nächsten Tabelle alle Zeilen des Abfrageergebnisses aus.

st udent kl as se

i st_ Kla sse nsp r ec her

gehoert _zuhoer t

pr of ess o t hemal i es t

Page 206: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-16 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

snr sname knr tnr tname pnr pname

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

Auf welchen „Entwurfsfehler“ ist dieser Effekt zurückzuführen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

Ergänzen Sie jetzt das Diagramm, so daß ein „echter“ Stundenplan für jeden Studenteneiner Klasse entsteht.

Ändern Sie die Beziehungsnamengeeignet um, damit die Art der Bezie-hung deutlicher wird.

��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� �������������������������������������������

Warum sind die vorhandenen Bezie-hungen trotzdem interessant und sollten erhalten bleiben?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

student klasse

ist_klassensprecher

gehoert_zu

professor thema

Page 207: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-17

10.3.2 Referentielle Integrität

Was müssen Sie bei der Bearbeitung zweier über eine Relation verknüpfte Datei beach-ten

1. beim Neueinfügen in student? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

2. beim Löschen in student? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

3. beim Ändern in student? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

4. beim Neueinfügen in klasse? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

5. beim Löschen in klasse? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

6. beim Ändern in klasse? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

10.3.3 Zeiterfassung für Projekte

Ihr Betrieb möchte eine einfache Betriebsdatenerfassung realisieren. Dadurch soll zu je-dem Projekt jederzeit der bereits geleistete Aufwand feststellbar sein. Zu diesem Zweckschreiben alle Mitarbeiter ihre Zeiten, die sie für ein Projekt leisten, auf einer Karteikarteauf. Der Einfachheit halber handelt es sich bei der kleinsten Einheit um einen Arbeitstag.Sie benutzen die folgenden drei Karteikarten (Mitarbeiter Ducke, Scheibl, Sengle) alsAusgangsbasis Ihres Entwurfs

student klasse

ist_klassensprecher

gehoert_zu

Page 208: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-18 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

DuckeProjekt von bis Art der TätigkeitVisual Basic 11.04.1995 23.04.1995 AnwendungsprogrammierungVisual Basic 24.04.1995 29.04.1995 Systemprogrammierung

ScheiblProjekt von bis Art der TätigkeitDelphi 01.01.1995 07.01.1995 LeitungDelphi 08.01.1995 10.01.1995 AnalyseDelphi 11.01.1995 17.01.1995 AnwendungsprogrammierungVisual C++ 11.06.1995 22.06.1995 Leitung

SengleProjekt von bis Art der TätigkeitDelphi 11.01.1995 31.01.1995 Analyse

Die Firma will aufgrund der Art der Tätigkeit gleich eine finanzielle Bewertung der bisheraufgelaufen Projektkosten durchführen. Berücksichtigen Sie dieses in Ihrem Entwurf.

Entwerfen Sie ein Chen-Diagramm für eine geeignete Datenbank.

20Entwerfen Sie die einzelnen Tabellen, wobei Sie nur die in diesem Beispiel notwendigenAttribute aufnehmen. So ist das Alter eines Mitarbeiters zwar wichtig, hier aber irrelevant.Achten Sie jedoch darauf, daß die Daten ausreichen, die nachfolgenden Prüfungen zuerfüllen.

Schreiben Sie in die oberste Zeile den Namen der Tabelle, so wie Sie ihn im Chen Diagramm benutzt ha-ben. In die dick umrahmte Zeile darunter tragen Sie die Attributbezeichner ein. Darunter tragen Sie die Da-ten aus den obigen Karteikarten ein.Achtung! Es sind mehr Zeilen und Spalten als nötig vorhanden

6

Page 209: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-19

6

12

6

6

Wie können Sie verhindern, daß ein Mitarbeiter Zeiten für ein Projekt einträgt, für das ernicht vorgesehen ist?

Page 210: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-20 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

4

Welche Prüfungen müssen Sie für die Zeitangaben von bis durchführen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Wie verhindern Sie, daß ein Mitarbeiter seine Arbeitszeit mehrfach vergibt, d. h. die glei-che Zeit auf mehreren Projekten verbucht?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Wie verhindern Sie, daß ein Mitarbeiter bereits Zeiten auf ein Projekt einträgt, obwohl die-ses noch nicht begonnen hat? Ergänzen Sie ggf. Ihre Tabellen um geeignete Felder!

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Wie verhindern Sie, daß ein Mitarbeiter auf ein bereits abgeschlossenes (abgerechnetes)Projekt Zeiten einträgt? Ergänzen Sie ggf. Ihre Tabellen um geeignete Felder!

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Oft wird man das Ende eines Projektes noch nicht festlegen wollen. Wie realisieren Siediesen Wunsch in ihrem Datenbanksystem? Wie wirkt sich dieser Wunsch auf die obigenPrüfungen aus?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Wie verarbeiten Sie Urlaub und Krankheit?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

2

Wie überprüfen Sie die Vollständigkeit der Einträge für einen Mitarbeiter, d. h. wie findenSie gewollte oder ungewollte Lücken in seinen Einträgen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

1

Page 211: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-21

Wie können Sie durch Zuordnung einer Tätigkeitsart die aktuell aufgelaufenen Kosteneines Projektes ermitteln. Stellen Sie sich dazu vor, daß Sie pro Tag und Tätigkeit einenTagessatz festlegen.

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

1

10.3.4 Reiseunternehmen

Entwerfen Sie ein Relationenmodell für ein Reiseunternehmen.

Gehen Sie hierbei von folgender Kurzbeschreibung aus:

Das Reisebüro hat viele Kunden. Diese buchen eine oder mehrere Reisen. Pro Reise sind mehrere Plätzevorhanden, so daß eine Reise von vielen Kunden gebucht werden kann. Die Reisen werden von verschie-denen Veranstaltern angeboten, aber jede Reise nur von einem einzigen. I. a. erfolgt die Anreise durch einvom Veranstalter unabhängigen Transportunternehmen. Eine Reise geht zu einem bestimmten Reiseziel.Dieses Ziel kann zu unterschiedlichen Zeiten (und zu unterschiedlichen Preisen) von einer Reise angesteu-ert werden. Ein Reiseziel besteht aus einem oder mehreren Etappen. Eine Etappe kann dabei aber in meh-reren Reisezielen enthalten sein.

Der Kunde führt mehrere Zahlungen (i. a. eine Anzahlung und eine Restzahlung) auf seine Buchung durch.Manchmal werden aber auch weitere Zwischenzahlungen vereinbart, so daß die Anzahl nicht feststeht.

Für Werbeaktionen werden den Kunden Interessengebiete zugeordnet. Hierbei kann es sich pro Kunde ummehrere Gebiete handeln.

10.4 Leihbücherei

Im Buch

Said Baloui Microsoft ACCESS – das Kompendium, Haar bei München: Markt undTechnik

finden Sie folgenden Entwurf einer Leihbücherei (S. 133 ff sowie Demodiskette):

Tabelle: LeihbüchereiName Str Ort PLZ Tel Leihbeginn Leihende Titel Autor ISBN Lag St

Maier Stern-5 Mü 8000 48363 01.04.93 01.05.93 XYZ Maier 398-587 A3 2Huber Ida-23 Haar 8013 78493 16.04.93 16.05.93 ABC Schmid 484-569 B5 4Müller Ost-7 Mü 8000 28243 10.04.93 10.05.93 XYZ Maier 398-587 A3 2

als bewußt schlechtes Beispiel. Hieraus werden folgende zwei Tabellen abgeleitet:

Tabelle: BücherISBN Titel Autor Lager Stck

484-569 ABC Schmid B5 4398-587 XYZ Maier A3 2

Page 212: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-22 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Tabelle: EntleiheISBN Name Str Ort PLZ Tel Leihbeginn Leihende

398-587 Maier Stern-5 Mü 8000 48363 01.04.1993 01.05.1993484-569 Huber Ida-23 Haar 8013 78493 16.04.1993 16.05.1993398-587 Müller Ost-7 Mü 8000 28243 10.04.1993 10.05.1993

Beide Tabellen sind über die ISBN miteinander verknüpft (was nach Definition derSchlüssel eigentlich schon falsch ist). Der Autor weist noch auf weitere Entwurfsfehler hin,korrigiert diese aber im Buch nicht. Welche Fehler verstecken sich noch in den beidenTabellen? Denken Sie dabei an unsere Hochschulbibliothek. Diese besteht aus mehrerenAußenstellen, die wiederum mehreren offenen Lesesälen, geschlossenen Magazinenusw. haben. Stellen Sie sich vor, daß sich von den vier Büchern ABC ein Exemplar imLesesaal der Treskowallee (nicht ausleihbar), zwei ausleihbar im Magazin der Tresko-wallee und ein Exemplar im Lesesaal der AdK (nicht ausleihbar) befinden. Was müssenSie tun, um dies zu berücksichtigen?

Tabelle: Bücher

Welche Attribute sind in dieser Tabelle falsch plaziert?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Begründen Sie diese Antwort

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Die Beispiele des Buches wurden mit Access 1.0 erstellt, das nicht automatisch einenPrimärschlüssel verlangt. In der Tabelle Bücher finden wir die einzige Festlegung aufTitel. Ist das nach Ihrer Meinung sinnvoll?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Entwerfen Sie eine Struktur (Chen-Diagramm), die das oben beschriebene Problem löst.(Hinweis: Vergrößern Sie nicht unnötig die Datenmenge, z. B. ist der Verlag nicht im Bei-spiel zu finden. Ein Autor schreibt aber mehrere Bücher, ein Buch kann mehrere Autorenhaben.):

13

Tabelle: Entleihe

Im Entwurf dieser Tabelle ist kein Primärschlüssel zu finden. Welche Attribute müßten esin diese Tabelle ohne Veränderungen (d. h. ohne zusätzliche Attribute usw.) sein?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

Page 213: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-23

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��� 2

Gegen welche Normalform verstößt die Tabelle nach Einführung des Primärschlüsselsimmer noch (Begründung)?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��� 2

Entwerfen sie eine Struktur (Chen-Diagramm), die das Problem löst (vernachlässigen Siewie üblich das Postleitzahlproblem)! Es genügt, in dieses Diagramm die Exemplare ausdem letzten Diagramm aufzunehmen. Alle anderen Entitätstypen können entfallen.

Überlegen Sie dabei folgende Alternativen:

1. Mit der Rückgabe wird der Entleihsatz gelöscht. Eine Historie (Feststellung des Vorbe-nutzers ist dann nicht mehr möglich).

2. Mit der Rückgabe wird der Entleihsatz nicht gelöscht. Das Buch wird wieder ausleihbar.Eine Rückverfolgung ist möglich.

Zeichnen Sie die erste Alternative auf.

9

Zeichnen Sie die zweite Alternative auf und begründen Sie die Änderungen ausführlich!

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��� 4

Zeichnen Sie die notwendigen Tabellen für die Alternative 1 (Löschen des Entleihsatzes)auf. Geben Sie den Spalten die passenden Namen. Übertragen Sie die Daten der TabelleEntleihe in die neuen Tabellen. Realisieren Sie dabei die konkrete Ausleihe einzelnerExemplare.

Markieren Sie unbedingt die Primärschlüssel jeder Tabelle!

Tabelle:

Page 214: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.3 DB-Modellierung © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-24 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Tabelle:

Tabelle: Tabelle:

MagazinLesesaalLesesaal

Tabelle:

Tabelle: Tabelle:

18Welche Tabelle ändert sich bei Alternative 2 (nicht löschen) (Begründung)?

Tabelle:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

10.5 DB-Aufbau

10.5.1 Binäre Bäume

10.5.1.1 1. Übung

In einem binären Baum mit Rücksprungankern liegt folgende Situation vor

Verlängerung/Neuausleihe

Page 215: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-25

Löschen Sienun den Ein-trag L. Wiesieht derBaum und dieDatei nachdieser Ände-rung aus?.

Hinweis: Der Eintrag Erdesatz dient nur zu Ihrer Unterstützung. Dieser Text wirdnormalerweise nicht in der Datei existieren.

4, 4

Wie sieht die Situation nach Eintrag des Schlüssel E aus?

V

L

B

A F

N

M P

1 10 2 Erdesatz

2 3 0 V

3 4 7 L

4 5 6 B

5 0 -4 A

6 -4 -3 F

7 8 9 N

8 -3 -7 M

9 -7 -2 P

1 Erdesatz

23456789

Nr. frei Wurzel

1 Erdessatz23456789

V

B

A F

N

M P

E

Page 216: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.5 DB-Aufbau © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-26 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Erklären Sie, warum z. B. der Zeiger 4 dreimal, der Zeiger 8 aber nur einmal vor-kommt!

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Wieviele Zeiger dürfen in einem Baum mit Rücksprungankern gleich 0 existieren?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

10.5.2 2. Übung

In einem binären Baum mit Rücksprungankern liegt folgende Situation vor

Löschen Sienun den Ein-trag K. Wiesieht derBaum und dieDatei nachdieser Ände-rung aus?.

Hinweis: Der Eintrag Erdesatz dient nur der Erläuterung. Der Rest dieses Satzesist unerheblich

4, 4

10.5.3 B-Bäume

Erläutern Sie, warum B-Bäume immer ausgeglichen sind.

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

D

K

F

E G

R

Q T

1 10 2 Erdesatz

2 0 3 D

3 6 4 K

4 9 5 R

5 -4 0 T

6 7 8 F

7 -2 -6 E

8 -6 -3 G

9 -3 -4 Q

1 Erdesatz

23456789

Page 217: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-27

Beweisen Sie IhreAussagen, indemSie im folgendenBaum den Schlüs-sel 47 neu ein-geben.

Alternative: 44

Wie sieht der Baum nach der Eingabe aus?

Löschen Sie nunim nebenstehen-den Baum denEintrag 22.

10

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Page 218: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.5 DB-Aufbau © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-28 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Löschen Sie nun imnebenstehendenBaum den Eintrag35.

10

Löschen Sie nunaus dem neben-stehenden Baumden Schlüssel 25d. h. die Wurzel

mit folgendem Ergebnis

������ ���� �� �

02 05

25

10 20 30 40

13 14 22 24 26 27 32 35 41 42

1

2

4 5 6 7 8 9

3

1

2

4 5 6 7 8 9

3

02 05 13 14 22 24 26 27 32 40 41 42

10 20 25 30

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Page 219: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Grundlagen © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DB10Übun.doc – 96260 Seite: 10-29

Löschen Sie nunzum Abschluß ausnebenstehendemBaum den Schlüs-sel 26.

mit dem Ergebnis

8

In einen existenten B-Baum wird die Zahl 35 eingegeben. Erklären Sie den Einfügevor-gang.

02 05

26

10 20 30 40

13 14 22 24 27 28 32 35 41 42

1

2

4 5 6 7 8 9

3

02 05 0709

49

10 20 3040

13 14 1516

22 24 2627

50 60 7080

51 53 5557

62 64 6567

71 72 7377

32 33 3738

44 45 4647

82 83 8487

91 92 9499

Page 220: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 10.5 DB-Aufbau © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 10-30 D:\Eigene\Doku\DB\DB10Übun.doc – 96260

Page 221: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 12.04.97 11:48/12.04.97 11:48 Seite: 11-I

Untersuchung veröffentlichter Beispiele

11 Untersuchung veröffentlichter Beispiele ...............................................................11-1

11.1 dBase Beispiel: Möbelhaus .............................................................................11-1

11.1.1 Artikel ...........................................................................................................11-1

11.1.2 Aufträge .......................................................................................................11-3

11.1.3 Kontenplan...................................................................................................11-4

11.1.4 Personal.......................................................................................................11-5

11.1.5 Tätigkeiten/Positionen .................................................................................11-6

11.2 Access Beispiel: Projektverwaltung ..............................................................11-6

11.2.1 Projekte........................................................................................................11-7

11.2.2 Adressen......................................................................................................11-8

11.2.3 Mitarbeiter im Projekt...................................................................................11-9

11.3 Access Beispiel: Reiseunternehmen .............................................................11-9

11.3.1Kundenstamm.............................................................................................11-10

11.3.2 Reiseziele ..................................................................................................11-11

11.4 Access Beispiel: Turnierverwaltung ............................................................11-11

11.4.1 Turniere .....................................................................................................11-12

11.5 Archivsysteme .................................................................................................11-13

11.5.1 Videoarchiv ................................................................................................11-13

11.5.2 CD-Archiv...................................................................................................11-13

Page 222: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-1

11 Untersuchung veröffentlichter Beispiele

11.1 dBase Beispiel: Möbelhaus

11.1.1 Artikel

Um die Bildschirmausdrucke zu verdeutlichen, hier die Tabelle noch einmal in Textdar-stellung

Page 223: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.1 dBase Beispiel: Möbelhaus Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-2 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

Anummer Aname1 Aname2 Aname3100001 Schreibtischleuchte "Amadeus" GK 100 schwarz GK 1212100002 Schreibtischleuchte "Rotor" GK 2 blau/schwarz100003 Schreibtischleuchte "Executiv" GF 120 weiß Sondermodell Designer Piet Scho l s100004 Lizio 230 schwarz100005 Lizio 240 weiß100006 Schreibtischleuchte "Lichtkegel" GZ 34 schwarz100007 Schreibtischleuchte "Wunderbar" GZ 23 blau/schwarz100008 Schreibtischleuchte "Apollo" GZ 232 blau/grau Sondermodell Designer Peter Frei100009 Deckenleuchte "ALTAB" WZ 44 schwarz100010 Deckenleuchte "Watt 5000" EA 122 grau900001 Standfuß Lizio Zubehör zu 100901 schwarz100143 Stehlampe "Sonnenflut" blau100144 Stehlampe "Red Heat" schwarz/weiß100411 Stehlampe "Blue Heat" GA 3432 schwarz/braun101244 Bodenlampe "Zwerg 400" HH 3454 blau/grau/gelb Designermodell Frank Möller102777 Bodenlampe "Zwerg 500" TT 52 braun/schwarz109812 Taschenlampe Profi 9923 blau109888 Taschenlampe Profi FF 23 grün109239 Taschenlampe Junior GT 44 grün

Gruppe Ek Preis Bestand Mind_bestTischleuchten 400,00 899.00 10 10Tischleuchten 99,00 232.00 2 10Deckenleuchten 910,00 1900.00 14 10Tischleuchten 230,00 499.00156 50Tischleuchten 225,00 499.00 32 10Tischleuchten 399,00 899.00 134 50Tischleuchten 110,00 232.00 10 10Tischleuchten 456,00 999.00 22 10Deckenleuchten 234,00 545.00 6 10Deckenleuchten 44,00 78.00 50 50Zubehör 89,00 199.00 4 10Stehlampen 210,00 478.00 16 10Stehlampen 980,00 1800.00 5 10Stehlampen 230,00 490.00 10 10Bodenlampen 2900,00 5000.00 8 10Bodenlampen 1250,00 2010.00 34 10Taschenlampen 15,00 39.00 458 50Taschenlampen 45,00 99.00 75 50Taschenlampen 30,00 66.50128 50

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Welche Anomalien können auftreten?��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Beurteilen Sie die Feldinhalte:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Page 224: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-3

11.1.2 Aufträge

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Beurteilen Sie die Feldinhalte:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Page 225: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.1 dBase Beispiel: Möbelhaus Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-4 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

11.1.3 Kontenplan

Bei diesem Beispiel ist die Tabelle der Felder nicht ganz vollständig. Das Wesentliche istaber zu erkennen.

Page 226: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-5

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Beurteilen Sie die Feldinhalte:��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

11.1.4 Personal

Beurteilen Sie folgenden Entwurf

Hierzu ein Teil der Attribute in tabellarischer Darstellung

Page 227: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.1 dBase Beispiel: Möbelhaus Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-6 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Beurteilen Sie die gewählten Felder (zu viele?, zu wenige?): ��������������������������������������������������������������� �����������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

11.1.5 Tätigkeiten/Positionen

Was halten Sie davon, wenndas System noch folgende Ta-belle enthält?

Vergleichen Sie diese Tabellemit den Einträgen in der vorhe-rigen Tabelle.

11.2 Access Beispiel: Projektverwaltung

In einem Lehrbuch finden Sie folgenden Entwurf für eine Projektverwaltung. UntersuchenSie diese kritisch.

Page 228: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-7

11.2.1 Projekte

Verbesseren Sie den Entwurf, indem Sie Ihn auf eine geeignete Normalform bringen.Streichen Sie hierzu die Felder und tragen diese in weitere Tabelle(n) nach links oderrechts ein.

2,2,2,4Wie heißt in SQL dieser Vorgang? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� � 2

Plan

Plan-Nr.FaktorBezeichnungProjekt-Nr

BankBLZBank

OrtPLZOrtsname

������ � � ��� �������������� � ���������! ��"�#�$ � �%'&(�) �� *,+-�.�/�0 132'4(57698:0 ;�0 <=-�5!0 >?0 <�@�0 5!0 ACB�DE.�0 F�0 G�A�HI.J8:0 ;K�L�M NPOCM Q?M R,M Q?STM U!STM RWV�X Y�L[Z�\�M]�Z�M Q?S_^�`�\�M R3ab(c�M N�M N�STM U!M R�Q?M R,M R,STM Uedf\�`�OPZ�STM U(^�U!L�Mg S�K�M h7Si�j k�j l?m�nfj o,j k�j p�qTj l!j r?qTj l!j s�t�qTj l!i�qTj ovu

AnredeAnredeAnredetext

Page 229: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.2 Access Beispiel: Projektverwaltung Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-8 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

11.2.2 Adressen

Das Eingabeformular für die linke Tabelle Adressen sieht folgendermaßen aus

Mit Ihren Kenntnissen zu den einzelnen Felder können Sie folgende Fragen beantworten:

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 2

Beurteilen Sie die gewählten Felder (zu viele?, zu wenige?): ��������������������������������������������������������������� ��������������������������������� 1

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������

__________________________________________________________��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������� 2

Page 230: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-9

11.2.3 Mitarbeiter im Projekt

Sie rufen eines der Formulare auf und sehen folgendes Bild. Was fällt Ihnen auf? Verset-zen Sie sich in einen Benutzer. Bei welchen Daten hat er Schwierigkeiten?

Antwort: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ������������������� 3��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �������������������

11.3 Access Beispiel: Reiseunternehmen

Was halten Sie von folgendem Entwurf für ein Reiseunternehmen?

Page 231: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.3 Access Beispiel: Reiseunternehmen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-10 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

11.3.1 Kundenstamm

mit dem zugehörigen Formular

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Begründung: �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������������������������������� 1

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ����������������������������������� 3

Page 232: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-11

11.3.2 Reiseziele

Sie untersuchen dieses Programm weiter und finden folgende Tabelle. Was halten Siedavon?

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������

11.4 Access Beispiel: Turnierverwaltung

In einem Programmentwurf für eine Turnierverwaltung finden Sie folgende Tabellen. Un-tersuchen Sie diese kritisch!

Page 233: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.4 Access Beispiel: Turnierverwaltung Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-12 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

11.4.1 Turniere

mit vorstehenden, eindrucksvollen Formular. Trotzdem haben Sie einige Bedenken. Wel-che?

Page 234: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Untersuchung veröffentlichter Beispiele Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB11Übun.doc – 97102 Seite: 11-13

Erfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Nichterfüllte NF: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Begründung: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������������������������������

Verbesserungsvorschlag: ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������������

11.5 Archivsysteme

11.5.1 Videoarchiv

Ganz zu Anfang des Manuskriptes finden Sie einen ersten naiven Entwurf eines Archiv-systems mit nur einer Tabelle. Wie würden Ihr konzeptueller Entwurf eines Archivsystemsaussehen?

11.5.2 CD-Archiv

Nach einigen Tagen Training kommt der Diplomand wieder mit der Bitte, den nachfolgen-den Entwurf für ein CD-Archiv zu überprüfen.

Um die GEMA-Gebührenabrechnen zu können, mußdie Spielzeit der verschie-denen Musikstücke erfaßtwerden. Aufgrund der Er-klärungen weiß der Diplo-mand, daß er Entitätstypenauffinden muß, um diese ingeeigneter Weise unterein-ander in Verbindung zusetzen. Dieses hat er dannauch ausführlich gemacht:

Stellen Sie fest, welcheSchwächen bzw. Fehler derEntwurf hat. UntersuchenSie hierbei besonders, was an dem Vorschlag ganz und gar nicht funktioniert.

Bild 11.5-1: Entwurf einer GEMA-Abrechnung

Page 235: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 11.4 Access Beispiel: Turnierverwaltung Prof. Dr.-Ing. H.-J-Scheibl

Seite: 11-14 D:\Eigene\Doku\DB\DB11Übun.doc – 97102

Entwickeln Sie nun ein eigenes Modell. Tip: Trennen Sie das CD-Archiv erst einmal von der GEMA-Abrechnung ab. Das

Archiv muß auch allein funktionieren. Die GEMA-Abrechnung ist nur einesinnvolle Ergänzung.

Simulieren Sie einen Sendetag und versuchen Sie die Daten in Gedanken zu erfassenund am Ende des Tages abzurechnen.

Page 236: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 02.02.98 18:53/02.02.98 18:53 Seite: 12-I

Datenbanken – Übungen Realisation

12 Realisation ................................................................................................................12-1

12.1 Binärer Baum in Visual Basic ..........................................................................12-1

12.1.1 Programmierung ..........................................................................................12-1

12.1.1.1 Erweiterungsmöglichkeiten ................................................................12-12

12.1.1.2 Realisation..........................................................................................12-12

12.1.1.3 Zentrale Bibliothek..............................................................................12-13

12.1.1.4 Formular- und Ablaufentwurf..............................................................12-14

12.1.1.5 Globale Deklarationen........................................................................12-15

12.1.1.6 Programmierung.................................................................................12-17

12.1.1.7 Fehlersuche........................................................................................12-31

12.1.2 Kritik/Verbesserungsvorschläge ................................................................12-33

12.2 Untersuchung einer xBase-Indexdatei .........................................................12-33

12.2.1 Struktur von Bäumen.................................................................................12-33

12.2.1.1 Binäre Bäume.....................................................................................12-34

12.2.1.2 B-Bäume.............................................................................................12-34

12.2.2 Aufbau einer Indexdatei der xBase-Klasse ...............................................12-38

Page 237: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-1

12 Realisation

12.1 Binärer Baum in Visual Basic

12.1.1 Programmierung

Schreiben Sie ein Programm zur Verwaltung binärer Bäume mit beidseitigen Rücksprun-gankern.

Wir entscheiden uns für die Programmiersprache Visual Basic, da diese die optimaleOberfläche für unsere Zwecke anbietet.

Wir gehen nach einem bewährten 10 Punkte Programm vor. Ausgehend von den Datenwird der Algorithmus abgeleitet

1. Daten

Da ein Dialogprogramm entworfen werden soll, ist eine strenge Trennung zwischen Ein-und Ausgabe nicht mehr nötig. Die gleiche Bildschirmmaske dient sowohl zur Ein- wieauch zur Ausgabe.

Wir legen also Formular an, in dem wir die wesentlichen Felder und alle Funktionen alsSchaltflächen vorbereiten.

Die Funktion DEBUG ist zu Demonstrationszwecken hinzugefügt, um die Wirkungsweiseder Baumverwaltung zu zeigen. Sie ist außerordentlich hilfreich bei der Programment-wicklung, kann aber in einem Benutzerprogramm entfallen. Sie listet den Inhalt der Dateiauf. Auch über die Nützlichkeit der Initialisierungsroutine im Anwenderbetrieb läßt sichstreiten. Beim Testen ist aber das Rücksetzen einer zerstörten Datei sehr hilfreich.

Nun müssen wir noch die Datenstruktur festlegen. Hier können wir durchaus einen lega-len Trick anwenden, um das Programm möglichst universell verwenden zu können. Wieaus der Theorie wissen, benötigen wir zwei verschiedene Satztypen in unserer Datei,einmal die Erde und zum zweiten die eigentlichen Datensätze.

Zur Verwaltung selbst ist der Inhalt der Datensätze bis auf den Schlüssel uninteressant.Der Benutzer dagegen wird sich kaum um die Verwaltungsinformationen kümmern wol-len.

In Visual Basic müssen alle Datensätze gleich lang sein. Über die Satzlänge berechnetnämlich Visual Basic die physikalische Position des Satzes, indem es die Länge mit derSatznummer multipliziert. Dies ist z. B. der Grund dafür, daß wir nicht einfach beliebigeKundennummern als Satznummern nehmen können. Begännen wir einfach mit einerKundennummer 10.000, dann blieben die ersten 9.999 Sätze unbelegt, verbrauchtenaber durchaus den entsprechenden Speicherplatz.

Wenn wir schon zwei Masken benötigen, dann können wir auch gleich eine weiter benut-zerspezifische Maske auf den Datensatz legen. Somit legen wir drei Datensatztypen fest

Page 238: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-2 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Type erdetyp zeigerneu As Integer zeigerwurzel As Integer zeigergelöscht As IntegerEnd Typ

Type satztyp zeigerlinks As Integer zeigerrechts As Integer schlüssel As String * SLÄNGE inhalt As String * ILÄNGEEnd Type

Type inhalttyp verwaltung As String * 4 name As String * SLÄNGE vname As String * 10 straße As String * 20 lk As String * 3 plz As String * 5 ort As String * 20End Type

Die Grundidee dieser Mehrfachmaske besteht darin, die Verarbeitung unabhängig vonder individuellen Dateistruktur zu machen. Statt einer Kundendatei möchten Sie vielleichteine Produktdatei, eine Literaturdatei usw. bearbeiten. Daher sind so weit wie möglich dieindividuellen Strukturen von den allgemeinen getrennt worden.

Die Typbeschreibungen und ihre Instantiierungen sind offensichtlich unterschiedlich lang.Dies ist jedoch unerheblich. Wir können uns die Instanzen der Satztypen einfach als Text-puffer vorstellen, in die die Datensätze hinein und heraus geschoben werden. Dabei wer-den überschüssige Zeichen einfach abgeschnitten bzw. fehlende Zeichen mit Leerstellenergänzt. Die Erde muß also nicht an die Gesamtlänge angepaßt werden. Den Verwal-tungssatz müssen wir aber auf die Gesamtlänge des Inhaltssatzes bringen, da wir diesenschreiben.

Wir sollten aber immer daran denken, daß es sich um unterschiedliche Datenbereichehandelt. D. h. wir müssen den Datensatz in beide Puffer einlesen, da eine direkte Zuwei-sung von Visual Basic abgelehnt wird. Dies ist jedoch weitgehend zeitlich unkritisch, dader Dateizugriff über den DOS-Puffer erfolgt, so daß kein Plattenzugriff notwendig ist.

2. Namensvergabe

Wir verwenden folgende Variablen:

fnr Fehlernummerinhalt Inhalt des aktuellen Datensatzesk0 Hilfszeiger auf einen Knotenknv(0..1) Knotenvater (0) links

(1) rechtsknz(0..3) Knotenzeiger (0) links

(1) rechts(2) links Zwischenspeicher(3) rechts Zwischenspeicher

kv Arbeitszeiger Vaterkx Arbeitszeiger auf freien Datensatz

Page 239: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-3

ky Arbeitszeiger auf freien Datensatzkz Arbeitszeiger auf den aktuellen Knoten (aktiver Datensatz)schlüssel Schlüssel des aktuellen Datensatzesz Richtung Sohn nach =0 links, =1 rechts

3. Datenstrukturen

Die grundlegenden Datenstrukturen wurden bereits beschrieben, so daß sie hier nichtnoch einmal dargelegt werden sollen.

Im Programm verwenden wir neben einfachen Variablen (Skalaren) auch Felder. DieKnotenzeiger knv , knz sind als Feld mit mindestens zwei Elementen angelegt. Hier-durch ist es möglich, durch den Index 0 und 1 den linken oder rechten Teilbaum anzu-steuern. Dies erspart uns umfangreiche logische Konstruktionen.

4. Verarbeitungsregeln/Bedienungsfreundlichkeit

Die Funktionen sind bereits durch das Menü festgelegt. Der Gesamtablauf steht abernoch nicht fest:

1. Aufruf des Programms mit Positionierung auf den ersten Datensatz;2. Wiederholtes Anfordern der verschiedenen jeweils gültigen Funktionen. Fehler

beenden nur die Funktion, nicht jedoch das Programm;3. Beenden des Programms mit automatischem Schließen der bearbeiteten Datei.

Auch wenn Visual Basic bereits eine ausgefeilte Eingabetechnik anbietet, so sind docheinige Ergänzungen wünschenswert. Dies sind

1. Beschränkung der Eingabefelder auf die Länge der Datensatzfelder. Das auto-

matische Abschneiden kann hier nicht als Lösung angesehen werden. Wir reali-sieren diese Forderung über eine Windows-API-Funktion (Application Program-ming Interface). Hierbei benötigen wir zwei Funktionen SendMessage undGetFocus . Letzteren setzen wir dazu ein, den Handle des Steuerelementes zubestimmen, da Visual Basic nur den Handle des Formulars liefert. Wir setzen al-so mit . SetFocus den Eingabefokus auf das gewünschte Eingabeelementund rufen dann SendMessage auf. Diese versorgen wir mit der NachrichtEM_LIMITTEXT und der Länge des Dateifeldes.

2. Auch wenn es in vielen Visual-Basic-Lehrbüchern anders steht, so ist doch dieZeilenschaltung für den Benutzer eine besondere Taste. Der Cursor sollte nacheiner Zeilenschaltung auf das nächste Feld springen.

3. Die individuellen Eingabefelder dürfen z. B. nur mit Ganzzahlen, großen Zei-chen, große Buchstaben, positive Zahlen usw. beschickt werden. Hierzu könnenwir eine ganze Sammlung individueller Eingabefunktionen programmieren. Da-mit diese beliebig oft wiederverwendbar sind, fassen wir sie in einer Bibliothekeingabe.bas zusammen.

Der Phantasie für weitere, nützliche Funktionen ist natürlich keine Grenze gesetzt.

Page 240: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-4 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

5. EVA-Diagramm

Das EVA-Diagramm (Eingabe Verarbeitung Ausgabe) wird nun schon etwas komplizier-ter. Wir verknüpfen es noch mit einem Hierarchiediagramm und haben damit einen voll-ständigen HIPO-Entwurf (Hierarchy plus Input-Process-Output)

6. Prüfung

Die Prüfung beginnt immer bei der Ausgabe. Alle Ausgabedaten müssen auf Eingabeda-ten oder Algorithmus-immantente Daten zurückgeführt werden.

7. Plausibilitäten

Für die Schlüssel (Namen) gibt es keine Einschränkungen, da der Rechner nicht in derLage ist, eine Semantikprüfung (Bedeutungsprüfung) durchzuführen.

Die Plausibilitätsregeln reduzieren sich daher auf:

die internen Plausibilitäten der Felder:

1. Der Schlüssel darf nicht leer sein (d. h. nicht lauter Leerstellen enthalten).2. In die verschiedenen Felder dürfen nur bestimmte Zeichen eingegeben werden.3. Eine Reihe von Felder sind Mußfelder und dürfen nicht leer sein.

und die externen Plausibilitäten:

Dies sind Plausibilitäten, die der Rechner nicht allein aus der direkten Eingabe allein her-aus entscheiden kann.

Hier können wir benutzerspezifische und programmspezifische Plausibilitäten unterschei-den:

benutzerspezifische Plausibilitäten

Postleitzahlen, OrteIm Rahmen der neuen Postleitzahlen können wir natürlich eine automatischeÜberprüfung bzw. eine automatische Zuordnung von Postleitzahl und Ort vorneh-men.

programmspezifische Plausibilitäten

Neueingeben1. Der Satz darf nicht vorhanden sein (Eindeutigkeit).2. Es muß noch eine freie Satznummer vorhanden sein.

Neueingeben Ändern Löschen Suchen

ISAM

1 N 2 A 3 L 4 S

0 V

Page 241: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-5

3. Es muß noch Platz auf der Platte sein.

Ändernwie beim Neueingeben und Löschen

Löschen1. Der zu löschende Satz muß vorhanden sein.

Suchen1. Der zu findende Satz muß vorhanden sein.

Vorwärtslesen1. Der aktuelle Zeiger muß positioniert sein.2. Ein Nachfolger muß vorhanden sein.

Rückwärtslesen1. Der aktuelle Zeiger muß positioniert sein.2. Ein Vorgänger muß vorhanden sein.

8. PAP, Struktogramm oder Pseudocode-Entwurf

Das Programm läßt sich recht leicht in Moduln aufspalten, die man einzeln betrachtenkann. Visual Basic verlangt sozusagen aus seiner Struktur heraus nach einzelnen Modulnund Prozeduren.

Wir legen zwei Moduln (Formulare) an. Das erste beinhaltet die Dateiverarbeitung, daszweite dient zur individuellen Informationsverarbeitung. Letzteres wird individuell an dieaktuelle Aufgabe angepaßt.

Vorarbeiten ( isam2_1.Form_Load )

Die Vorarbeiten können wir entweder in das Unterprogramm main oder in das Unter-programm Form_Load legen. Da wir das Dateiformular immer auf dem Bildschirm an-zeigen, wird es nur einmal geladen, so daß wir die Vorarbeiten hier unterbringen können.

Zuerst legen wir die Eigenschaften der Textfelder fest. Dann eröffnen wir die Datendateibzw. legen sie neu an, wenn sie fehlt. In diesem Fall müssen wir die Erde neu schreiben.Die Datendatei muß also mindestens einen Satz enthalten. Nun ist die Datei vorhandenund die Erde wird eingelesen. Selbstverständlich ist auch eine dynamische Abfrage desDateinamens über eine Dialogbox denkbar. Hierzu können wir z. B. das benutzerdefi-nierte Steuerelement CMDIALOG.VBX benutzen.

Da wir sofort einen ersten Datensatz auf dem Bildschirm anzeigen wollen, suchen wir zu-erst den Datensatz mit dem niedrigsten Schlüssel. Durch die Zuweisung des Schlüsselzum Form-Textfeld wird eine Verarbeitungskette angestoßen, die auch die anderen Fel-der (Inhalt und Datensatznummer) füllt.

Diese Technik bereitet dem "Altprogrammierer" sicher die größten Umstellungsschwierig-keiten. Sie mögen mir die Anmerkung verzeihen, aber oft lautet in Visual Basic die Devise

Denn Sie wissen nicht, was Sie tun!

Page 242: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-6 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Wollen Sie ein fremdes Programm verstehen, dann müssen Sie bei jeder Anweisung derForm

textfeld.Text = wert

im Listing nachschauen, ob da nicht eine Ereignisprozedur

textfeld_Change

existiert. U. U. wird in dieser Prozedur wieder eine Ereignisprozedur aufgerufen usw. usw.Hier heißt es einerseits die Überblick zu behalten und auf unerwünschte Nebeneffekte zuachten. Schließlich können gerade zum Programmbeginn noch Daten fehlen, an die mannormalerweise nicht denkt. Im Listing sind daher alle Elemente mit einem Präfix versehen(tf Textfeld, sf Schaltfeld, vl vertikaler Lauf usw.). Treffen Sie auf ein solches Ele-ment, so müssen die immer nach zugehörigen Ereignisprozeduren suchen.

Die Zuweisung tf_schlüssel.Text = schlüssel stößt also die Ereignisprozedurtf_schlüssel_Change an. In dieser wird der Satz (unnötigerweise aber kaum ver-meidbar) noch einmal gesucht und das Formular gefüllt. Da nun aber auch die Zuweisungtf_schlüssel.Text="" diese Prozedur triggert, müssen wir an den Kopf solcher Pro-zeduren eine Reihe von logischen Abfragen programmieren, die die Zulässigkeit des Pro-zeduraufrufes prüfen. In unserem Fall wird also der Schlüssel auf Existenz und die Dateiauf mindestens einen Datensatz geprüft. Visual-Basic-Programme bestehen daher häufigaus eigenständigen Prozeduren mit einem Kopfteil, in dem Zulässigkeiten geprüft werden,und einem Schwanzteil, in dem die (globalen) Schalter für die nachfolgenden Prozedurengesetzt werden, die wieder die anderen Prozeduren steuern.

Bevor wir nun die einzelnen Teilfunktionen abhandeln, wollen wir wenigstens noch eineTestprozedur debug1_Click definieren, die uns bei der Programmentwicklung unter-stützen. Diese listet uns einfach die Datensätze der Datendatei im Direktfenster auf. Istdas Programm stabil, dann können wir diese Schaltfläche abschalten. Für spätere Testsist es aber sinnvoll, solche Prozeduren im Programm zu belassen.

Teilfunktionen

(1) Neueingeben

Nach dem Neuanlegen der Datei existiert nur die Erde, in der der Baum "wachsen" soll

Dieser wird mit der Satznummer 2 ein-getragen. In der Erde wird 2 als Wurzel-zeiger eingetragen. Die Liste der neuen(freien) Satznummern beginnt bei 3

1 3 2 0 unbenut zt

I nhal tDamm0 02

Damm

1 2 0 0 unbenut zt

erster noch nie benutzter Datensatz

WurzelZeiger auf die Kette der gelöschten Sätze

Page 243: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-7

Jetzt wird der 2. Satz (Berg) eingegeben. Es entsteht die erste Abhängigkeit. Diese er-kennen wir am Zeiger 3 nach links. Bei Berg sehen Sie auch schon den ersten Anker-2

1 4 2 0 unbenutzt

InhaltDamm3 02

Damm

Berg

Inhalt3 0 -2 Berg

Der nächste Satz mit Burg verändert die Struktur in entscheidender Weise. Wir sehenwie der rechte Anker weitergereicht wird und wie ein linker Anker erscheint

1 5 2 0 unbenutzt

InhaltDamm3 02

Damm

Berg

Inhalt3 0 4 Berg

Inhalt4

-3 -2 BurgBurg

Bevor wir das Problem der Wiederbelegung gelöschter Sätze betrachten, wollen wir Re-geln für das Eintragen und die Behandlung der Anker aufstellen (die Aussagen für denrechten Anker sind symmetrisch):

1. Der neue Satz wird immer als Blatt an einen unvollständigen Knoten angehängt.Wird aber der Suchbegriff beim Suchen gefunden, so wird eine Fehlermeldungausgegeben. Diese muß im aufrufenden Programm entsprechend ausgewertetwerden.

2. Wird der Knoten als linker Sohn eingetragen, dann wird der Anker auf denNachfolgerknoten an Stelle des rechten Zeigers eingetragen.

3. Wird der Knoten als rechter Sohn eingetragen, dann wird der Anker des Vatersübernommen.

4. Der Weg rechts außen durch den Baum stellt einen Sonderfall dar, da hier keineAnker notwendig sind. Wollen wir die Regel 3 trotzdem anwenden, dann mußder Anker auf einen besonderen Knoten erfolgen (ähnlich [Wir83] S.230 ff). Hierbietet sich natürlich 0 als Anker an.

Zu diesen Regeln ergänzen wir jetzt die Verwaltung der gelöschten Satznummern.

5. Existiert ein gelöschter Satz im Stapel, dann wird dieser beschrieben, der Stapelwird um einen Satz erniedrigt. Dies muß in der Erde vermerkt werden.

6. Ist kein gelöschter Satz vorhanden, dann wird eine neue Satznummer belegt.Hierbei müssen wir beachten, daß die Satznummer nicht die Obergrenze 32767überschreitet (2.147.483.647 bei doppelter Länge). Selbstverständlich darf diePlatte dabei nicht überlaufen.

Page 244: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-8 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

BEGIN SP 2 "neuen Datensatz einordnen"IN "alle Informationen der Erde"OUT "Datensatz auf Diskette"EX "leeren Schlüssel ablehnen"1 IF 1 "gelöschte Datensätze vorhanden"2 SE 2 "freier Satz ist 1. gelöschter Satz"1 IEL 1 "kein gelöschter Datensatz vorhanden2 SE 3 "freier Satz ist neuer Satz in der Datei"EX "wenn kein Platz mehr vorhanden ist"1 IEN 11 IF 4 "Datei noch leer"2 SE 5 "Wurzel verändern"1 IEL 4 "Datei enthält schon Sätze2 SE 6 "Vater-Datensatz korrigieren"1 IEN 41 SE 7 "Anker übernehmen"1 SE 8 "neuen Datensatz schreiben"1 IF 9 "wenn Datensatz ein gelöschter Datensatz war"2 | SE 10 "Stapel korrigieren"1 IEL 92 | SE 11 "Zeigerneu korrigieren1 IEN 91 SE 12 "Erde schreiben"1 SE 13 "Formular vorbereiten"END SP 2 "neuer Datensatz eingeordnet"

(2) Ändern/Korrigieren

Beim Ändern kann der Schlüssel und/oder der Rest der Daten verändert werden.

Wird der Schlüssel nicht verändert, so kann der Satz auf der gleichen Satznummer über-schrieben werden.

Wird dagegen der Schlüssel verändert, dann muß der neue Schlüssel neu in den Such-baum eingefügt werden. Umgekehrt muß der alte Suchbegriff gelöscht werden.

Durch die vorgesehene dynamische Suche der Datensätze können wir uns die Korrektureines Schlüssels sehr einfach machen

1. Suche des zu korrigierenden Schlüssels2. Einlesen des neuen Schlüssels3. Sperren der Korrektur, wenn der neue Schlüssel schon vorhanden ist. Hierbei

wird der vorhandene Datensatz angezeigt.4. Löschen des alten Datensatzes, Neueintrag des neuen Datensatzes

(3) Löschen

Man unterscheidet grundsätzlich zwischen logischem und physikalischem Löschen.

Page 245: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-9

Beim logischen Löschen wird der Datensatz mit einem Löschkennzeichen markiert. Erbleibt aber in der Datei erhalten und kann wieder "entlöscht" werden. Bei allen Funktionenmüssen wir dieses Löschkennzeichen prüfen und entsprechend reagieren, z. B. beim ge-ordneten Lesen den Satz übergehen oder beim Suchen die Meldung "Satz gelöscht "ausgeben usw.

Beim physikalischen Löschen wird der Datensatz echt entfernt. Sein Speicherplatz kannwieder für neue Datensätze verwendet werden.

Da wir auch bei logischem Löschen hin und wieder die Datei bereinigen müssen, d. h. allegekennzeichneten Sätze endgültig löschen muß, betrachten wir gleich den Fall des phy-sikalischen Löschens.

Verglichen mit dem Suchen und Neueingeben ist das Löschen deutlich komplizierter, dajeder Knoten, also auch der Wurzelknoten, ein Blatt, ein innerer Knoten mit einem oderzwei Söhnen, ein Knoten mit Anker usw. gelöscht werden kann.

Grundsätzlich muß folgender Algorithmus realisiert werden:

1. Löschen des Datensatzes mit Einfügen in den Löschstapel2. Zusammenfügen der bis zu drei Teilbäumen wie schon beschrieben. Hierzu

werden die Zeiger des Vaterknotens neu gesetzt.3. Korrektur der Rücksprunganker auf beiden Seiten des gelöschten Knotens.

Hierbei muß der linke wie auch der rechte Teilbaum an den innenliegendenRändern durchlaufen werden, um diese Anker aufzuspüren und abzuändern.

Dies soll an einem Beispiel gezeigt werden

V

M

N

P

C

B

A

V

M

N

PC

B

A

L

Page 246: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-10 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Sollte die Programmiersprache verlangen, daß alle Datensätze in einer Datei gleich sind,so können wir auch auf einen getrennten Zeiger auf die Kette der gelöschten Datensätzeverzichten. Dann würde der Zeiger 10 in den gelöschten Datensatz hineinwandern. Esist dann etwas schwieriger die insgesamt belegten Sätze (inkl. der gelöschten) zu be-stimmen.

Wir sehen, daß es nur noch zwei Null-Zeiger gibt, nämlich die an den äußeren Rändern,alle anderen Stellen sind entweder mit Zeiger auf Söhne oder mit Anker belegt. UnserEntwurf sieht also folgendermaßen aus

1

2

3

4

5

6

7

8

9

10 2 0

3 0 V

4 7 L

5 6 B

0 -4

-4 -3

A

C

8 9 N

-3 -7 M

-7 -2 P

1

2

3

4

5

6

7

8

9

10 2 3

4 0 V

-1 0

5 6 B

0 -4

-4 7

A

C

8 9 N

-6 -7 M

-7 -2 P

gelö sch t

10 10

3 2

4 0

-1 10

5 6

0 -4

-4 7

8 9

-6 -7

-7 -2

Page 247: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-11

BEGIN SP 2 "Satz löschen"IN "Knotenzeiger"OUT "gelöschter Satz auf der Datei | Fehlermeldung"1 EX "Sicherheitsabfrage wird nicht bestätigt"1 SE 1 "Schlüssel für die Neupositionierung retten"1 IF 2 "Wurzel soll gelöscht werden"2 | SE 3 "Satz löschen"2 | IF 4 "kein linker Sohn vorhanden"3 | | SE 5 "rechter Sohn wird Wurzel"2 | IEL 4 "linker Sohn vorhanden"3 | | SE 6 "linker Sohn wird Wurzel"2 | IEN 41 IEL 2 "Satz soll gelöscht werden"2 | IF 7 "zu löschender Knoten hat keinen linken Sohn"3 | | SE 8 "Vaterknoten korrigieren und zurückschreiben"3 | | SE 9 "Löschstapel aufbereiten, gelöschten Satz zurück"3 | | SE 10 "Erde korrigieren und zurückschreiben"2 | IEL 7 "zu löschender Knoten hat einen linken Sohn"3 | | SE 11 "Vaterknoten korrigieren und zurückschreiben"3 | | SE 12 "Anker suchen und korrigieren"3 | | SE 13 "Stapel aufbereiten, gelöschten Satz zurückschreiben."3 | | SE 14 "Erde korrigieren und zurückschreiben"2 | IEN 71 IEN 21 SE 15 "Vorgänger suchen"1 SE 16 "Formular vorbereiten"END SP 2 "Satz gelöscht"

(4) Vorwärts- und Rückwärtslesen

Das Vorwärtslesen ist relativ einfach, da wir die Anker für das Vorwärtslesen bereits beiden anderen Funktionen verwalten. Wir müssen jedoch beachten, ob wir bei einem Rück-sprung über den Anker aus einem linken oder einem rechten Teilbaum zurückkommen.Ist der rechte Teilbaum noch nicht abgearbeitet, so müssen wir am linken Rand bis zumBlatt vorwärtslesen. Im Programm müssen wir weiterhin beachten, daß wir an den rechtenRand stoßen. In diesem Fall können wir nicht weiterlesen. Das Rückwärtslesen gehtsymmetrisch.

Testdaten

Für die verschiedenen Funktionen entwickeln wir gleich Testdaten, die eine möglichstvollständige Prüfung des Programms ermöglichen.

Auch wenn wir das Programm stufenweise entwickeln, so können wir hierbei bereitsTestfälle für spätere Funktionen berücksichtigen.

Als erstes werden wir das Anlegen der Datei und das Neueingeben realisieren, da alleanderen Funktionen eingegebene Daten voraussetzen.

Page 248: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-12 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Testdaten für das Neueingeben sind:− Wurzel eingeben− rechtes Blatt jeweils links außen, in der Mitte, rechts außen− linkes Blatt jeweils links außen, in der Mitte, rechts außen− nach mehreren Löschungen

Testdaten für das Löschen:− Wurzel löschen in den Varianten nur linker/rechter Teilbaum, beide Teilbäume− Knoten löschen mit den gleichen Varianten− Blätter löschen mit den verschiedenen Vater-Varianten

Testdaten für Vorwärtslesen:− von Anfang an− ab einer Position− bis zum Ende, wenn kein Nachfolger mehr vorhanden ist

9. Prüfen

Prüfen Sie den Entwurf mit verschiedenen Testdaten

10. Dokumentation

Schreiben Sie das Benutzerhandbuch.

12.1.1.1 Erweiterungsmöglichkeiten

Es gibt kein Programm, daß nicht noch verbessert bzw. erweitert werden kann.

So könnte man die dynamische Suche beschleunigen. Jetzt wird bei jeder Veränderungdes Schlüssels eine vollständige Suche durchgeführt. Hier ist aber auch ein anderer Algo-rithmus denkbar. Der Schlüssel wird entweder größer (z. B. durch einen weiteren Buch-staben) oder kleiner (durch einen Rückschritt), so könnte das Vorwärts- bzw. Rückwärts-lesen bei großen Dateien einen Geschwindigkeitsvorteil bringen.

Bei dieser Gelegenheit könnte auch ein Listenfeld mit den nächsten 10 Schlüsseln ange-zeigt werden. Ganz professionell wäre ein Kombinationsfeld über die Schlüssel. Hiermüssen wir aber beachten, daß wir sicher nicht den gesamten Index einlesen dürfen.

Weiterhin könnten zusätzliche Indizes (Sekundärindizes) wünschenswert sein, zwischendenen man hin- und herspringen kann.

12.1.1.2 Realisation

Wir wollen nun die Theorie in die Praxis umsetzen. Dabei soll es uns genügen, einen be-liebigen Datensatz mit einem Schlüssel versehen abzuspeichern. Die Zerlegung des Da-tensatzes ist dann von Anwendung zu Anwendung unterschiedlich.

Page 249: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-13

12.1.1.3 Zentrale Bibliothek

Damit wir nun nicht ständig immer wieder die gleichen Unterprogramme programmierenmüssen, legen wir uns eine zentrale Datei eingabe.bas an, in der wir alle Eingabe-Unterprogramme sammeln

Function alle_zeichen% (TastenAscii%, steuer As Control) '-------' akzeptiert alle Zeichen, schaltet aber weiter If tastenascii = 13 Then steuer.SetFocus alle_zeichen = 0 Else alle_zeichen = tastenascii End IfEnd Function 'alle_zeichen

Function große_buchstaben% (tastenascii As Integer, steuer As Control)' wandelt in große Zeichen um und akzeptiert nur Buchstaben Dim b As Integer b = Asc(UCase$(Chr$(tastenascii))) Select Case b Case 13 ' Zeilenschaltung steuer.SetFocus große_buchstaben = 0 Case 8, 65 To 90, 196, 214, 220 ' Rückschritt Buchstaben Uml. große_buchstaben = b Case Else große_buchstaben = 0 End SelectEnd Function 'große_buchstaben

Function große_zeichen% (tastenascii As Integer, steuer As Control)' wandelt in große Zeichen um If tastenascii = 13 Then steuer.SetFocus große_zeichen = 0 Else große_zeichen = Asc(UCase$(Chr$(tastenascii))) End IfEnd Function 'große_zeichen

Function nur_pzahlen% (tastenascii As Integer, steuer As Control)'testet auf positive Zahlen Select Case tastenascii Case 13 ' Zeilenschaltung steuer.SetFocus nur_pzahlen = 0 Case 8, 43, 46, 48 To 57 ' Rückschritt + . Ziffern nur_pzahlen = tastenascii Case 44 ' Komma in Punkt nur_pzahlen = 46 Case 79, 111 ' O, o in 0 nur_pzahlen = 48 Case 76, 108 ' L, l in 1 nur_pzahlen = 49 Case Else nur_pzahlen = 0 End SelectEnd Function 'nur_pzahlen

Diese Prozeduren überprüfen die Eingabe nach bestimmten Bereichen und fangen dieZeilenschaltung ab.

Page 250: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-14 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

12.1.1.4 Formular- und Ablaufentwurf

Nun entwerfen wir eine Arbeitsform, bei dem wir die Steuernamen nicht mit der Maskequalifizieren sondern mit dem Typ. Dies hat für Sie den Vorteil, am Namen auch die not-wendige Ikonenliste aus der Toolbox (Utensilienleiste) zu erkennen

tf Textfeldvl Vertikaler Laufsf Schaltfläche

Grundidee sind folgende Abläufe

− der Schlüssel ist ständig aufnahmebereit, das Programm befindet sich im Such-zustand. Deshalb fehlt eine entsprechende Schaltfläche;

− sobald ein vorhandener Schlüssel eingegeben ist, erscheint der Satzinhalt unddie Schaltflächen wechseln in den Änderungs-/Löschmodus. Dann kann derSatz mit Änderungen gespeichert werden oder vollständig gelöscht werden;

− ist der Schlüssel noch nicht eingetragen, dann könnte es sich um einen neuenhandeln, also kann die Schaltfläche Neu angeklickt werden;, das Programm

befindet sich im Suchzustand. Deshalb fehlt eine entsprechende Schaltfläche− mit Initialisieren werden alle Einträge gelöscht. Diese Funktion ist haupt-

sächlich für Testzwecke. Man wird sie nur in Ausnahmefällen dem Endbenutzerzur Verfügung stellen;

− mit Debug erfolgt ein Ausdruck des internen Knotenpfades auf das Direktfen-

ster. Auch diese Funktion dient zu Testzwecken.

Änderungen usw. werden auf mehrere Arten demonstriert

Name = tf_schlüssel

Name = tf_inhalt

Name = sf_zurück

Name = sf_weiter

Name = tf_satznr Name = sf_anfang

Name = sf_neu

Name = sf_schluß

Name = sf_debug

Name = sf_korrigieren

Name = sf_zeigen

Name = sf_ende Name = sf_initialisieren

Name = sf_löschen

Name = sf_ändern

Abbildung 12.1-1: Formentwurf

Page 251: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-15

− mit Ändern werden die aktuellen Benutzeränderungen im Formular abgespei-

chert. Wegen des aktiven Suchzustandes kann der Schlüssel nicht verändertwerden.

− mit Zeigen erscheint ein Formular (Abbildung 9.1-2), bei dem der Datensatz in

seine einzelnen Felder zerlegt ist. Diese werden auf Plausibilität geprüft. Auchhier bleibt er Schlüssel unveränderbar.

− mit Korrigieren erscheint ein gesondertes Formular (Abbildung 9.1-3) mit

dem der Schlüssel korrigiert werden kann.

12.1.1.5 Globale Deklarationen

In der Datei . BAS legen wir folgende globalen Deklarationen ab

' Dateinamen als KonstantenGlobal Const daten = "isam2.dat"Global Const SLÄNGE = 20Global Const ILÄNGE = 58

Type erdetyp zeigerneu As Integer ' 2 Byte zeigerwurzel As Integer ' 2 Byte zeigergelöscht As Integer ' 2 ByteEnd Type

Type satztyp

Name = t f_ name

Name = t f_ vname

Name = sf_ ändern

Name = sf_ ver wer f en

Name = t f_ l k Name = t f_ plz Name = t f_ ort

Name = t f_ str aße

Abbildung 12.1-2: Entwurf der Maskenform

Name = t f_ sch üss el

Name = t f_ i nhalt

Name = t f_ sat znr

Name = sf_ kor r ig i er en

Name = sf_ ver wer f en

Abbildung 12.1-3: Entwurf der Schlüsselkorrekturform

Page 252: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-16 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

zeigerlinks As Integer ' 2 Byte zeigerrechts As Integer ' 2 Byte schlüssel As String * SLÄNGE inhalt As String * ILÄNGEEnd Type

Type inhalttyp verwaltung As String * 4 ' 4 Byte name As String * SLÄNGE vname As String * 10 ' 10 Byte straße As String * 20 ' 20 Byte lk As String * 3 ' 3 Byte plz As String * 5 ' 5 Byte ort As String * 20 ' 20 ByteEnd Type

Global Const EM_LIMITTEXT = &H400 + 21

Declare Function GetFocus% Lib "user" ()Declare Function SendMessage& Lib "user" (ByVal hWnd%, ByVal wMsg%, ByValwParam%, ByVal x&)

Global erde As erdetypGlobal inhaltsatz As inhalttypGlobal satz As satztyp

Global schlüsselneu As String

Global kz As Integer

Es handelt sich zuerst um Konstanten. Diese werden analog zu anderen Programmier-sprachen rein groß geschrieben. Danach folgen eine Reihe von Typdefinitionen (Klassen-definitionen) der verschiedenen Datensätze unserer Datei. Es handelt sich immer um ei-nen Satz der Datendatei, der mit verschiedenen Schablonen gelesen wird. Diese Scha-blonen müssen nicht auf die volle Satzlänge ausgelegt sein. Sie dürfen kürzer sein.

Die folgenden Zeilen stellen etwas besonderes dar. Hier werden zwei externe Windows-Funktionen beschrieben, mit denen wir erreichen wollen, daß ein fokussiertes Textfeldseine Eingabelänge beschränkt. Weiterhin wollen wir Vorgabewerte markiert erscheinenlassen. In diesem Fall löscht eine Texteingabe das ganze Feld, während Steuerzeichendie Markierung löschen und das Feld zum Ändern freigeben. Dies ist eine hilfreiche undunter Windows ständig anzutreffende Funktion.

Den Abschluß der Deklarationen bilden die globalen Dimensionierungen einiger wenigerVariablen.

Zur Schreibweise ist anzumerken, daß bei diesem Programm versucht wurde, konse-quent folgende Regeln zu beachten

− alle globalen Konstanten sind rein groß;− alle sprachimmanenten Begriffe sind groß/klein, so wie sie der Editor verändert;− alle benutzerspezifischen Bezeichner sind einheitlich rein klein geschrieben.

Page 253: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-17

12.1.1.6 Programmierung

Neben den allgemeinen Deklarationen finden wir die Dimensionierungen der Variablen im(generell) -Teil des Moduls

'Dim erde As erdetyp ' global definiert'Dim satz As satztyp ' global definiert

Dim fnr As Integer ' Fehler-NummerDim k0 As Integer ' Hilfszeiger für den linken AnkerDim k1 As Integer ' Hilfszeiger für den rechten AnkerDim kn As Integer ' Hilfszeiger zum Eintrag der AnkerDim kv As Integer ' Zeiger auf den VaterDim kx As Integer ' Zeiger auf freien Datensatz'Dim kz As Integer ' Knotenzeiger global definiertDim z As Integer ' links/rechts

Dim fhinweis As StringDim schlüssel As String ' Schlüssel des aktuellen DSDim inhalt As String ' Inhalt des aktuellen DS

Dim knz(0 To 3) ' Knotenzeiger aktuell + HilfsspeicherDim knv(0 To 1) ' Knotenzeiger des Vaters

' Meldungen' 1 Speichermangel' 2 Datensatz bereits vorhanden' 3 am Dateiende' 4 am Dateianfang

Im Ablauf wir wie üblich zuerst die folgende Prozedur gestartet

Sub Form_Load () '-------------------------------------------' bereitet Form ISAM2_1 vor Dim i As Integer fhinweis = "Fehlerhinweis" ' Eingabefeld beschränken Show tf_schlüssel.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(satz.schlüssel), 0&) tf_inhalt.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(satz.inhalt), 0&)

If Dir$(daten) <> UCase$(daten) Then Open daten For Random Shared As #1 Len = Len(satz) erde.zeigerneu = 2 erde.zeigerwurzel = 0 erde.zeigergelöscht = 0 Put #1, 1, erde Close #1 End If Open daten For Random Shared As #1 Len = Len(satz) Get #1, 1, erde If erde.zeigerwurzel > 0 Then i = suchds(Chr$(1)) ' kleinstes Zeichen tf_schlüssel.Text = schlüssel tf_satznr.Text = Str$(kz) sfschalten 0, -1 ' ändern/löschen Else tf_schlüssel.Text = "" tf_satznr.Text = "0" sfschalten -1, 0 End If

Page 254: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-18 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

tf_schlüssel.SetFocusEnd Sub 'Form_Load

Um bereits die Methode .SetFocus benutzen zu können, wird mit Show das Formulargeladen. Für das jeweils fokussierte Textfeld senden wir eine Nachricht an Windows, umdie Feldlänge zu beschränken. Mit der Funktion Dir$(name) suchen wir nach einemMuster. Da diese in unserem Fall der Dateiname selbst ist, wir die Datei entweder gefun-den oder nicht. Fehlt sie noch, so legen wir eine leer Datei, d. h. eine Datei nur mit demErdesatz an. Diese Datei wird geschlossen, weil anschließend auf jeden Fall ein Öffnender gefundenen Datei erfolgt. So ist sichergestellt, daß die Datei wenigstens einmal aufdie Platte geschrieben wurde. Andernfalls könnte ein Systemabsturz wichtige Informatio-nen der Sitzung verloren gehen lassen.

Hinweis: In die Erde könnte man noch ein Erkennungszeichen einbauen, da sierelativ kurz ist. So könnte das Programm erkennen, ob die vorliegende Dateiwirklich eine ISAM-Datei ist, die es selbst angelegt hat.

Wenn die Datei bereits Datensätze enthält, dann erfolgt ein Suchen nach dem niedrigstenEintrag mit der Funktion suchds(Chr(1)). Diese liefert uns die Satznummer zurück.Sehen wir uns diese Funktion einmal näher an

Function suchds% (schl$) '-----------------------------------' sucht einen Satz im Baum' IN= schl$ gesuchter Schlüssel' alle Informationen der Erde' OUT= kz Knotenzeiger' kv Vaterknoten' knz() Zeiger auf die Söhne' z Richtung

Dim ergebnis As Integer

' SE 1 "Zeiger auf die Wurzel setzen, Wurzel einlesen" suchds = 0 kv = erde.zeigerwurzel kz = kv liesds (kz)' EX "wenn Suchschlüssel=Wurzel If schl = schlüssel Then suchds = kz Exit Function End If knv(0) = knz(0) knv(1) = knz(1)' CY 2 Do' SE 3 "Suchrichtung festlegen If schl < schlüssel Then z = 0 Else z = 1 End If' EX 2 "Sohn fehlt in Suchrichtung fehlt" If knz(z) <= 0 Then suchds = 0 Exit Do End If' SE 4 "Sohn in Suchrichtung lesen" kz = knz(z) liesds (kz)

Page 255: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-19

' IF 5 "Schlüssel nicht gefunden If schl <> schlüssel Then' SE 6 "Vater speichern" kv = kz knv(0) = knz(0) knv(1) = knz(1)' IEN 5 "Schlüssel gefu nden" Else' EX 2 Exit Do End If' CE 2 Loop suchds = kzEnd Function 'suchds

Diese Prozedur enthält den vorge-stellten Pseudocode. Ihre Funktionist ausführlich im Text beschriebenworden.

Es erscheint die Form mit dem er-sten Eintrag (Abbildung 12.1-4).Diese Form ist dieStandardarbeitsfläche des Benut-zers. Wenn dieses Formular geladen wird, dann erhält das Textfeld tf_schlüssel denFokus. Also wird das Ereignis

Sub tf_schlüssel_GotFocus () '-------------------------------' markiert Text tf_schlüssel.SelStart = 0 tf_schlüssel.SelLength = Len(tf_schlüssel.Text)End Sub 'tf_schlüssel_GotFocus

ausgelöst. Mit diesen beiden Anweisungen markieren wir den gesamten Text, so daß wirbei größeren Änderungen nicht die Entf - Taste strapazieren müssen. Mit dem ersten

Tastenanschlag legt der Benutzer die weitere Bearbeitung fest. Ein Steuerzeichen (z. B.eine Cursorbewegung) entfernt die Markierung und läßt individuelle Änderungen zu, eindarstellbares Zeichen löscht die Markierung. Bei jedem Tastendruck wird die Ereignispro-zedur

Sub tf_schlüssel_KeyPress (tastenascii As Integer) '---------' prüft auf erlaubte Zeichen tastenascii = alle_zeichen(tastenascii, tf_inhalt)End Sub 'tf_schlüssel_KeyPress

ausgelöst. Sie überprüft jedes eingegebene Zeichen und fokussiert bei einer � auf das

nächste Element.

Hinweis: Da diese beiden Prozeduren bei fast allen Eingabefeldern in gleicher Formauftreten, wird auf den einzelnen Abdruck der Quelltexte verzichtet. Natür-lich ist die Überprüfung abhängig vom Feldinhalt. So erscheinen im Landes-kenner nur große Buchstaben, während die Postleitzahl aus Ziffern besteht.

Abbildung 12.1-4: Beispiel eines Programmstarts

Page 256: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-20 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Die letzte Prozedur reagiert auf alle eingegebenen Zeichen, die nicht von Windows ab-gefangen werden wie z. B. Tab , ↑ , ↓ usw. Wird nun ein Textzeichen eingegeben,

so reagiert die Ereignisprozedur

Sub tf_schlüssel_Change () '---------------------------------' wenn der Schlüssel verändert wurde Dim s As String tf_inhalt.Text = "" tf_satznr.Text = "" If tf_schlüssel.Text = "" Or erde.zeigerwurzel = 0 Then Exit Sub End If s = tf_schlüssel.Text If suchds(s) > 0 And tf_schlüssel.Text = schlüssel Then tf_inhalt.Text = inhalt tf_satznr.Text = Str$(kz) sfschalten 0, -1 ' ändern/löschen Else sfschalten -1, 0 ' neu End IfEnd Sub 'tf_schüssel_Change

die in unserem Fall einen Suchvorgang in Datei auslöst. Je nach Erfolg werden die Text-felder gefüllt und die Schaltfelder geschaltet. Dazu wird eine der generellen Prozedurenaufgerufen

Sub sfschalten (w1%, w2%) '----------------------------------' schaltet die Schaltfelder ein/aus sf_neu.Enabled = w1 sf_neu.TabStop = w1 sf_ändern.Enabled = w2 sf_ändern.TabStop = w2 sf_löschen.Enabled = w2 sf_weiter.Enabled = w2 sf_zeigen.Enabled = w2 sf_zurück.Enabled = w2End Sub 'sfschalten

Wir können nun den Satzinhalt korrigieren. Dabei müssen wir aber beachten, daß dieFeldgrenzen innerhalb des Satzes eingehalten werden. Die Ereignisprozedurtf_inhalt_GotFocus ist Standard, während die Reaktion auf die Zeilenschaltung

davon abhängt, ob wir uns im Eingabe- oder Änderungsmodus befinden

Sub tf_inhalt_KeyPress (tastenascii As Integer) '-------------' prüft auf erlaubte Zeichen If sf_neu.Enabled = -1 Then tastenascii = alle_zeichen(tastenascii, sf_neu) Else tastenascii = alle_zeichen(tastenascii, sf_ändern) End IfEnd Sub 'tf_inhalt_KeyPress

Da keine Plausibilitätsprüfung erfolgt, existiert auch keine Ereignisprozedurtf_inhalt_LostFocus

Sind die Änderungen abgeschlossen, so drückt der Benutzer die Ändern - Schaltfläche,

worauf

Page 257: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-21

Sub sf_ändern_Click ()' ändert den Inhalt eines Datensatzes ohne Schlüsselkorrektur füllds schreibds (kz) tf_schlüssel.SetFocusEnd Sub

die Änderungen auf die Datei schreibt, indem sie die beiden generellen Prozeduren

Sub füllds () '----------------------------------------------' füllt den Datensatz satz.schlüssel = tf_schlüssel.Text satz.inhalt = tf_inhalt.TextEnd Sub 'füllds

Sub schreibds (kz%) '----------------------------------------' schreibt den Datensatz auf Nr. kz satz.zeigerlinks = knz(0) satz.zeigerrechts = knz(1) Put #1, kz, satz Get #1, kz, inhaltsatzEnd Sub 'schreibds

aufruft. Ehrlich gesagt ist dieses direkte Korrigieren im Satz nicht nur mühsam sondernauch sehr anfällig. Man wird es im allgemeinen daher nicht so zulassen. Statt dessen wirdman die Lösung Zeigen wählen, die eine Maske zur Dateneingabe aufbaut

Sub sf_zeigen_Click () '-------------------------------------' ruft nächste Form auf isam2_2.Show 1End Sub 'sf_zeigen_Click

Die Prozedur ruft also nur diezweite Form auf (Abbildung 12.1-5) auf. Diese bestehen zum einenaus allen ihren Prozeduren zumAufbau der Form

Sub Form_Load () '-------------------------------------------' Vorarbeiten für die Form ISAM2_2 tfplz_geprüft = 0 tfstraße_geprüft = 0 tfvname_geprüft = 0 Show tf_straße.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.straße), 0&) tf_lk.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.lk), 0&) tf_plz.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.plz), 0&) tf_ort.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.ort), 0&) tf_vname.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.vname), 0&) Hide ' damit sie modal angezeigt werden kann

Abbildung 12.1-5: Demonstration der Maskenform

Page 258: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-22 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

tf_name.Text = RTrim$(inhaltsatz.name) tf_vname.Text = RTrim$(inhaltsatz.vname) tf_straße.Text = RTrim$(inhaltsatz.straße) tf_lk.Text = RTrim$(inhaltsatz.lk) tf_plz.Text = RTrim$(inhaltsatz.plz) tf_ort.Text = RTrim$(inhaltsatz.ort) tf_name.Enabled = 0End Sub 'Form_Load

der Reaktion auf Feldeingaben und auf Schaltflächenbetätigungen bestehen.

Bei den Feldern hängen wir die Plausibilitätsprüfungen an, wobei wir unterscheiden zwi-schen Mußfeldern (Ort analog)

Sub tf_lk_LostFocus ()' Plausibilitätsprüfung If Len(tf_lk.Text) = 0 Then MsgBox "Landeskenner muß sein?", 16, "Fehler" tf_lk.SetFocus End IfEnd Sub

und Kannfeldern (genauer in diesem Fall: Solltefeldern) (Vorname, Straße analog)

Sub tf_plz_LostFocus ()' Plausibilität If Len(tf_plz.Text) = 0 Then antwort% = MsgBox("Ist die Postleitzahl unbekannt?", 292, "Abfrage") If antwort% <> 6 Then Exit Sub End If tfplz_geprüft = -1End Sub 'tf_plz_LostFocus

Nun kann der Benutzer mit der Maus beliebig in den Feldern herumspringen. U. a. kannes ihm irgendwann einfallen, die Schaltfläche Ändern zu drücken

Sub sf_ändern_Click ()' ändert den Datensatzinhalt If (tfvmame_geprüft = 0) And (Len(tf_vname.Text) = 0) Then antwort% = MsgBox("Ist der Vorname unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_vname.SetFocus Exit Sub End If End If If (tfstraße_geprüft = 0) And (Len(tf_straße.Text) = 0) Then antwort% = MsgBox("Ist die Straße unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_straße.SetFocus Exit Sub End If End If If Len(tf_lk.Text) = 0 Then MsgBox "Ort muß sein?", 16, "Fehler" tf_lk.SetFocus Exit Sub End If If (tfplz_geprüft = 0) And (Len(tf_plz.Text) = 0) Then antwort% = MsgBox("Ist die Postleitzahl unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_plz.SetFocus Exit Sub

Page 259: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-23

End If End If If Len(tf_ort.Text) = 0 Then MsgBox "Ort muß sein?", 16, "Fehler" tf_ort.SetFocus Exit Sub End If

inhaltsatz.name = tf_name.Text inhaltsatz.vname = tf_vname.Text inhaltsatz.straße = tf_straße.Text inhaltsatz.lk = tf_lk.Text inhaltsatz.plz = tf_plz.Text inhaltsatz.ort = tf_ort.Text Put #1, kz, inhaltsatz Get #1, kz, satz Unload isam2_2 isam2_1.tf_schlüssel.SetFocus isam2_1.tf_inhalt.Text = satz.inhaltEnd Sub

Wir wissen natürlich nicht, ob er all unsere mühsamen Prüfungen durchlaufen hat, alsoprüfen wir noch einmal. Nun wird der Benutzer irgendwann laut aufschreien, wenn er beiden Solltefeldern noch einmal bestätigen muß, daß er den Vornamen, die Straße oder diePostleitzahl nicht kennt. Daher müssen wir uns merken, ob die Prüfung schon erfolgte.Hierzu legen wir einige generelle Variablen an

Dim tfplz_geprüft As IntegerDim tfstraße_geprüft As IntegerDim tfvname_geprüft As Integer

die wir am Anfang löschen und bei einer erfolgten Prüfung setzen. Sie dienen uns danndazu, unnötige Abfragen zu vermeiden.

Klickt der Benutzer statt dessen Verwerfen an

Sub sf_verwerfen_Click ()' Bestätigung durch Benutzer Unload isam2_2 isam2_1.tf_schlüssel.SetFocusEnd Sub

wird nun trotzdem die Plausibilitätsprüfung des aktuellen Feldes ausgelöst. Ist sie nichterfüllt, dann kommt man nicht weiter. Dies ist ein unangenehmer Effekt, der eigentlichdagegen spricht, die Prüfungen in die _LostFocus- Prozeduren zu schreiben. Manmüßte nämlich abfragen, was er Benutzer als nächstes getan hat. Aber vielleicht findenSie eine andere Lösung.

Damit ist das 2. Formular zur feldweisen Eingabe abgeschlossen und wir kehren wieder inunser Arbeitsformular zurück.

Nun kann der Benutzer aber auch die Löschen - Schaltfläche betätigen

Sub sf_löschen_Click () '------------------------------------' löscht einen Satz' IN= Eingaben der Form

Page 260: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-24 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

' alle Informationen der Erde' der Zeiger kz zeigt auf den zu löschenden Satz' OUT= gelöschter Satz auf der Datei' fnr Fehler-Nummer

Dim s As String ' Suchstring um Datei auf den Vorgänger zu p ositionieren

' EX "Sicherheitsabfrag antwort% = MsgBox( "Soll der Satz wirklich gelöscht werden?", 36, "Abfrage")

If antwort% <> 6 Then Exit Sub' SE 1 "Schlüssel für Vorgängersuche speichern" s = satz.schlüssel' Löschen durchführen löschen' SE 15 "Vorgänger suchen" If erde.zeigerwurzel > 0 Then i = suchds(s) tf_schlüssel.Text = schlüssel Else tf_schlüssel.Text = "" tf_inhalt.Text = "" sfschalten -1, 0 End If' SE 16 "Form vorbereiten" tf_schlüssel.SetFocusEnd Sub 'sf_löschen_Click

die einen Löschvorgang in unserem Baum in der ausführlich beschriebenen Technikdurchführt.

Will der Benutzer aber den Schlüssel selbst korrigieren, so gelingt ihm dies hier nicht, dajede Änderung am Schlüssel zu einem Suchvorgang führt. Er muß also die SchaltflächeKorrigieren anklicken

Diese ruft unser dritte Formularauf (Abbildung 12.1-6), das mitfolgenden Deklarationen ar-beitet

Dim kz3 As IntegerDim z As Integer

Dim knz(0 To 2)

Dim schlüssel As StringDim inhalt As StringDim inhaltalt As StringDim satznralt As String

und recht einfach startet

Sub Form_Load () '------------------------------------------' bereitet Form vor inhaltalt = isam2_1.tf_inhalt.Text satznralt = isam2_1.tf_satznr.TextEnd Sub 'Form_Load ()

War die Funktion falsch, so bricht er Benutzer ab

Sub sf_verwerfen_Click ()

Abbildung 12.1-6: Demonstration der Korrekturform

Page 261: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-25

' verwirft Form Unload isam2_3 isam2_1.tf_schlüssel.SetFocus schlüsselneu = ""End Sub 'sf_verwerfen

Normalerweise wird er aber den Schlüssel ändern wollen, Wesentlich ist nun der Algo-rithmus zum Umhängen eines Eintrags in unserm Baum

Sub tf_schlüssel_Change ()' wenn der Schlüssel verändert wurde Dim s As String If tf_schlüssel.Text = "" Or erde.zeigerwurzel = 0 Then Exit Sub End If s = tf_schlüssel.Text If suchds3(s) > 0 And tf_schlüssel.Text = schlüssel Then tf_inhalt.Text = inhalt tf_satznr.Text = Str$(kz) sf_korrigieren.Enabled = 0 sf_korrigieren.TabStop = 0 sf_verwerfen.TabStop = -1 Else tf_inhalt.Text = inhaltalt tf_satznr.Text = satznralt sf_korrigieren.Enabled = -1 sf_korrigieren.TabStop = -1 sf_verwerfen.TabStop = 0 End IfEnd Sub 'tf_schlüssel_Change

Sub sf_korrigieren_Click () '-------------------------------' übergibt neuen Schlüssel schlüsselneu = tf_schlüssel.Text Unload isam2_3End Sub 'sf_korrigieren_Click

Die vorstehenden Prozeduren greifen auf folgende generellen Unterprogramme zurück

Sub liesds3 (kz3%) '-----------------------------------------' liest Datensatz ein Get #1, kz3, satz knz(0) = satz.zeigerlinks knz(1) = satz.zeigerrechts schlüssel = RTrim$(satz.schlüssel) inhalt = RTrim$(satz.inhalt)End Sub 'liesds3

Function suchds3 (schl$) '-----------------------------------' sucht einen Satz im Baum' IN= schl$ gesuchter Schlüssel' alle Informationen der Erde' OUT= kz3 Knotenzeiger

Dim ergebnis As Integer

' SE 1 "Zeiger auf die Wurzel setzen, Wurzel einlesen" suchds3 = 0 kz3 = erde.zeigerwurzel liesds3 (kz3)' EX "wenn Suchschlüssel=Wurzel If schl = schlüssel Then suchds3 = kz3 Exit Function

Page 262: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-26 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

End If' CY 2 Do' SE 3 "Suchrichtung festlegen If schl < schlüssel Then z = 0 Else z = 1 End If' EX 2 "Sohn fehlt in Suchrichtung fehlt" If knz(z) <= 0 Then suchds3 = 0 Exit Do End If' SE 4 "Sohn in Suchrichtung lesen" kz3 = knz(z) liesds3 (kz3)' IF 5 "Schlüssel gefunden If schl = schlüssel Then Exit Do' IEN 5 End If' CE 2 Loop suchds3 = kz3End Function 'suchds3

Das eigentliche Umhängen geschieht dann wieder in der rufenden Prozedur, die nun denalten Schlüssel löscht und den neuen Schlüssel einfügt. Hier sehen Sie übrigens zumerstem Mal, wie eine Ereignisprozedur sf_neu_Click intern aufgerufen wird.

Bevor wir uns den weiteren Schaltflächen zuwenden, wollen wir noch die restlichen gene-rellen Prozeduren auflisten

Function ausgleichen% (n%)' gleicht einen Baum aus' Gefahr des Speicherüberlaufes bei großen Dateien

Dim nl As Integer Dim nr As Integer Dim ii As Integer

Dim baumsatz As satztyp

If n = 0 Then ausgleichen = 0 Else nl = n \ 2 nr = n - nl - 1 iein = iein + 1 ii = iein Get #1, iein, baumsatz baumsatz.zeigerlinks = ausgleichen(nl) baumsatz.zeigerrechts = ausgleichen(nr) Put #1, ii, baumsatz ausgleichen = ii End IfEnd Function

Sub füllds () '----------------------------------------------' füllt den Datensatz satz.schlüssel = tf_schlüssel.Text satz.inhalt = tf_inhalt.Text

Page 263: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-27

End Sub 'füllds

Sub liesds (kz%) '-------------------------------------------' liest den Datensatz mit Nr. kz Get #1, kz, satz Get #1, kz, inhaltsatz knz(0) = satz.zeigerlinks knz(1) = satz.zeigerrechts schlüssel = RTrim$(satz.schlüssel) inhalt = RTrim$(satz.inhalt)End Sub 'liesds

Sub löschen () '---------------------------------------------' gemeinsames Unterprogramm Löschen/Ändern ohne Dialoganteile' IF 2 "wenn Wurzel gelöscht werden soll" If kz = erde.zeigerwurzel Then' SE 3 "Satz löschen" k0 = kz erde.zeigerwurzel = knz(0) knz(2) = knz(0) knz(3) = knz(1)' IF 4 "kein linker Sohn vorhanden" If erde.zeigerwurzel = 0 Then' SE 5 "rechter Sohn wird Wurzel" erde.zeigerwurzel = knz(1) verarb_rlanker verarb_rranker' IEL 4 "linker Sohn vorhanden" Else' SE 6 "linker Sohn wird Wurzel" verarb_lranker verarb_llanker' IEN 4 End If verarb_löschstapel verarb_erde' IEL 2 "zu löschender Knoten ist nicht die Wurzel" Else' IF 7 "zu löschender Knoten hat keinen linken Sohn"' ITH 7 k0 = kz knz(2) = knz(0) knz(3) = knz(1) If knz(0) <= 0 Then' SE 8 "Vaterknoten korrigieren und zurückschreiben" kz = kv knz(0) = knv(0) knz(1) = knv(1) Get #1, kz, satz knz(z) = knz(z + 2) If kz = erde.zeigerwurzel And knz(z) < 0 Then knz(z)=0 schreibds (kz)' SE "Anker suchen und korrigieren" verarb_rlanker verarb_rranker' SE 9 "Löschstapel aufbereiten; gelöschten Satz zurück" verarb_löschstapel' SE 10 "Erde korrigieren und zurückschreiben" verarb_erde' IEL 7 "zu löschender Knoten hat einen linken Sohn" Else' SE 11 "Vaterknoten korrigieren und zurückschreiben" kz = kv knz(0) = knv(0) knz(1) = knv(1) knz(z) = knz(2)

Page 264: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-28 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Get #1, kz, satz schreibds (kz)' SE 12 "Anker suchen und korrigieren" verarb_lranker verarb_llanker' SE 13 "Löschstapel aufbereiten; gelöschten Satz zurück" verarb_löschstapel' SE 14 "Erde korrigieren und zurückschreiben" verarb_erde' IEN 7 End If' IEN 2 End IfEnd Sub 'löschen

Sub schreibds (kz%) '----------------------------------------' schreibt den Datensatz auf Nr. kz satz.zeigerlinks = knz(0) satz.zeigerrechts = knz(1) Put #1, kz, satz Get #1, kz, inhaltsatzEnd Sub 'schreibds

Sub verarb_erde () '-----------------------------------------' korrigiert Erde und schreibt sie zurück If erde.zeigerwurzel = 0 Then k0 = 0 erde.zeigerneu = 2 End If erde.zeigergelöscht = k0 Put #1, 1, erdeEnd Sub 'verarb_erde

Sub verarb_llanker () '--------------------------------------' sucht linken Anker bei vorhandenem linken Sohn und korrigiert If knz(3) <= 0 Then Exit Sub' kein rechter Sohn kz = knz(3) ' positioniere auf rechten Sohn Do ' liest Restbaum nach links außen liesds (kz) If knz(0) <= 0 Then Exit Do kz = knz(0) Loop knz(0) = -kn schreibds (kz)End Sub ' verarb_llanker

Sub verarb_löschstapel () '----------------------------------' bereitet den Löschstapel auf, schreibt gelöschten Satz zurück kz = k0 knz(0) = -1 knz(1) = erde.zeigergelöscht satz.schlüssel = "" satz.inhalt = "" schreibds (kz)End Sub 'verarb_löschstapel

Sub verarb_lranker () '---------------------------------------' sucht rechten Anker bei vorhandenem linkem Sohn und korrigiert If knz(2) <= 0 Then Exit Sub ' kein linker Sohn kz = knz(2) ' positioniert auf linken Sohn Do ' liest Restbaum nach rechts außen liesds (kz) If knz(1) <= 0 Then Exit Do kz = knz(1) Loop knz(1) = knz(3)

Page 265: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-29

kn = kz schreibds (kz)End Sub 'verarb_lranker

Sub verarb_rlanker () '----------------------------------------' sucht linken Anker bei fehlendem linken Sohn und korrigiert If knz(3) <= 0 Then Exit Sub ' keinen rechten Sohn kz = knz(3) ' positioniert auf rechten Sohn Do ' liest Restbaum nach links außen liesds (kz) If knz(0) <= 0 Then Exit Do kz = knz(0) Loop knz(0) = knz(2) kn = kz schreibds (kz)End Sub 'verarb_rlanker

Sub verarb_rranker () '--------------------------------------' sucht rechten Anker bei fehlendem linken Sohn und korrigiert If knz(2) <= 0 Then Exit Sub ' kein linker Sohn kz = knz(2) ' positioniert auf linken Sohn Do ' lies Restbaum nach rechts außen liesds (kz) If knz(1) <= 0 Then Exit Do kz = knz(1) Loop knz(1) = -kn schreibds (kz)End Sub 'verarb_rranker

Mit der Schaltfläche Initialisieren löschen wir nach einer Sicherheitsabfrage den

Inhalt unserer gesamten Datei. Diese Funktion ist nur für den Test gedacht.

Sub sf_initialisieren_Click () '-----------------------------' löscht den Inhalt der Datendatei, initialisiert die Erde antwort% = MsgBox("Sollen wirklich alle Daten gelöscht werden?", 292,

"Abfrage") If antwort% = 6 Then Close Kill daten' Grundstellung für Weiterverarbeitung fnr = 0 k0 = 0 k1 = 0 kn = 0 kx = 0 kz = 0 z = 0 Form_Load Else tf_schlüssel.SetFocus End IfEnd Sub 'sf_initialisieren_Click

Ebenfalls nur für den Test ist die Schaltfläche Debug vorbereitet

Sub sf_debug_Click ()' schreibt Inhalt der Datei auf das Direktfenster Dim erde As erdetyp Dim satz As satztyp Dim i As Integer

Page 266: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-30 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

' Close' Open daten For Random As #1 Len = Len(satz) Get #1, 1, erde Debug.Print Debug.Print 1; "neu:"; erde.zeigerneu; " Wurzel:"; erde.zeigerwurzel; "

gelöscht:"; erde.zeigergelöscht For i = 2 To erde.zeigerneu - 1 Get #1, i, satz Debug.Print i; "links:"; satz.zeigerlinks; " rechts:"; satz.zeigerrechts; "

S:"; RTrim$(satz.schlüssel); " I:"; RTrim$(satz.inhalt) Next i' Close #1 tf_schlüssel.SetFocusEnd Sub 'sf_debug

Diese Funkti-on schreibtden Inhalt derDatendateimit den Ver-waltungsinformationen aufdas Direkt-fenster(Abbildung12.1-7) unddient daherals guteTestmöglichkeit.

Nun bleibennoch die "kleinen" Schaltflächen zum Positionieren

Sub sf_anfang_Click () '-------------------------------------' geht an den Dateianfang Dim i As Integer i = suchds(Chr$(1)) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub 'sf_anfang

Sub sf_schluß_Click ()' geht an den Dateischluß Dim i As Integer i = suchds(String$(Len(satz.schlüssel), Chr$(255))) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub

Sub sf_schluß_Click ()' geht an den Dateischluß Dim i As Integer i = suchds(String$(Len(satz.schlüssel), Chr$(255))) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub

Sub sf_zurück_Click () '-------------------------------------' lies nächst absteigenden Satz

Abbildung 12.1-7: Beispiel eines Debug-Ausdrucks

Page 267: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-31

Dim kzz As Integer kzz = kz ' letzte Position retten If knz(0) < 0 Then z = -1 ' Knoten enthält Anker Else z = 0 ' Knoten enthält Zeiger End If kz = Abs(knz(0)) ' positionieren If kz = 0 Then kz = kzz fnr = 4 ' am Dateianfang Else Do ' nach rechts bis zum Blatt weiterlesen liesds (kz) If z < 0 Then Exit Do If knz(1) <= 0 Then Exit Do kz = knz(1) Loop tf_schlüssel.Text = schlüssel End If tf_schlüssel.SetFocusEnd Sub 'sf_zurück_Click

Das war nun ein hartes Stück Arbeit. Sicher werden Ihnen noch die einen oder anderenVerbesserungsvorschläge einfallen, die Sie nur programmieren müssen.

12.1.1.7 Fehlersuche

Fertige Programme funktionieren ja meistens und häufig erzählen sie leider nichts überdie Probleme bei der Entwicklung. Schließlich kann sich der Autor ja auch nicht alsDummkopf hinstellen. Trotzdem ist es immer interessant, auf erkannte Probleme einzu-gehen.

Mit der Einführung der Plausibilitätsprüfungen in der Maskeneingabe mit den_LostFocus- Ereignissen tritt übrigens ein interessanter Effekt auf. Ist eine Adresse z. B.ohne Straße gespeichert (als Solltefeld definiert), so erfolgt schon beim Aufruf der For-mulars eine Prüfung. Ist eines der Solltefelder leer, dann erfolgt eine Abfrage. Die ande-ren Felder möglicherweise ebenfalls leeren werden aber nicht mehr angemahnt,

Dies sollte aber nicht so sein. Wenn wir nun das Programm verfolgen, dann sehen wir,daß die _LostFocus- Prozedur des beanstandeten Felds tatsächlich durchlaufen wirdund die Abfrage durchführt, obwohl wir den Fokus auf den Vornamen setzen und diesesFeld auch nicht verlassen. Setzt irgendeines unserer Unterprogramme zwischenzeitlichden Fokus um? Wie sollen wir dieses nur herausbekommen?

Hier fällt unser Blick auf die Eigenschaft Screen.ActiveControl vom TypControl. Diese stellt das gerade fokussierte Element auf dem Bildschirm dar. Wir kön-nen es hernehmen und untersuchen. Hierzu ergänzen wir alle unsere Textfeld-Ereignisprozeduren mit den Anweisungen

Debug.Print "in tf_plz_GotFocus" If TypeOf Screen.ActiveControl Is TextBox Then Debug.Print Screen.ActiveControl.Text Else Debug.Print "Schaltfläche: " + Screen.ActiveControl.Caption End If

Page 268: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-32 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

wobei die erste Zeile dazu dient, die durchlaufenen Prozeduren kenntlich zu machen. Siemuß mit dem jeweiligen Prozedurnamen gefüllt werden. Danach folgt eine Abfrage nachdem Type des Elements, der CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Frame, HScrollBar, Label,ListBox, Menu, OptionButton, PictureBox, TextBox, Timer oderVScrollBar sein kann. Da wir nun im Programm keinen Zugriff auf die Eigenschaft.Name haben, müssen wir irgend ein anderes charakteristisches Merkmal ausdrucken,z. B. den Inhalt des Elements (Abbildung 9.1-8). Wenn dies nicht ausreicht, könnten wirden Namen in der Eigenschaft .Tag unterbringen (solange diese nicht anderweitig be-nutzt wird). Hierzu tragen wir bei den Elementen den Steuernamen auch im .Tag einund geben ihn mit Debug.Print Screen.ActiveControl.Tag aus

Das Vornamenfeld erhält zwar den Fokus (erkennbar am Inhalt Manfred ), gibt ihn abersofort wieder ab, bis in der Postleitzahl ein Fehler gemeldet wird, den der Programmierernun wie beantwortet usw.

Nach einigen Stunden des Suchens kommt man dann dahinter, daß dies von den Anwei-sungen

tf_straße.SetFocusx& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.straße), 0&)

stammt. Im obigen Beispiel sind diese beiden Zeilen aus dem Programm herausgenom-men worden, so daß die Straße nicht fokussiert wird. Dies sind also unerwartete Neben-wirkungen.

Abbildung 12.1-8: Fehlersuche

Page 269: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-33

Wir könnten nun die Zeilen wieder herausnehmen, hätten dann aber das Problem, daßder Benutzer z. B. locker eine 10-stellige Postleitzahl eingeben könnte. Ein anderer Wegwäre natürlich die Windows-Funktion ständig ein- und auszuschalten.

Mit dem .Tag vereinfachen sich die Kontrollzeilen auf

Debug.Print "in tf_vname_GotFocus" Debug.Print Screen.ActiveControl.Tag

12.1.2 Kritik/Verbesserungsvorschläge

Es gibt sicher kein Programm, das auf Anhieb optimal ist. Daher können wir uns auch beidiesem Beispiel fragen, was verbessert werden kann.

Unser Blick fällt z. B. auf die Datensatzstruktur, die zwischen der Erde und den Datensät-zen wechselt. Nehmen wir den unwahrscheinlichen Fall an, unser Schlüssel sei nur einZeichen lang, so müßten wir wegen des dritten Zeigers im Erdesatz die Datensätze unnö-tig verlängern.

Im Grunde ist es nicht notwendig, in der Erde zwei Zeiger zu verwalten. Den Zeiger aufden ersten freien Datensatz und den Zeiger auf den ersten gelöschten Datensatz könntenwir zusammenfassen. Diese Technik ist beim Löschen schon kurz erwähnt worden.

12.2 Untersuchung einer xBase-Indexdatei

Klassische Vertreter der Datenbanken der 4. Generation sind die xBase-Datenbanken(dBase, FoxBase, Clipper usw.). Der Aufbau der Datendateien sind bei allen Vertreterndieser Klasse gleich. Die Daten können untereinander ausgetauscht werden. WesentlicheUnterschiede gibt es aber bei der Bildung der Indexdateien. Wir wollen einmal diese In-dexdateien für die Sprache dBase (Erweiterung .NDX) und Clipper (Erweiterung .NTX)untersuchen.

Es gibt eine Vielzahl von interessanten Anwendungen, die mit genauer Kenntnis des In-dexaufbaues sehr viel effektiver als mit den Standardfunktionen realisiert werden können.

Als Beispiel sei an die Aufgabe erinnert (Integritätsbedingung), einen eindeutigen Schlüs-sel auf Doppeleinträge zu überprüfen, da dies von den xBase-Sprachen nicht beanstan-det wird. Ein Vergleich des Ergebnisses COUNT TO mit dem Ergebnis von LASTREC()beantwortet diese Frage erst einmal grundsätzlich. Der doppelte Satz muß dann nochgesucht werden. Leider durchsucht COUNT TO die Datei sequentiell, wobei offensichtlichauch alle Sätze in den Pufferspeicher transportiert werden, weil das DBMS natürlich nichtweiß, welche Information des Datensatzes für das Programm an dieser Stelle wichtig ist.LASTREC() dagegen ist eine Variable, die aus dem Verwaltungsteil der Datendateistammt.

12.2.1 Struktur von Bäumen

Bevor wir uns mit den Indexdateien direkt auseinandersetzen, ist es notwendig, ein wenigTheorie voranzustellen.

Page 270: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-34 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

12.2.1.1 Binäre Bäume

Eine einfache Indizierung erreichen wir über die Grundstruktur des binären Baumes

Der oberste Knoten (Wurzel) istvollständig dargestellt. Wir benöti-gen einen Zeiger auf den Satz derDatenbasis sowie zwei weitereZeiger auf die Folgeschlüssel.

Es handelt sich um einen gerich-teten Graphen, mit der Regel, daßder linke Kind-Schlüssel einen klei-neren lexikalischen Wert, derrechte Kind-Schlüssel einen größe-

ren Wert als der Vaterknoten besitzt. Knoten, die keine Nachfolger besitzen, werdenBlätter genannt.

Jeder Knoten läßt sich nach k Schritten von der Wurzel aus erreichen. Es ist die Stufe(Niveau) des Knotens. Das größte auftretende Niveau h:=max(k) wird Höhe des Bau-mes genannt.

Jedes Nichtblatt kann wiederum als Ausgangspunkt eines Teilbaumes aufgefaßt werden.Damit handelt es sich beim Baum um eine rekursive Datenstruktur.

12.2.1.2 B-Bäume

Bei den binären Bäumen kann es bei den Einfüge- und Löschoperationen sehr schnell zueinem starken Ungleichgewicht zwischen den verschiedenen Teilbäumen kommen, d. h.die Höhe der Teilbäume unterscheidet sich um mehr als 1. Der Baum entartet, der Ge-schwindigkeitsvorteil gegenüber einer linearen Liste schmilzt dahin.

Bäume mit der Eigenschaft, daß sich die Höhen höchstens um 1 unterscheiden be-zeichnet man als ausgeglichene oder AVL-Bäume (nach der Definition von Adelson-Velskii und Landis, 1962).

Nun können wir jeden Baum nach einer Änderung mit einem AVL-Algorithmus wiederausgleichen. Dies ist jedoch relativ aufwendig. Daher hat man sehr intensiv nach Kriterienfür ein kontrolliertes Wachstum gesucht, wobei man natürlich auf die vollständige Ausge-glichenheit verzichten muß. Ein heute allseits angewandtes Verfahren wurde 1970 von R.Bayer und E. McCreight entwickelt. Hierbei entstehen B-Bäume (Bayer- oder Balanced-Bäume je nach Nationalstolz).

Jede Seite (außer einer) enthält zwischen k und 2k Knoten für ein bestimmtes, kon-stantes k. k heißt dabei die Ordnung des B-Baumes. Die Eigenschaften sind folgen-dermaßen festgelegt

1. Jede Seite enthält höchstens 2k Elemente (Schlüssel).

Schl üss el

Schl üss el

Satz nummer

l i nk s r ech t s

Schl üss el Schl üss el

Schl üss el Schl üss el Schl üss el

Page 271: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-35

2. Jede Seite, außer der Wurzelseite, enthält mindestens k Elemente.3. Jede Seite ist entweder eine Blattseite, d. h. hat keine Nachfolger, oder sie hat

m+1 Nachfolger, wobei m die aktuelle Zahl der Schlüssel in der Seite ist.4. Alle Blattseiten liegen auf der gleichen Stufe.

Sehen wir uns alsBeispiel einen B-Baum der Ordnung2 mit 3 Stufenan. Alle Seitenenthalten 2,3oder 4 Elementemit Ausnahme der

Wurzel, die nur ein Element enthält. Der Einfach halber sind die Schlüssel zweistelligeGanzzahlen, so daß die Sortierordnung gut erkennbar ist. Die Zeiger auf die Folgeseitensind nur angedeutet.

Die Seiten enthalten die Schlüssel in sortierter Folge, was physikalisch nicht unbedingtnotwendig ist, wie es die nachfolgende Realisation in Clipper zeigt. Würde man die Ord-nung erhöhen, so würden die Seiten in größeren Einheiten zusammengefaßt, bis schließ-lich eine einzige Seite mit einer sortierter Liste entsteht.

Jede Seite enthält neben den Schlüsseln Si , die Datensatzzeiger Di und die Zeiger aufdie Folgeseiten Zi

Suche in einem B-Baum

Beim Suchen in B-Baum wird zuerst die Wurzelseite in den Zentralspeicher gebracht. An-schließend werden weitere Seiten eingeladen. In jeder Seite können wir entweder se-quentiell oder bei großem m binär nach dem gewünschten Schlüssel S suchen. Wird ergefunden, dann erreichen wir über die Satznummer sofort die gesuchte Information. Wirder nicht gefunden, so ergeben sich folgende Möglichkeiten

1. S[i] < S < S[i+1] für 1<=i<m Fortsetzung der Suche auf der Seite Z[i]

2. S[m] < S Fortsetzung der Suche auf Seite Z[m]

3. S < S[1] Fortsetzung der Suche auf Seite Z[0]

Treffen wir bei der wiederholten Suche auf einen Zeiger mit dem Wert NIL (Not InList), dann fehlt der Nachfolger, der Schlüssel ist nicht im Baum. Interessant ist der

02 05 07 08

25

10 20 30 40

13 14 15 18 22 24 26 27 28 32 35 38 41 42 45 46

Z0

S1

D1

Z1

S2

D2

Zn-1

Sn

Dn

freier PlatzZn

Z Zeiger auf SöhneS SchlüsselD Zeiger auf Satz mit Schlüssel S

Z 0 zeigt auf Teilbaum mit Schlüsseln kleiner als S 1

Z i zeigt auf Teilbaum mit Schlüsseln zwischen S und S i+1

Zn

zeigt auf Teilbaum mit Schlüsseln größer als Sn

.....

In den Blättern sind die Z undefiniert.

i

Page 272: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-36 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Nebeneffekt, daß der in der Sortierreihenfolge nachfolgende Schlüssel in diesem Fallsehr einfach gefunden werden kann.

Einfügen eines Schlüssels in einen B-Baum

Es gilt die einfache Regel, daß das Einfügen neuer Elemente ist nur in den Blättern er-laubt ist.

Dabei wird normalerweise nurdie aktuelle Seite verändert.Anders sieht es aus, wenndie Seite voll ist. Hier ist esnotwendig, neue Seiten an-zulegen. Hierzu teilen wir dieübergelaufene Seite mit den2k+1 Schlüsseln in je eineSeite mit k Schlüsseln. Dermittlere Schlüssel wird in den

Vaterknoten übernommen. Als Beispiel wollen wir den Schlüssel 22 in einen B-Baumder Ordnung 2 und der Höhe 2 einfügen.

Wir gehen in folgenden Schritten vor

1. Der Schlüssel 22 wird gesucht und nicht gefunden. Das Einfügen auf der Seite C istnicht möglich, weil sie voll ist.

2. Die Seite C wird logisch um den Schlüssel 22 erweitert (hier vorn eingefügt) und an-schließend aufgeteilt in die alte Seite C und eine neue angelegte Seite D.

3. Der mittlere Schlüssel 30 wird eine Stufe höher an die Seite A übergeben, die ihrer-seits nach dem gleichen Verfahren erweitert wird.

Nun kann natürlich die Vaterseite auch überlaufen. Also wird auch hier das Verfahren re-kursiv angewandt. Dies geht solange gut bis wir auf die Wurzel treffen. Wenn diese über-läuft, so müssen wir zwei neue Seiten anlegen, eine für die Hälfte der übergelaufenenWurzel und eine neue Wurzel, die nur das mittlere Element enthält.

Das sehr einfache und elegante Verfahren sorgt dafür, daß in den neuen Seiten genau kElemente vorhanden sind. Im Gegensatz zum normalen Baum wächst der B-Baum nachoben von den Blättern zur Wurzel heraus.

Löschen eine Schlüssels im B-Baum

Leider ist das Löschen eines Elementes im B-Baum weitaus komplizierter als das Einfü-gen, wenn wir die Ausgeglichenheit erhalten wollen.

Zuerst müssen wir natürlich das Element erst einmal finden. Hier müssen wir unterschei-den, ob sich das Element auf einer Blattseite oder einer Knotenseite befindet.

Auf der Blattseite wird das Element einfach gelöscht.

Auf einer Knotenseite existiert bekanntlich ein Zeiger auf eine Folgeseite. In diesem Falldürfen wir nun beides nicht einfach löschen. Vielmehr müssen wir das Element durch ei-

07 10 15 18

20

26 30 38 42 07 10 15 18

20 30

22 26 38 40

A (Wurzel)

B C

A

B C D

22 26 30 38 40

neu Mitte

Page 273: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-37

nes der beiden lexikographisch benachbarten Elemente ersetzen, z. B. den nächst kleine-ren Schlüssel. In diesem Fall wandern wir also nach links durch den darunterliegendenTeilbaum und verschieben das Element (des am weiten links stehenden Blattes) an dieseStelle. Im Blatt verringert sich die Zahl der Elemente um 1.

Nun kann es in beiden Fällen zu einem Unterlauf in einem Blatt kommen, d. h. die Anzahlder Elemente m sinkt unter k. Diesen Unterlauf müssen wir nun durch Verschieben vonElementen aus einer der Nachbarseiten beseitigen. Es würde ein Element ausreichen. Daaber das Einlesens einer ganzen Seite sehr aufwendig ist, können wir gleich wieder alleElemente gleichmäßig auf beide Seiten aufteilen.

Nun können aber auch alle Nachbarseiten gerade mal nur k Elemente besitzen, so daß2k-1 Elemente in der Vereinigungsmenge existieren. In diesem Fall können wir beideSeiten zusammenlegen und sogar noch das mittlere Element aus der Vaterseite hinzufü-gen, um zu einem ausgeglichenen B-Baum zu kommen. Dies kehrt den Einfügevorgangeins zu eins um.

Aber nun kann auf der Vaterseite ein Unterlauf erfolgen. Dann müssen wir das Zusam-menlegen solange wiederholen, bis wir auf die Wurzel treffen. Im Extremfall hat diese nureinen einzigen Eintrag, den wir entfernen. Es entstehen zwei leere Seiten, der Baumschrumpft in seiner Höhe um 1 und zwar wieder über die Wurzel. Insgesamt werden mitder zusammengelegten Blattseite 3 Seiten freigesetzt. Diese kommen auf den Freispei-cher und werden später wieder gefüllt.

Ein anderer Sonderfall ergibt sich, wenn eine Seite unterläuft, die benachbarte(n) Seitenaber gut gefüllt sind. In diesem Fall "borgt" sich die unterlaufende Seite Elemente von denNachbarseiten, wobei aber die Elemente logisch über die Vaterseite geschoben werden.

Würden wir nun das gerade gelöschte Element wieder einfügen, dann würden wieder dreineue Seite angelegt. In dBase werden die Seiten immer hinten angefügt, leere Seiten im"Inneren" werden nicht wieder verwendet, d. h. der Index wächst unnötigerweise an. Da-bei ist das Verfahren zur Wiederverwendung relativ einfach. Wir verknüpfen einfach dieleeren Seiten über Zeiger und verankern diesen in der Erde. Wird nun eine neue Seitebenötigt, dann wird zuerst die Kette der leeren Seiten abgebaut. Erst wenn diese leer ist,werden neue Seiten auf der Platte angefordert. Dadurch steigt der Platzbedarf um1 KByte an.

Sehen wir uns nun das Löschen noch einmal an unserem Beispiel an, indem wir zuerst25 löschen

Dies führt dazu,daß die 26 durchden Baum zurWurzel geschobenwird.

02 05 07 08

25

10 20 30 40

13 14 15 18 22 24 26 27 28 32 35 38 41 42 45 46

Page 274: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-38 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Jetzt löschen wirz. B. 22, die Sei-ten werden neuaufgeteilt

Durch das Lö-schen würde eineSeite unterlaufen.Die überschüssige24 ist aber nichtauf die anderenSeiten verteilbar,also werden die

Seiten neu aufgeteilt. Dabei wird die 18 nach oben zum Vater geschoben, die 20 abervom Vater zur untergelaufenen Seite. Würde auch die Nachbarseite unterlaufen, so gehtdie Suche bei den weiteren Nachbarn weiter. Nur wenn alle Seiten gleichmäßig abgebautsind, erfolgt ein Zusammenlegen.

12.2.2 Aufbau einer Indexdatei der xBase-Klasse

Die Indexdateien in dBase .NDX und Clipper .NTX unterscheiden sich bekanntlich.Foxbase benutzt wiederum eine dritte, nichtkompatible Variante.

In der Indexdatei finden wir die "Erde", aus der der Baum mit seiner "Wurzel" beginnend(Root Page) wächst. Die Erde enthält reine Verwaltungsinformationen sowie einen Zeigerauf die Wurzel. Der Aufbau dieser Erde ist in Clipper und dBase unterschiedlich

.NTX-Datei Aufbau der 1024 Byte der "Erde"

Byte Typ Beschreibung1-2 unsigned 06 als Kennzeichnung einer Clipper-Datei3-4 unsigned Version des Indexsystems zur Verarbeitung5-8 long Zeiger auf die Wurzelseite9-12 long Zeiger auf die erste unbenutzte Seite, die wiederum einen

Zeiger auf die nächste leere Seite enthält, so daß alle freienSeiten eine Liste bilden.

13-14 unsigned Größe zweier long-Typen + Schlüsselgröße15-16 unsigned Schlüsselgröße17-18 unsigned Anzahl der Dezimalstellen eines numerischen Index19-20 unsigned Maximale Anzahl MAXITEMS von Schlüsseln in einer Seite21-22 unsigned Minimale Anzahl von Schlüsseln in einer Seite23-272 Zeichen Indexausdruck273-274 integer 1/0 für UNIQUE ON oder UNIQUE OFF275-1024 ? unbenutzt

Die Erde der dBase-Indexdatei ist nur halb so groß

02 05 07 08

26

10 20 30 40

13 14 15 18 22 24 27 28 32 35 38 41 42 45 46

02 05 07 08

26

10 18 30 40

13 14 15 20 24 27 28 32 35 38 41 42 45 46

Page 275: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-39

.NDX-Datei Aufbau der 512 Byte der "Erde"

Byte Typ Beschreibung1-4 long Zeiger auf die Wurzelseite5-8 long Anzahl der Seiten in der Indexdatei9-12 ? unbenutzt13-14 unsigned Schlüsselgröße15-16 unsigned Maximale Anzahl von Schlüsseln in einer Seite17-18 unsigned Typ: 00 kennzeichnet einen Zeichenschlüssel

01 einen numerischen oder Datumsschlüssel19-22 long Größe zweier long-Typen + Schlüsselgröße23 ? unbenutzt24 integer 1/0 für UNIQUE ON oder UNIQUE OFF25-512 ? unbenutzt

Wir erkennen sehr schnell die Unterschiede in beiden Erden.

Clipper verwaltet zusätzlich die leeren Indexseiten, die beim umfangreichen Löschen ineiner Datei entstehen können. Durch die Verkettung der leeren Seiten ist es möglich, beider Erweiterung des Index diese Seiten wieder zu verwenden. Der Index wächst alsonicht so schnell an, obwohl er natürlich aufgrund der Vergrößerung der Erde schon ein-mal mehr Platz verbraucht. Auch die eigentlichen Indexseiten sind bei Clipper mit 1024Byte doppelt so groß wie in dBase.

Weiterhin wird der gesamte Indexausdruck, mit dem der Index angelegt wurde, gespei-chert.

Da die Anzahl der Seiten bei Clipper nicht gespeichert wird, muß es einen anderen Algo-rithmus geben, um das Dateiende zu erkennen.

Aufgrund eines Eintrages in der Nachkommastellenzahl erkennt Clipper gleichzeitig denTyp des Schlüssels. Schüssel mit dem Wert 0 sind „String“-Schlüssel.

Die Tabellen zeigen uns weiterhin, daß alle Zahlen im binären Format gespeichert sind.Wir müssen sie also mit den Funktionen BIN2I(), BIN2W() und BIN2L() vor derVerarbeitung wandeln.

Alle anderen Seiten der Indexdatei sind Indexseiten, die neben einigen wenigen Verwal-tungsinformationen die Schlüssel mit Zeigern enthalten. Die Informationen sind dyna-misch entsprechend der Schlüssellänge gespeichert. Dabei liegen die Sätze durchausnicht dicht. Sie werden über eine spezielle Zeigertabelle am Anfang der Seite adressiert

Page 276: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-40 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

.NTX-Datei Aufbau der 1024 Byte einer "Indexseite"

Byte Typ Beschreibung1-2 unsigned Anzahl der Einträge in dieser Seite3-4 unsigned Offset des 1. Schlüsseleintrages in der Seite4-5 unsigned Offset des 2. Schlüsseleintrages in der Seite

?-? unsigned Offset des (MAXITEM)-Schlüsseleintrages?-? unsigned Offset des (MAXITEM+1)-Schlüsseleintrages?-? unsigned ????-? long Zeiger auf die folgende Seite (Kind-Seite)?-? long Zeiger auf den Datensatz?-? ? Schlüsseleintrag

Um also einen Eintrag zu finden, müssen wir zuerst die aktuelle Anzahl der Einträge ausden beiden ersten Bytes lesen

var:=SPACE(2)FREAD(fhandle,@var,2)anzahl:=BIN2W(var)

Danach folgt eine Gruppe von Wörtern (je 2 Bytes) mit den internen Offsets der mögli-chen Schlüsseleinträge relativ zum Seitenanfang

FOR i:=1 TO maxitem+1 var:=SPACE(2) FREAD(fhandle,@var,2) adresse[i]:=BIN2W(var)NEXT

Um nun einen Eintrag (Schlüssel) j zu lesen, müssen wir absolut zum Dateibeginn aufdie Adresse j positionieren. Hierzu berechnen wir aus der Seitenlänge 1024 denOffset der Seite und addieren die Adresse des Schlüsselanfangs hinzu. Dort finden wir 4Byte für den Zeiger auf die (linke) Folgeseite, 4 Byte für den Zeiger auf den Datenbank-satz und den variabel langen Schlüssel

FSEEK(fhandle,basis*1024+adresse[j],0)var:=SPACE(4)FREAD(fhandle,@var,4)seite:=BIN2W(var)/1024 && Folgeseitevar:=SPACE(4)FREAD(fhandle,@var,4)satznr:=BIN2W(var) && Zeiger auf .DBF-Satzvar:=SPACE(keylaenge)FREAD(fhandle,@var,keylaenge)key:=var

Diese Internas helfen uns nun, die Schlüssel physikalisch zu optimieren. Pro Schlüsselbenötigen wir in einer Indexseite

Page 277: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 96260 Seite: 12-41

2 Byte Offset in der Seitentabelle4 Byte Folgeseite4 Byte Satznummern Byte Schlüssel

Diese n+10 Byte müssen nun in die 1022 (1024-2 für die Anzahl) Byte einer Index-seite hineinpassen. Gerade bei langen Schlüsseln ist die optimale Wahl der Schlüssel-länge von Vorteil für die Verarbeitung. Bei der in dBase maximal zulässigen Schlüssel-länge von 250 Byte sollten gerade mal 3 Schlüssel in einen Indexblock passen. Da nunwiederum die Anzahl der Schlüssel Vielfaches von 2 sein muß, reduziert sich die Anzahlauf 2 Schlüssel.

Teilen wir 1020 durch 4, so ergibt sich als theoretischer Wert 255 Byte, so daß einSchlüssel mit 245 Byte bereits 4 Einträge haben sollte. Dem ist aber in Praxis nicht so.Legen wir verschiedene Dateien mit unterschiedlich langen Schlüsseln an, so können wirfeststellen, daß folgende Tabelle gültig ist

Schlüssel MAXITEMS Schlüsselbytes

mit Zeigern+8/Schlüssel

Gesamtbytes+2/Schlüssel + 4

250 2 500 516 524195 2 390 406 414194 4 776 808 820136 4 544 576 588135 6 810 858 874104 6 624 672 688103 8 824 888 908

Offensichtlich stimmt unsere Rechnung so nicht. Wir haben vergessen, daß wir nebenden Zeigern nach "links" noch einen weiteren Zeiger nach "rechts" am Ende des letztenSchlüssels haben. Dieses wird aber wohl von dBase nicht wie erwartet optimiert. Vielmehrwird das ganze Verfahren um einen "leeren" Schlüssel erweitert, der nur den Zeiger aufdie Kind-Seite verwaltet. Damit ergeben sich folgende Übergangswerte

MAXITEMS Schlüssel mit Zeigern+10/Schlüssel

bis 2 195 205bis 4 194 204bis 6 136 146bis 8 103 113

bis 10 82 92bis 12 68 78bis 14 58 68

Unser Programm zur Untersuchung von Indexdateien mit einer Anzeige der verschiede-nen Seiten sieht folgendermaßen aus

Fehler! Kein gültiger Dateiname.

Mit Hilfe dieser Kenntnisse können wir nun eigene Unterprogramme schreiben, die z. B.die Anzahl der Schlüssel zählen oder die Existenz eines Schlüssels ohne Zugriff auf dieDatendatei überprüfen usw.

Page 278: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 12.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 12-42 D:\Eigene\Doku\DB\DB12Übun.doc – 96260

Fehler! Kein gültiger Dateiname.

Page 279: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 12.04.97 11:52/12.04.97 11:52 Seite: 9-I

Datenbanken – Übungen Realisation

9 Realisation ....................................................................................................................9-1

9.1 Binärer Baum in Visual Basic ..............................................................................9-1

9.1.1 Programmierung ..............................................................................................9-1

9.1.1.1 Erweiterungsmöglichkeiten ....................................................................9-12

9.1.1.2 Realisation..............................................................................................9-12

9.1.1.3 Zentrale Bibliothek..................................................................................9-13

9.1.1.4 Formular- und Ablaufentwurf..................................................................9-14

9.1.1.5 Globale Deklarationen............................................................................9-15

9.1.1.6 Programmierung.....................................................................................9-17

9.1.1.7 Fehlersuche............................................................................................9-31

9.2 Untersuchung einer xBase-Indexdatei .............................................................9-33

9.2.1 Struktur von Bäumen .....................................................................................9-33

9.2.1.1 Binäre Bäume.........................................................................................9-34

9.2.1.2 B-Bäume.................................................................................................9-34

9.2.2 Aufbau einer Indexdatei der xBase-Klasse ...................................................9-38

Page 280: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-1

9 Realisation

9.1 Binärer Baum in Visual Basic

9.1.1 Programmierung

Schreiben Sie ein Programm zur Verwaltung binärer Bäume mit beidseitigen Rücksprun-gankern.

Wir entscheiden uns für die Programmiersprache Visual Basic, da diese die optimaleOberfläche für unsere Zwecke anbietet.

Wir gehen nach einem bewährten 10 Punkte Programm vor. Ausgehend von den Datenwird der Algorithmus abgeleitet

1. Daten

Da ein Dialogprogramm entworfen werden soll, ist eine strenge Trennung zwischen Ein-und Ausgabe nicht mehr nötig. Die gleiche Bildschirmmaske dient sowohl zur Ein- wieauch zur Ausgabe.

Wir legen also Formular an, in dem wir die wesentlichen Felder und alle Funktionen alsSchaltflächen vorbereiten.

Die Funktion DEBUG ist zu Demonstrationszwecken hinzugefügt, um die Wirkungsweiseder Baumverwaltung zu zeigen. Sie ist außerordentlich hilfreich bei der Programment-wicklung, kann aber in einem Benutzerprogramm entfallen. Sie listet den Inhalt der Dateiauf. Auch über die Nützlichkeit der Initialisierungsroutine im Anwenderbetrieb läßt sichstreiten. Beim Testen ist aber das Rücksetzen einer zerstörten Datei sehr hilfreich.

Nun müssen wir noch die Datenstruktur festlegen. Hier können wir durchaus einen lega-len Trick anwenden, um das Programm möglichst universell verwenden zu können. Wieaus der Theorie wissen, benötigen wir zwei verschiedene Satztypen in unserer Datei,einmal die Erde und zum zweiten die eigentlichen Datensätze.

Zur Verwaltung selbst ist der Inhalt der Datensätze bis auf den Schlüssel uninteressant.Der Benutzer dagegen wird sich kaum um die Verwaltungsinformationen kümmern wol-len.

In Visual Basic müssen alle Datensätze gleich lang sein. Über die Satzlänge berechnetnämlich Visual Basic die physikalische Position des Satzes, indem es die Länge mit derSatznummer multipliziert. Dies ist z. B. der Grund dafür, daß wir nicht einfach beliebigeKundennummern als Satznummern nehmen können. Begännen wir einfach mit einerKundennummer 10.000, dann blieben die ersten 9.999 Sätze unbelegt, verbrauchtenaber durchaus den entsprechenden Speicherplatz.

Wenn wir schon zwei Masken benötigen, dann können wir auch gleich eine weiter benut-zerspezifische Maske auf den Datensatz legen. Somit legen wir drei Datensatztypen fest

Page 281: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-2 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Type erdetyp zeigerneu As Integer zeigerwurzel As Integer zeigergelöscht As IntegerEnd Typ

Type satztyp zeigerlinks As Integer zeigerrechts As Integer schlüssel As String * SLÄNGE inhalt As String * ILÄNGEEnd Type

Type inhalttyp verwaltung As String * 4 name As String * SLÄNGE vname As String * 10 straße As String * 20 lk As String * 3 plz As String * 5 ort As String * 20End Type

Die Grundidee dieser Mehrfachmaske besteht darin, die Verarbeitung unabhängig vonder individuellen Dateistruktur zu machen. Statt einer Kundendatei möchten Sie vielleichteine Produktdatei, eine Literaturdatei usw. bearbeiten. Daher sind so weit wie möglich dieindividuellen Strukturen von den allgemeinen getrennt worden.

Die Typbeschreibungen und ihre Instantiierungen sind offensichtlich unterschiedlich lang.Dies ist jedoch unerheblich. Wir können uns die Instanzen der Satztypen einfach als Text-puffer vorstellen, in die die Datensätze hinein und heraus geschoben werden. Dabei wer-den überschüssige Zeichen einfach abgeschnitten bzw. fehlende Zeichen mit Leerstellenergänzt. Die Erde muß also nicht an die Gesamtlänge angepaßt werden. Den Verwal-tungssatz müssen wir aber auf die Gesamtlänge des Inhaltssatzes bringen, da wir diesenschreiben.

Wir sollten aber immer daran denken, daß es sich um unterschiedliche Datenbereichehandelt. D. h. wir müssen den Datensatz in beide Puffer einlesen, da eine direkte Zuwei-sung von Visual Basic abgelehnt wird. Dies ist jedoch weitgehend zeitlich unkritisch, dader Dateizugriff über den DOS-Puffer erfolgt, so daß kein Plattenzugriff notwendig ist.

2. Namensvergabe

Wir verwenden folgende Variablen:

fnr Fehlernummerinhalt Inhalt des aktuellen Datensatzesk0 Hilfszeiger auf einen Knotenknv(0..1) Knotenvater (0) links

(1) rechtsknz(0..3) Knotenzeiger (0) links

(1) rechts(2) links Zwischenspeicher(3) rechts Zwischenspeicher

kv Arbeitszeiger Vaterkx Arbeitszeiger auf freien Datensatz

Page 282: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-3

ky Arbeitszeiger auf freien Datensatzkz Arbeitszeiger auf den aktuellen Knoten (aktiver Datensatz)schlüssel Schlüssel des aktuellen Datensatzesz Richtung Sohn nach =0 links, =1 rechts

3. Datenstrukturen

Die grundlegenden Datenstrukturen wurden bereits beschrieben, so daß sie hier nichtnoch einmal dargelegt werden sollen.

Im Programm verwenden wir neben einfachen Variablen (Skalaren) auch Felder. DieKnotenzeiger knv , knz sind als Feld mit mindestens zwei Elementen angelegt. Hier-durch ist es möglich, durch den Index 0 und 1 den linken oder rechten Teilbaum anzu-steuern. Dies erspart uns umfangreiche logische Konstruktionen.

4. Verarbeitungsregeln/Bedienungsfreundlichkeit

Die Funktionen sind bereits durch das Menü festgelegt. Der Gesamtablauf steht abernoch nicht fest:

1. Aufruf des Programms mit Positionierung auf den ersten Datensatz;2. Wiederholtes Anfordern der verschiedenen jeweils gültigen Funktionen. Fehler

beenden nur die Funktion, nicht jedoch das Programm;3. Beenden des Programms mit automatischem Schließen der bearbeiteten Datei.

Auch wenn Visual Basic bereits eine ausgefeilte Eingabetechnik anbietet, so sind docheinige Ergänzungen wünschenswert. Dies sind

1. Beschränkung der Eingabefelder auf die Länge der Datensatzfelder. Das auto-

matische Abschneiden kann hier nicht als Lösung angesehen werden. Wir reali-sieren diese Forderung über eine Windows-API-Funktion (Application Program-ming Interface). Hierbei benötigen wir zwei Funktionen SendMessage undGetFocus . Letzteren setzen wir dazu ein, den Handle des Steuerelementes zubestimmen, da Visual Basic nur den Handle des Formulars liefert. Wir setzen al-so mit . SetFocus den Eingabefokus auf das gewünschte Eingabeelementund rufen dann SendMessage auf. Diese versorgen wir mit der NachrichtEM_LIMITTEXT und der Länge des Dateifeldes.

2. Auch wenn es in vielen Visual-Basic-Lehrbüchern anders steht, so ist doch dieZeilenschaltung für den Benutzer eine besondere Taste. Der Cursor sollte nacheiner Zeilenschaltung auf das nächste Feld springen.

3. Die individuellen Eingabefelder dürfen z. B. nur mit Ganzzahlen, großen Zei-chen, große Buchstaben, positive Zahlen usw. beschickt werden. Hierzu könnenwir eine ganze Sammlung individueller Eingabefunktionen programmieren. Da-mit diese beliebig oft wiederverwendbar sind, fassen wir sie in einer Bibliothekeingabe.bas zusammen.

Der Phantasie für weitere, nützliche Funktionen ist natürlich keine Grenze gesetzt.

Page 283: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-4 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

5. EVA-Diagramm

Das EVA-Diagramm (Eingabe Verarbeitung Ausgabe) wird nun schon etwas komplizier-ter. Wir verknüpfen es noch mit einem Hierarchiediagramm und haben damit einen voll-ständigen HIPO-Entwurf (Hierarchy plus Input-Process-Output)

6. Prüfung

Die Prüfung beginnt immer bei der Ausgabe. Alle Ausgabedaten müssen auf Eingabeda-ten oder Algorithmus-immantente Daten zurückgeführt werden.

7. Plausibilitäten

Für die Schlüssel (Namen) gibt es keine Einschränkungen, da der Rechner nicht in derLage ist, eine Semantikprüfung (Bedeutungsprüfung) durchzuführen.

Die Plausibilitätsregeln reduzieren sich daher auf:

die internen Plausibilitäten der Felder:

1. Der Schlüssel darf nicht leer sein (d. h. nicht lauter Leerstellen enthalten).2. In die verschiedenen Felder dürfen nur bestimmte Zeichen eingegeben werden.3. Eine Reihe von Felder sind Mußfelder und dürfen nicht leer sein.

und die externen Plausibilitäten:

Dies sind Plausibilitäten, die der Rechner nicht allein aus der direkten Eingabe allein her-aus entscheiden kann.

Hier können wir benutzerspezifische und programmspezifische Plausibilitäten unterschei-den:

benutzerspezifische Plausibilitäten

Postleitzahlen, OrteIm Rahmen der neuen Postleitzahlen können wir natürlich eine automatischeÜberprüfung bzw. eine automatische Zuordnung von Postleitzahl und Ort vorneh-men.

programmspezifische Plausibilitäten

Neueingeben1. Der Satz darf nicht vorhanden sein (Eindeutigkeit).2. Es muß noch eine freie Satznummer vorhanden sein.

Neueingeben Ändern Löschen Suchen

ISAM

1 N 2 A 3 L 4 S

0 V

Page 284: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-5

3. Es muß noch Platz auf der Platte sein.

Ändernwie beim Neueingeben und Löschen

Löschen1. Der zu löschende Satz muß vorhanden sein.

Suchen1. Der zu findende Satz muß vorhanden sein.

Vorwärtslesen1. Der aktuelle Zeiger muß positioniert sein.2. Ein Nachfolger muß vorhanden sein.

Rückwärtslesen1. Der aktuelle Zeiger muß positioniert sein.2. Ein Vorgänger muß vorhanden sein.

8. PAP, Struktogramm oder Pseudocode-Entwurf

Das Programm läßt sich recht leicht in Moduln aufspalten, die man einzeln betrachtenkann. Visual Basic verlangt sozusagen aus seiner Struktur heraus nach einzelnen Modulnund Prozeduren.

Wir legen zwei Moduln (Formulare) an. Das erste beinhaltet die Dateiverarbeitung, daszweite dient zur individuellen Informationsverarbeitung. Letzteres wird individuell an dieaktuelle Aufgabe angepaßt.

Vorarbeiten ( isam2_1.Form_Load )

Die Vorarbeiten können wir entweder in das Unterprogramm main oder in das Unter-programm Form_Load legen. Da wir das Dateiformular immer auf dem Bildschirm an-zeigen, wird es nur einmal geladen, so daß wir die Vorarbeiten hier unterbringen können.

Zuerst legen wir die Eigenschaften der Textfelder fest. Dann eröffnen wir die Datendateibzw. legen sie neu an, wenn sie fehlt. In diesem Fall müssen wir die Erde neu schreiben.Die Datendatei muß also mindestens einen Satz enthalten. Nun ist die Datei vorhandenund die Erde wird eingelesen. Selbstverständlich ist auch eine dynamische Abfrage desDateinamens über eine Dialogbox denkbar. Hierzu können wir z. B. das benutzerdefi-nierte Steuerelement CMDIALOG.VBX benutzen.

Da wir sofort einen ersten Datensatz auf dem Bildschirm anzeigen wollen, suchen wir zu-erst den Datensatz mit dem niedrigsten Schlüssel. Durch die Zuweisung des Schlüsselzum Form-Textfeld wird eine Verarbeitungskette angestoßen, die auch die anderen Fel-der (Inhalt und Datensatznummer) füllt.

Diese Technik bereitet dem "Altprogrammierer" sicher die größten Umstellungsschwierig-keiten. Sie mögen mir die Anmerkung verzeihen, aber oft lautet in Visual Basic die Devise

Denn Sie wissen nicht, was Sie tun!

Page 285: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-6 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Wollen Sie ein fremdes Programm verstehen, dann müssen Sie bei jeder Anweisung derForm

textfeld.Text = wert

im Listing nachschauen, ob da nicht eine Ereignisprozedur

textfeld_Change

existiert. U. U. wird in dieser Prozedur wieder eine Ereignisprozedur aufgerufen usw. usw.Hier heißt es einerseits die Überblick zu behalten und auf unerwünschte Nebeneffekte zuachten. Schließlich können gerade zum Programmbeginn noch Daten fehlen, an die mannormalerweise nicht denkt. Im Listing sind daher alle Elemente mit einem Präfix versehen(tf Textfeld, sf Schaltfeld, vl vertikaler Lauf usw.). Treffen Sie auf ein solches Ele-ment, so müssen die immer nach zugehörigen Ereignisprozeduren suchen.

Die Zuweisung tf_schlüssel.Text = schlüssel stößt also die Ereignisprozedurtf_schlüssel_Change an. In dieser wird der Satz (unnötigerweise aber kaum ver-meidbar) noch einmal gesucht und das Formular gefüllt. Da nun aber auch die Zuweisungtf_schlüssel.Text="" diese Prozedur triggert, müssen wir an den Kopf solcher Pro-zeduren eine Reihe von logischen Abfragen programmieren, die die Zulässigkeit des Pro-zeduraufrufes prüfen. In unserem Fall wird also der Schlüssel auf Existenz und die Dateiauf mindestens einen Datensatz geprüft. Visual-Basic-Programme bestehen daher häufigaus eigenständigen Prozeduren mit einem Kopfteil, in dem Zulässigkeiten geprüft werden,und einem Schwanzteil, in dem die (globalen) Schalter für die nachfolgenden Prozedurengesetzt werden, die wieder die anderen Prozeduren steuern.

Bevor wir nun die einzelnen Teilfunktionen abhandeln, wollen wir wenigstens noch eineTestprozedur debug1_Click definieren, die uns bei der Programmentwicklung unter-stützen. Diese listet uns einfach die Datensätze der Datendatei im Direktfenster auf. Istdas Programm stabil, dann können wir diese Schaltfläche abschalten. Für spätere Testsist es aber sinnvoll, solche Prozeduren im Programm zu belassen.

Teilfunktionen

(1) Neueingeben

Nach dem Neuanlegen der Datei existiert nur die Erde, in der der Baum "wachsen" soll

Dieser wird mit der Satznummer 2 ein-getragen. In der Erde wird 2 als Wurzel-zeiger eingetragen. Die Liste der neuen(freien) Satznummern beginnt bei 3

1 3 2 0 unbenut zt

I nhal tDamm0 02

Damm

1 2 0 0 unbenut zt

erster noch nie benutzter Datensatz

WurzelZeiger auf die Kette der gelöschten Sätze

Page 286: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-7

Jetzt wird der 2. Satz (Berg) eingegeben. Es entsteht die erste Abhängigkeit. Diese er-kennen wir am Zeiger 3 nach links. Bei Berg sehen Sie auch schon den ersten Anker-2

1 4 2 0 unbenutzt

InhaltDamm3 02

Damm

Berg

Inhalt3 0 -2 Berg

Der nächste Satz mit Burg verändert die Struktur in entscheidender Weise. Wir sehenwie der rechte Anker weitergereicht wird und wie ein linker Anker erscheint

1 5 2 0 unbenutzt

InhaltDamm3 02

Damm

Berg

Inhalt3 0 4 Berg

Inhalt4

-3 -2 BurgBurg

Bevor wir das Problem der Wiederbelegung gelöschter Sätze betrachten, wollen wir Re-geln für das Eintragen und die Behandlung der Anker aufstellen (die Aussagen für denrechten Anker sind symmetrisch):

1. Der neue Satz wird immer als Blatt an einen unvollständigen Knoten angehängt.Wird aber der Suchbegriff beim Suchen gefunden, so wird eine Fehlermeldungausgegeben. Diese muß im aufrufenden Programm entsprechend ausgewertetwerden.

2. Wird der Knoten als linker Sohn eingetragen, dann wird der Anker auf denNachfolgerknoten an Stelle des rechten Zeigers eingetragen.

3. Wird der Knoten als rechter Sohn eingetragen, dann wird der Anker des Vatersübernommen.

4. Der Weg rechts außen durch den Baum stellt einen Sonderfall dar, da hier keineAnker notwendig sind. Wollen wir die Regel 3 trotzdem anwenden, dann mußder Anker auf einen besonderen Knoten erfolgen (ähnlich [Wir83] S.230 ff). Hierbietet sich natürlich 0 als Anker an.

Zu diesen Regeln ergänzen wir jetzt die Verwaltung der gelöschten Satznummern.

5. Existiert ein gelöschter Satz im Stapel, dann wird dieser beschrieben, der Stapelwird um einen Satz erniedrigt. Dies muß in der Erde vermerkt werden.

6. Ist kein gelöschter Satz vorhanden, dann wird eine neue Satznummer belegt.Hierbei müssen wir beachten, daß die Satznummer nicht die Obergrenze 32767überschreitet (2.147.483.647 bei doppelter Länge). Selbstverständlich darf diePlatte dabei nicht überlaufen.

Page 287: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-8 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

BEGIN SP 2 "neuen Datensatz einordnen"IN "alle Informationen der Erde"OUT "Datensatz auf Diskette"EX "leeren Schlüssel ablehnen"1 IF 1 "gelöschte Datensätze vorhanden"2 SE 2 "freier Satz ist 1. gelöschter Satz"1 IEL 1 "kein gelöschter Datensatz vorhanden2 SE 3 "freier Satz ist neuer Satz in der Datei"EX "wenn kein Platz mehr vorhanden ist"1 IEN 11 IF 4 "Datei noch leer"2 SE 5 "Wurzel verändern"1 IEL 4 "Datei enthält schon Sätze2 SE 6 "Vater-Datensatz korrigieren"1 IEN 41 SE 7 "Anker übernehmen"1 SE 8 "neuen Datensatz schreiben"1 IF 9 "wenn Datensatz ein gelöschter Datensatz war"2 | SE 10 "Stapel korrigieren"1 IEL 92 | SE 11 "Zeigerneu korrigieren1 IEN 91 SE 12 "Erde schreiben"1 SE 13 "Formular vorbereiten"END SP 2 "neuer Datensatz eingeordnet"

(2) Ändern/Korrigieren

Beim Ändern kann der Schlüssel und/oder der Rest der Daten verändert werden.

Wird der Schlüssel nicht verändert, so kann der Satz auf der gleichen Satznummer über-schrieben werden.

Wird dagegen der Schlüssel verändert, dann muß der neue Schlüssel neu in den Such-baum eingefügt werden. Umgekehrt muß der alte Suchbegriff gelöscht werden.

Durch die vorgesehene dynamische Suche der Datensätze können wir uns die Korrektureines Schlüssels sehr einfach machen

1. Suche des zu korrigierenden Schlüssels2. Einlesen des neuen Schlüssels3. Sperren der Korrektur, wenn der neue Schlüssel schon vorhanden ist. Hierbei

wird der vorhandene Datensatz angezeigt.4. Löschen des alten Datensatzes, Neueintrag des neuen Datensatzes

(3) Löschen

Man unterscheidet grundsätzlich zwischen logischem und physikalischem Löschen.

Page 288: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-9

Beim logischen Löschen wird der Datensatz mit einem Löschkennzeichen markiert. Erbleibt aber in der Datei erhalten und kann wieder "entlöscht" werden. Bei allen Funktionenmüssen wir dieses Löschkennzeichen prüfen und entsprechend reagieren, z. B. beim ge-ordneten Lesen den Satz übergehen oder beim Suchen die Meldung "Satz gelöscht "ausgeben usw.

Beim physikalischen Löschen wird der Datensatz echt entfernt. Sein Speicherplatz kannwieder für neue Datensätze verwendet werden.

Da wir auch bei logischem Löschen hin und wieder die Datei bereinigen müssen, d. h. allegekennzeichneten Sätze endgültig löschen muß, betrachten wir gleich den Fall des phy-sikalischen Löschens.

Verglichen mit dem Suchen und Neueingeben ist das Löschen deutlich komplizierter, dajeder Knoten, also auch der Wurzelknoten, ein Blatt, ein innerer Knoten mit einem oderzwei Söhnen, ein Knoten mit Anker usw. gelöscht werden kann.

Grundsätzlich muß folgender Algorithmus realisiert werden:

1. Löschen des Datensatzes mit Einfügen in den Löschstapel2. Zusammenfügen der bis zu drei Teilbäumen wie schon beschrieben. Hierzu

werden die Zeiger des Vaterknotens neu gesetzt.3. Korrektur der Rücksprunganker auf beiden Seiten des gelöschten Knotens.

Hierbei muß der linke wie auch der rechte Teilbaum an den innenliegendenRändern durchlaufen werden, um diese Anker aufzuspüren und abzuändern.

Dies soll an einem Beispiel gezeigt werden

V

M

N

P

C

B

A

V

M

N

PC

B

A

L

Page 289: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-10 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Sollte die Programmiersprache verlangen, daß alle Datensätze in einer Datei gleich sind,so können wir auch auf einen getrennten Zeiger auf die Kette der gelöschten Datensätzeverzichten. Dann würde der Zeiger 10 in den gelöschten Datensatz hineinwandern. Esist dann etwas schwieriger die insgesamt belegten Sätze (inkl. der gelöschten) zu be-stimmen.

Wir sehen, daß es nur noch zwei Null-Zeiger gibt, nämlich die an den äußeren Rändern,alle anderen Stellen sind entweder mit Zeiger auf Söhne oder mit Anker belegt. UnserEntwurf sieht also folgendermaßen aus

1

2

3

4

5

6

7

8

9

10 2 0

3 0 V

4 7 L

5 6 B

0 -4

-4 -3

A

C

8 9 N

-3 -7 M

-7 -2 P

1

2

3

4

5

6

7

8

9

10 2 3

4 0 V

-1 0

5 6 B

0 -4

-4 7

A

C

8 9 N

-6 -7 M

-7 -2 P

gelö sch t

10 10

3 2

4 0

-1 10

5 6

0 -4

-4 7

8 9

-6 -7

-7 -2

Page 290: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-11

BEGIN SP 2 "Satz löschen"IN "Knotenzeiger"OUT "gelöschter Satz auf der Datei | Fehlermeldung"1 EX "Sicherheitsabfrage wird nicht bestätigt"1 SE 1 "Schlüssel für die Neupositionierung retten"1 IF 2 "Wurzel soll gelöscht werden"2 | SE 3 "Satz löschen"2 | IF 4 "kein linker Sohn vorhanden"3 | | SE 5 "rechter Sohn wird Wurzel"2 | IEL 4 "linker Sohn vorhanden"3 | | SE 6 "linker Sohn wird Wurzel"2 | IEN 41 IEL 2 "Satz soll gelöscht werden"2 | IF 7 "zu löschender Knoten hat keinen linken Sohn"3 | | SE 8 "Vaterknoten korrigieren und zurückschreiben"3 | | SE 9 "Löschstapel aufbereiten, gelöschten Satz zurück"3 | | SE 10 "Erde korrigieren und zurückschreiben"2 | IEL 7 "zu löschender Knoten hat einen linken Sohn"3 | | SE 11 "Vaterknoten korrigieren und zurückschreiben"3 | | SE 12 "Anker suchen und korrigieren"3 | | SE 13 "Stapel aufbereiten, gelöschten Satz zurückschreiben."3 | | SE 14 "Erde korrigieren und zurückschreiben"2 | IEN 71 IEN 21 SE 15 "Vorgänger suchen"1 SE 16 "Formular vorbereiten"END SP 2 "Satz gelöscht"

(4) Vorwärts- und Rückwärtslesen

Das Vorwärtslesen ist relativ einfach, da wir die Anker für das Vorwärtslesen bereits beiden anderen Funktionen verwalten. Wir müssen jedoch beachten, ob wir bei einem Rück-sprung über den Anker aus einem linken oder einem rechten Teilbaum zurückkommen.Ist der rechte Teilbaum noch nicht abgearbeitet, so müssen wir am linken Rand bis zumBlatt vorwärtslesen. Im Programm müssen wir weiterhin beachten, daß wir an den rechtenRand stoßen. In diesem Fall können wir nicht weiterlesen. Das Rückwärtslesen gehtsymmetrisch.

Testdaten

Für die verschiedenen Funktionen entwickeln wir gleich Testdaten, die eine möglichstvollständige Prüfung des Programms ermöglichen.

Auch wenn wir das Programm stufenweise entwickeln, so können wir hierbei bereitsTestfälle für spätere Funktionen berücksichtigen.

Als erstes werden wir das Anlegen der Datei und das Neueingeben realisieren, da alleanderen Funktionen eingegebene Daten voraussetzen.

Page 291: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-12 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Testdaten für das Neueingeben sind:− Wurzel eingeben− rechtes Blatt jeweils links außen, in der Mitte, rechts außen− linkes Blatt jeweils links außen, in der Mitte, rechts außen− nach mehreren Löschungen

Testdaten für das Löschen:− Wurzel löschen in den Varianten nur linker/rechter Teilbaum, beide Teilbäume− Knoten löschen mit den gleichen Varianten− Blätter löschen mit den verschiedenen Vater-Varianten

Testdaten für Vorwärtslesen:− von Anfang an− ab einer Position− bis zum Ende, wenn kein Nachfolger mehr vorhanden ist

9. Prüfen

Prüfen Sie den Entwurf mit verschiedenen Testdaten

10. Dokumentation

Schreiben Sie das Benutzerhandbuch.

9.1.1.1 Erweiterungsmöglichkeiten

Es gibt kein Programm, daß nicht noch verbessert bzw. erweitert werden kann.

So könnte man die dynamische Suche beschleunigen. Jetzt wird bei jeder Veränderungdes Schlüssels eine vollständige Suche durchgeführt. Hier ist aber auch ein anderer Algo-rithmus denkbar. Der Schlüssel wird entweder größer (z. B. durch einen weiteren Buch-staben) oder kleiner (durch einen Rückschritt), so könnte das Vorwärts- bzw. Rückwärts-lesen bei großen Dateien einen Geschwindigkeitsvorteil bringen.

Bei dieser Gelegenheit könnte auch ein Listenfeld mit den nächsten 10 Schlüsseln ange-zeigt werden. Ganz professionell wäre ein Kombinationsfeld über die Schlüssel. Hiermüssen wir aber beachten, daß wir sicher nicht den gesamten Index einlesen dürfen.

Weiterhin könnten zusätzliche Indizes (Sekundärindizes) wünschenswert sein, zwischendenen man hin- und herspringen kann.

9.1.1.2 Realisation

Wir wollen nun die Theorie in die Praxis umsetzen. Dabei soll es uns genügen, einen be-liebigen Datensatz mit einem Schlüssel versehen abzuspeichern. Die Zerlegung des Da-tensatzes ist dann von Anwendung zu Anwendung unterschiedlich.

Page 292: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-13

9.1.1.3 Zentrale Bibliothek

Damit wir nun nicht ständig immer wieder die gleichen Unterprogramme programmierenmüssen, legen wir uns eine zentrale Datei eingabe.bas an, in der wir alle Eingabe-Unterprogramme sammeln

Function alle_zeichen% (TastenAscii%, steuer As Control) '-------' akzeptiert alle Zeichen, schaltet aber weiter If tastenascii = 13 Then steuer.SetFocus alle_zeichen = 0 Else alle_zeichen = tastenascii End IfEnd Function 'alle_zeichen

Function große_buchstaben% (tastenascii As Integer, steuer As Control)' wandelt in große Zeichen um und akzeptiert nur Buchstaben Dim b As Integer b = Asc(UCase$(Chr$(tastenascii))) Select Case b Case 13 ' Zeilenschaltung steuer.SetFocus große_buchstaben = 0 Case 8, 65 To 90, 196, 214, 220 ' Rückschritt Buchstaben Uml. große_buchstaben = b Case Else große_buchstaben = 0 End SelectEnd Function 'große_buchstaben

Function große_zeichen% (tastenascii As Integer, steuer As Control)' wandelt in große Zeichen um If tastenascii = 13 Then steuer.SetFocus große_zeichen = 0 Else große_zeichen = Asc(UCase$(Chr$(tastenascii))) End IfEnd Function 'große_zeichen

Function nur_pzahlen% (tastenascii As Integer, steuer As Control)'testet auf positive Zahlen Select Case tastenascii Case 13 ' Zeilenschaltung steuer.SetFocus nur_pzahlen = 0 Case 8, 43, 46, 48 To 57 ' Rückschritt + . Ziffern nur_pzahlen = tastenascii Case 44 ' Komma in Punkt nur_pzahlen = 46 Case 79, 111 ' O, o in 0 nur_pzahlen = 48 Case 76, 108 ' L, l in 1 nur_pzahlen = 49 Case Else nur_pzahlen = 0 End SelectEnd Function 'nur_pzahlen

Diese Prozeduren überprüfen die Eingabe nach bestimmten Bereichen und fangen dieZeilenschaltung ab.

Page 293: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-14 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

9.1.1.4 Formular- und Ablaufentwurf

Nun entwerfen wir eine Arbeitsform, bei dem wir die Steuernamen nicht mit der Maskequalifizieren sondern mit dem Typ. Dies hat für Sie den Vorteil, am Namen auch die not-wendige Ikonenliste aus der Toolbox (Utensilienleiste) zu erkennen

tf Textfeldvl Vertikaler Laufsf Schaltfläche

Grundidee sind folgende Abläufe

− der Schlüssel ist ständig aufnahmebereit, das Programm befindet sich im Such-zustand. Deshalb fehlt eine entsprechende Schaltfläche;

− sobald ein vorhandener Schlüssel eingegeben ist, erscheint der Satzinhalt unddie Schaltflächen wechseln in den Änderungs-/Löschmodus. Dann kann derSatz mit Änderungen gespeichert werden oder vollständig gelöscht werden;

− ist der Schlüssel noch nicht eingetragen, dann könnte es sich um einen neuenhandeln, also kann die Schaltfläche Neu angeklickt werden;, das Programm

befindet sich im Suchzustand. Deshalb fehlt eine entsprechende Schaltfläche− mit Initialisieren werden alle Einträge gelöscht. Diese Funktion ist haupt-

sächlich für Testzwecke. Man wird sie nur in Ausnahmefällen dem Endbenutzerzur Verfügung stellen;

− mit Debug erfolgt ein Ausdruck des internen Knotenpfades auf das Direktfen-

ster. Auch diese Funktion dient zu Testzwecken.

Änderungen usw. werden auf mehrere Arten demonstriert

Name = tf_schlüssel

Name = tf_inhalt

Name = sf_zurück

Name = sf_weiter

Name = tf_satznr Name = sf_anfang

Name = sf_neu

Name = sf_schluß

Name = sf_debug

Name = sf_korrigieren

Name = sf_zeigen

Name = sf_ende Name = sf_initialisieren

Name = sf_löschen

Name = sf_ändern

Abbildung 9.1-1: Formentwurf

Page 294: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-15

− mit Ändern werden die aktuellen Benutzeränderungen im Formular abgespei-

chert. Wegen des aktiven Suchzustandes kann der Schlüssel nicht verändertwerden.

− mit Zeigen erscheint ein Formular (Abbildung 9.1-2), bei dem der Datensatz in

seine einzelnen Felder zerlegt ist. Diese werden auf Plausibilität geprüft. Auchhier bleibt er Schlüssel unveränderbar.

− mit Korrigieren erscheint ein gesondertes Formular (Abbildung 9.1-3) mit

dem der Schlüssel korrigiert werden kann.

9.1.1.5 Globale Deklarationen

In der Datei . BAS legen wir folgende globalen Deklarationen ab

' Dateinamen als KonstantenGlobal Const daten = "isam2.dat"Global Const SLÄNGE = 20Global Const ILÄNGE = 58

Type erdetyp zeigerneu As Integer ' 2 Byte zeigerwurzel As Integer ' 2 Byte zeigergelöscht As Integer ' 2 ByteEnd Type

Type satztyp

Name = t f_ name

Name = t f_ vname

Name = sf_ ändern

Name = sf_ ver wer f en

Name = t f_ l k Name = t f_ plz Name = t f_ ort

Name = t f_ str aße

Abbildung 9.1-2: Entwurf der Maskenform

Name = t f_ sch üss el

Name = t f_ i nhalt

Name = t f_ sat znr

Name = sf_ kor r ig i er en

Name = sf_ ver wer f en

Abbildung 9.1-3: Entwurf der Schlüsselkorrekturform

Page 295: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-16 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

zeigerlinks As Integer ' 2 Byte zeigerrechts As Integer ' 2 Byte schlüssel As String * SLÄNGE inhalt As String * ILÄNGEEnd Type

Type inhalttyp verwaltung As String * 4 ' 4 Byte name As String * SLÄNGE vname As String * 10 ' 10 Byte straße As String * 20 ' 20 Byte lk As String * 3 ' 3 Byte plz As String * 5 ' 5 Byte ort As String * 20 ' 20 ByteEnd Type

Global Const EM_LIMITTEXT = &H400 + 21

Declare Function GetFocus% Lib "user" ()Declare Function SendMessage& Lib "user" (ByVal hWnd%, ByVal wMsg%, ByValwParam%, ByVal x&)

Global erde As erdetypGlobal inhaltsatz As inhalttypGlobal satz As satztyp

Global schlüsselneu As String

Global kz As Integer

Es handelt sich zuerst um Konstanten. Diese werden analog zu anderen Programmier-sprachen rein groß geschrieben. Danach folgen eine Reihe von Typdefinitionen (Klassen-definitionen) der verschiedenen Datensätze unserer Datei. Es handelt sich immer um ei-nen Satz der Datendatei, der mit verschiedenen Schablonen gelesen wird. Diese Scha-blonen müssen nicht auf die volle Satzlänge ausgelegt sein. Sie dürfen kürzer sein.

Die folgenden Zeilen stellen etwas besonderes dar. Hier werden zwei externe Windows-Funktionen beschrieben, mit denen wir erreichen wollen, daß ein fokussiertes Textfeldseine Eingabelänge beschränkt. Weiterhin wollen wir Vorgabewerte markiert erscheinenlassen. In diesem Fall löscht eine Texteingabe das ganze Feld, während Steuerzeichendie Markierung löschen und das Feld zum Ändern freigeben. Dies ist eine hilfreiche undunter Windows ständig anzutreffende Funktion.

Den Abschluß der Deklarationen bilden die globalen Dimensionierungen einiger wenigerVariablen.

Zur Schreibweise ist anzumerken, daß bei diesem Programm versucht wurde, konse-quent folgende Regeln zu beachten

− alle globalen Konstanten sind rein groß;− alle sprachimmanenten Begriffe sind groß/klein, so wie sie der Editor verändert;− alle benutzerspezifischen Bezeichner sind einheitlich rein klein geschrieben.

Page 296: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-17

9.1.1.6 Programmierung

Neben den allgemeinen Deklarationen finden wir die Dimensionierungen der Variablen im(generell) -Teil des Moduls

'Dim erde As erdetyp ' global definiert'Dim satz As satztyp ' global definiert

Dim fnr As Integer ' Fehler-NummerDim k0 As Integer ' Hilfszeiger für den linken AnkerDim k1 As Integer ' Hilfszeiger für den rechten AnkerDim kn As Integer ' Hilfszeiger zum Eintrag der AnkerDim kv As Integer ' Zeiger auf den VaterDim kx As Integer ' Zeiger auf freien Datensatz'Dim kz As Integer ' Knotenzeiger global definiertDim z As Integer ' links/rechts

Dim fhinweis As StringDim schlüssel As String ' Schlüssel des aktuellen DSDim inhalt As String ' Inhalt des aktuellen DS

Dim knz(0 To 3) ' Knotenzeiger aktuell + HilfsspeicherDim knv(0 To 1) ' Knotenzeiger des Vaters

' Meldungen' 1 Speichermangel' 2 Datensatz bereits vorhanden' 3 am Dateiende' 4 am Dateianfang

Im Ablauf wir wie üblich zuerst die folgende Prozedur gestartet

Sub Form_Load () '-------------------------------------------' bereitet Form ISAM2_1 vor Dim i As Integer fhinweis = "Fehlerhinweis" ' Eingabefeld beschränken Show tf_schlüssel.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(satz.schlüssel), 0&) tf_inhalt.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(satz.inhalt), 0&)

If Dir$(daten) <> UCase$(daten) Then Open daten For Random Shared As #1 Len = Len(satz) erde.zeigerneu = 2 erde.zeigerwurzel = 0 erde.zeigergelöscht = 0 Put #1, 1, erde Close #1 End If Open daten For Random Shared As #1 Len = Len(satz) Get #1, 1, erde If erde.zeigerwurzel > 0 Then i = suchds(Chr$(1)) ' kleinstes Zeichen tf_schlüssel.Text = schlüssel tf_satznr.Text = Str$(kz) sfschalten 0, -1 ' ändern/löschen Else tf_schlüssel.Text = "" tf_satznr.Text = "0" sfschalten -1, 0 End If

Page 297: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-18 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

tf_schlüssel.SetFocusEnd Sub 'Form_Load

Um bereits die Methode .SetFocus benutzen zu können, wird mit Show das Formulargeladen. Für das jeweils fokussierte Textfeld senden wir eine Nachricht an Windows, umdie Feldlänge zu beschränken. Mit der Funktion Dir$(name) suchen wir nach einemMuster. Da diese in unserem Fall der Dateiname selbst ist, wir die Datei entweder gefun-den oder nicht. Fehlt sie noch, so legen wir eine leer Datei, d. h. eine Datei nur mit demErdesatz an. Diese Datei wird geschlossen, weil anschließend auf jeden Fall ein Öffnender gefundenen Datei erfolgt. So ist sichergestellt, daß die Datei wenigstens einmal aufdie Platte geschrieben wurde. Andernfalls könnte ein Systemabsturz wichtige Informatio-nen der Sitzung verloren gehen lassen.

Hinweis: In die Erde könnte man noch ein Erkennungszeichen einbauen, da sierelativ kurz ist. So könnte das Programm erkennen, ob die vorliegende Dateiwirklich eine ISAM-Datei ist, die es selbst angelegt hat.

Wenn die Datei bereits Datensätze enthält, dann erfolgt ein Suchen nach dem niedrigstenEintrag mit der Funktion suchds(Chr(1)). Diese liefert uns die Satznummer zurück.Sehen wir uns diese Funktion einmal näher an

Function suchds% (schl$) '-----------------------------------' sucht einen Satz im Baum' IN= schl$ gesuchter Schlüssel' alle Informationen der Erde' OUT= kz Knotenzeiger' kv Vaterknoten' knz() Zeiger auf die Söhne' z Richtung

Dim ergebnis As Integer

' SE 1 "Zeiger auf die Wurzel setzen, Wurzel einlesen" suchds = 0 kv = erde.zeigerwurzel kz = kv liesds (kz)' EX "wenn Suchschlüssel=Wurzel If schl = schlüssel Then suchds = kz Exit Function End If knv(0) = knz(0) knv(1) = knz(1)' CY 2 Do' SE 3 "Suchrichtung festlegen If schl < schlüssel Then z = 0 Else z = 1 End If' EX 2 "Sohn fehlt in Suchrichtung fehlt" If knz(z) <= 0 Then suchds = 0 Exit Do End If' SE 4 "Sohn in Suchrichtung lesen" kz = knz(z) liesds (kz)

Page 298: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-19

' IF 5 "Schlüssel nicht gefunden If schl <> schlüssel Then' SE 6 "Vater speichern" kv = kz knv(0) = knz(0) knv(1) = knz(1)' IEN 5 "Schlüssel gefu nden" Else' EX 2 Exit Do End If' CE 2 Loop suchds = kzEnd Function 'suchds

Diese Prozedur enthält den vorge-stellten Pseudocode. Ihre Funktionist ausführlich im Text beschriebenworden.

Es erscheint die Form mit dem er-sten Eintrag (Abbildung 9.1-4). Die-se Form ist dieStandardarbeitsfläche des Benut-zers. Wenn dieses Formular geladen wird, dann erhält das Textfeld tf_schlüssel denFokus. Also wird das Ereignis

Sub tf_schlüssel_GotFocus () '-------------------------------' markiert Text tf_schlüssel.SelStart = 0 tf_schlüssel.SelLength = Len(tf_schlüssel.Text)End Sub 'tf_schlüssel_GotFocus

ausgelöst. Mit diesen beiden Anweisungen markieren wir den gesamten Text, so daß wirbei größeren Änderungen nicht die Entf - Taste strapazieren müssen. Mit dem ersten

Tastenanschlag legt der Benutzer die weitere Bearbeitung fest. Ein Steuerzeichen (z. B.eine Cursorbewegung) entfernt die Markierung und läßt individuelle Änderungen zu, eindarstellbares Zeichen löscht die Markierung. Bei jedem Tastendruck wird die Ereignispro-zedur

Sub tf_schlüssel_KeyPress (tastenascii As Integer) '---------' prüft auf erlaubte Zeichen tastenascii = alle_zeichen(tastenascii, tf_inhalt)End Sub 'tf_schlüssel_KeyPress

ausgelöst. Sie überprüft jedes eingegebene Zeichen und fokussiert bei einer � auf das

nächste Element.

Hinweis: Da diese beiden Prozeduren bei fast allen Eingabefeldern in gleicher Formauftreten, wird auf den einzelnen Abdruck der Quelltexte verzichtet. Natür-lich ist die Überprüfung abhängig vom Feldinhalt. So erscheinen im Landes-kenner nur große Buchstaben, während die Postleitzahl aus Ziffern besteht.

Abbildung 9.1-4: Beispiel eines Programmstarts

Page 299: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-20 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Die letzte Prozedur reagiert auf alle eingegebenen Zeichen, die nicht von Windows ab-gefangen werden wie z. B. Tab , ↑ , ↓ usw. Wird nun ein Textzeichen eingegeben,

so reagiert die Ereignisprozedur

Sub tf_schlüssel_Change () '---------------------------------' wenn der Schlüssel verändert wurde Dim s As String tf_inhalt.Text = "" tf_satznr.Text = "" If tf_schlüssel.Text = "" Or erde.zeigerwurzel = 0 Then Exit Sub End If s = tf_schlüssel.Text If suchds(s) > 0 And tf_schlüssel.Text = schlüssel Then tf_inhalt.Text = inhalt tf_satznr.Text = Str$(kz) sfschalten 0, -1 ' ändern/löschen Else sfschalten -1, 0 ' neu End IfEnd Sub 'tf_schüssel_Change

die in unserem Fall einen Suchvorgang in Datei auslöst. Je nach Erfolg werden die Text-felder gefüllt und die Schaltfelder geschaltet. Dazu wird eine der generellen Prozedurenaufgerufen

Sub sfschalten (w1%, w2%) '----------------------------------' schaltet die Schaltfelder ein/aus sf_neu.Enabled = w1 sf_neu.TabStop = w1 sf_ändern.Enabled = w2 sf_ändern.TabStop = w2 sf_löschen.Enabled = w2 sf_weiter.Enabled = w2 sf_zeigen.Enabled = w2 sf_zurück.Enabled = w2End Sub 'sfschalten

Wir können nun den Satzinhalt korrigieren. Dabei müssen wir aber beachten, daß dieFeldgrenzen innerhalb des Satzes eingehalten werden. Die Ereignisprozedurtf_inhalt_GotFocus ist Standard, während die Reaktion auf die Zeilenschaltung

davon abhängt, ob wir uns im Eingabe- oder Änderungsmodus befinden

Sub tf_inhalt_KeyPress (tastenascii As Integer) '-------------' prüft auf erlaubte Zeichen If sf_neu.Enabled = -1 Then tastenascii = alle_zeichen(tastenascii, sf_neu) Else tastenascii = alle_zeichen(tastenascii, sf_ändern) End IfEnd Sub 'tf_inhalt_KeyPress

Da keine Plausibilitätsprüfung erfolgt, existiert auch keine Ereignisprozedurtf_inhalt_LostFocus

Sind die Änderungen abgeschlossen, so drückt der Benutzer die Ändern - Schaltfläche,

worauf

Page 300: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-21

Sub sf_ändern_Click ()' ändert den Inhalt eines Datensatzes ohne Schlüsselkorrektur füllds schreibds (kz) tf_schlüssel.SetFocusEnd Sub

die Änderungen auf die Datei schreibt, indem sie die beiden generellen Prozeduren

Sub füllds () '----------------------------------------------' füllt den Datensatz satz.schlüssel = tf_schlüssel.Text satz.inhalt = tf_inhalt.TextEnd Sub 'füllds

Sub schreibds (kz%) '----------------------------------------' schreibt den Datensatz auf Nr. kz satz.zeigerlinks = knz(0) satz.zeigerrechts = knz(1) Put #1, kz, satz Get #1, kz, inhaltsatzEnd Sub 'schreibds

aufruft. Ehrlich gesagt ist dieses direkte Korrigieren im Satz nicht nur mühsam sondernauch sehr anfällig. Man wird es im allgemeinen daher nicht so zulassen. Statt dessen wirdman die Lösung Zeigen wählen, die eine Maske zur Dateneingabe aufbaut

Sub sf_zeigen_Click () '-------------------------------------' ruft nächste Form auf isam2_2.Show 1End Sub 'sf_zeigen_Click

Die Prozedur ruft also nur diezweite Form auf (Abbildung 9.1-5)auf. Diese bestehen zum einenaus allen ihren Prozeduren zumAufbau der Form

Sub Form_Load () '-------------------------------------------' Vorarbeiten für die Form ISAM2_2 tfplz_geprüft = 0 tfstraße_geprüft = 0 tfvname_geprüft = 0 Show tf_straße.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.straße), 0&) tf_lk.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.lk), 0&) tf_plz.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.plz), 0&) tf_ort.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.ort), 0&) tf_vname.SetFocus x& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.vname), 0&) Hide ' damit sie modal angezeigt werden kann

Abbildung 9.1-5: Demonstration der Maskenform

Page 301: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-22 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

tf_name.Text = RTrim$(inhaltsatz.name) tf_vname.Text = RTrim$(inhaltsatz.vname) tf_straße.Text = RTrim$(inhaltsatz.straße) tf_lk.Text = RTrim$(inhaltsatz.lk) tf_plz.Text = RTrim$(inhaltsatz.plz) tf_ort.Text = RTrim$(inhaltsatz.ort) tf_name.Enabled = 0End Sub 'Form_Load

der Reaktion auf Feldeingaben und auf Schaltflächenbetätigungen bestehen.

Bei den Feldern hängen wir die Plausibilitätsprüfungen an, wobei wir unterscheiden zwi-schen Mußfeldern (Ort analog)

Sub tf_lk_LostFocus ()' Plausibilitätsprüfung If Len(tf_lk.Text) = 0 Then MsgBox "Landeskenner muß sein?", 16, "Fehler" tf_lk.SetFocus End IfEnd Sub

und Kannfeldern (genauer in diesem Fall: Solltefeldern) (Vorname, Straße analog)

Sub tf_plz_LostFocus ()' Plausibilität If Len(tf_plz.Text) = 0 Then antwort% = MsgBox("Ist die Postleitzahl unbekannt?", 292, "Abfrage") If antwort% <> 6 Then Exit Sub End If tfplz_geprüft = -1End Sub 'tf_plz_LostFocus

Nun kann der Benutzer mit der Maus beliebig in den Feldern herumspringen. U. a. kannes ihm irgendwann einfallen, die Schaltfläche Ändern zu drücken

Sub sf_ändern_Click ()' ändert den Datensatzinhalt If (tfvmame_geprüft = 0) And (Len(tf_vname.Text) = 0) Then antwort% = MsgBox("Ist der Vorname unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_vname.SetFocus Exit Sub End If End If If (tfstraße_geprüft = 0) And (Len(tf_straße.Text) = 0) Then antwort% = MsgBox("Ist die Straße unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_straße.SetFocus Exit Sub End If End If If Len(tf_lk.Text) = 0 Then MsgBox "Ort muß sein?", 16, "Fehler" tf_lk.SetFocus Exit Sub End If If (tfplz_geprüft = 0) And (Len(tf_plz.Text) = 0) Then antwort% = MsgBox("Ist die Postleitzahl unbekannt?", 292, "Abfrage") If antwort% <> 6 Then tf_plz.SetFocus Exit Sub

Page 302: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-23

End If End If If Len(tf_ort.Text) = 0 Then MsgBox "Ort muß sein?", 16, "Fehler" tf_ort.SetFocus Exit Sub End If

inhaltsatz.name = tf_name.Text inhaltsatz.vname = tf_vname.Text inhaltsatz.straße = tf_straße.Text inhaltsatz.lk = tf_lk.Text inhaltsatz.plz = tf_plz.Text inhaltsatz.ort = tf_ort.Text Put #1, kz, inhaltsatz Get #1, kz, satz Unload isam2_2 isam2_1.tf_schlüssel.SetFocus isam2_1.tf_inhalt.Text = satz.inhaltEnd Sub

Wir wissen natürlich nicht, ob er all unsere mühsamen Prüfungen durchlaufen hat, alsoprüfen wir noch einmal. Nun wird der Benutzer irgendwann laut aufschreien, wenn er beiden Solltefeldern noch einmal bestätigen muß, daß er den Vornamen, die Straße oder diePostleitzahl nicht kennt. Daher müssen wir uns merken, ob die Prüfung schon erfolgte.Hierzu legen wir einige generelle Variablen an

Dim tfplz_geprüft As IntegerDim tfstraße_geprüft As IntegerDim tfvname_geprüft As Integer

die wir am Anfang löschen und bei einer erfolgten Prüfung setzen. Sie dienen uns danndazu, unnötige Abfragen zu vermeiden.

Klickt der Benutzer statt dessen Verwerfen an

Sub sf_verwerfen_Click ()' Bestätigung durch Benutzer Unload isam2_2 isam2_1.tf_schlüssel.SetFocusEnd Sub

wird nun trotzdem die Plausibilitätsprüfung des aktuellen Feldes ausgelöst. Ist sie nichterfüllt, dann kommt man nicht weiter. Dies ist ein unangenehmer Effekt, der eigentlichdagegen spricht, die Prüfungen in die _LostFocus- Prozeduren zu schreiben. Manmüßte nämlich abfragen, was er Benutzer als nächstes getan hat. Aber vielleicht findenSie eine andere Lösung.

Damit ist das 2. Formular zur feldweisen Eingabe abgeschlossen und wir kehren wieder inunser Arbeitsformular zurück.

Nun kann der Benutzer aber auch die Löschen - Schaltfläche betätigen

Sub sf_löschen_Click () '------------------------------------' löscht einen Satz' IN= Eingaben der Form

Page 303: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-24 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

' alle Informationen der Erde' der Zeiger kz zeigt auf den zu löschenden Satz' OUT= gelöschter Satz auf der Datei' fnr Fehler-Nummer

Dim s As String ' Suchstring um Datei auf den Vorgänger zu p ositionieren

' EX "Sicherheitsabfrag antwort% = MsgBox( "Soll der Satz wirklich gelöscht werden?", 36, "Abfrage")

If antwort% <> 6 Then Exit Sub' SE 1 "Schlüssel für Vorgängersuche speichern" s = satz.schlüssel' Löschen durchführen löschen' SE 15 "Vorgänger suchen" If erde.zeigerwurzel > 0 Then i = suchds(s) tf_schlüssel.Text = schlüssel Else tf_schlüssel.Text = "" tf_inhalt.Text = "" sfschalten -1, 0 End If' SE 16 "Form vorbereiten" tf_schlüssel.SetFocusEnd Sub 'sf_löschen_Click

die einen Löschvorgang in unserem Baum in der ausführlich beschriebenen Technikdurchführt.

Will der Benutzer aber den Schlüssel selbst korrigieren, so gelingt ihm dies hier nicht, dajede Änderung am Schlüssel zu einem Suchvorgang führt. Er muß also die SchaltflächeKorrigieren anklicken

Diese ruft unser dritte Formularauf (Abbildung 9.1-6), das mitfolgenden Deklarationen ar-beitet

Dim kz3 As IntegerDim z As Integer

Dim knz(0 To 2)

Dim schlüssel As StringDim inhalt As StringDim inhaltalt As StringDim satznralt As String

und recht einfach startet

Sub Form_Load () '------------------------------------------' bereitet Form vor inhaltalt = isam2_1.tf_inhalt.Text satznralt = isam2_1.tf_satznr.TextEnd Sub 'Form_Load ()

War die Funktion falsch, so bricht er Benutzer ab

Sub sf_verwerfen_Click ()

Abbildung 9.1-6: Demonstration der Korrekturform

Page 304: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-25

' verwirft Form Unload isam2_3 isam2_1.tf_schlüssel.SetFocus schlüsselneu = ""End Sub 'sf_verwerfen

Normalerweise wird er aber den Schlüssel ändern wollen, Wesentlich ist nun der Algo-rithmus zum Umhängen eines Eintrags in unserm Baum

Sub tf_schlüssel_Change ()' wenn der Schlüssel verändert wurde Dim s As String If tf_schlüssel.Text = "" Or erde.zeigerwurzel = 0 Then Exit Sub End If s = tf_schlüssel.Text If suchds3(s) > 0 And tf_schlüssel.Text = schlüssel Then tf_inhalt.Text = inhalt tf_satznr.Text = Str$(kz) sf_korrigieren.Enabled = 0 sf_korrigieren.TabStop = 0 sf_verwerfen.TabStop = -1 Else tf_inhalt.Text = inhaltalt tf_satznr.Text = satznralt sf_korrigieren.Enabled = -1 sf_korrigieren.TabStop = -1 sf_verwerfen.TabStop = 0 End IfEnd Sub 'tf_schlüssel_Change

Sub sf_korrigieren_Click () '-------------------------------' übergibt neuen Schlüssel schlüsselneu = tf_schlüssel.Text Unload isam2_3End Sub 'sf_korrigieren_Click

Die vorstehenden Prozeduren greifen auf folgende generellen Unterprogramme zurück

Sub liesds3 (kz3%) '-----------------------------------------' liest Datensatz ein Get #1, kz3, satz knz(0) = satz.zeigerlinks knz(1) = satz.zeigerrechts schlüssel = RTrim$(satz.schlüssel) inhalt = RTrim$(satz.inhalt)End Sub 'liesds3

Function suchds3 (schl$) '-----------------------------------' sucht einen Satz im Baum' IN= schl$ gesuchter Schlüssel' alle Informationen der Erde' OUT= kz3 Knotenzeiger

Dim ergebnis As Integer

' SE 1 "Zeiger auf die Wurzel setzen, Wurzel einlesen" suchds3 = 0 kz3 = erde.zeigerwurzel liesds3 (kz3)' EX "wenn Suchschlüssel=Wurzel If schl = schlüssel Then suchds3 = kz3 Exit Function

Page 305: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-26 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

End If' CY 2 Do' SE 3 "Suchrichtung festlegen If schl < schlüssel Then z = 0 Else z = 1 End If' EX 2 "Sohn fehlt in Suchrichtung fehlt" If knz(z) <= 0 Then suchds3 = 0 Exit Do End If' SE 4 "Sohn in Suchrichtung lesen" kz3 = knz(z) liesds3 (kz3)' IF 5 "Schlüssel gefunden If schl = schlüssel Then Exit Do' IEN 5 End If' CE 2 Loop suchds3 = kz3End Function 'suchds3

Das eigentliche Umhängen geschieht dann wieder in der rufenden Prozedur, die nun denalten Schlüssel löscht und den neuen Schlüssel einfügt. Hier sehen Sie übrigens zumerstem Mal, wie eine Ereignisprozedur sf_neu_Click intern aufgerufen wird.

Bevor wir uns den weiteren Schaltflächen zuwenden, wollen wir noch die restlichen gene-rellen Prozeduren auflisten

Function ausgleichen% (n%)' gleicht einen Baum aus' Gefahr des Speicherüberlaufes bei großen Dateien

Dim nl As Integer Dim nr As Integer Dim ii As Integer

Dim baumsatz As satztyp

If n = 0 Then ausgleichen = 0 Else nl = n \ 2 nr = n - nl - 1 iein = iein + 1 ii = iein Get #1, iein, baumsatz baumsatz.zeigerlinks = ausgleichen(nl) baumsatz.zeigerrechts = ausgleichen(nr) Put #1, ii, baumsatz ausgleichen = ii End IfEnd Function

Sub füllds () '----------------------------------------------' füllt den Datensatz satz.schlüssel = tf_schlüssel.Text satz.inhalt = tf_inhalt.Text

Page 306: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-27

End Sub 'füllds

Sub liesds (kz%) '-------------------------------------------' liest den Datensatz mit Nr. kz Get #1, kz, satz Get #1, kz, inhaltsatz knz(0) = satz.zeigerlinks knz(1) = satz.zeigerrechts schlüssel = RTrim$(satz.schlüssel) inhalt = RTrim$(satz.inhalt)End Sub 'liesds

Sub löschen () '---------------------------------------------' gemeinsames Unterprogramm Löschen/Ändern ohne Dialoganteile' IF 2 "wenn Wurzel gelöscht werden soll" If kz = erde.zeigerwurzel Then' SE 3 "Satz löschen" k0 = kz erde.zeigerwurzel = knz(0) knz(2) = knz(0) knz(3) = knz(1)' IF 4 "kein linker Sohn vorhanden" If erde.zeigerwurzel = 0 Then' SE 5 "rechter Sohn wird Wurzel" erde.zeigerwurzel = knz(1) verarb_rlanker verarb_rranker' IEL 4 "linker Sohn vorhanden" Else' SE 6 "linker Sohn wird Wurzel" verarb_lranker verarb_llanker' IEN 4 End If verarb_löschstapel verarb_erde' IEL 2 "zu löschender Knoten ist nicht die Wurzel" Else' IF 7 "zu löschender Knoten hat keinen linken Sohn"' ITH 7 k0 = kz knz(2) = knz(0) knz(3) = knz(1) If knz(0) <= 0 Then' SE 8 "Vaterknoten korrigieren und zurückschreiben" kz = kv knz(0) = knv(0) knz(1) = knv(1) Get #1, kz, satz knz(z) = knz(z + 2) If kz = erde.zeigerwurzel And knz(z) < 0 Then knz(z)=0 schreibds (kz)' SE "Anker suchen und korrigieren" verarb_rlanker verarb_rranker' SE 9 "Löschstapel aufbereiten; gelöschten Satz zurück" verarb_löschstapel' SE 10 "Erde korrigieren und zurückschreiben" verarb_erde' IEL 7 "zu löschender Knoten hat einen linken Sohn" Else' SE 11 "Vaterknoten korrigieren und zurückschreiben" kz = kv knz(0) = knv(0) knz(1) = knv(1) knz(z) = knz(2)

Page 307: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-28 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Get #1, kz, satz schreibds (kz)' SE 12 "Anker suchen und korrigieren" verarb_lranker verarb_llanker' SE 13 "Löschstapel aufbereiten; gelöschten Satz zurück" verarb_löschstapel' SE 14 "Erde korrigieren und zurückschreiben" verarb_erde' IEN 7 End If' IEN 2 End IfEnd Sub 'löschen

Sub schreibds (kz%) '----------------------------------------' schreibt den Datensatz auf Nr. kz satz.zeigerlinks = knz(0) satz.zeigerrechts = knz(1) Put #1, kz, satz Get #1, kz, inhaltsatzEnd Sub 'schreibds

Sub verarb_erde () '-----------------------------------------' korrigiert Erde und schreibt sie zurück If erde.zeigerwurzel = 0 Then k0 = 0 erde.zeigerneu = 2 End If erde.zeigergelöscht = k0 Put #1, 1, erdeEnd Sub 'verarb_erde

Sub verarb_llanker () '--------------------------------------' sucht linken Anker bei vorhandenem linken Sohn und korrigiert If knz(3) <= 0 Then Exit Sub' kein rechter Sohn kz = knz(3) ' positioniere auf rechten Sohn Do ' liest Restbaum nach links außen liesds (kz) If knz(0) <= 0 Then Exit Do kz = knz(0) Loop knz(0) = -kn schreibds (kz)End Sub ' verarb_llanker

Sub verarb_löschstapel () '----------------------------------' bereitet den Löschstapel auf, schreibt gelöschten Satz zurück kz = k0 knz(0) = -1 knz(1) = erde.zeigergelöscht satz.schlüssel = "" satz.inhalt = "" schreibds (kz)End Sub 'verarb_löschstapel

Sub verarb_lranker () '---------------------------------------' sucht rechten Anker bei vorhandenem linkem Sohn und korrigiert If knz(2) <= 0 Then Exit Sub ' kein linker Sohn kz = knz(2) ' positioniert auf linken Sohn Do ' liest Restbaum nach rechts außen liesds (kz) If knz(1) <= 0 Then Exit Do kz = knz(1) Loop knz(1) = knz(3)

Page 308: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-29

kn = kz schreibds (kz)End Sub 'verarb_lranker

Sub verarb_rlanker () '----------------------------------------' sucht linken Anker bei fehlendem linken Sohn und korrigiert If knz(3) <= 0 Then Exit Sub ' keinen rechten Sohn kz = knz(3) ' positioniert auf rechten Sohn Do ' liest Restbaum nach links außen liesds (kz) If knz(0) <= 0 Then Exit Do kz = knz(0) Loop knz(0) = knz(2) kn = kz schreibds (kz)End Sub 'verarb_rlanker

Sub verarb_rranker () '--------------------------------------' sucht rechten Anker bei fehlendem linken Sohn und korrigiert If knz(2) <= 0 Then Exit Sub ' kein linker Sohn kz = knz(2) ' positioniert auf linken Sohn Do ' lies Restbaum nach rechts außen liesds (kz) If knz(1) <= 0 Then Exit Do kz = knz(1) Loop knz(1) = -kn schreibds (kz)End Sub 'verarb_rranker

Mit der Schaltfläche Initialisieren löschen wir nach einer Sicherheitsabfrage den

Inhalt unserer gesamten Datei. Diese Funktion ist nur für den Test gedacht.

Sub sf_initialisieren_Click () '-----------------------------' löscht den Inhalt der Datendatei, initialisiert die Erde antwort% = MsgBox("Sollen wirklich alle Daten gelöscht werden?", 292,

"Abfrage") If antwort% = 6 Then Close Kill daten' Grundstellung für Weiterverarbeitung fnr = 0 k0 = 0 k1 = 0 kn = 0 kx = 0 kz = 0 z = 0 Form_Load Else tf_schlüssel.SetFocus End IfEnd Sub 'sf_initialisieren_Click

Ebenfalls nur für den Test ist die Schaltfläche Debug vorbereitet

Sub sf_debug_Click ()' schreibt Inhalt der Datei auf das Direktfenster Dim erde As erdetyp Dim satz As satztyp Dim i As Integer

Page 309: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-30 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

' Close' Open daten For Random As #1 Len = Len(satz) Get #1, 1, erde Debug.Print Debug.Print 1; "neu:"; erde.zeigerneu; " Wurzel:"; erde.zeigerwurzel; "

gelöscht:"; erde.zeigergelöscht For i = 2 To erde.zeigerneu - 1 Get #1, i, satz Debug.Print i; "links:"; satz.zeigerlinks; " rechts:"; satz.zeigerrechts; "

S:"; RTrim$(satz.schlüssel); " I:"; RTrim$(satz.inhalt) Next i' Close #1 tf_schlüssel.SetFocusEnd Sub 'sf_debug

Diese Funkti-on schreibtden Inhalt derDatendateimit den Ver-waltungsinformationen aufdas Direkt-fenster(Abbildung9.1-7) unddient daherals guteTestmöglichkeit.

Nun bleibennoch die "kleinen" Schaltflächen zum Positionieren

Sub sf_anfang_Click () '-------------------------------------' geht an den Dateianfang Dim i As Integer i = suchds(Chr$(1)) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub 'sf_anfang

Sub sf_schluß_Click ()' geht an den Dateischluß Dim i As Integer i = suchds(String$(Len(satz.schlüssel), Chr$(255))) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub

Sub sf_schluß_Click ()' geht an den Dateischluß Dim i As Integer i = suchds(String$(Len(satz.schlüssel), Chr$(255))) tf_schlüssel.Text = schlüssel tf_schlüssel.SetFocusEnd Sub

Sub sf_zurück_Click () '-------------------------------------' lies nächst absteigenden Satz

Abbildung 9.1-7: Beispiel eines Debug-Ausdrucks

Page 310: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-31

Dim kzz As Integer kzz = kz ' letzte Position retten If knz(0) < 0 Then z = -1 ' Knoten enthält Anker Else z = 0 ' Knoten enthält Zeiger End If kz = Abs(knz(0)) ' positionieren If kz = 0 Then kz = kzz fnr = 4 ' am Dateianfang Else Do ' nach rechts bis zum Blatt weiterlesen liesds (kz) If z < 0 Then Exit Do If knz(1) <= 0 Then Exit Do kz = knz(1) Loop tf_schlüssel.Text = schlüssel End If tf_schlüssel.SetFocusEnd Sub 'sf_zurück_Click

Das war nun ein hartes Stück Arbeit. Sicher werden Ihnen noch die einen oder anderenVerbesserungsvorschläge einfallen, die Sie nur programmieren müssen.

9.1.1.7 Fehlersuche

Fertige Programme funktionieren ja meistens und häufig erzählen sie leider nichts überdie Probleme bei der Entwicklung. Schließlich kann sich der Autor ja auch nicht alsDummkopf hinstellen. Trotzdem ist es immer interessant, auf erkannte Probleme einzu-gehen.

Mit der Einführung der Plausibilitätsprüfungen in der Maskeneingabe mit den_LostFocus- Ereignissen tritt übrigens ein interessanter Effekt auf. Ist eine Adresse z. B.ohne Straße gespeichert (als Solltefeld definiert), so erfolgt schon beim Aufruf der For-mulars eine Prüfung. Ist eines der Solltefelder leer, dann erfolgt eine Abfrage. Die ande-ren Felder möglicherweise ebenfalls leeren werden aber nicht mehr angemahnt,

Dies sollte aber nicht so sein. Wenn wir nun das Programm verfolgen, dann sehen wir,daß die _LostFocus- Prozedur des beanstandeten Felds tatsächlich durchlaufen wirdund die Abfrage durchführt, obwohl wir den Fokus auf den Vornamen setzen und diesesFeld auch nicht verlassen. Setzt irgendeines unserer Unterprogramme zwischenzeitlichden Fokus um? Wie sollen wir dieses nur herausbekommen?

Hier fällt unser Blick auf die Eigenschaft Screen.ActiveControl vom TypControl. Diese stellt das gerade fokussierte Element auf dem Bildschirm dar. Wir kön-nen es hernehmen und untersuchen. Hierzu ergänzen wir alle unsere Textfeld-Ereignisprozeduren mit den Anweisungen

Debug.Print "in tf_plz_GotFocus" If TypeOf Screen.ActiveControl Is TextBox Then Debug.Print Screen.ActiveControl.Text Else Debug.Print "Schaltfläche: " + Screen.ActiveControl.Caption End If

Page 311: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.1 Binärer Baum in Visual Basic © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-32 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

wobei die erste Zeile dazu dient, die durchlaufenen Prozeduren kenntlich zu machen. Siemuß mit dem jeweiligen Prozedurnamen gefüllt werden. Danach folgt eine Abfrage nachdem Type des Elements, der CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Frame, HScrollBar, Label,ListBox, Menu, OptionButton, PictureBox, TextBox, Timer oderVScrollBar sein kann. Da wir nun im Programm keinen Zugriff auf die Eigenschaft.Name haben, müssen wir irgend ein anderes charakteristisches Merkmal ausdrucken,z. B. den Inhalt des Elements (Abbildung 9.1-8). Wenn dies nicht ausreicht, könnten wirden Namen in der Eigenschaft .Tag unterbringen (solange diese nicht anderweitig be-nutzt wird). Hierzu tragen wir bei den Elementen den Steuernamen auch im .Tag einund geben ihn mit Debug.Print Screen.ActiveControl.Tag aus

Das Vornamenfeld erhält zwar den Fokus (erkennbar am Inhalt Manfred ), gibt ihn abersofort wieder ab, bis in der Postleitzahl ein Fehler gemeldet wird, den der Programmierernun wie beantwortet usw.

Nach einigen Stunden des Suchens kommt man dann dahinter, daß dies von den Anwei-sungen

tf_straße.SetFocusx& = SendMessage(GetFocus(), EM_LIMITTEXT, Len(inhaltsatz.straße), 0&)

stammt. Im obigen Beispiel sind diese beiden Zeilen aus dem Programm herausgenom-men worden, so daß die Straße nicht fokussiert wird. Dies sind also unerwartete Neben-wirkungen.

Abbildung 9.1-8: Fehlersuche

Page 312: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-33

Wir könnten nun die Zeilen wieder herausnehmen, hätten dann aber das Problem, daßder Benutzer z. B. locker eine 10-stellige Postleitzahl eingeben könnte. Ein anderer Wegwäre natürlich die Windows-Funktion ständig ein- und auszuschalten.

Mit dem .Tag vereinfachen sich die Kontrollzeilen auf

Debug.Print "in tf_vname_GotFocus" Debug.Print Screen.ActiveControl.Tag

9.1.2 Kritik/Verbesserungsvorschläge

Es gibt sicher kein Programm, das auf Anhieb optimal ist. Daher können wir uns auch beidiesem Beispiel fragen, was verbessert werden kann.

Unser Blick fällt z. B. auf die Datensatzstruktur, die zwischen der Erde und den Datensät-zen wechselt. Nehmen wir den unwahrscheinlichen Fall an, unser Schlüssel sei nur einZeichen lang, so müßten wir wegen des dritten Zeigers im Erdesatz die Datensätze unnö-tig verlängern.

Im Grunde ist es nicht notwendig, in der Erde zwei Zeiger zu verwalten. Den Zeiger aufden ersten freien Datensatz und den Zeiger auf den ersten gelöschten Datensatz könntenwir zusammenfassen. Diese Technik ist beim Löschen schon kurz erwähnt worden.

9.2 Untersuchung einer xBase-Indexdatei

Klassische Vertreter der Datenbanken der 4. Generation sind die xBase-Datenbanken(dBase, FoxBase, Clipper usw.). Der Aufbau der Datendateien sind bei allen Vertreterndieser Klasse gleich. Die Daten können untereinander ausgetauscht werden. WesentlicheUnterschiede gibt es aber bei der Bildung der Indexdateien. Wir wollen einmal diese In-dexdateien für die Sprache dBase (Erweiterung .NDX) und Clipper (Erweiterung .NTX)untersuchen.

Es gibt eine Vielzahl von interessanten Anwendungen, die mit genauer Kenntnis des In-dexaufbaues sehr viel effektiver als mit den Standardfunktionen realisiert werden können.

Als Beispiel sei an die Aufgabe erinnert (Integritätsbedingung), einen eindeutigen Schlüs-sel auf Doppeleinträge zu überprüfen, da dies von den xBase-Sprachen nicht beanstan-det wird. Ein Vergleich des Ergebnisses COUNT TO mit dem Ergebnis von LASTREC()beantwortet diese Frage erst einmal grundsätzlich. Der doppelte Satz muß dann nochgesucht werden. Leider durchsucht COUNT TO die Datei sequentiell, wobei offensichtlichauch alle Sätze in den Pufferspeicher transportiert werden, weil das DBMS natürlich nichtweiß, welche Information des Datensatzes für das Programm an dieser Stelle wichtig ist.LASTREC() dagegen ist eine Variable, die aus dem Verwaltungsteil der Datendateistammt.

9.2.1 Struktur von Bäumen

Bevor wir uns mit den Indexdateien direkt auseinandersetzen, ist es notwendig, ein wenigTheorie voranzustellen.

Page 313: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-34 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

9.2.1.1 Binäre Bäume

Eine einfache Indizierung erreichen wir über die Grundstruktur des binären Baumes

Der oberste Knoten (Wurzel) istvollständig dargestellt. Wir benöti-gen einen Zeiger auf den Satz derDatenbasis sowie zwei weitereZeiger auf die Folgeschlüssel.

Es handelt sich um einen gerich-teten Graphen, mit der Regel, daßder linke Kind-Schlüssel einen klei-neren lexikalischen Wert, derrechte Kind-Schlüssel einen größe-

ren Wert als der Vaterknoten besitzt. Knoten, die keine Nachfolger besitzen, werdenBlätter genannt.

Jeder Knoten läßt sich nach k Schritten von der Wurzel aus erreichen. Es ist die Stufe(Niveau) des Knotens. Das größte auftretende Niveau h:=max(k) wird Höhe des Bau-mes genannt.

Jedes Nichtblatt kann wiederum als Ausgangspunkt eines Teilbaumes aufgefaßt werden.Damit handelt es sich beim Baum um eine rekursive Datenstruktur.

9.2.1.2 B-Bäume

Bei den binären Bäumen kann es bei den Einfüge- und Löschoperationen sehr schnell zueinem starken Ungleichgewicht zwischen den verschiedenen Teilbäumen kommen, d. h.die Höhe der Teilbäume unterscheidet sich um mehr als 1. Der Baum entartet, der Ge-schwindigkeitsvorteil gegenüber einer linearen Liste schmilzt dahin.

Bäume mit der Eigenschaft, daß sich die Höhen höchstens um 1 unterscheiden be-zeichnet man als ausgeglichene oder AVL-Bäume (nach der Definition von Adelson-Velskii und Landis, 1962).

Nun können wir jeden Baum nach einer Änderung mit einem AVL-Algorithmus wiederausgleichen. Dies ist jedoch relativ aufwendig. Daher hat man sehr intensiv nach Kriterienfür ein kontrolliertes Wachstum gesucht, wobei man natürlich auf die vollständige Ausge-glichenheit verzichten muß. Ein heute allseits angewandtes Verfahren wurde 1970 von R.Bayer und E. McCreight entwickelt. Hierbei entstehen B-Bäume (Bayer- oder Balanced-Bäume je nach Nationalstolz).

Jede Seite (außer einer) enthält zwischen k und 2k Knoten für ein bestimmtes, kon-stantes k. k heißt dabei die Ordnung des B-Baumes. Die Eigenschaften sind folgen-dermaßen festgelegt

1. Jede Seite enthält höchstens 2k Elemente (Schlüssel).

Schl üss el

Schl üss el

Satz nummer

l i nk s r ech t s

Schl üss el Schl üss el

Schl üss el Schl üss el Schl üss el

Page 314: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-35

2. Jede Seite, außer der Wurzelseite, enthält mindestens k Elemente.3. Jede Seite ist entweder eine Blattseite, d. h. hat keine Nachfolger, oder sie hat

m+1 Nachfolger, wobei m die aktuelle Zahl der Schlüssel in der Seite ist.4. Alle Blattseiten liegen auf der gleichen Stufe.

Sehen wir uns alsBeispiel einen B-Baum der Ordnung2 mit 3 Stufenan. Alle Seitenenthalten 2,3oder 4 Elementemit Ausnahme der

Wurzel, die nur ein Element enthält. Der Einfach halber sind die Schlüssel zweistelligeGanzzahlen, so daß die Sortierordnung gut erkennbar ist. Die Zeiger auf die Folgeseitensind nur angedeutet.

Die Seiten enthalten die Schlüssel in sortierter Folge, was physikalisch nicht unbedingtnotwendig ist, wie es die nachfolgende Realisation in Clipper zeigt. Würde man die Ord-nung erhöhen, so würden die Seiten in größeren Einheiten zusammengefaßt, bis schließ-lich eine einzige Seite mit einer sortierter Liste entsteht.

Jede Seite enthält neben den Schlüsseln Si , die Datensatzzeiger Di und die Zeiger aufdie Folgeseiten Zi

Suche in einem B-Baum

Beim Suchen in B-Baum wird zuerst die Wurzelseite in den Zentralspeicher gebracht. An-schließend werden weitere Seiten eingeladen. In jeder Seite können wir entweder se-quentiell oder bei großem m binär nach dem gewünschten Schlüssel S suchen. Wird ergefunden, dann erreichen wir über die Satznummer sofort die gesuchte Information. Wirder nicht gefunden, so ergeben sich folgende Möglichkeiten

1. S[i] < S < S[i+1] für 1<=i<m Fortsetzung der Suche auf der Seite Z[i]

2. S[m] < S Fortsetzung der Suche auf Seite Z[m]

3. S < S[1] Fortsetzung der Suche auf Seite Z[0]

Treffen wir bei der wiederholten Suche auf einen Zeiger mit dem Wert NIL (Not InList), dann fehlt der Nachfolger, der Schlüssel ist nicht im Baum. Interessant ist der

02 05 07 08

25

10 20 30 40

13 14 15 18 22 24 26 27 28 32 35 38 41 42 45 46

Z0

S1

D1

Z1

S2

D2

Zn-1

Sn

Dn

freier PlatzZn

Z Zeiger auf SöhneS SchlüsselD Zeiger auf Satz mit Schlüssel S

Z 0 zeigt auf Teilbaum mit Schlüsseln kleiner als S 1

Z i zeigt auf Teilbaum mit Schlüsseln zwischen S und S i+1

Zn

zeigt auf Teilbaum mit Schlüsseln größer als Sn

.....

In den Blättern sind die Z undefiniert.

i

Page 315: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-36 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Nebeneffekt, daß der in der Sortierreihenfolge nachfolgende Schlüssel in diesem Fallsehr einfach gefunden werden kann.

Einfügen eines Schlüssels in einen B-Baum

Es gilt die einfache Regel, daß das Einfügen neuer Elemente ist nur in den Blättern er-laubt ist.

Dabei wird normalerweise nurdie aktuelle Seite verändert.Anders sieht es aus, wenndie Seite voll ist. Hier ist esnotwendig, neue Seiten an-zulegen. Hierzu teilen wir dieübergelaufene Seite mit den2k+1 Schlüsseln in je eineSeite mit k Schlüsseln. Dermittlere Schlüssel wird in den

Vaterknoten übernommen. Als Beispiel wollen wir den Schlüssel 22 in einen B-Baumder Ordnung 2 und der Höhe 2 einfügen.

Wir gehen in folgenden Schritten vor

1. Der Schlüssel 22 wird gesucht und nicht gefunden. Das Einfügen auf der Seite C istnicht möglich, weil sie voll ist.

2. Die Seite C wird logisch um den Schlüssel 22 erweitert (hier vorn eingefügt) und an-schließend aufgeteilt in die alte Seite C und eine neue angelegte Seite D.

3. Der mittlere Schlüssel 30 wird eine Stufe höher an die Seite A übergeben, die ihrer-seits nach dem gleichen Verfahren erweitert wird.

Nun kann natürlich die Vaterseite auch überlaufen. Also wird auch hier das Verfahren re-kursiv angewandt. Dies geht solange gut bis wir auf die Wurzel treffen. Wenn diese über-läuft, so müssen wir zwei neue Seiten anlegen, eine für die Hälfte der übergelaufenenWurzel und eine neue Wurzel, die nur das mittlere Element enthält.

Das sehr einfache und elegante Verfahren sorgt dafür, daß in den neuen Seiten genau kElemente vorhanden sind. Im Gegensatz zum normalen Baum wächst der B-Baum nachoben von den Blättern zur Wurzel heraus.

Löschen eine Schlüssels im B-Baum

Leider ist das Löschen eines Elementes im B-Baum weitaus komplizierter als das Einfü-gen, wenn wir die Ausgeglichenheit erhalten wollen.

Zuerst müssen wir natürlich das Element erst einmal finden. Hier müssen wir unterschei-den, ob sich das Element auf einer Blattseite oder einer Knotenseite befindet.

Auf der Blattseite wird das Element einfach gelöscht.

Auf einer Knotenseite existiert bekanntlich ein Zeiger auf eine Folgeseite. In diesem Falldürfen wir nun beides nicht einfach löschen. Vielmehr müssen wir das Element durch ei-

07 10 15 18

20

26 30 38 42 07 10 15 18

20 30

22 26 38 40

A (Wurzel)

B C

A

B C D

22 26 30 38 40

neu Mitte

Page 316: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-37

nes der beiden lexikographisch benachbarten Elemente ersetzen, z. B. den nächst kleine-ren Schlüssel. In diesem Fall wandern wir also nach links durch den darunterliegendenTeilbaum und verschieben das Element (des am weiten links stehenden Blattes) an dieseStelle. Im Blatt verringert sich die Zahl der Elemente um 1.

Nun kann es in beiden Fällen zu einem Unterlauf in einem Blatt kommen, d. h. die Anzahlder Elemente m sinkt unter k. Diesen Unterlauf müssen wir nun durch Verschieben vonElementen aus einer der Nachbarseiten beseitigen. Es würde ein Element ausreichen. Daaber das Einlesens einer ganzen Seite sehr aufwendig ist, können wir gleich wieder alleElemente gleichmäßig auf beide Seiten aufteilen.

Nun können aber auch alle Nachbarseiten gerade mal nur k Elemente besitzen, so daß2k-1 Elemente in der Vereinigungsmenge existieren. In diesem Fall können wir beideSeiten zusammenlegen und sogar noch das mittlere Element aus der Vaterseite hinzufü-gen, um zu einem ausgeglichenen B-Baum zu kommen. Dies kehrt den Einfügevorgangeins zu eins um.

Aber nun kann auf der Vaterseite ein Unterlauf erfolgen. Dann müssen wir das Zusam-menlegen solange wiederholen, bis wir auf die Wurzel treffen. Im Extremfall hat diese nureinen einzigen Eintrag, den wir entfernen. Es entstehen zwei leere Seiten, der Baumschrumpft in seiner Höhe um 1 und zwar wieder über die Wurzel. Insgesamt werden mitder zusammengelegten Blattseite 3 Seiten freigesetzt. Diese kommen auf den Freispei-cher und werden später wieder gefüllt.

Ein anderer Sonderfall ergibt sich, wenn eine Seite unterläuft, die benachbarte(n) Seitenaber gut gefüllt sind. In diesem Fall "borgt" sich die unterlaufende Seite Elemente von denNachbarseiten, wobei aber die Elemente logisch über die Vaterseite geschoben werden.

Würden wir nun das gerade gelöschte Element wieder einfügen, dann würden wieder dreineue Seite angelegt. In dBase werden die Seiten immer hinten angefügt, leere Seiten im"Inneren" werden nicht wieder verwendet, d. h. der Index wächst unnötigerweise an. Da-bei ist das Verfahren zur Wiederverwendung relativ einfach. Wir verknüpfen einfach dieleeren Seiten über Zeiger und verankern diesen in der Erde. Wird nun eine neue Seitebenötigt, dann wird zuerst die Kette der leeren Seiten abgebaut. Erst wenn diese leer ist,werden neue Seiten auf der Platte angefordert. Dadurch steigt der Platzbedarf um1 KByte an.

Sehen wir uns nun das Löschen noch einmal an unserem Beispiel an, indem wir zuerst25 löschen

Dies führt dazu,daß die 26 durchden Baum zurWurzel geschobenwird.

02 05 07 08

25

10 20 30 40

13 14 15 18 22 24 26 27 28 32 35 38 41 42 45 46

Page 317: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-38 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

Jetzt löschen wirz. B. 22, die Sei-ten werden neuaufgeteilt

Durch das Lö-schen würde eineSeite unterlaufen.Die überschüssige24 ist aber nichtauf die anderenSeiten verteilbar,also werden die

Seiten neu aufgeteilt. Dabei wird die 18 nach oben zum Vater geschoben, die 20 abervom Vater zur untergelaufenen Seite. Würde auch die Nachbarseite unterlaufen, so gehtdie Suche bei den weiteren Nachbarn weiter. Nur wenn alle Seiten gleichmäßig abgebautsind, erfolgt ein Zusammenlegen.

9.2.2 Aufbau einer Indexdatei der xBase-Klasse

Die Indexdateien in dBase .NDX und Clipper .NTX unterscheiden sich bekanntlich.Foxbase benutzt wiederum eine dritte, nichtkompatible Variante.

In der Indexdatei finden wir die "Erde", aus der der Baum mit seiner "Wurzel" beginnend(Root Page) wächst. Die Erde enthält reine Verwaltungsinformationen sowie einen Zeigerauf die Wurzel. Der Aufbau dieser Erde ist in Clipper und dBase unterschiedlich

.NTX-Datei Aufbau der 1024 Byte der "Erde"

Byte Typ Beschreibung1-2 unsigned 06 als Kennzeichnung einer Clipper-Datei3-4 unsigned Version des Indexsystems zur Verarbeitung5-8 long Zeiger auf die Wurzelseite9-12 long Zeiger auf die erste unbenutzte Seite, die wiederum einen

Zeiger auf die nächste leere Seite enthält, so daß alle freienSeiten eine Liste bilden.

13-14 unsigned Größe zweier long-Typen + Schlüsselgröße15-16 unsigned Schlüsselgröße17-18 unsigned Anzahl der Dezimalstellen eines numerischen Index19-20 unsigned Maximale Anzahl MAXITEMS von Schlüsseln in einer Seite21-22 unsigned Minimale Anzahl von Schlüsseln in einer Seite23-272 Zeichen Indexausdruck273-274 integer 1/0 für UNIQUE ON oder UNIQUE OFF275-1024 ? unbenutzt

Die Erde der dBase-Indexdatei ist nur halb so groß

02 05 07 08

26

10 20 30 40

13 14 15 18 22 24 27 28 32 35 38 41 42 45 46

02 05 07 08

26

10 18 30 40

13 14 15 20 24 27 28 32 35 38 41 42 45 46

Page 318: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-39

.NDX-Datei Aufbau der 512 Byte der "Erde"

Byte Typ Beschreibung1-4 long Zeiger auf die Wurzelseite5-8 long Anzahl der Seiten in der Indexdatei9-12 ? unbenutzt13-14 unsigned Schlüsselgröße15-16 unsigned Maximale Anzahl von Schlüsseln in einer Seite17-18 unsigned Typ: 00 kennzeichnet einen Zeichenschlüssel

01 einen numerischen oder Datumsschlüssel19-22 long Größe zweier long-Typen + Schlüsselgröße23 ? unbenutzt24 integer 1/0 für UNIQUE ON oder UNIQUE OFF25-512 ? unbenutzt

Wir erkennen sehr schnell die Unterschiede in beiden Erden.

Clipper verwaltet zusätzlich die leeren Indexseiten, die beim umfangreichen Löschen ineiner Datei entstehen können. Durch die Verkettung der leeren Seiten ist es möglich, beider Erweiterung des Index diese Seiten wieder zu verwenden. Der Index wächst alsonicht so schnell an, obwohl er natürlich aufgrund der Vergrößerung der Erde schon ein-mal mehr Platz verbraucht. Auch die eigentlichen Indexseiten sind bei Clipper mit 1024Byte doppelt so groß wie in dBase.

Weiterhin wird der gesamte Indexausdruck, mit dem der Index angelegt wurde, gespei-chert.

Da die Anzahl der Seiten bei Clipper nicht gespeichert wird, muß es einen anderen Algo-rithmus geben, um das Dateiende zu erkennen.

Aufgrund eines Eintrages in der Nachkommastellenzahl erkennt Clipper gleichzeitig denTyp des Schlüssels. Schüssel mit dem Wert 0 sind „String“-Schlüssel.

Die Tabellen zeigen uns weiterhin, daß alle Zahlen im binären Format gespeichert sind.Wir müssen sie also mit den Funktionen BIN2I(), BIN2W() und BIN2L() vor derVerarbeitung wandeln.

Alle anderen Seiten der Indexdatei sind Indexseiten, die neben einigen wenigen Verwal-tungsinformationen die Schlüssel mit Zeigern enthalten. Die Informationen sind dyna-misch entsprechend der Schlüssellänge gespeichert. Dabei liegen die Sätze durchausnicht dicht. Sie werden über eine spezielle Zeigertabelle am Anfang der Seite adressiert

Page 319: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-40 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

.NTX-Datei Aufbau der 1024 Byte einer "Indexseite"

Byte Typ Beschreibung1-2 unsigned Anzahl der Einträge in dieser Seite3-4 unsigned Offset des 1. Schlüsseleintrages in der Seite4-5 unsigned Offset des 2. Schlüsseleintrages in der Seite

?-? unsigned Offset des (MAXITEM)-Schlüsseleintrages?-? unsigned Offset des (MAXITEM+1)-Schlüsseleintrages?-? unsigned ????-? long Zeiger auf die folgende Seite (Kind-Seite)?-? long Zeiger auf den Datensatz?-? ? Schlüsseleintrag

Um also einen Eintrag zu finden, müssen wir zuerst die aktuelle Anzahl der Einträge ausden beiden ersten Bytes lesen

var:=SPACE(2)FREAD(fhandle,@var,2)anzahl:=BIN2W(var)

Danach folgt eine Gruppe von Wörtern (je 2 Bytes) mit den internen Offsets der mögli-chen Schlüsseleinträge relativ zum Seitenanfang

FOR i:=1 TO maxitem+1 var:=SPACE(2) FREAD(fhandle,@var,2) adresse[i]:=BIN2W(var)NEXT

Um nun einen Eintrag (Schlüssel) j zu lesen, müssen wir absolut zum Dateibeginn aufdie Adresse j positionieren. Hierzu berechnen wir aus der Seitenlänge 1024 denOffset der Seite und addieren die Adresse des Schlüsselanfangs hinzu. Dort finden wir 4Byte für den Zeiger auf die (linke) Folgeseite, 4 Byte für den Zeiger auf den Datenbank-satz und den variabel langen Schlüssel

FSEEK(fhandle,basis*1024+adresse[j],0)var:=SPACE(4)FREAD(fhandle,@var,4)seite:=BIN2W(var)/1024 && Folgeseitevar:=SPACE(4)FREAD(fhandle,@var,4)satznr:=BIN2W(var) && Zeiger auf .DBF-Satzvar:=SPACE(keylaenge)FREAD(fhandle,@var,keylaenge)key:=var

Diese Internas helfen uns nun, die Schlüssel physikalisch zu optimieren. Pro Schlüsselbenötigen wir in einer Indexseite

Page 320: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-41

2 Byte Offset in der Seitentabelle4 Byte Folgeseite4 Byte Satznummern Byte Schlüssel

Diese n+10 Byte müssen nun in die 1022 (1024-2 für die Anzahl) Byte einer Index-seite hineinpassen. Gerade bei langen Schlüsseln ist die optimale Wahl der Schlüssel-länge von Vorteil für die Verarbeitung. Bei der in dBase maximal zulässigen Schlüssel-länge von 250 Byte sollten gerade mal 3 Schlüssel in einen Indexblock passen. Da nunwiederum die Anzahl der Schlüssel Vielfaches von 2 sein muß, reduziert sich die Anzahlauf 2 Schlüssel.

Teilen wir 1020 durch 4, so ergibt sich als theoretischer Wert 255 Byte, so daß einSchlüssel mit 245 Byte bereits 4 Einträge haben sollte. Dem ist aber in Praxis nicht so.Legen wir verschiedene Dateien mit unterschiedlich langen Schlüsseln an, so können wirfeststellen, daß folgende Tabelle gültig ist

Schlüssel MAXITEMS Schlüsselbytes

mit Zeigern+8/Schlüssel

Gesamtbytes+2/Schlüssel + 4

250 2 500 516 524195 2 390 406 414194 4 776 808 820136 4 544 576 588135 6 810 858 874104 6 624 672 688103 8 824 888 908

Offensichtlich stimmt unsere Rechnung so nicht. Wir haben vergessen, daß wir nebenden Zeigern nach "links" noch einen weiteren Zeiger nach "rechts" am Ende des letztenSchlüssels haben. Dieses wird aber wohl von dBase nicht wie erwartet optimiert. Vielmehrwird das ganze Verfahren um einen "leeren" Schlüssel erweitert, der nur den Zeiger aufdie Kind-Seite verwaltet. Damit ergeben sich folgende Übergangswerte

MAXITEMS Schlüssel mit Zeigern+10/Schlüssel

bis 2 195 205bis 4 194 204bis 6 136 146bis 8 103 113

bis 10 82 92bis 12 68 78bis 14 58 68

Unser Programm zur Untersuchung von Indexdateien mit einer Anzeige der verschiede-nen Seiten sieht folgendermaßen aus

* Programm : NTXDUMP1.PRG* Funktion : zeigt den Inhalt einer .NTX-Datei an* Erstellt von : Dr. H.-J. Scheibl* Erstellt am : 24.01.1992* Letzte Änderung : 23.03.1994* Aufruf : NTXDUMP1 <Dateiname+Erweiterung> z.B. NTXDUMP1 d_name.ntx* Übersetzung mit : CLIPPER NTXDUMP1 /n/w/a (/b)

Page 321: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-42 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

*#INCLUDE "INKEY.CH"#INCLUDE "FILEIO.CH"#DEFINE SEITENLAEN 1024#DEFINE UNSIGNED 2#DEFINE SIGNED 2#DEFINE LONG 4*STATIC basis,getlist:={}*FUNCTION ntxdump1(ntxdatei) &&------------------------------------------------SET SCOREBOARD OFFCLSIF EMPTY(ntxdatei) @ 24, 0 SAY "Aufruf mit NTXDUMP1 <Dateiname+Erweiterung>" RETURN(NIL)ENDIFIF FILE(ntxdatei) liesntx(ntxdatei)ELSE @ 24, 0 SAY "Datei "+ntxdatei+" nicht gefunden!"ENDIFRETURN(NIL) // ntxdump1 ======================================================

FUNCTION liesntx(ntxdatei) //-------------------------------------------------* liest Indexdatei einLOCAL antwortPRIVATE fhandle,buf,ntxendePRIVATE kennung,version,wurzel,unbenutzt,; eintraglae,indexlaenge,indexdez,; maxzahl,minzahl,ausdruck,maxseite,wurzelseite,; seitennr,eindeutigfhandle:=FOPEN(ntxdatei) // Datei eröffnenIF FERROR() <> 0 RETURN(.F.)ENDIFntxende:=FSEEK(fhandle,0,FS_END)FSEEK(fhandle,0,FS_SET) // Erde-Informationen lesenbuf:=SPACE(SEITENLAEN)FREAD(fhandle,@buf,SEITENLAEN) // Erde-Seite komplett einlesenkennung:=BIN2W(SUBSTR(buf,1,UNSIGNED)) // Kennung extrahierenversion:=BIN2W(SUBSTR(buf,3,UNSIGNED)) // Version extrahierenwurzel:=BIN2L(SUBSTR(buf,5,LONG)) // Zeiger auf Wurzelseite extrahierenunbenutzt:=BIN2L(SUBSTR(buf,9,LONG)) // Zeiger auf 1. freie Knotenseiteeintraglae:=BIN2W(SUBSTR(buf,13,UNSIGNED)) // Eintraglänge extrahierenindexlaenge:=BIN2W(SUBSTR(buf,15,UNSIGNED)) // Indexlänge extrahierenindexdez:=BIN2W(SUBSTR(buf,17,UNSIGNED)) // Indexdezimalen extrahierenmaxzahl:=BIN2W(SUBSTR(buf,19,UNSIGNED)) // maximale Anzahl Schlüssel pro Seiteminzahl:=BIN2W(SUBSTR(buf,21,UNSIGNED)) // minimale Anzahl Schlüssel pro Seiteausdruck:=ALLTRIM(SUBSTR(buf,23,256)) // Schlüsselausdruck extrahiereneindeutig:=BIN2I(SUBSTR(buf,279,SIGNED)) // UNIQUECLS@ 0, 1 SAY "Indexdatei : "+ntxdateiSET COLOR TO I@ 2, 0 CLEAR TO 3,79@ 3, 1 SAY "Erde-Informationen"SET COLOR TO@ 5,10 SAY "Kennung : "+STR(kennung)@ 6,10 SAY "Version : "+STR(version)@ 7,10 SAY "Wurzelseite : "+STR(wurzel)+" = "+; STR(INT(wurzel/SEITENLAEN))@ 8,10 SAY "Unbenutzte Seite : "+STR(unbenutzt)+" = "+; STR(INT(unbenutzt/SEITENLAEN))@ 9,10 SAY "Zeigerlänge : "+STR(eintraglae)@ 10,10 SAY "Schlüssellänge : "+STR(indexlaenge)@ 11,10 SAY "Schlüssel-Dezimalen : "+STR(indexdez)

Page 322: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-43

@ 12,10 SAY "max. Schlüssel/Seite: "+STR(maxzahl)@ 13,10 SAY "min. Schlüssel/Seite: "+STR(minzahl)@ 14,10 SAY "Schlüssel-Ausdruck : "+ausdruck@ 15,10 SAY "Eindeutig : "+IF(eindeutig>0,"Nein","Ja")INKEY(0)maxseite:=INT(ntxende/SEITENLAEN )-1wurzelseite:=wurzel/SEITENLAENPRIVATE indzeiger[maxzahl+1]CLS@ 0, 0 CLEAR TO 1,79@ 0, 1 SAY "Indexdatei : "@ 0,35 SAY "max. Anzahl je Knoten-Seite....: "@ 1, 1 SAY "Seite : von "@ 1,35 SAY "tats. Anzahl auf dieser Seite..: "SET COLOR TO I@ 2, 0 CLEAR TO 3,79@ 23, 0 CLEAR TO 24,79@ 3, 0 SAY " Nummer Zeiger Satz Schlüssel "@ 23, 0 SAY " • = 1 Seite nach oben¦ • = 1 Seite nach unten¦"+; " F2 = Seite wählen"@ 24, 0 SAY " Bild • = 10 Seiten nach oben¦ Bild • = 10 Seiten nach unten¦"+; " Esc = Abbruch"SET COLOR TO@ 0,13 SAY ntxdatei@ 0,67 SAY maxzahl PICTURE "#####"@ 1,22 SAY maxseite PICTURE "#####"IF maxseite>1 basis:=wurzelseite FSEEK(fhandle,wurzel,FS_SET) AFILL(indzeiger,0) zeig_seite(fhandle,indzeiger,indexlaenge,maxzahl) ? "Wurzel-Seite" antwort:=INKEY(0)ENDIF@ 4,0 CLEAR TO 22,79basis:=1DO WHILE .T. IF antwort<>K_F2 // schon auf der Wurzelseite <F2> gedrückt FSEEK(fhandle,basis*SEITENLAEN,FS_SET) AFILL(indzeiger,0) zeig_seite(fhandle,indzeiger,indexlaenge,maxzahl) IF !(antwort=K_ESC .OR. antwort=K_UP .OR. antwort=K_PGUP; .OR. antwort=K_DOWN .OR. antwort=K_PGDN; .OR. antwort=K_F2) ? IF(basis>maxseite,"Ende der Indexdatei","Ende der Seite") antwort:=INKEY(0) ENDIF ENDIF DO CASE CASE antwort=K_UP basis:=MAX(basis-1,1) CASE antwort=K_PGUP basis:=MAX(basis-10,1) CASE antwort=K_DOWN basis:=MIN(basis+1,maxseite) CASE antwort=K_PGDN basis:=MIN(basis+10,maxseite) CASE antwort=K_F2 seitennr:=0 @ 22,0 SAY "Bitte Seitennummer angeben: "; GET seitennr PICTURE "99999" VALID seitennr>0 READ @ 22,0 CLEAR TO 22,79 basis:=MIN(seitennr,maxseite) ENDCASE antwort:=0

Page 323: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-44 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

IF LASTKEY()=K_ESC EXIT ENDIF @ 4,0 CLEAR TO 22,79 @ 4,0 SAY ""ENDDOFCLOSE(fhandle) // Datei schließenRETURN(.T.) // liesntx()

FUNCTION zeig_seite(fhandle,indzeiger,indexlaenge,maxzahl) //-----------------* zeigt eine Knotenseite anLOCAL antwort,anzahl,buf,i,j,schluessel,seite,zdbfbuf:=SPACE(UNSIGNED)FREAD(fhandle,@buf,UNSIGNED)anzahl:=BIN2W(buf)@ 1,14 SAY basis PICTURE "####"@ 1,68 SAY anzahl PICTURE "####"@ 4, 0 SAY ""FOR i:=1 TO maxzahl+1 buf:=SPACE(UNSIGNED) FREAD(fhandle,@buf,UNSIGNED) // Zeiger auf Index-Eintrag lesen indzeiger[i]:=BIN2W(buf) // Adresse des Eintrags in Array speichernNEXT iFOR i:=1 TO anzahl FSEEK(fhandle,basis*SEITENLAEN+indzeiger[i],FS_SET) buf:=SPACE(LONG) FREAD(fhandle,@buf,LONG) seite:=BIN2W(buf)/SEITENLAEN // Zeiger auf linke Folgeseite (kleinerer Index) buf:=SPACE(LONG) FREAD(fhandle,@buf,LONG) zdbf:=BIN2W(buf) // Zeiger auf .DBF-Datei (Satznummer) buf:=SPACE(indexlaenge) FREAD(fhandle,@buf,indexlaenge) schluessel:=buf IF i>1 .AND. zdbf=0 .AND. seite=0 // leeren Eintrag gefunden EXIT ELSEIF zdbf=0 ELSE ? TRANSFORM(i," #####") // lfd. Nummer ?? TRANSFORM(seite,"#####") ?? TRANSFORM(zdbf," #####") ?? SPACE(4) ?? ALLTRIM(schluessel) // Index-Schlüssel ENDIF IF ROW()=20 ? "Noch weitere Einträge vorhanden!" antwort:=INKEY(0) IF antwort=K_ESC .OR. antwort=K_UP .OR. antwort=K_PGUP; .OR. antwort=K_DOWN .OR. antwort=K_PGDN; .OR. antwort=K_F2 RETURN(.T.) ENDIF @ 4,0 CLEAR TO 22,79 @ 4,0 SAY "" ENDIFNEXTbuf:=SPACE(LONG)FREAD(fhandle,@buf,LONG)seite:=BIN2W(buf)/SEITENLAEN // Zeiger auf rechte Folgeseite (größerer Index)IF seite>0 ? TRANSFORM(i," #####") // lfd. Nummer ?? TRANSFORM(seite,"#####") ?? SPACE(13) ?? "rechte Folgeseite" // Index-SchlüsselENDIFRETURN(.T.) // zeig_seite

Page 324: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Datenbanken – Übungen Realisation © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DB12Übun.doc – 97102 Seite: 9-45

Mit Hilfe dieser Kenntnisse können wir nun eigene Unterprogramme schreiben, die z. B.die Anzahl der Schlüssel zählen oder die Existenz eines Schlüssels ohne Zugriff auf dieDatendatei überprüfen usw.

*FUNCTION ntxkopf(fhandle,; //-------------------------------- kennung,version,wurzel,unbenutzt,; eintraglae,indexlae,indexdez,; maxzahl,minzahl,ausdruck,eindeutig,; eof)* liest Kopf einer Indexdatei einLOCAL bufeof:=FSEEK(fhandle,0,FS_END)FSEEK(fhandle,0,FS_SET) // Erde-Informationen lesenbuf:=SPACE(SEITENLAE)FREAD(fhandle,@buf,SEITENLAE) // Erde-Seite völlig lesenkennung:=BIN2W(SUBSTR(buf,1,UNSIGNED)) // Kennung extrahierenversion:=BIN2W(SUBSTR(buf,3,UNSIGNED)) // Version extrahierenwurzel:=BIN2L(SUBSTR(buf,5,LONG)) // Zeiger auf Wurzel extra.

unbenutzt:=BIN2L(SUBSTR(buf,9,LONG)) // Zeiger 1.freie Knotenseiteeintraglae:=BIN2W(SUBSTR(buf,13,UNSIGNED)) // Eintraglängeindexlae:=BIN2W(SUBSTR(buf,15,UNSIGNED)) // Indexlänge extrahierenindexdez:=BIN2W(SUBSTR(buf,17,UNSIGNED)) // Indexdezimalen extra.maxzahl:=BIN2W(SUBSTR(buf,19,UNSIGNED)) // max. Schlüssel/Seiteminzahl:=BIN2W(SUBSTR(buf,21,UNSIGNED)) // min. Schlüssel/Seiteausdruck:=ALLTRIM(SUBSTR(buf,23,256)) // Schlüsselausdruckeindeutig:=BIN2I(SUBSTR(buf,279,SIGNED)) // UNIQUERETURN(.T.) // ntxkopf()

FUNCTION ntxsuch(fhandle,suchwort,satznr,wurzel,indexlae) //------------------* sucht ein Suchwort im Schlüssel und liefert u. U. Satz-NummerLOCAL anzahl,; buf:=SPACE(SEITENLAE),; sadre,schluessel,seite,snr,szahl,szeiger* Lesen der Wurzelseite:=wurzelDO WHILE seite<>0 FSEEK(fhandle,seite,FS_SET) anzahl:=FREAD(fhandle,@buf,SEITENLAE) IF anzahl<>SEITENLAE @ 24, 0 SAY "Fehler beim Lesen der Seite:"+STR(seite) RETURN(1) ENDIF szahl:=BIN2W(SUBSTR(buf,1,2)) // Anzahl Schlüssel in der Seite snr:=1 // relative Schlüssel-Nummer szeiger:=UNSIGNED+1 // Zeiger auf den ersten Schlüssel sadre:=BIN2W(SUBSTR(buf,szeiger,4)) // Adresse des Schlüssels schluessel:=SUBSTR(buf,sadre+2*LONG+1,indexlae) DO WHILE snr<szahl .AND. schluessel<suchwort snr++ szeiger:=UNSIGNED+1+(snr-1)*UNSIGNED sadre:=BIN2W(SUBSTR(buf,szeiger,4)) schluessel:=SUBSTR(buf,sadre+2*LONG+1,indexlae) ENDDO DO CASE CASE schluessel>suchwort // auf linker Folgeseite weiter seite:=BIN2L(SUBSTR(buf,sadre+1,4)) CASE schluessel=suchwort // Schlüssel gefunden satznr:=BIN2L(SUBSTR(buf,sadre+LONG+1,4)) RETURN(.T.) CASE schluessel<suchwort // auf rechter Folgeseite weiter snr++

Page 325: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 9.2 Untersuchung einer xBase-Indexdatei © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 9-46 D:\Eigene\Doku\DB\DB12Übun.doc – 97102

szeiger:=UNSIGNED+1+(snr-1)*UNSIGNED sadre:=BIN2W(SUBSTR(buf,szeiger,4)) seite:=BIN2L(SUBSTR(buf,sadre+1,4)) ENDCASEENDDORETURN(.F.) // ntxsuch()

FUNCTION ntxzahl(ntxdatei) //-------------------------------------------------* bestimmt die Anzahl der Indexeinträge* die Indexdatei muß freigegeben seinSTATIC akt,anzahl,beginn,eof,handle,rsvd,seite,var,zahlhandle:=FOPEN(ntxdatei,0) // öffnet nur lesendIF handle<0 meldung("Fehler bei FOPEN("+ntxdatei+")!",.T.) RETURN(-1)ENDIFFSEEK(handle,0) // an den Dateianfangvar:=SPACE(13) // unbenutzen Knotenpunkt feststellenFREAD(handle,@var,12) //rsvd:=BIN2L(SUBSTR(var,-4))eof:=FSEEK(handle,0,2) // Dateiende feststellenzahl:=0beginn:=SEITENLAEseite:=0DO WHILE .T. IF (beginn+SEITENLAE*seite)=rsvd seite++ ENDIF FSEEK(handle,beginn+SEITENLAE*seite,0) anzahl:=SPACE(2) seite++ FREAD(handle,@anzahl,2) // zwei Zeichen mit Anzahl der Indizes lesen zahl:=zahl+BIN2W(anzahl) // und aufaddieren IF (beginn+SEITENLAE*seite)>=eof EXIT ENDIFENDDOFCLOSE(handle)RETURN(zahl) // ntxzahl

Page 326: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Dieses Manuskript ist ausschließlich als Unterlage für die genannte Lehrveranstaltung bestimmt. Verviel-fältigungen (auch auszugsweise) sind nur mit schriftlicher Genehmigung des Autors erlaubt.

Fachhochschule für Technik und WirtschaftFachbereich 3Studiengang: Technische InformatikStudienfach: Datenbanken

Microsoft Access

Eine Einführung

Prof. Dr.-Ing. H.-J. ScheiblRebhuhnweg 5D-82256 FürstenfeldbruckTel.: 08141/16432Fax.: 08141/16432E-Mail: [email protected]

Page 327: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 12.04.97 12:18/12.04.97 12:18 Seite: 1-I

MS Access – Einführung

1 MS Access - Einführung ..............................................................................................1-1

1.1 Anlegen einer Datenbank .....................................................................................1-1

1.2 Tabellen anlegen ...................................................................................................1-2

1.2.1 Aufruf ...............................................................................................................1-2

1.2.2 Eigenschaften ..................................................................................................1-4

1.2.3 Wertebereiche von Textfeldern .....................................................................1-14

1.2.4 Wertebereiche von numerischen Feldern .....................................................1-15

1.2.5 Nachschlagen ................................................................................................1-17

1.2.6 Beispiel ..........................................................................................................1-18

1.2.7 Indizes............................................................................................................1-21

1.2.8 Tabellenformatierung.....................................................................................1-23

1.3 Beziehungen herstellen ......................................................................................1-24

1.3.1 Verbindungsschlüssel für 1:m, 1:mc, c:m, c:mc Beziehungen definieren.....1-24

1.3.2 Tabellen verknüpfen ......................................................................................1-25

1.3.3 Externe Plausibilität .......................................................................................1-28

1.3.4 Tabellen importieren/einbinden .....................................................................1-31

1.3.5 Tabellen löschen............................................................................................1-33

1.4 Abfragen durchführen ........................................................................................1-34

1.4.1 Entwurf ...........................................................................................................1-34

1.4.2 In Abfragen ändern bzw. neu eingeben ........................................................1-39

1.4.3 Abfragen in 1:m Beziehungen .......................................................................1-42

1.5 Noch mehr Beziehungen ....................................................................................1-42

1.5.1 m:m Beziehungen..........................................................................................1-42

1.5.2 Korrektur eines Beziehungsentwurfs.............................................................1-45

1.5.3 Mehr-Felder-Indizes, Mehr-Felder-Beziehungen ..........................................1-48

1.5.4 Rekursive Beziehungen (Reflexivverknüpfungen) ........................................1-51

1.6 Optimierung des Speicherbedarfs und Laufzeitverhaltens ............................1-54

1.6.1 Defragmentierung und Kompression.............................................................1-54

1.6.2 Datenbank analysieren..................................................................................1-54

Page 328: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-1

1 MS Access – Einführung

1.1 Anlegen einer Datenbank

Grundsätzlich ist es empfehlenswert, die Daten und das Anwendungssystem zu trennen.So können z. B. wir bei einem Versionswechsel das alte System leichter entfernen. Wei-terhin kann die Datensicherung usw. gezielt auf die variablen Daten angewandt werdenusw. Das Manuskript geht davon aus, daß ein Datenverzeichnis C:\Eigene Dateien\Access\Fh existiert, in das wir unsere Beispieldaten ablegen.

�Legen sie einen Ihnen genehmen Pfad für die Daten an und benutzen Sie ihn im folgen-den. �

Hinweis: Die nachfolgenden Bildschirmausdrucke sind bearbeitet. Es wurde insbesonderedie Farbe entfernt, da diese beim Kopieren Probleme bereitet. Zusätzlich wur-den einige Konturen nachgezogen, die dabei verschwunden sind.

Wir klicken entweder auf dienebenstehende Ikone, wählen

die Menüoption Datei|NeueDatenbank anlegen… oder be-nutzen die Schnelltastenkombina-tion � � . Es erscheint ein Fen-ster (Bild 1.1-1), in dem wir dieVorlage für unsere Datenbankauswählen. Hier ist derzeit nur eineleere Datenbank zu fingen. Nachder Bestätigung durch Klick auf OK

wechselt das Fenster (Bild 1.1-2),in das wir den Namen unsererneuen Datenbank eingeben.

Wir wählen den erwähnten PfadC:\Eigene Dateien\Access\Fhund geben den Namen der Datenbankein, hier in den Übungen nehmen wirFh wie Fachhochschule als Präfix.Die einzelnen Übungen numerierenwir durch, so daß unser erster Namefh01 lautet. Dieses Fensterbestätigen wir mit Anlegen .

Sollten Sie im Team mit Hilfe einesNetzwerkes arbeiten, so müssen Siedie entsprechenden Hinweise im Handbuch beachten.

Eine vorhandene Datenbank wählen wir später über die nebenstehende Ikone, überDatei|Datenbank ö f fnen... oder � � aus.

Bild 1.1-1: Anlegen einer neuen Datenbank

Bild 1.1-2: Namensvergabe

Page 329: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.1 Anlegen einer Datenbank © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-2 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Nach der Bestätigung der Eingabeerscheint das Datenbankfenster(Bild 1.1-3), mit 6 (noch) leerenRegistern. Wegen seiner Wichtig-keit besitzt dieses Fenster eineeigene Schnelltaste � und eine

eigene Ikone , mit der wir esjederzeit in den Vordergrund brin-gen können.

Damit haben wir den ersten wich-tigen Schritt zur Anwendung von

Access hinter uns gebracht.

Die Datenbank ist leer. Wir müssen sie schrittweise mit Ta-bellen, Abfragen, Formularen, Berichten, Makros und Pro-gramm Moduln füllen. Bild 1.1-4 zeigt den Zusammenhangzwischen diesen Elementen, die wie folgt definiert sind:

In Tabellen speichern wir unsere Daten. Die Tabellen ent-sprechen den Entitätstypen des Relationalen Datenmodells.Sie bestehen aus Datensätzen (Zeilen) und Feldern (Spal-ten).

Über Abfragen wählen wir Daten aus unserem Datenbe-stand aus, um sie als temporäre Tabellen (sog. Dynasetsbzw. Auszüge) oder mit Hilfe von Formularen und Berichtenzu bearbeiten. Die einfachste Abfrage ist eine Tabelleselbst.

In einem Formular sehen wir uns einzelne Datensätze aus den erwähnten Abfragen anund verändern diese auf Wunsch. Ein Formular kann also Daten aus verschiedenen Ta-bellen enthalten, die vorher über eine Abfrage zusammengestellt wurden.

Berichte sind Zusammenstellungen mehrerer Datensätze aus Abfrage, um diese norma-lerweise zu drucken oder in der Übersicht auf dem Bildschirm zu analysieren.

Mit Hilfe von Makros automatisieren wir die Verarbeitung, d. h. fassen immer wiederkeh-rende Arbeitsschritte zusammen, ohne jedoch direkt zu programmieren.

In Moduln speichern wir Programmcode in Visual Basic für Anwendungen (VBA) ab. Hiererreichen wir noch größere Flexibilität als mit Makros.

1.2 Tabellen anlegen

1.2.1 Aufruf

fh01→ Ohne Tabellen läuft in Access nichts, denn irgendwo müssen wir unsere Daten ablegen.

Bild 1.1-3: Datenbankfenster

Bild 1.1-4: Definitionen

Page 330: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-3

Wir gehen in diesem Manuskript davon aus, daß eine Modellierung schon erfolgte. Daherwird nur die eigentliche Bearbeitung der Tabellen beschrieben.

Vor der Dateneingabe müssen die Tabellen angelegtwerden. Hierzu lösen wir Ne u im Datenbankfenster(Bild 1.1-3) aus und starten so den Entwurfseditor. Die-ser bietet uns mehrere Varianten an (Bild 1.2-1):

Modus WirkungDatenblattansicht Erstellt eine neue Tabelle in DatenblattansichtEntwurfsansicht Erstellt eine neue Tabelle in EntwurfsansichtTabellenassistent Ruft den Tabellenassistenten aufTabelle importieren Importiert Tabellen und Objekte aus einer anderen DatenbankTabelle verknüpfen Verknüpft Tabellen aus einer anderen Datenbank mit der neuen

Datenbank

In der Datenblattansicht wird eine Tabelle mit 20 Feldern generiert. Diesen könnenwir eigene Bezeichner geben. Wir können die Spalten löschen, neue Spalten einfügenusw. Ansonsten ist dieser Assistent spartanisch.

In die Entwurfsansicht gelangen wir nach dem Aufruf des Tabellenassiste n-ten, so daß sie im Text näher erläutert wird.

Mit Tabelle importieren können wir fertige Tabellen aus anderen Datenbankeninklusive der Daten einkopieren. Wir sind uns hierbei darüber klar, daß die Datenbestän-de über kurz oder lang auseinanderlaufen werden.

Mit Tabelle verknüpfen machen wir eine fremde Tabelle für unsere Anwendungsichtbar. Diese Option werden wir zur Erstellung netzwerkfähiger Anwendungen benut-zen.

Bild 1.2-1: Tabellenassistentoder Tabelleneditor

Page 331: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-4 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Es sei nur kurz erwähnt, daß der Tabellen-assistent eine Vielzahl von Tabellenbe-schreibungen enthält, so daß wir uns ggf.das mühsame Eingeben der verschiedenenFelder ersparen können.

Tatsächlich haben die Entwickler von Accessauch an Schulen und die Weiterbildung ge-dacht, so daß wir entsprechende Einträgevorfinden, wenn die Option geschäftlichgewählt ist. Im mittleren Fenster (Bild 1.2-2)sehen wir übrigens die einzelnen Felder derTabelle. Wir können nun mit > einzelne,

oder mit >> alle Felder auf eine neue Tabelle übernehmen. Felder, die uns nicht gefal-

len, können wir wieder aussortieren.

Nachdem wir einige weitere Fenster des Assistenten mit sinnvollen Daten versorgt haben,gelangen wir entweder in die Dateneingabe oder in die Entwurfsansicht.

Aus Übungsgründen und zur Reduktion des Aufwandes (bedeutend weniger Felder)wählen wir nicht den automatisierten Weg, sondern aktivieren die Entwurfsansicht direkt,d. h. wir markieren den Eintrag Entwurfsansicht.

1.2.2 Eigenschaften

Der Tabelleneditor legt uns ein großes Entwurfsformular vor, auf dem wir unsere Dateneintragen können (Bild 1.2-3). Vorher öffnet er aber noch ein Zusatzfenster mit den all-gemeinen Eigenschaften der Tabelle. Außer in der Eigenschaft Beschreibung könnenwir aber noch nichts sinnvolles eingeben, daß wir für die anderen Eigenschaften Felderdefiniert haben sollten. Also schließen wir es und betrachten das eigentliche Entwurfsfor-mular.

Das Formular ist zweigeteilt. Die obereHälfte enthält die Feldliste, die untereHälfte enthält zwei Register. Das RegisterAllgemein zeigt uns die Eigenschaftendes markierten Feldes an. Das RegisterNachschlagen ist noch leer.

In die erste Spalte geben wir unserenFeldnamen ein, z. B. snr . In der letztenSpalte können wir einen Kommentar hin-zufügen, z. B. die Synonyme zu diesemFeld. Wichtig ist nun die mittlere Spalte, inder wir den Datentyp festlegen. Je nachunserer Wahl öffnen sich dann im Regi-ster Allgemein eine Reihe weitererFelder für die Detaileigenschaften des Felddatentyps.

Bild 1.2-2: Tabellenassistent

Bild 1.2-3: Entwurfsformular

Page 332: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-5

Einstellung Datentyp GrößeText (Voreinstellung) Text oder Kombina-

tionen aus Text und Zahlen, als auchZahlen, die keine Berechnungen er-fordern, z. B. Telefonnummern

Bis zu 255 Zeichen oder die in derEigenschaft Feldgröße eingestellteLänge (je nachdem, welcher Wertkleiner ist). Microsoft Access reser-viert keinen Platz für nicht genutzteTeile eines Textfeldes

Memo Langer Text oder Kombinationen ausText und Zahlen

Bis zu 64.000 Zeichen

Zahl Numerische Daten, die in mathema-tischen Berechnungen verwendetwerden. Weitere Informationen zurEinstellung eines bestimmtenZahlentyps finden Sie im Thema derEigenschaft Feldgröße

1, 2, 4 oder 8 Byte (16 Byte nur fürReplicationID )

Datum/Zeit Datum- und Zeit-Werte für die Jahre100 bis 9999

8 Byte

Währung Währungswerte und numerischeDaten, die in mathematischen Be-rechnungen verwendet werden undeine bis vier Dezimalstellen enthal-ten. Auf bis zu 15 Stellen links vomDezimaltrennzeichen genau

8 Byte

AutoWert Eine eindeutige, fortlaufende Zahl(die jeweils um 1 hochgezählt wird)oder eine Zufallszahl, die vonMicrosoft Access zugewiesen wird,wenn ein neuer Datensatz in eineTabelle eingetragen wird. Aut o-Wert- Felder können nicht aktuali-siert werden. Weitere Informationenfinden Sie im Thema zur EigenschaftNeueWerte (NewValues )

4 Byte (16 Byte nur fürReplicationID )

Ja/Nein Ja- und Nein-Werte und -Felder, dienur einen von zwei Werten enthalten(True/False, Ein/Aus)

1 Bit

OLE-Objekt Ein Objekt (wie z.B. eine MicrosoftExcel-Tabelle, ein Microsoft Word-Dokument, Grafiken, Klänge oderandere binäre Daten), das mit einerMicrosoft Access-Tabelle verknüpftoder darin eingebettet ist

Bis zu 1 Gigabyte (durch den verfüg-baren Festplattenspeicher begrenzt)

Page 333: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-6 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Einstellung Datentyp GrößeNachschlageassistent

Erstellt ein Feld, das Ihnen ermög-licht, einen Wert aus einer anderenTabelle oder aus einer Liste vonWerten mit Hilfe eines Kombinati-onsfeldes zu wählen. Durch dasWählen dieser Option in der ListeFelddatentyp wird der Nachschla-geassistent gestartet, um den Da-tentyp zu definieren

Die gleiche Größe wie das Primär-schlüsselfeld, das zum Nachschla-gen benötigt wird, in der Regel 4Bytes

Die folgende Tabelle zeigt uns, welche Eigenschaften bei den verschiedenen Datentypeneingegeben werden können.

Text| Memo| | Zahl| | | Datum/Zeit| | | | Währung| | | | | AutoWert| | | | | | Ja/Nein

| | | | | | | OLE-Objekt Feldgröße X XNeue Werte XFormat X X X X X X XDezimalstellen X XEingabeformat X X X XBeschriftung X X X X X X X XStandardwert X X X X X XGültigkeitsregel X X X X X XGültigkeitsmeldung X X X X X XEingabe erforderlich X X X X X X XLeere Zeichenfolge X XIndiziert X X X X X X

Wir sehen, daß es eine Reihe von Eigenschaften gibt, die vielen Datentypen gemeinsamsind. Einige kommen dagegen nur bei einzelnen Datentypen vor.

Feldgrößegibt die maximale Größe der Datenmenge an, die in einem Feld gespeichert werdenkann. Die Angabe variiert zwischen Text und den beiden Zahltypen.

Wenn die Eigenschaft Felddatentyp auf Text eingestellt ist, müssen wir einen Wertkleiner als 256 eingeben. Standardmäßig wird 50 gesetzt. Beim Typ Zahl gelten fol-gende Aussagen

Page 334: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-7

Einstellung BeschreibungByte Speichert Zahlen von 0 bis 255 (keine Dezimalzahlen). Belegt 1 Byte.Integer Speichert Zahlen von -32.768 bis 32.767 (keine Dezimalzahlen). Belegt

2 Byte.Long Integer Speichert Zahlen von -2.147.483.648 bis 2.147.483.647 (keine Dezi-

malzahlen). Belegt 4 Byte.Single Speichert Zahlen mit 6-stelliger Genauigkeit, von -3,402823·1038 bis

3,402823·1038. Belegt 4 Byte.Double (Standardeinstellung) Speichert Zahlen mit 10-stelliger Genauigkeit

von -1,79769313486232·10308 bis 1,79769313486232·10308. Belegt 8Byte.

Dies entspricht den Eigenschaften der Zahlen in den bekannten Programmiersprachen.

Bei der Festlegung der Werte sollten wir nicht zu großzügig sein, da zu große Felder na-türlich erheblichen Speicherplatz kosten. Normalerweise beginnen wir mit einem eher zukleinen Wert. Ändern wir bei einer bestehenden Tabelle die Größenangaben, so wird dieTabelle umkopiert und das Feld dabei erweitert. Bei einer Verkleinerung werden dagegenTexte abgeschnitten und Zahlen gerundet. Zu große Zahlen werden auf 0 gesetzt. EineVerkleinerung ist daher eher problematische als eine Vergrößerung.

Die Datentypen SINGLE und DOUBLE werden in Gleitpunktdarstellung gespeichert,was die Gefahr von Rundungsfehler beinhaltet. Wenn der Festpunkttyp Währung in derGröße ausreicht, so sollten wir diesen benutzen. Bei ihm wird immer bei jeder Operationnach der 4. Dezimalstelle gerundet.

Neue WerteHiermit stellen wir ein, wie ein AutoWert- Feld hochgezählt wird, wenn einer Tabelleneue Datensätze hinzugefügt werden.

Einstellung BeschreibungInkrement (Voreinstellung) Der Wert von AutoWert- Feldern wird für neue Datensät-

ze um 1 hochgezählt.Zufall Dem Wert von AutoWert- Feldern wird eine zufällige Zahl des Typs

Long Integer für neue Datensätze zugewiesen.

Formatdefiniert das Format zum Anzeigen und Drucken von Zahlen, Datums- und Zeitangabenund Texten.

Die Eigenschaft Format hat unterschiedliche Einstellungen für unterschiedliche Daten-typen. Access unterstützt Standardformate für die Felddatentypen Zahl, Datum/Zeitund Ja/Nein. Wir können eines der Standardformate wählen oder ein benutzerdefi-niertes Format unter Verwendung von Formatierungssymbolen erstellen. Für dieFelddatentypen Text und Memo können wir nur benutzerdefinierte Formate festlegen.

Die Standardformate sind abhängig vom in der Systemsteuerung des Windows Betriebs-systems unter "Ländereinstellungen" gewählten Land. Wenn z. B. das Währungsformatfür Deutschland gesetzt ist, erscheint die Zahl mit angehängtem DM, also1.234,56 DM.

Page 335: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-8 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Bei der Formatierung müssen wir verschiedene Besonderheiten beachten. Eine Formatie-rungsanweisung beginnt normalerweise mit globalen Anweisungen, die alle Zeichen be-treffen (z. B. Großbuchstaben). Innerhalb des Formates finden wir dann Platzhalter, diebei der Darstellung des Variablenwertes ersetzt werden (auch Ersatzzeichen genannt),und Einfügezeichen, die an der angegebenen Stelle eingefügt werden. Aber auch dieseUnterscheidung reicht nicht ganz aus, da eine Einfügezeichen bedingt sind, d. h. nur dannauftreten, wenn davor ein Zeichen der Variablen steht. Typisch hierfür sind die Tausen-dertrenner, die natürlich nur dann eingefügt werden, wenn mindestens eine Ziffer davorsteht.

Symbol Bedeutung(Leerzeichen) Zeigt Leerzeichen als Literalzeichen an."ABC" Zeigt alles, was sich zwischen Anführungszeichen befindet, als Literal-

zeichen an.! Linksbündige Ausrichtung an Stelle von rechtsbündiger Ausrichtung.* Füllt verfügbaren Leerraum mit dem nachfolgenden Zeichen auf.\ Zeigt das nächste Zeichen als Literalzeichen an. Sie können Literal-

zeichen in Anführungszeichen setzen.[Farbe] In angeführter Farbe anzeigen. Folgende Farben sind im Eigenschaf-

tenfenster verfügbar: Schwarz, Blau, Grün, Cyan, Rot, M a-genta, Gelb, Weiß.

Im Format können wir mehrere Angaben (Formatgruppen) durch Semikolons voneinandertrennten. Die Stellung der Formate hat dann eine besondere Bedeutung

Format 1. Gruppe 2. Gruppe 3. Gruppe 4. GruppeTextMemo

Felder mit Text Felder ohne Text(leere Zeichenfolgen)

Felder mit Nullwerten

ZahlWährung

Positive Zahlen Negative Zahlen Wert 0 "Null"oder"Leer"

Ja/Nein nicht verwendet,daher nur Semi-kolon

Werte gleich -1(Ja).

Werte gleich 0 (Nein).

Geben wir z. B. bei einer Zahl vier Formatgruppen an, so gilt die erste für alle positivenWerte im Feld, die zweite für alle negativen Werte, die dritte für den Zahlenwert 0, dievierte, wenn die Zahl noch nicht definiert ist.

Bei der Formatierung können wir nun entweder auf vordefinierte Formate zurückgreifen(in der nachfolgenden Tabelle mit ihrer Bezeichnung aufgeführt) oder die Zeichen selbstzusammenstellen

Einstellung BeschreibungText/Memo@ Textzeichen (entweder ein Zeichen oder ein Leerzeichen) erforder-

lich& Textzeichen nicht erforderlich< Alle Zeichen in Kleinbuchstaben

Page 336: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-9

Einstellung Beschreibung> Alle Zeichen in GroßbuchstabenZahl/WährungAllgemeine Zahl (Standardeinstellung) Zeigt Zahlen so an, wie sie eingegeben wer-

den.Währung Verwendet Tausender-Trennzeichen; zeigt negative Zahlen in

Klammern an; die Einstellung für die Eigenschaft Dezimalste l -len (DecimalPlaces ) lautet 2.

Festkommazahl Zeigt mindestens eine Ziffer an; die Einstellung für die EigenschaftDezimalstellen (DecimalPlaces ) lautet 2.

Standardzahl Verwendet Tausender-Trennzeichen; die Einstellung für die Eigen-schaft Dezimalstellen (DecimalPlaces ) lautet 2.

Prozentzahl Multipliziert den Wert mit 100; hängt ein Prozentzeichen an; dieEinstellung für die Eigenschaft Dezimalstellen(DecimalPlaces ) lautet 2.

Exponentialzahl Verwendet das Standardformat für wissenschaftliche Notation., (Komma) Dezimalzeichen. Trennzeichen werden im Abschnitt Länderei n-

stellungen der Systemsteuerung des Windows Betriebssystemsgesetzt.

. (Punkt) Tausender-Trennzeichen.0 Platzhalter für eine Ziffer. Zeigt entweder eine Ziffer oder 0 an.# Platzhalter für eine Ziffer. Zeigt entweder eine Ziffer oder nichts an.$ Zeigt das Literalzeichen $ an.% Prozentzahl. Wert wird mit 100 multipliziert, und das Prozentzei-

chen wird angehängt.E- oder e- Wissenschaftliche Notation mit einem Minuszeichen neben negati-

ven Exponenten und keinem Zeichen neben positiven Exponenten.Muß zusammen mit anderen Symbolen (z. B. 0,00E-00 ) verwen-det werden.

E+ oder e+ Wissenschaftliche Notation mit einem Minuszeichen für negativeExponenten und einem Pluszeichen für positive Exponenten. Mußzusammen mit anderen Symbolen (z. B. 0,00E+00 ) verwendetwerden.

Datum/UhrzeitStandarddatum (Standardeinstellung) Wenn der Wert nur ein Datum enthält, wird

keine Zeit angezeigt. Enthält der Wert nur eine Zeit, wird kein Da-tum angezeigt. Beispiele: 03.04.1993 17:34:00,03.04.1993 und 17:34:00.

Datum, lang Entspricht der Einstellung Langes Datumsformat unter Lä n-dereinstellungen der Systemsteuerung des Windows Be-triebssystems. Beispiel: Samstag, 3. April 1993.

Datum, mittel Beispiel: 03. Apr . 1993.Datum, kurz Entspricht der Einstellung Kurzes Datumsformat unter Lä n-

dereinstellungen der Systemsteuerung des Windows Be-triebssystems. Beispiel: 03.04.1993.

Zeit, lang Entspricht der Einstellung Zeitformat unter Ländereinste l -lungen der Systemsteuerung des Windows Betriebssystems. Bei-spiel: 17:34:23.

Page 337: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-10 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Einstellung BeschreibungZeit, 12Std Beispiel: 5:34 PM.Zeit, 24Std Beispiel: 17:34.. (Punkt) Datums-Trennzeichen.: (Doppelpunkt) Zeit-Trennzeichen. Trennzeichen werden unter Ländereinste l -

lungen der Systemsteuerung des Windows Betriebssystems ge-setzt.

g Entspricht dem Standardformat Standarddatum.h Stunde in einer oder zwei Ziffern (0-23 ).hh Stunde in zwei Ziffern (00-23 ).j Kalendertag (1-366 ).jj Die letzten beiden Ziffern der Jahreszahl (01-99 ).jjjj Vollständige Jahreszahl (0100-9999 ).m Monat im Jahr in einer oder zwei Ziffern (1-12 ).mm Monat im Jahr in zwei Ziffern (01-12 ).mmm Die ersten drei Buchstaben des Monats (Jan-Dez ).mmmm Vollständige Monatsbezeichnung (Januar-Dezember ).n Minute in einer oder zwei Ziffern (0-59 ).nn Minute in zwei Ziffern (00-59 ).q Quartal des Jahres (1-4 ).s Sekunde in einer oder zwei Ziffern (0-59 ).ss Sekunde in zwei Ziffern (00-59 ).t Tag des Monats, in einer oder zwei Ziffern (1-31 ).tt Tag des Monats in zwei Ziffern (01-31 ).ttt Die ersten drei Buchstaben des Wochentages (Son-Sam).tttt Vollständiger Wochentag (Sonntag-Samstag ).ttttt Entspricht dem Standardformat Datum, kurz.tttttt Entspricht dem Standardformat Datum, lang.w Tag der Woche (1-7 ).ww Woche im Jahr (1-54 ).zzzzz Entspricht dem Standardformat Zeit, lang.Ja/NeinJa/Nein (Standardeinstellung) Ja = -1, Nein = 0Wahr/Falsch Wahr = -1, Falsch = 0An/Aus An = -1, Aus = 0

�Beispiele:

Texte/Memo

Format Daten Anzeige@@@-@@-@@@@465043799 465-04-3799@@@@@@@@@ 465-04-3799 465-04-3799

465043799 465043799> fhtw FHTW

FHTW FHTWFhtw FHTW

< fhtw fhtw

Page 338: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-11

Format Daten AnzeigeFHTW fhtwFhtw fhtw

@;;"Unbekannt" Nullwert "Unbekannt"

Leere Zeichenfolge Es wird nichts angezeigt.Beliebiger Text Der Text wird wie eingegeben angezeigt.

Das Standardwährungsformat hat z. B. das folgende Muster:

#.##0,00" DM";(#.##0,00" DM")[Rot]

Datum/Uhrzeit

Einstellung Anzeigettt", "t"." mmm"."jjjj Mon, 2. Sep. 1996tt"."mmmm jjjj 02. September 1996"Die Wochennummer ist "ww Die Wochennummer ist 34"Heute ist "tttt Heute ist Montag

Das folgende Beispiel zeigt das Wort Immer in blauer Farbe für Ja, Wahr oder Anund das Wort Nie in roter Farbe für Nein, Falsch oder Aus an.

;"Immer"[Blau];"Nie"[Rot]

Dezimalstellenbestimmt die Anzahl der Dezimalstellen, die Access zum Anzeigen von Zahlen verwen-det.

Die Eigenschaft Dezimalstellen (DecimalPlaces) hat folgende Einstellungen:

Einstellung BeschreibungAutomatisch (Standardeinstellung) Zahlen erscheinen wie in der Einstellung der Ei-

genschaft Format definiert.0 bis 15 Ziffern links vom Dezimalkomma erscheinen wie in der Einstellung der

Eigenschaft Format definiert; Ziffern rechts vom Dezimalkomma er-scheinen mit der angegebenen Anzahl von Dezimalstellen.

Eingabeformatlegt ein Eingabeformat für ein Feld fest. Es hat große Ähnlichkeit mit dem Ausgabeformat.

Die Einstellung der Eigenschaft Eingabeformat (InputMask) bestimmt, wie Daten indas Textfeld eingegeben und angezeigt werden. Wenn wir die Eigenschaft z. B. auf 000-00-0000 setzen, werden die Bindestriche wie angegeben und jede Null als Unterstrich_ angezeigt.

Die Einstellung kann bis zu drei Bereiche - getrennt durch Semikolons - enthalten (z. B.(999) 000-0000!;0;" "):

• Der erste Bereich bestimmt das Eingabeformat selbst (z. B. (999) 000-0000!).

Page 339: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-12 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

• Der zweite Bereich bestimmt, ob Access bei der Dateneingabe die Literalzeichen desEingabeformats in der Tabelle speichert. Wenn wir hier 0 eingeben, werden alle Lite-ralzeichen des Eingabeformats (z. B. die Bindestriche in einer ISBN-Nummer) zusam-men mit dem Wert gespeichert. Geben wir 1 ein oder lassen diesen Bereich leer,werden nur die in das Textfeld eingegebenen Zeichen gespeichert.

• Der dritte Bereich bestimmt das Zeichen, das Access für Leerzeichen im Eingabefor-mat anzeigen soll. Hier können wir jedes Zeichen verwenden. Um ein Leerzeichen an-zuzeigen, verwenden wir ein in Anführungszeichen eingeschlossenes Leerzeichen" ".

Die Zeichen im ersten Bereich der Einstellung der Eigenschaft Eingabeformat(InputMask) werden von Access folgendermaßen interpretiert:

Zeichen Beschreibung0 Ziffer (0-9, Eingabe erforderlich, Plus- + und Minuszeichen -

nicht erlaubt).9 Ziffer oder Leerzeichen (Eingabe optional, Plus- und Minuszei-

chen nicht erlaubt).# Ziffer oder Leerzeichen (Eingabe optional, Leerstellen werden zu

Leerzeichen, Plus- und Minuszeichen erlaubt).L Buchstabe (A-Z, Eingabe erforderlich).? Buchstabe (A-Z, Eingabe optional).A Buchstabe oder Ziffer (Eingabe erforderlich).a Buchstabe oder Ziffer (Eingabe optional).& Beliebiges Zeichen oder Leerzeichen (Eingabe erforderlich).C Beliebiges Zeichen oder Leerzeichen (Eingabe optional).. , : ; - / Platzhalter für Dezimaltrennzeichen, Tausender-, Datums- und

Zeit-Trennzeichen. (Das tatsächlich verwendete Zeichen ist ab-hängig von der Trennzeicheneinstellung in den Ländereinstellun-gen der Windows Systemsteuerung.)

< Wandelt alle nachfolgenden Zeichen in Kleinbuchstaben um.> Wandelt alle nachfolgenden Zeichen in Großbuchstaben um.! Die Eingabe erfolgt von rechts nach links, anstatt von links nach

rechts, wenn die Zeichen auf der linken Seite des Eingabeformatsoptional sind. Das Ausrufezeichen kann an einer beliebigen Stelledes Eingabeformats stehen.

\ Stellt das nachfolgende Zeichen als literales Zeichen dar (\Awird z. B. als A angezeigt).

Kennwort erstellt ein Textfeld zur Kennworteingabe. Jedes der in das Text-feld eingegebenen Zeichen wird zwar als das entsprechende Zei-chen gespeichert, aber als Sternchen * angezeigt.

Beschriftungbestimmt den Text für Bezeichnungsfelder, die Steuerelementen zugeordnet sind, diedurch Ziehen eines Feldes aus der Feldliste erzeugt worden sind, und dient als Spalten-überschrift für das Feld, wenn die Tabelle oder Abfrage in Datenblattansicht angezeigtwird. Fehlt der Wert, so wird der Feldname benutzt.

Standardwertdefiniert den Standardwert für ein Feld oder ein Steuerelement.

Page 340: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-13

Gültigkeitsregel(ValidationRule ) legt fest, welcher Ausdruck ausgewertet wird, wenn Daten in einemFeld oder einem Steuerelement, das an ein Feld gebunden ist, hinzugefügt oder geändertwerden oder wenn ein Datensatz gespeichert wird.

Ausdruck Gültigkeitsregel="Deutschland " Die eingegebenen Daten müssen gleich Deutsc h-

land sein.=100 Der eingegebene Wert muß gleich 100 sein.Zwischen 10 Und 100 Der eingegebene Wert muß größer oder gleich 10

und kleiner oder gleich 100 sein.Zwischen #01.01.1994# Und#03.03.1994#

Das eingegebene Datum muß zwischen dem 1.Januar 1994 und dem 3. März 1994 ein-schließlich liegen.

In (" Ravensburg ";" Konstanz ")

Die eingegebenen Daten müssen gleichRavensburg oder Konstanz sein.

Wie "P[A-F]###" Die eingegebenen Daten müssen mit dem Buchsta-ben P beginnen, und es muß ein beliebiger Buch-stabe zwischen A und F und dann eine dreistelligeZahl folgen. PB281 und PF031 sind z. B. gültigeEingaben, PG219 und PBS12 dagegen nicht.

DomWert("[plz]", "land","[plz]=[stadt]") Ist NichtNull

Das Feld stadt muß einem der im Feld plz inder Tabelle land gespeicherten Werte entspre-chen. Dieser Ausdruck gibt den Wert WAHR aus,wenn ein übereinstimmender Wert gefunden wird,bzw. den Wert FALSCH, wenn dies nicht der Fall ist.

Gültigkeitsmeldung(ValidationText ) gibt den Text der Meldung an, die erscheint, wenn das Feld, dasSteuerelement oder der Datensatz nicht den in der Eigenschaft Gültigkeitsregel(ValidationRule ) angegebenen Bedingungen entspricht.

Eingabe erforderlichgibt an, ob in einem Feld ein Wert erforderlich ist oder nicht. Wenn bei der Eingabe vonDaten in einen Datensatz diese Eigenschaft auf Ja gesetzt ist, muß der Benutzer einenWert in das Feld oder in ein beliebiges Steuerelement, das an dieses Feld gebunden ist,eingeben.

Leere Zeichenfolgegibt an, ob eine leere Zeichenfolge "" als gültiger Eintrag akzeptiert wird.

Indiziertdefiniert einen Index über ein einzelnes Feld (einfacher Index).

Die folgende Tabelle beschreibt die Einstellungen der Eigenschaft Indiziert:

Page 341: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-14 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Einstellung BeschreibungNein (Standardeinstellung) Kein Index.Ja (Duplikate möglich) Index erlaubt Duplikate, sofern vorhanden.Ja (Ohne Duplikate) Index erlaubt keine Duplikate.

Vielleicht stolpern Sie ebenso wie ich über die Tatsache, daß wir zwar eine Eingabe er-zwingen können, gleichzeitig aber eine leere Zeichenfolge erlauben. Sind die Eigen-schaften (die nur bei Text und Memo auftauchen) unabhängig voneinander? �

1.2.3 Wertebereiche von Textfeldern

Nullwerte und leere Zeichenfolgen

Viele Datenbanktabellen enthalten Felder ohne Werte. Felder Telefon, Telefax,usw. enthalten nur dann Werte, wenn eine Person ein Telefon oder Telefax besitzt.

Wenn ein Feld keinen Wert besitzt, enthält es entweder einen Nullwert (das ist nicht dieZahl 0 ) oder bei Feldern vom Datentyp Text oder Memo einen Nullwert oder eine leereZeichenfolge. Letzteres können wir beim Betrachten des Feldes nicht unterscheiden.

Ob ein Feld einen Nullwert, eine leere Zeichenfolge oder beides zuläßt, können wir durchEinstellen der Eigenschaften EingabeErforderlich und LeereZeichenfolge fürdas entsprechende Feld einer Tabelle definieren.

Wir verwenden Nullwerte, um Informationen zu kennzeichnen, die möglicherweise existie-ren, jedoch unbekannt sind. Wenn das Feld Telefax z. B. keine Werte besitzt, bedeu-tet das entweder, daß ein Kunde keine Fax-Nummer besitzt oder daß er seine Fax-Nummer nicht angegeben hat.

Wir verwenden leere Zeichenfolgen für Informationen, die nicht existieren, z. B. dann,wenn ein Kunde keine Fax-Nummer besitzt.

Möglicherweise möchten wir zwischen unbekannten Werten und nicht existierendenWerten unterscheiden. Wenn wir z. B. die Fax-Nummer eines Kunden nicht wissen, ver-wenden wir den Nullwert. Wenn wir jedoch wissen, daß der Kunde keine Fax-Nummerbesitzt, verwenden wir eine leere Zeichenfolge.

In einem Textfeld sehen beide Eigenschaften gleich aus, wir sie können aber durch dieFormatierung optisch anders behandeln.

Eingeben und Suchen von Nullwerten und leeren Zeichenfolgen

Um einen Nullwert in ein Feld einzugeben, setzen wir die EigenschaftEingabeErforderlich des Feldes auf Nein und lassen dann das Feld frei. Eine lee-re Zeichenfolge geben wir üblicherweise mit zwei Anführungszeichen "", ohne Leerzei-chen dazwischen, ein.

Wir können mit dem Befehl Suchen auch nach Nullwerten oder leeren Zeichenfolgensuchen. Wir wählen dazu in der Datenblattansicht oder in der Formularansicht das Feld

Page 342: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-15

aus, nach dem wir suchen möchten. Anschließend geben wir im Feld Suchen nachNull ein, um nach Nullwerten zu suchen, und zwei Anführungszeichen "", umnach leeren Zeichenfolgen zu suchen. Wir wählen im Feld Vergleichen die OptionGesamter Feldinhalt aus und achten Sie darauf, daß das Kontrollkästchen Form a-tierung beachten nicht aktiviert ist.

Nullwerte in Ausdrücken

Wenn wir Texte, die Nullwerte enthalten, miteinander verbinden möchten, verwenden wirnicht den Operator +, sondern den Operator &. Der Operator & verbindet die Werte,auch wenn diese Nullwerte enthalten, wogegen der Operator + einen Nullwert ausgibt,sobald nur einer der beiden Werte ein Nullwert ist. Zum Beispiel:

([Nachname] & " ") & [Vorname]

1.2.4 Wertebereiche von numerischen Feldern

Bei numerischen Feldern können wir über den Standardwert entscheiden, ob es einenNullwert oder 0 enthalten soll. Durch Löschen der Ziffern erzeugt der Benutzer nach-träglich einen Nullwert. Diese Eigenschaft haben alle numerische Felder.

Für numerische Felder, die Nullwerte enthalten, müssen wir sicherlich oft Ausdrücke er-stellen, die die Nullwerte in Nullen konvertieren. Wenn wir in einem Ausdruck ein arithme-tisches Zeichen (wie z. B. +, -, *, / ) verwenden und eines der Felder im Ausdruckeinen Nullwert enthält, ist das Ergebnis des gesamten Ausdrucks ein Nullwert. Um dies zuvermeiden, können wir die Funktionen Wenn (IIf ) und IstNull (IsNull ) zum Kon-vertieren von Nullwerten in Nullen verwenden, so daß die arithmetische Berechnungdurchgeführt werden kann. Der folgende Ausdruck überprüft z. B. die FelderQtl1Verkäufe und Qtl2Verkäufe auf Nullwerte. Enthält eines der Felder einenNullwert, wird dieser in eine Null umgewandelt, so daß die beiden Felder dann addiertwerden können.

=Wenn(IstNull([Qtl1Verkäufe]; 0; [Qtl1Verkäufe])) + Wenn(IstNull([Qtl2lVerkäufe]; 0; [Qtl2Verkäufe]))

Eine weitere Möglichkeit, Nullwerte in Nullen zu konvertieren, ist das Erstellen einerFunktion, die die Konvertierung übernimmt.

Function NullToZero (BeliebWert As Variant) As Variant' NWertZuNull' Argument(e): ein Variant-Wert' Aktion: wandelt Werte "Null" in die Zahl 0 um.' Rückgabewert(e): ein Wert gleich oder ungleich 0.' Siehe: Benutzerhandbuch, Kapitel 17 If IsNull(BeliebWert) Then NullToZero = 0 Else NullToZero = BeliebWert End IfEnd Function

Page 343: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-16 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Nullwerte und leere Zeichenfolgen in Abfragen

Beim Verknüpfen von Tabellen in einer Abfrage umfaßt das Ergebnis nur Datensätze, diekeine Nullwerte in den übereinstimmenden Feldern enthalten. Um z. B. Lieferanten undKunden aus derselben Region aufzulisten, können wir eine Abfrage erstellen, die die Ta-bellen Lieferanten und Kunden enthält, wobei die Tabellen über das Feld Regionmiteinander verknüpft sind. Beim Einsehen der Ergebnisse können wir erkennen, daß nurdie Werte von Datensätzen angezeigt werden, die im Feld Region beider Tabelleneinen Wert enthalten.

Wenn wir eine Abfrage verwenden, um nach Nullwerten oder leeren Zeichenfolgen zusuchen, geben wir in die Zelle Kriterien entweder Ist Null (Is Null) ein, umnach Nullwerten zu suchen, oder zwei Anführungszeichen "" ( ohne Leerzeichen zwi-schen den Anführungszeichen), um nach leeren Zeichenfolgen zu suchen.

Wenn wir mit Hilfe der Funktion Anzahl (Count) die Anzahl von Feldwerten in einemFeld mit Nullwerten ausgeben, wird die Anzahl der Feldwerte ausgegeben, die nichtgleich Null sind. Wenn wir die Gesamtanzahl von Datensätzen, einschließlich derer mitNullwerten, herausfinden möchten, können wir die Funktion Anzahl (Count) mit einemSternchen * als Platzhalterzeichen verwenden. Zum Beispiel:

SELECT Count(*) AS [BestellungenGesamt] FROM Bestellungen;

Wenn wir Werte in einem Feld mit Nullwerten sortieren, erscheinen die Nullwerte in derSortierreihenfolge zuerst. Enthält ein Feld sowohl Nullwerte als auch leere Zeichenfolgen,erscheinen die Nullwerte als erste in der Sortierreihenfolge, gefolgt von den leeren Zei-chenfolgen.

Wenn wir beim Definieren von Abfragekriterien für ein Feld den Ausdruck Wie "*"(Like "*") verwenden, zeigt das Abfrageergebnis in diesem Feld keine Nullwerte, son-dern leere Zeichenfolgen an.

Formatieren von Nullwerten und leeren Zeichenfolgen

Wenn wir Daten in einem Feld einsehen, das sowohl Nullwerte als auch leere Zeichenfol-gen enthält, sehen die Felder alle gleich aus. Wir enthalten keine Werte. Wenn wir denUnterschied zwischen Nullwerten und leeren Zeichenfolgen verdeutlichen möchten, kön-nen wir die Eigenschaft Format für dieses Feld der Tabelle einstellen. So können wirz. B. für ein Feld Telefon die Eigenschaft Format so einstellen, daß bei Eingabe ei-ner leeren Zeichenfolge Kein Telefon und bei Eingabe eines Nullwerts Unbekanntangezeigt wird. Hierzu legen wir das Format folgendermaßen fest:

@;"Kein Telefon";"Unbekannt"

) Hinweis: Wir können den Nullwert als zusätzlichen Wert des Wertebereiches einesFeldes betrachten, der die Wertigkeit „undefiniert“ im Gegensatz zu „unbekannt“hat.

Page 344: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-17

1.2.5 Nachschlagen

Ab der Version 7.0 steht ein Nachschlageassistent zur Verfügung. Er fügt einer Tabelleeinen Zeiger auf eine Nachschlagelisten zu. Hierdurch ist es möglich, in einem Listen-oder Kombinationsfeld eine Liste von Werten anzuzeigen, die aus einer anderen Tabellestammen.

Solche Nachschlagefelder setzten wir immer dann ein, wenn Wiederholungen von Wertenin senkrechter Richtung auftreten. In diesem Fall ist der Wertebereich (Domäne) auf eineTeilmenge der nach dem Feldtyp eigentlich möglichen Werte beschränkt. Wir stellen da-mit sicher, daß in einem Nachschlagefeld nur die erlaubten Werte eingegeben werdenkönnen.

Typische Beispiele sind die Anrede, der Titel usw. von Personen. Beim Titel ist es aberschon wieder schwierig, da eine Person mehrere Titel haben kann usw.

Üblicherweise ist ein Nachschlagefeld der Verbindungsschlüssel (Fremdschlüssel), derauf eine zweite Tabelle einer 1:m, 1:cm Beziehung zeigt. Bevor wir den Nachschlageassi-stenten einsetzen können, muß die Nachschlagetabelle angelegt sein, um sie dann überdieses Feld zu verknüpfen.

Damit stellt sich die Frage, ob wir das Nachschlagefeld mit einem zusätzlichen Schlüsselversehen oder nicht. Diese Entscheidung hängt vom Speicherbedarf ab. Pro Zählerfeld(Schlüssel) benötigen wir 4 zusätzliche Bytes. Somit ist es sinnlos, die Anrede über einenSchlüssel zu verknüpfen, da Herr und Frau jeweils selbst nur 4 Byte benötigen. An-ders sieht die Sache aus, wenn wir auf die veraltete Anrede Fräulein bestehen. Jetztmüßten wir pro Person ein 7 Byte langes Feld vorsehen, daß sich durch die Verwendungeines Zählerfeldes um 3 Byte pro Datensatz reduziert.

Im ersten Fall legen wir eine Tabelle anrede mit einer Spalte anredetext und zweiEinträgen Herr und Frau an. In jedem Datensatz steht der Klartext der Anrede. Die-ser wird durch das Nachschlagen so abgesichert, daß er nur eine der beiden Anredefor-men annehmen kann.

Im zweiten Fall legen wir eine Tabelle anrede mit zwei Spalten anredenr undanredetext mit den erwähnten Einträgen an. In jedem Datensatz tritt nun nur dieNummer der Anrede auf, die durch Nachschlagen in einen Text gewandelt werden muß.

Ist der Wertebereich wie in unserem Fall extrem klein, so können darüber nachdenken,statt eine Zählerfeldes einen 1 Byte langen Schlüssel zu verwenden. In diesem Fallkönnten wir (unter Verzicht auf Fräulein ) das Feld sgeschl zu einem Nachschlage-feld ausbauen. Die Tabelle anrede hätte dann zwei Spalten:

anredeid anredetextM HerrW Frau

Das Nachschlagefeld legt automatisch eine Beziehung zur Mastertabelle (so wird die 1-Seite der Beziehung unter Access genannt) an. Die Bedeutung einer solchen Beziehungund die genaue Beschreibung der weiteren Eigenschaften müssen wir auf die späteren

Page 345: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-18 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Kapitel verschieben. U. a. tauchen SQL-Anweisungen usw. auf, deren Bedeutung wirnoch lernen müssen.

1.2.6 Beispiel�

Aufgabe:Geben Sie nun die entworfenen Enti-tätstypen ein. �

Wir beginnen mit dem Entitätstypstudent . Zuerst legen wir alle Felderfest (Bild 1.2-4)

Nun reicht dieses Bild für Sie nicht aus.Sie benötigen folgende weiteren Informa-tionen:

Feld Eingabeformat Beschriftung Standard Gültigkeitsregel Muß Leer Indiziertsnr Matrikel Ja (ohne Duplikate)sname >L<????????????

???????????????Name Ja Nein Ja (Duplikate mö g-

lich)sgeschl >A Geschlecht "M" In ("M";"W") Ja Nein Jasgeb 99.99.00;0;_ Geburtsdatum <=ZVarDat ("01.

01."+Str$(Jahr(Jetzt())-15))

Ja Nein

svord Vordiplom Nein Ja Neinsanredenr Anrede 1 Ja Nein

Die SQL-Anweisung des Nachschlagefeldes sanredenr lautete:

SELECT DISTINCTROW anrede.anredenr, anrede.anredetext FROM anrede ORDER BYanrede.anredetext;

Achten Sie auch auf die anderen Einträge bei Spaltenzahl, Spaltenbreiten, L i -stenbreite und Gebundene Spalte!

Anmerkung: Die hier verwendete Gültigkeitsregel In ("M";"W") wird bei der Einga-be akzeptiert und gespeichert. Beim Öffnen der Tabelle erfolgt jedoch eineFehlermeldung. Dieser Fehler in Version 7.0, den es in 2.0 nicht gab, istder Hotline von Microsoft bekannt. Ein „Workaround“ stellt die Anweisung="M" Oder ="W" dar.

Bild 1.2-4: Tabelle student definieren

EditorikoneRolloikone

Page 346: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-19

Zur Eingabe der Gültigkeitsregeln ist der Ausdruck-seditor sehr hilfreich (Bild 1.2-4). In ihm können wirdie gewünschte Funktion auswählen (Wer kenntschon die deutschen Übersetzungen?) und zu-sammenstellen. Als Beispiel ist die Prüfung desStudentenalters zu sehen.

Die Fehlermeldungen können Sie Ihren Wünschenanpassen. Versuchen Sie aufgrund der bisherigenErläuterungen insbesondere die Eingabeformateund die Gültigkeitsregeln nachzuvollziehen. Es sindfolgende Regeln realisiert

• Die Namen beginnen immer mit einem Großbuchstaben;• Ein Student muß mind. 15 Jahre alt sein (reicht normalerweise);• Das Geschlecht muß männlich oder weiblich sein, wobei schon bei der Eingabe auf

Großbuchstaben umgeschaltet werden soll.

Der Primärschlüssel der Tabelle ist bereits im Bild markiert. Sollten Sie ihn vergessen, sobenutzt Access automatisch das Zählfeld als Primärschlüssel.

Wechseln Sie nun vom Entwurfsmodus in die Datenblattansicht und geben einige Stu-denten ein.

In der Tabelle ist der Primärschlüssel grau hinterlegt, um ihn herauszuheben.

) Die Tabelle anrede wirdhier nur zu Demonstrations-zwecken als gesondertesNachschlagefeld eingeführt.In den weiteren Übungen

werden wir sie andas Feld sgeschlbinden.

Bei der Klassentabelle stelltsich die Frage nach demrichtigen Klassennamen.Gerade der Datenbankan-fänger hat einige Schwierig-keiten, einen geeignetenSchlüssel zu finden. Dabeierleichtert die optimale Wahldes Schlüssels die Verarbeitung ganz wesentlich.

Der Klassenname scheint in einer Institution vorgegeben zu sein, z. B. in der Form desTyps (Direkt-, Fern- oder Aufbaustudium), des Semesters, des Studienganges sowie ei-nem Zähler zur Identifikation der einzelnen parallelen Klassen. So ergibt sich eine Be-zeichnung wie zum Beispiel an der FHTW

Bild 1.2-5: Audruckseditor

studentMatrikel Name Geschlecht Geburtsdatum Vordiplom Anrede

1 Mayer M 10.10.63 Ja Herr2 Müller W 01.04.65 Ja Frau3 Schulze M 17.02.64 Nein Herr4 Huber M 05.11.62 Ja Herr5 Adam M 27.09.64 Ja Herr6 Bergmann W 16.03.66 Ja Frau7 Zuse M 31.01.63 Nein Herr8 Schwinge M 25.03.65 Ja Herr9 Bisanz M 28.09.64 Ja Herr

10 Berthold M 12.04.63 Ja Herr11 Winkelmann M 31.10.63 Ja Herr12 Freitag M 12.12.64 Nein Herr13 Keyl M 22.05.62 Ja Herr14 Fanke W 15.09.63 Ja Frau15 Lorenz M 12.04.64 Nein Herr16 Schulz M 22.09.65 Nein Herr17 Hofmann M 21.11.63 Ja Herr18 Binder M 22.02.65 Ja Herr19 Mai M 01.01.63 Ja Herr20 Oschipowski M 23.05.66 Ja Herr21 Dahley M 19.07.64 Ja Herr22 Hemberger M 22.08.65 Nein Herr23 Ritter M 30.04.66 Nein Herr24 Kreft M 22.09.64 Ja Herr25 Eger W 19.04.65 Ja Frau

Nr. Anrede1 Herr2 Frau3 Fräulein

Page 347: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-20 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

D6TI2

Dies heißt, daß die Klasse im Direktstudium das 6. Semester durchläuft, zum Studien-gang „Technische Informatik“ gehört und die 2. Klasse hierin ist. Für eine mehrjährigeVerarbeitung reichen diese Angaben aber nicht aus, da es jedes Semester solche Klas-sen gibt. Um diese auseinanderzuhalten, müssen wir das Jahressemester ergänzen, alsoJahreszahl und Halbjahr. Nun kann es noch zu Verwechslungen zwischen den Fachbe-reichen geben, so daß dieser auch noch ergänzt wird.

Die Reihenfolge dieses zusammengesetzten Schlüssels (sprechenden Schlüssels) richtetsich primär nach den Verarbeitungsfunktionen. Normalerweise werden die Klassen fach-bereichsbezogen und jahressemesterbezogen verarbeitet. So daß sich die nachfolgendgewählte Reihenfolge anbietet.

Bei der Klas-sentabelle kannman darüberstreiten, ob einZählerfeld knrnotwendig ist,da der Klas-senname auchSchlüsselkandi

dat ist (d. h. eindeutig ist). Der Klassennameist aber relativ lang, so daß sich bei mehrfa-cher Referenz darauf eine Speicherersparnisdurch die Verwendung eines Zählerschlüsselsergibt.

Da insbesondere die Prüfung des Klassennamens einen Höhepunkt der Stringverarbei-tung darstellt, sind hier noch einmal die wichtigsten Eigenschaften zusammengestellt:

Feld Eingabeform. Beschriftung Standard Gültigkeitsregel Muß Leer Indiziertknr Klassen-Nr. Ja ohkname 0\ 00>\ L\

L\ 0\ LA?\0

Klassenname "3"+LGlätten$(Str$(Rechts$(Jahr(Jetzt());2)))

Links$([kname];1) Zwischen "1" Und"8" Und TeilStr$([kname];2;2)>=Rechts$(Str$(Jahr(Jetzt()));2) UndTeilStr$([kname];4;1) In ("S";"W")Und TeilStr$([kname];5;1) In("A";"D";"F") Und TeilStr$([kname];6;1) Zwischen "1" Und "8" UndTeilStr$([kname];7;3) In ("TI";"NT";"MST";"F3") Und TeilStr$([kname];10;1)>="1" Und Länge([kname])=10

Ja Nein JaohneDuplikate

kanzahl

Anzahl NULL >=0 Oder Ist Null Nein Nein

Auch hier ist es wichtig, daß Sie sich über die Bedeutung der Einträge restlos klar wer-den. Insbesondere die Prüfungen sind natürlich interessant. Hierbei handelt es sich umreine formale Prüfungen. Um bei noch komplexeren Prüfungen auch eine spätere Kor-rektur durch den Benutzer zu erlauben, müßten wir den Klassennamen in seine Einzel-teile zerlegen und jedes einzelne Feld als Nachschlagefeld definieren.

Bild 1.2-6: Feldeigenschaften von klasse

klasseK-Nr. Klassenname Anzahl

1 3 95 S D 6 TI 1 252 3 95 S D 6 NT 1 303 3 95 S D 1 NT 1 224 3 95 S D 2 NT 15 3 95 S D 2 TI 16 3 95 S D 3 NT 17 3 95 S D 2 MST 18 3 95 S D 3 NT 29 3 95 S D 3 TI 1

10 3 95 S D 3 TI 2

Page 348: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-21

Das Eingabeformat für das Feld kname ist durch die trennenden Leerstellen recht breit,so daß auf dem Bildschirm viel Platz verloren geht. Dieses Format werden wir daher inden folgenden Entwürfen auf 000>LL0LA?0 reduzieren. Das angegebene Format sollnur die vorhandenen Möglichkeiten demonstrieren.

Das Attribut kanzahl ist nicht unproblematisch. Es muß bei jeder Operation, die Stu-denten zuordnet oder löscht gepflegt werden. Aus der Normalformtheorie ergibt sich keinGrund dieses Feld nicht anzulegen. Andererseits ist es aus der (noch zu realisierenden)Zuordnung der Studenten zu den Klassen ableitbar. Es handelt sich um eine redundanteInformation (die uns noch Schwierigkeiten bereiten wird)!

Beachten Sie auch die Prüfung von kanzahl . Hier ist ein optionales Feld vorgesehen,das auch undefiniert bleiben kann.

Die Tabelle thema bietet keine Beson-derheiten, so daß Sie in der Lage seinsollten, die Gültigkeitsprüfungen usw.selbst zu entwerfen.

Auch die Tabelle professor sollte Ihnenkeine Probleme bereiten.

Hinweis: Access kennt auch noch den Wert Null,was so viel heißt wie undefiniert oder leer.Wir können ein Datum, eine Zahl usw. mitNull füllen. Diesen Wert können wir auchmit der Funktion Ist Null abfragen. DieVerwendung von Null kann an vielenStellen durchaus hilfreich sein.

→fh01 Weitere Prüfungen usw. werden wir im nächstenHauptkapitel betrachten, so daß wir uns jetzt ersteinmal einem weiteren Problemkreis zuwendenwollen.

1.2.7 Indizes

Aus der Theorie wissen wir, daß jede Relation (Tabelle) einen eindeutigen Schlüssel (Pri-märschlüssel) besitzen muß, der die einzelnen Entitäten unterscheidet. Dazu können

Bild 1.2-7: Felder von thema

themaT-Nr. Thema Stundenzahl Inhalt

1 Datenbanken 64,02 Rechnungswesen 128,03 Rechnerarchitekturen 32,04 Schaltungstechnik 64,05 Software-Engineering 128,06 Analogelektronik 64,07 Übertragungstechnik 172,08 Mikrowellentechnik 90,59 Sensoren 64,0

10 Fertigungstechnik 128,011 Digitalelektronik 64,012 Mikroprozessorsysteme 128,0

Bild 1.2-8: Felder von professor

professorP-Nr. Name Wohnort

1 Scheibl Fürstenfeldbruck2 Matschke Berlin3 Kern Augsburg4 Mayer Stuttgart5 Altenkirch Berlin6 Ausborn Potsdam7 Bernert Finsterwalde8 Böhme Frankfurt (Oder)9 Hilbig Frankfurt am Main

10 Jossifov Berlin11 Junghanns Potsdam12 Kantelberg Berlin13 Klose Straußberg14 Knopp Werneuchen15 Koch Templin16 Koß Berlin

Page 349: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.2 Tabellen anlegen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-22 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

weitere Indizes (Sekundärindizes) zur schnellen Suche hinzutreten. Für die Indizes wer-den besondere Tabellen (B+-Bäume) angelegt.

Über die Ikone mit dem Schlüssel setzen wir den Primärschlüssel. Hierzumarkieren wir zuerst die Felder der Tabelle, die den Schlüssel bilden sollenund klicken dann auf die Ikone. Die Felder werden dann in ihrer Reihenfol-ge zum Primärschlüssel zusammengefaßt.

Sekundärindizes werden bereits mit der Eigenschaft Indiziert angelegt.Sie können aber auch nachträglich noch eingeführt und bearbeitet werden. Beidieser Gelegenheit können wir den Primärschlüssel noch verändern. So ist esz. B. möglich, die Reihenfolge der Schlüsselfelder abweichend von der Rei-

henfolge im Datensatz zu wählen (was natürlich nicht besonders sinnvoll ist). Zusam-mengesetzte Sekundärindizes müssen immer über diesen Weg erstellt werden, da diegenannte Eigenschaft Indiziert feldbezogen ist.

Mit dem Auslösen der Ikone erscheint dasDialogfenster Indizes, mit dem wir dieIndizes betrachten, bearbeiten oder ergän-zen können (Bild 1.2-9).

Mit einem Zeilenmarkierer können wir einegesamte Zeile markieren. Im Zeilenmarkiererentlang der linken Kante des Definitionsbe-reichs finden wir die folgenden Symbole.

Aktuelle ZeilePrimärschlüssel

Jeder Index hat einen Namen. Der Primärschlüssel ist mit dem Schlüsselsymbol markiertund hat den Standardnamen PrimaryKey . Alle anderen Indizes erhalten einen eindeu-tigen Namen in der 1. Spalte. An die Definitionszeile eines Index können sich weitereFeldnamen anschließen, die zusammen den Index bilden. Mit dem nächsten Indexnamenbeginnt ein neuer Index. Für jedes Feld können wir die Sortierreihenfolge festlegen.

Unter Indexeigenschaften können wir die Eigenschaften Primärschlüssel,Eindeutig und NullwerteIgnorieren einstellen.

Wenn wir im Fenster Indizes einen einfachen Index hinzufügen oder bearbeiten, ak-tualisiert Access in der Entwurfsansicht der Tabelle automatisch die Zelle für die Eigen-schaft Indiziert.

Jeder Index kostet zusätzlichen Speicherplatz. Die schnelle Suche wird teilweise auchdadurch erkauft, daß die Eintrag- und Änderungszeiten verlängert werden. Jede Ände-rung an einem Indexfeld sorgt für eine Pflege der zugehörigen Indextabelle.

Es ist wenig sinnvoll, Indizes für Felder mit nur wenigen Ausprägungen zu erstellen, z. B.für logische Aussagen oder unser Feld sgeschl , das nur weiblich oder männlich ent-hält. Zwar ist ein Index mit Duplikaten denkbar, aber die Suche ist wenig effizient. Nur dieSuche nach unterschiedlichen Werten ist schnell. Innerhalb der Duplikate erfolgt die Su-

Bild 1.2-9: Dialogfenster Indizes

Zeilenmarkierer

Page 350: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-23

che logischerweise sequentiell (In welcher Reihenfolge, zufällig oder wie ursprünglicheingegeben? Probieren Sie es einmal aus!).

Bei der Festlegung der Indizes müssen wir auch weitere Aspekte betrachten. Für einenIndex spricht eine hohe Zugriffshäufigkeit. Einen Index, den wir nur einmal im Jahr für dieInventur benötigen, sollte nicht das ganze Jahr unnötig gepflegt werden. Er kann tempo-rär angelegt und nach der Verarbeitung wieder gelöscht werden.

Natürlich drängen sich sofort einige interessante Fragen auf, wie z. B.

1. Können wir in einem Mehrfachindex die Datentypen mischen, d. h. Text mit einer Gleit-punktzahl usw. zusammenfassen.

2. Wie lang wird dann eigentlich der Index?3. Sind die Zahlen in sich sortiert oder müssen sie erst in Text konvertiert werden?4. Werden Textfelder zusammengefaßt oder auf ihre Länge mit Leerstellen aufgefüllt?5. Wie erkennt Access die Indizierung eines Feldes? Funktioniert das auch über mehrere

Abfragen hinweg?

Die ersten Fragen bleiben ein Geheimnis von Microsoft. Die vierte Frage können Sie te-sten. Die letzte Frage führt zu einem Sonderkapitel über die sog. Rushmore-Optimierung.Vorher wollen wir aber noch einige andere Problemkreise kennenlernen.

1.2.8 Tabellenformatierung

Nachdem wir die Tabellen definiert haben, dann schalten wir normalerweise in die Daten-blattdarstellung. Hier und auch später bei den Formularen werden wir sehen, daß Accessstandardmäßig die Schriftart MS Sans Serif benutzt, die zwar proportional läuft abernicht TrueType ist. Dies führt zu recht groben Bitmap-Darstellungen in vergrößerter An-sicht. Auch der tabellarische Charakter vieler Spalten leidet sehr stark unter dieser Schrift.

Wir können nun nachträglich für die einzelnen Tabellen über Format | Schriftart …die Schrift der gesamten Tabelle z. B. auf Courier New usw. umstellen. Diese Schriftist zwar eine Schreibmaschinenschrift, kann aber beliebig vergrößert werden. Die fehlen-de Proportionalität hat den Vorteil, daß die Feldlänge optimal erkannt wird.

Einfacher ist es aber, die Grundeinstellung über Ansicht| Optionen …| Registe r -blatt Datenblatt|Standardschriftart : Courier New festzulegen. Damitwerden alle neuen Tabellen in dieser Schriftart angelegt. Die weiteren Felder dieserGrundeinstellung sind selbsterklärend.

Unter dem Menüpunkt Forma t finden wir noch weitere Punkte, die uns erlauben, dasRaster des Datenblatts in Höhe und Breite zu verändern. Weiterhin können wir Spaltenein- und ausblenden sowie fixieren. Letzteres ist besonders bei breiten Tabellen vonVorteil. Fixierte Spalten kommen in der Reihenfolge ihrer Fixierung an den linken Fenster-rand und werden nicht gescrollt. So können wir z. B. weiter sehen, zu welchem Namendie weiteren Felder gehören usw.

Page 351: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-24 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

1.3 Beziehungen herstellen

1.3.1 Verbindungsschlüssel für 1:m, 1:mc, c:m , c:mc Beziehungen definieren

Nachdem wir nun die ersten Entitätstypen festgelegt haben, können wir darangehen, dieBeziehungstypen zu formulieren. Für alle :mx Beziehungen müssen wir Verbindungs-oder Fremdschlüssel einfügen.

) Hinweis: Wenn Sie die verschiedenenEntwicklungsstufen später nochnachvollziehen wollen, dann ko-pieren Sie fh01 um. Die Namender Musterlösungen sind im Textseitlich herausgezogen.

fh04→ Zuerst wollen wir die mc:c Beziehungzwischen den Studenten und den Klassenherstellen. Aus der Theorie wissen wir,daß es hier sinnvoll ist, ein Datenfeldsknr zusammen mit allen assoziativenBeziehungsattributen, hier also z. B.sseit , beim Entitätstyp student zuergänzen.

Für den Verweis auf einen Zähler in einer zweiten Tabelle müssen wir den Verbindungs-schlüssel als Long Integer deklarieren. Das mc zeigt uns an, daß es keinen, einenoder mehrere Studenten mit dem gleichen Klassenverweis geben wird, also wird das Feldsknr indiziert mit Duplikaten angelegt (Bild 1.3-1). Die konditionale Beziehung berück-sichtigt die Tatsache, daß ein Student zuerst einmal ohne Klassenzuordnung aufgenom-men werden kann, um dann später einer Klasse zugewiesen zu werden.

Wenn wir nun diese Felder ergänzen und dabei gleichzeitig neue Regeln einfügen wiez. B.

Eintrittsdatum ist entw eder leer oder höchstens 6 Jahre zurück

Tip: Ist Null Oder DatAdd ("jjjj";6;[ sseit ])>Jetzt()

dann erhalten wir eine Rückfrage (Bild 1.3-2), die durchaus ernst gemeint ist.

Es kann nämlich sein, daß wir Regeln defi-nieren, die von den vorhandenen Datengrundsätzlich nicht erfüllt werden (Bild 1.3-3). Zum Glück blockiert uns das Systemnicht, so daß wir das Feld samt Regel ein-

Bild 1.3-1: Neue Datenfelder für eine mc:cBeziehung einfügen

Bild 1.3-2: Abfrage bei Veränderung der In-tegritätsregeln

Bild 1.3-3 Warnung bei Verletzung der neu-en Integritätsregel

Verbindungsschlüssel

Page 352: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-25

geben können. Danach müssen wir unbedingt die fehlenden Daten ergänzen, sonst ha-ben wir bereits einen Konsistenzfehler in der Datenbank.

Für die Profis:

Natürlich könnten wir die nachgetragenenFelder auch gleich als Nachschlagefelderanlegen bzw. in solche umwandeln, wennsie schon existieren. Hierzu markieren wirsknr und wechseln auf das RegisterblattNachschlagen. In der EigenschaftSteuerelement anzeigen haben wirdie Möglichkeiten Textfeld, Liste n-feld, Kombinationsfeld. Wir wählenletzteres. Jetzt müssen wir nur noch dieanderen Eigenschaften richten (Bild 1.3-4).Schon können wir bei der Dateneingabedirekt aus der Klassenliste wählen.

1.3.2 Tabellen verknü pfen

Jetzt ist es an der Zeit, die Beziehung anzulegen.Access bietet uns dazu die Funktion Extras|

Beziehungen … an. Sowohl in den Microsoft Handbü-chern, wie auch in der Literatur wird diese Funktion fastnie verwendet, obwohl sie gerade bei der Entwicklunggroße Vorteile hat. In einem laufenden System kannman überlegen, diese Verknüpfungen wieder aufzuhe-ben, da ständig eine Überwachung erfolgt, die natürlichZeit kostet. In diesem Fall muß aber die Datenintegritätauf andere Art gesichert werden.

Über den Nachschlageassistenten werden aber auto-matisch solche Beziehungen angelegt.

�Um Beziehungen herzustellen, gehen wir folgendermaßen vor:

1. Beziehungseditor aufrufen Hierzu klicken wir die Beziehungsikone an oder rufenExtras |Be ziehungen… auf. Access bietet uns zuerst alle Entitätstypen zur Auswahlan (Bild 1.3-5).

2. Beteiligte Entitätstypen student und klasse hinzufügen (mit Doppelklick).3. Auf der 1-Seite (klasse ) den Primärschlüssel knr anklicken, auf die m-Seite

(student ) herüberziehen und auf dem Verbindungsschlüssel sknr ablegen.Hinweis: Die Richtung ist unbedingt einzuhalten!

4. Es erscheint ein Beziehungsdialog (Bild 1.3-6). �

Bild 1.3-4: Nachschlageliste

Bild 1.3-5: Tabellen auswählen

Page 353: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-26 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Dieser Beziehungsdialog erlaubt uns noch einmal, dieFelder in der Mastertabelle (klasse ) und der Detail-tabelle (student ) zu korrigieren oder mehrere Fel-der zu einem Verbindungsschlüssel zusammenzufas-sen (hierzu später mehr).

Weiterhin erkennen wir das Kontrollkästchen Mitreferentieller Integrität, das wir anklicken.Hierdurch sorgen wir für eine automatische Überprü-fung beim Eintragen der Klassennummer beim Stu-denten. Nur wenn die Klassennummer vorhanden ist,wird der Eintrag akzeptiert.

Mit dem Klick auf dieses Kästchen öffnet sich der Typund die Weitergabekästchen im unteren Teil desFensters.

Die Weitergaben sind nur dann interessant, wenn wirdie Klassennummer ändern oder gar eine Klasse löschen wollten. Da das Ändern einesZählfeldes grundsätzlich ausgeschlossen ist, entfällt die Weitergabe. Da wir natürlich beieinem eventuellen Löschen einer Klasse (z. B. wegen Zusammenlegung zweier Klassen)nicht alle Studenten löschen wollen, verändern wir auch das zweite Kontrollkästchennicht.

Ab Version 7.0 ist es nicht mehr möglich, den Beziehungstyp selbst zu wählen. Vielmehrwird er aus den beteiligten Feldern nach folgenden Regeln gebildet:

Typ Wirkung1:n wird angelegt, wenn eines der beiden Felder Primärschlüssel ist oder

über einen eindeutigen Index verfügt.1:1 wird angelegt, wenn beide Felder Primärschlüssel sind oder über einen

eindeutigen Index verfügen.undefiniert wird angelegt, wenn keines der beiden Felder Primärschlüssel ist oder

über einen eindeutigen Index verfügt. Dieser Typ sollte vermieden wer-den.

Damit muß der Verbindungsschlüssel für eine 1:c Beziehung als eindeutig definiert sein.Undefinierte Werte werden dabei nicht als Schlüssel aufgefaßt, so daß die Eigenschaften

Eingabe erforderlich: NeinIndiziert Ja (Ohne Duplikate)

für Access kein Widerspruch in sich selbst sind. Hier ist es zwingend erforderlich, undefi-niert durch den Wert Null darzustellen und nicht durch 0 oder ähnliches zu ersetzen.Ein solcher Eintrag wäre dann mehrfach vorhanden.

Wir korrigieren in diesem Sinne die Eigenschaften des Feldes ksprecher .

Bild 1.3-6: Beziehungsdialog

Page 354: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-27

Mit der Schaltfläche Verknüpfung... bearbeiten wir ei-

nen weiteren Aspekt einer Relation, nämlich die spätereAbfrage von Daten (Bild 1.3-7). Wir legen fest, welche Er-gebnisse eine solche Abfrageverknüpfung liefern soll. Die-se Festlegung ist also unabhängig von der referentiellenIntegrität zu sehen.

Sobald wir die Eingaben be-stätigen, wird die Relation auchoptisch dargestellt (Bild 1.3-8).

Wir erkennen, daß die c:mcBeziehung durch 1 und ∞ dargestellt wird. Das UnendlichSymbol können wir als beliebig viele interpretieren. Es siehtaber auch aus wie eine Brille und soll andeuten, daß dieseBeziehung von Access im Rahmen der referentiellen Integritätüberwacht wird. Es taucht nur dann auf, wenn wir eine solche

Integrität festlegen.

Die konditionalen Eigenschaften unserer Beziehung geben wir nicht hier ein. Vielmehrmüssen wir diese über das Zulassen des Wertes Null bei der Eingabeplausibilität desFeldes sknr realisieren.

Weil das Ganze nun so einfach ging, üben wir es gleich noch einmal an der Beziehungist_klassensprecher . Hierzu fügen wir ein neues Feld ksprecher in die Tabelleklasse ein und verknüpfen diese mit der Tabelle student .

Dies geht nun doch nicht ganz so einfach,wie wir uns das vorgestellt haben, dennAccess meldet sich mit einem neuen Fen-ster (Bild 1.3-9), das wir mit Nein beant-

worten (Wichtig!).

Aber auch dann sind die Überraschungennoch nicht zu Ende. Access stellt die Be-ziehung nicht mit den vorhandenen Tabellen dar, sondern legt eine logische Kopie dereinen Tabelle an. Da es sich um eine 1:1 Beziehung handelt, können wir die Verknüp-fungsrichtung beliebig wählen. Hiervon hängt es ab, welche Tabelle doppelt erscheint(Bild 1.3-10). Wir merken uns aber, daß eine Tabelle durchaus mehrfach in einer Bezie-hung auftreten darf. Daß hier ein Aliasname für die gleiche Tabelle notwendig ist, werdenwir später bei der Betrachtung der Abfragesprache SQL verstehen. Diese Doppelbezie-hung wird noch einige Freude bereiten, da die Assistenten damit Schwierigkeiten haben.

Bild 1.3-7: Verknüpfungsei-genschaften

Bild 1.3-8: Eine erste Be-ziehung

Bild 1.3-9: Hinweis bei Erstellung einer Dop-pelbeziehung

Page 355: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-28 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Nun müssen wir noch die neuen Felder mit Werten füllen. Vor-her überlegen wir uns aber noch einmal die Plausibilitäten. Diereferentielle Integrität sollt dafür sorgen, daß die Beziehung zwi-schen den Tabellen, d. h. die Existenz der zugehörigen Einträgeerfüllt ist.

1.3.3 Externe Plausibilität

Bei sseit überlegen wir uns, daß ein Datum eigentlich nursinnvoll ist, wenn ein Klassenbezug schon besteht. Hier handeltes sich zum ersten Mal um eine externe Plausibilität, d. h. einePlausibilität, die sich nicht auf das aktuelle Feld bezieht. Vielmehr werden die Eigen-schaften zweier Felder miteinander verknüpft. Als weitere Bedingung verlangen wir, daßdas Eintrittsdatum in der Vergangenheit liegt, aber auch nicht zu früh, z. B. nicht vor derGeburt des Studenten. Wir legen fest, daß das Mindestalter 15 Jahre sein soll.

Nun müssen wir uns darüber klar werden, wann und wie Access die Benutzereingabeprüft. Einmal kann eine Prüfung stattfinden, wenn wir versuchen, daß Feld zu verlassen.Eine zweite Prüfung findet statt, wenn wir den Satz verlassen, wenn dieser also zurückauf die Platte gespeichert wird.

Würde Access nun das Eintrittsdatum vom Geburtsdatum direkt abhängig machen, dannkönne es passieren, daß wir bei falschem Geburtsdatum nicht mehr aus dem Feld Ein-trittsdatum herauskommen. Es wäre daher gut, die gegenseitige Prüfung erst danndurchzuführen, wenn der Datensatz „fertig“ ist, d. h. wenn wir den Satz verlassen. Hierzuist eine zweite Prüfung notwendig, die wir nicht an das Feld selbst anhängen.

Zum Eingeben einer solchen externen Plausibilität klicken wir die Ikone Eigen-schaften an. Es erscheint ein Eingabefenster für die globale Prüfung der Tabelle

(Bild 1.3-11). Dieses hatten wir schon bei der Ersterstellung der Tabelle kennen gelernt.Hier geben wir nun als Gültigkeitsprüfung:

Nicht ([sseit] Ist Nicht Null Und ([sknr]=0 Oder [sknr] Ist Null))

ein. Zur Not hilft wieder der Ausdruckseditor.

Bei dieser Gelegenheit sehen wir die Verwendungvon internen Variablen, die durch eckige Klam-mern markiert werden, also [sseit] oder[sknr]. Da die Gültigkeitsregel positiv wirkt,d. h. den Datensatz bei Erfülltsein akzeptiert, wur-de die Verneinung benutzt. Diese Formulierung isti. a. sicherer als die Umformulierung durch denProgrammierer (probieren Sie es einmal selbstund denken Sie an die Morgansche Regel!).

Bild 1.3-10: Doppelbe-ziehung

Bild 1.3-11: Globale Prüfungen

Page 356: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-29

Natürlich wirkt diese Regel wiegewünscht (Bild 1.3-12).

Eine Bemerkung sei noch an-gebracht. Es gibt nur eine ein-zige externe Regel. Die Bedin-gungen für mehrere Prüfungenkönnen wir ja noch logisch ver-knüpfen. Mit dem Fehlertextwird es aber schon schwieriger,

oder? Mit anderen Worten gesagt können wir nur einen einzigen Fehlertext festlegen, derggf. mehrere Ursachen haben kann. Wir ergänzen für die weiteren Experimente unsereDaten wie folgt.

�Probieren Sie bei dieser Gelegenheit aus, ob die Datumsprüfung funktioniert, d. h. gebenSie nur ein Datum ein, ohne eine Klasse zuzuordnen. Geben Sie ein nicht vorhandeneKlasse ein usw.

Wissen Sie noch, welche Prüfungen wir inzwischen eingebaut haben? �

) Tip: Bei „professioneller“ Entwicklung ist es durchaus sinnvoll, eine Liste aller Test-daten anzulegen, um alle Möglichkeiten des Programmes auszuprobieren. Diesist insbesondere nach Änderungen am Programm auch zu späteren Zeiten sehr,sehr hilfreich.

Bild 1.3-12: Verletzung einer globalen Plausibilitätsregel

klasseMatrikel Name Geschlecht Geburtsdatum Vordiplom in Klasse Eintrittsdatum

1 Mayer M 10.10.1963 Ja 1 01.10.19912 Müller W 01.04.1965 Ja 1 01.10.19913 Schulze M 17.02.1964 Nein4 Huber M 05.11.1962 Ja 3 01.01.19915 Adam M 27.09.1964 Ja 2 01.10.19916 Bergmann W 16.03.1966 Ja7 Zuse M 31.01.1963 Nein 1 01.10.19918 Schwinge M 25.03.1965 Ja9 Bisanz M 28.09.1964 Ja 4

10 Berthold M 12.04.1963 Ja 111 Winkelmann M 31.10.1963 Ja 312 Freitag M 12.12.1964 Nein 213 Keyl M 22.05.1962 Ja 414 Fanke W 15.09.1963 Ja 115 Lorenz M 12.04.1964 Nein 516 Schulz M 22.09.1965 Nein 217 Hofmann M 21.11.1963 Ja 218 Binder M 22.02.1965 Ja 419 Mai M 01.01.1963 Ja 720 Oschipowski M 23.05.1966 Ja 721 Dahley M 19.07.1964 Ja 222 Hemberger M 22.08.1965 Nein 323 Ritter M 30.04.1966 Nein 224 Kreft M 22.09.1964 Ja 225 Eger W 19.04.1965 Ja 1

Fehlerstelle

Page 357: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-30 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Natürlich müssen wir auch noch Klassensprecher zu-ordnen (nebenstehende Tabelle). Dabei fährt uns eingehöriger Schreck in die Glieder. Wir können Studen-ten zu Klassensprechern machen, die weder einerKlasse angehören. Ja, es geht sogar, daß sie eineranderen Klasse angehören. Hier fehlt die Prüfung, daßder eingegebene Student in der Studentendatei diegleiche Klassennummer hat. Also folgendermaßen„frei“ formuliert

klasse.knr = student.sknr[student.snr=klasse.ksprecher]

Die aktuelle Klassennummer muß gleich der sknr des Studenten sein, für den die ecki-ge Klammer gilt, d. h. auf den der Zeiger ksprecher zeigt. Auch hier blockt uns dienormale Feldprüfung ab, die es nicht erlaubt, eine zweite Tabelle anzusprechen. In derHilfe zur Gültigkeitsregel finden wir

Bei Steuerelementen können Sie diese Eigenschaft auf jeden gültigen Ausdruck einstellen. Bei Feld- undDatensatz-Gültigkeitsregeln darf der Ausdruck keine benutzerdefinierten Funktionen, Domänen- oder Ag-gregatfunktionen, die Funktionen AktuellerBenutzer (CurrentUser) oder Auswerten (Eval) oder Ver-weise auf Formulare, Abfragen oder Tabellen enthalten. Außerdem dürfen Feld-Gültigkeitsregeln keineVerweise auf andere Felder enthalten. Bei Datensätzen können Ausdrücke Verweise auf Felder in derselbenTabelle enthalten.

Schlecht, ganz schlecht. Vielleicht können wirAccess aber über die Nachschlagefunktion über-listen? Wir wandeln daher wie gewohntksprecher in ein Kombinationsfeld um. Be-scheiden wie wir sind, benutzen wir zuerst diegesamte Tabelle student als Nachschlageta-belle (Bild 1.3-13) mit folgender SQL-Anweisung:

SELECT DISTINCTROW student.snr,student.sname FROM student ORDER BYstudent.sname;

Das funktioniert wie bisher mit der kleinen Ver-besserung, daß wir statt der Nummern gleich dieStudentennamen sehen.

Kommen wir dagegen auf die verwegene Idee, die Menge einzuengen mit

SELECT DISTINCTROW student.snr, student.sname FROM student WHERE(((student.sknr)=[knr])) ORDER BY student.sname;

ist die Aufklappliste leer. Nichts geht mehr.

→fh04 Also müssen wir dieses Problem auf später vertagen. Wir erkennen dabei, daß es sicherneut um eine neue Qualität der externen Prüfung handelt. Jetzt werden nicht mehr Fel-der der gleichen Tabelle sondern Felder aus mehreren Tabellen benötigt, die dazu nochweiteren Beschränkungen unterliegen.

klasseK-Nr. Klassenname Anzahl Sprecher

1 395SD6TI 1 25 12 395SD6NT 1 30 23 395SD1NT 1 44 395SD2NT 15 395SD2TI 16 395SD3NT 17 395SD2MSP18 395SD3NT 29 395SD3TI 1

10 395SD3TI 2

Bild 1.3-13: Sprecher als Nachschla-gefeld

Page 358: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-31

1.3.4 1:c, c:c Beziehungen

Wie wir bei der Besprechung der Beziehungen gesehen haben, ist es ab der Version 7.0gar nicht mehr so einfach, 1:c Beziehungen herzustellen, insbesondere wenn dies übereinen gesonderten Verbindungsschlüssel gehen soll. Zur Demonstration des neuen Ver-haltens wollen wir den Studenten eine (einzige) Bankverbindung zuordnen. Da Studentenarm sind, werden nur sehr wenige Studenten eine solche Bankverbindung haben. Wirkommen daher auf die Idee, diese Verbindung in eine gesonderte Tabelle abzulegen undeine 1:c Beziehung aufzubauen.

Hierzu legen wir eine Tabelle bankverb an,die folgende Felder enthält:

Name Beschreibung Schlüssel Typbsnr Matrikel, Zeiger auf snr in student Primär Long Integerbsblz Bankleitzahl, Zeiger auf bank Textbskto Kontonummer Text

Wichtig ist dabei, bsnr nicht wie gewöhnt von Typ AutoWert anzulegen, da er Lückenhaben kann. Bauen wir nun die Beziehung auf, dann müssen wir wieder auf die Richtungvon der 1-Seite (student) zur c-Seite (bankverb) achten. Natürlich schalten wir die re-ferentielle Integrität an. Nur so ist sichergestellt, daß wir wie gewohnt die Studenten ein-geben können, ohne eine Fehlermeldung zu erhalten. Bei der Eingabe einer Bankverbin-dung die referentielle Integrität dagegen greift und uns vor Fehleingaben schützt.

1.3.5 Tabellen importieren/einbinden

Bei dieser Gelegenheit wollen wir noch ein mehr technisches Problem lösen. Arbeiten wirmit mehreren Varianten eines Systems, dann divergieren sehr schnell die Daten. Späterwerden wir diese Daten auf einem zentralen Server halten. Gleichzeitig wollen wir aberdie Anwendung selbst weiterentwickeln bzw. unterschiedliche Anwendungspakete aufverschiedenen Arbeitsstationen einsetzen. Zu diesem Zweck sollten die Daten von denFunktionen getrennt werden. Mit anderen Worten heißt dies, eine Datenbank mit den Ta-bellen anzulegen, die in eine andere Datenbank eingebunden werden.

Im Gegensatz zum Einbinden steht das Importieren. Hier werden die Daten aus einerfremden Anwendung einkopiert und in das interne Access Format umgewandelt. Ände-rung an den Daten werden jeweils nur lokal wirksam. Das Importieren wird daher meistbeim Übergang von einem anderen DBMS (z. B. dBase III Plus, Paradox usw.) einge-setzt.

Über diesen Befehl stellen wir eine Verknüpfung mit einer Tabelle in einer anderen Da-tenbankanwendung her, damit wir die Daten in der anderen Tabelle ansehen und bear-beiten können. Dabei erscheinen die eingebundenen Tabellen auf den ersten Blick wienormale Tabellen. Eingebundene Tabellen werden mit einem Pfeil neben der Tabellen-schaltfläche im Datenbankfenster zusammen mit den anderen Tabellen aufgelistet.

student bankverb

hat

Page 359: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-32 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Sehen wir genauer hin, so erkennen wir doch einige Besonderheiten. Hierbei wollen wirgar nicht auf Unterschiede zwischen verschiedenen DBMS eingehen. Vielmehr soll unsder Datenaustausch zwischen zwei Access Anwendungen genügen.

Die Struktur einer eingebundenen Tabelle kann nur in ihrer Trägeranwendung selbst undnicht in einer anderen Anwendung geändert werden.

Binden wir zwei oder mehr Tabellen aus derselben Trägerdatenbank ein, werden alle Be-ziehungen übernommen, die in der Trägerdatenbank zwischen diesen Tabellen herge-stellt wurden. Änderungen in den Beziehungen wirken sich dabei immer auf die Trä-gerdatenbank selbst aus.

Dies bedeutet aber auch gleichzeitig, daß wir keine Beziehungen zwischen Tabellen un-terschiedlicher Trägerdatenbanken herstellen können. Auf solche „Puzzlespiele“ müssenwir daher leider verzichten.

�Beispiel:In der Datenbank fh01 haben wir die Tabellen klasse, professor , student ,thema definiert. In der Datenbank fh04 ändern wir die Struktur von klasse undstudent , um die c:c bzw. mc:c Beziehungen herzustellen.

Die Neudefinition von klasse und student sowie die Einbindung von professorund thema aus fh01 führt dazu, daß keine Standardbeziehungen zwischen den bei-den Tabellengruppen erstellt werden können. �

Die Verwaltung der eingebundenen Tabellen erfolgt über den Tabelleneinbindungs-Manager. Dieser wird über Datei|Add- I ns| Tabelleneinbindungs-Manager auf-gerufen. Er überprüft, ob die von uns markierten Tabellen in den angegebenen Trä-gerdatenbanken vorhanden sind. Ist dies nicht der Fall (nach Umkopieren, Umbenennenusw.), so gibt er uns die Möglichkeit, die Verbindung zu aktualisieren.

Wenn wir eine Datenbank bereits angelegt haben, die wir nachträglich in Daten undFunktionen aufspalten wollen, dann können wir einerseits die Daten exportieren und an-schließend löschen und neu einbinden oder andererseits die Funktionen neu zusammen-stellen.

Der zweite Weg ist dabei der sicherere, da die vorhandenen Beziehungen mühsam ge-löscht und wieder neu aufgebaut werden müssen. Ersteres ist notwendig, um überhauptdie Daten aus der Anwendung entfernen zu können.

�Wir benennen daher unsere Anwendung geeignet um (z. B. aus fh06 wird fh06dat ).Dann legen wir eine neue Datenbank fh06 an und binden die Tabellen aus fh06datein. Hierzu rufen wir Datei|Tabe l le einbinden… auf.

Aus der Liste der möglichen Datenbanktypen

Microsoft Access (andere Datenbanken als die geöffnete Datenbank)Paradox (Version 3.x und 4.x .DB-Dateien)FoxPro (Versionen 2.0, 2.5 .DBF-Dateien)dBASE III und dBASE IV (.DBF-Dateien)Btrieve (mit Datendefinitionsdateien FILE.DDF und FIELD.DDF )

Page 360: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-33

SQL-Datenbanken, die ODBC-Treiber verwenden.

wählen wir Access aus. Es öffnet sich das Dialogfeld Datenbank auswählen, in demwir unsere Datenbank fh06dat markieren. Im nächsten Dialogfeld werden uns die Ta-bellen angeboten, die wir alle einbinden.

Nun übernehmen wir alle anderen Objekte über die Funktion Datei|Impo r tieren …Hierbei handelt es sich um die schon vorhandenen Abfragen, Formulare, Berichte usw.

Nach einer Kontrolle der Beziehungen und der anderen Objekte können wir die Abfragen,Formulare, Berichte usw. aus der Trägerdatenbank löschen. Diese sind ja bereits umko-piert. Die Beziehungen zwischen den Tabellen lassen wir aber bestehen.

Dies hat den Vorteil, daß wir nun in unserer neuen Anwendung auf die bestehenden Be-ziehungen zurückgreifen können. Fügen wir eingebundene Tabellen in unser UDM(Unternehmensdatenmodell) ein, dann werden die Beziehungen automatisch übernom-men.

Stellen wir neue Beziehungen zwischen zwei eingebundenen Tabellen (derselben Trä-gerdatenbank) her, dann erscheint im Dialogfenster Beziehungen ein KontrollkästchenÜbernommene Beziehung, mit dem wir erzwingen, daß die neue Beziehung in der Trä-gerdatenbank eingetragen wird.

Klicken wir diese Option nicht an, so gilt die Beziehung nur in der aktuellen Datenbankund nicht in der Trägerdatenbank. In diesem Fall ist es nicht möglich, referentielle Inte-grität, Aktualisierungsweitergabe bzw. Löschweitergabe zu programmieren. �

In der frühen Phase, in der die Struktur noch nicht festliegt, ist diese Technik noch etwasmühsam. Liegt aber später die Datenbankstruktur fest, so können wir beliebige Anwen-dungsvarianten für verschiedene Anwendergruppen usw. ableiten.

1.3.6 Tabellen löschen

Daß wir dieser Funktion ein eigenes Kapitel widmen, liegt an der Tatsache, daß sich Ac-cess hin und wieder hartnäckig weigert, eine überflüssige Tabelle zu löschen. Es er-scheint dabei die Meldung, daß diese Tabelle Teil einer bestehenden Verknüpfung ist.

Wir gehen nun alle Abfragen durch und entdecken dabei entweder eine oder keine Refe-renz auf die zu löschende Tabelle. Im ersten Fall ändern oder löschen wir die Abfrage.Danach läßt sich dann die Tabelle löschen.

Haben wir die Tabelle aber im UDM (Unternehmensdatenmodell) mit anderen Tabellenverknüpft und nur die Tabelle aus dem UDM gelöscht, dann bleiben die Verknüpfungenweiter erhalten, auch wenn sie nicht sichtbar sind

�In diesem Fall hilft der folgende Trick:

1. Zu löschende Datei wieder in das UDM aufnehmen. Es erscheinen die unsichtbarenVerknüpfungen.

2. Alle Verknüpfungen einzeln löschen.

Page 361: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.3 Beziehungen herstellen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-34 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

3. Die Tabelle aus dem UDM löschen4. Die Tabelle aus der Datenbank löschen. �

1.4 Abfragen durchführen

1.4.1 Entwurf

Die Beziehungen legen es nun nahe, sie einmal durch eine Abfrage zu testen. So wollenwir z. B. wissen, welcher Student in welche Klasse geht. Zu diesem Zweck wechseln wirim Datenbankfenster auf das Register Abfrage. Da noch keine Abfrage im Registervorhanden ist, klicken wir Neu an. Es meldet sich ein Fenster zur Auswahl des Abfra-

geassistenten:

Assistent WirkungEntwurfsansicht Erstellt eine neue Abfrage ohne einen AssistentenAuswahlabfrage-Assistent Erstellt eine Abfrage mit ausgewählten FeldernKreuztabellenabfrage-Assistent

Erstellt eine Kreuztabellenabfrage ähnlich einer Kalkulati-onstabelle

Assistent zur Dupli-katsuche

Erstellt eine Abfrage zur Suche nach Datensätzen mit glei-chen Werten

Assistent zur Inkonsi-stenzsuche

Erstellt eine Abfrage für Datensätze einer Mastertabelle fürdie keine Detaildatensätze vorhanden sind

Wir beginnen mit einer Abfrage in Entwurfsansicht.

fh05→ Zuerst müssen wir die beteiligten Tabellen auswählen. Dies sind student undklasse. Sobald wir diese Auswahl bestätigen, erscheinen die beiden Tabellen zusam-men mit ihren schon vorbereiteten Beziehungen (Bild 1.4-1) im sog. QBE Fenster (QueryBy Example = Abfrage durch Ausprobieren), d. h. es werden die bereits bestehenden Be-ziehungen übernommen, was natürlich recht bequem ist.

Ihnen wird sicher auffallen, daß es keine Auftrennung mehr in zwei Studentendateien gibt.Vielmehr gehen jetzt beide Beziehungen auf dieselben Tabellen. Wir sehen aber einweiteres Feld * in den Feldlisten beider Tabellen, das „alle“ bedeutet.

Es gibt nun eine Vielzahl von Möglichkeiten, Felder aus dem oberen Teil des QBE Fen-sters in den darunterliegenden Tabellenteil zu kopieren. Doppelklicken wir auf die Titellei-ste student, so werden alle Felder markiert. Wir können aber auch Feldgruppen odereinzelne Felder markieren und dann bei gedrückter Maustaste nach unten ziehen. Sehreinfach ist auch die Methode, auf die gewünschten Felder doppelt zu klicken. Sie werdenvon links nach rechts in die untere Hälfte übertragen. Wir wählen die Felder

Page 362: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-35

snrsnameknrkname

Sind alle ausgewählt, so können wir durch einenKlick auf die Ikone Datenblattansicht das Er-gebnis sofort überprüfen (Bild 1.4-2).

Wir schließendas Fensterund geben derAbfrage denNamen s_in_k.

) Tip: Die in den Bildern optimierte Spaltenbreite erreichen wir durch Doppelklick aufdie Verbindungslinie zwischen den Spalten. Hierzu muß der Cursor aber auf derobersten (grauen) Zeile der Tabelle stehen. Bei dieser Gelegenheit wandelt ersich in einen Doppelpfeil. Etwas außerhalb wird er in dieser Zeile zu einem Pfeilnach unten

�, mit dem wir die ganze Spalte markieren können. Eine solche

markierte Spalte kann gelöscht oder verschoben werden. Ist das ganze Daten-blatt markiert (Klick auf das leere Feld links oben), dann werden durch Doppel-klick auf eine der Trennlinien alle Spalten neu ausgerichtet.

Das Ergebnis der Abfrage ist aber nicht ganz das erwartete. Genau genommen handeltes sich um zwei Klassensprecher und nicht um alle Studenten. Wir benennen die Abfragemit Bearbeiten|umbenennen in sprecher_in_k um, damit die Arbeit nicht um-sonst war.

Um unser ursprüngliches Ziel zu erreichen, analysieren wir die Anzeige noch einmal ge-nauer. Wir hatten schließlich drei Klassensprecher eingegeben (aber mit Fehlern). Es er-scheinen nur zwei. Ist die Abfrage so, daß sie die Fehler beseitigt?

Wir prüfen dies, indem wir die 1:∞ Beziehung löschen. Sofort erscheint auch der falscheKlassensprecher. Somit korrigiert die Doppelbeziehung nachträglich unseren Eingabe-fehler. Genauer gesagt ist es die Art des Joins, den wir für beide Beziehungen definierthaben, die diese Reparatur vornimmt. Im Vorgriff auf die späteren Ausführungen zu SQLschauen wir uns die Verarbeitungsanweisung schon einmal an. Hierzu gehen wir in dieEntwurfsdarstellung und klicken die SQL Ikone an (sie erscheint unter Aufklappikone). Eserscheint bei der Doppelbeziehung

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname FROMklasse INNER JOIN student ON (student.snr = klasse.ksprecher) AND (klasse.knr= student.sknr);

Diese besagt, daß nur die Studenten angezeigt werden, bei denen einerseits die Studen-ten-Nr. mit der Klassensprechern und andererseits die Klassen-Nr. mit der Klassenzuord-nung des Studenten übereinstimmt. Es werden also nur die Klassensprecher angezeigt,die auch in der Klasse gemeldet sind.

Bild 1.4-1: Eine erste Abfrage

Bild 1.4-2: Ergebnis der Abfrage

Page 363: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.4 Abfragen durchführen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-36 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

�Aufgabe:Sie können an den Beziehungen noch etwas experimentieren, indem Sie Verknüp-fungseigenschaften (Bild 1.4-1) verändern. Vielleicht ist Ihnen dies an der jetzigen Stellenoch etwas zu schwer. Kommen Sie aber auf jeden Fall noch einmal auf diese Aufgabezurück. Wenn Sie die Wirkung der verschiedenen Optionen wirklich ausprobiert und ver-standen haben, so sind Sie schon ein echter Experte!

Löschen Sie die 1:∞ Beziehung und untersuchen die SQL Anweisung

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname FROMstudent INNER JOIN klasse ON student.snr = kla sse.ksprecher;

Interpretieren Sie nun diese Anweisung. Welche der beiden Varianten ist die bessere(schnellere)? Bedenken Sie hierbei, daß die Abfrage nicht dazu dienen sollte, Eingabe-fehler auszubügeln. �

Natürlich sollten wir keine Fehler in unseren Datenbeständen dulden. Wir korrigieren da-her die Klassensprecher in der Tabelle klasse so, daß alle der Klasse angehören, inder sie Sprecher sind. Anschließend kommen natürlich beide Abfragevarianten zum glei-chen Ergebnis.

Wir kehren nun zu unserer ursprünglichen Idee zurück,die Klassen mit ihren Studenten anzeigen zu wollen.Wir legen eine neue Abfrage an und fügen wieder dieTabellen student und klasse hinzu. Dieses Mallöschen wir aber die 1:1 Beziehung (Bild 1.4-3). Hierzurechtsklicken wir ganz genau auf die Verbindungslinieund lösen Löschen aus. Jetzt müssen wir noch ein-mal die gewünschten Felder auswählen und das ganzeunter s_in_k abspeichern.

Alternativ könnten wir auch die Abfragesprecher_in_k in den Zwischenspeicher kopieren(es geht!) und unter einem neuen Namen s_in_kspeichern. In der Entwurfsansicht können wir dann dieVerbindungslinie anklicken, so daß sie dick wird undmit � löschen.

Bild 1.4-3: Korrigierte Abfrage

Page 364: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-37

Das Ergebnis entspricht schon eher Erwar-tungen (nebenstehende Tabelle).

Interessant ist die automatisch gewählte Sor-tierung nach Klassennummern und darin nachMatrikel. Schöner wäre es aber, innerhalb derKlassen eine namentliche Sortierung zu ha-ben.

Dieser Gedanke führt dazu, noch einmal inden Entwurf der Abfrage zurückzukehren unddort auf das Fenster doppelt oder einfach aufdie Eigenschaftsikone zu klicken (Achtung! Esdarf kein Feld markiert sein, sonst erscheinendie Eigenschaften es Feldes). Es erscheint einEigenschaftsdialog (Bild 1.4-4).

Hier können wir noch eine Beschreibung eingeben, die restlichenFelder sind aber eher nichtssagend und helfen uns bei unseremProblem nicht weiter.

Aber halt, in der Ab-frage (unterer Teildes Fensters) könnenwir doch bei den Fel-dern noch die Sortie-rung eingeben. Las-sen wir doch die Na-men einfach aufwärts

laufen (Bild 1.4-5).

Mit den Namen scheint das ja zu funktionie-ren, mit den Klassen aber nicht. Diese sindjetzt ziemlich durcheinander Eigentlich woll-ten wir daß die Klassen zuerst sortiert werdenund dann die Namen innerhalb der Klassen.Was nun? Die Hilfe sagt lapidar

Matrikel Name Klassen-Nr. Klassenname2 Müller 1 396SD6TI 17 Zuse 1 396SD6TI 1

10 Berthold 1 396SD6TI 114 Fanke 1 396SD6TI 125 Eger 1 396SD6TI 1

1 Mayer 1 396SD6TI 123 Ritter 2 396SD6NT 1

5 Adam 2 396SD6NT 112 Freitag 2 396SD6NT 116 Schulz 2 396SD6NT 121 Dahley 2 396SD6NT 124 Kreft 2 396SD6NT 117 Hofmann 2 396SD6NT 1

4 Huber 3 396SD1NT 111 Winkelmann 3 396SD1NT 122 Hemberger 3 396SD1NT 1

9 Bisanz 4 396SD2NT 113 Keyl 4 396SD2NT 118 Binder 4 396SD2NT 115 Lorenz 5 396SD2TI 120 Oschipowski 7 396SD2MST119 Mai 7 396SD2MST1

Bild 1.4-4: Eigen-schaftsdialog

Bild 1.4-5: Sortierung nach dem Namen

Page 365: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.4 Abfragen durchführen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-38 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Die Reihenfolge der Felder im QBE-Entwurfsbereich spieltdann eine Rolle, wenn Sie nach mehreren Feldern sortierenmöchten. Access sortiert grundsätzlich zunächst nach demam weitesten links angeordneten Feld mit markierter Zelle"Sortierung", dann nach dem nächsten rechts davon, usw.Damit die Sortierung also z. B. zuerst nach dem Feld"Nachname" und dann nach "Vorname" erfolgt, muß"Nachname" im Entwurfsbereich links von "Vorname" ange-ordnet sein.

Also müssen wir jetzt entweder die Felderumstellen oder nachdenken. Schließlichschlucken wir nicht alles. Die Reihenfolge sollso bleiben, wie sie ist. Unser Blick fällt auf dieEigenschaft Anzeigen. Wie wäre es, knrnoch einmal vor sname zu benutzen, nunnach knr und dann nach sname zu sortie-ren, die Nummer aber an dieser Stelle nicht noch einmal anzuzeigen (Bild 1.4-6)? Ein

wenig von hinten durchs Knie ins Auge, aberdoch erfolgreich, wie wir in der nächsten Tabellesehen können. Eine Spalte können wir übrigensmit Einfügen| Spalte im Abfrage-Editor er-gänzen.

Es ist natürlich ganz interessant, jetzt einmalauf die SQL-Anweisung zu schauen

SELECT DISTINCTROW student.snr,student.sname, klasse.knr,klasse.kname

FROM klasse INNER JOIN student ONklasse.knr = student.sknr

ORDER BY klasse.knr, student.sname;

Jetzt wird also ein Vergleich der beiden Klas-sennummern durchgeführt. Alle Datensätzemit Übereinstimmung der Nummern werdenübernommen. Das Ergebnis wird einfach sor-tiert.

Speichern wir nun die Abfrage als s_in_kab.

Weitere spezielle Abfragen werden im Kapitel „Abfragen“ behandelt.

Matrikel Name Klassen-Nr. Klassenname5 Adam 2 396SD6NT 1

10 Berthold 1 396SD6TI 118 Binder 4 396SD2NT 1

9 Bisanz 4 396SD2NT 121 Dahley 2 396SD6NT 125 Eger 1 396SD6TI 114 Fanke 1 396SD6TI 112 Freitag 2 396SD6NT 122 Hemberger 3 396SD1NT 117 Hofmann 2 396SD6NT 1

4 Huber 3 396SD1NT 113 Keyl 4 396SD2NT 124 Kreft 2 396SD6NT 115 Lorenz 5 396SD2TI 119 Mai 7 396SD2MST1

1 Mayer 1 396SD6TI 12 Müller 1 396SD6TI 1

20 Oschipowski 7 396SD2MST123 Ritter 2 396SD6NT 116 Schulz 2 396SD6NT 111 Winkelmann 3 396SD1NT 1

7 Zuse 1 396SD6TI 1

Bild 1.4-6: Umstellung der SortierungMatrikel Name Klassen-Nr. Klassenname

10 Berthold 1 396SD6TI 125 Eger 1 396SD6TI 114 Fanke 1 396SD6TI 1

1 Mayer 1 396SD6TI 12 Müller 1 396SD6TI 17 Zuse 1 396SD6TI 15 Adam 2 396SD6NT 1

21 Dahley 2 396SD6NT 112 Freitag 2 396SD6NT 117 Hofmann 2 396SD6NT 124 Kreft 2 396SD6NT 123 Ritter 2 396SD6NT 116 Schulz 2 396SD6NT 122 Hemberger 3 396SD1NT 1

4 Huber 3 396SD1NT 111 Winkelmann 3 396SD1NT 118 Binder 4 396SD2NT 1

9 Bisanz 4 396SD2NT 113 Keyl 4 396SD2NT 115 Lorenz 5 396SD2TI 119 Mai 7 396SD2MST120 Oschipowski 7 396SD2MST1

Page 366: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-39

1.4.2 In Abfragen ändern bzw. neu eing eben

Nun fällt unser Blick auf die letzte Zeile der Ab-frage mit den dort eingetragenen Zählern (Bild1.4-7). Wir stellen uns die Frage: „Können wiroder können wir nicht?“ Was geschieht eigentlich,wenn wir jetzt einen Namen oder die Klasse än-dern? Es geht! Sobald wir die Zeile verlassen,hören wir das Laufwerk schreiben. Wir könnenalso die Felder der Abfrage verändern. Ja, nicht ganz. Die Zählfelder bleiben uns ver-schlossen.

Trotzdem erwacht in uns der Spürsinn: „Was geschieht, wenn?

1. Die Tabelle wird nicht neu sortiert, wenn wir den Namen ändern.2. Alle Klassennamen werden sofort verändert, wenn wir einen Klassennamen ändern.

Können wir nun einen neuen Studenten oder eine Klasse neu eingeben? Dies geht nicht.Sobald wir etwas in der Eingabezeile eingeben wollen, erfolgt eine Fehlermeldung. Wirfragen uns natürlich ketzerisch, warum sie dann überhaupt da ist. Also wollen wir dieseZeile unterdrücken. Dies werden wir in einem späteren Kapitel beim Einsatz solcher Ab-fragen in Formularen noch öfter kennenlernen.

→fh05 Viel mehr können wir jetzt nicht ausprobieren. Aberunser Blick fällt noch einmal auf den Entwurf derAbfrage. Dieser entspricht nicht mehr unserer Ein-gabe. Das Programm hat sname hinten ange-hängt und als nicht sichtbar markiert, dafür ist un-sere eingegebene Spalte knr verschwunden.Access denkt offensichtlich mit (Bild 1.4-8).

Für das Aktualisieren von zugrundeliegenden Tabellen gelten folgende Regeln

Wir können eine Abfrage ausführen und die Ergebnisse in der Datenblattansicht anzei-gen. In einigen Fällen können wir die Daten des Dynasets einer Abfrage bearbeiten, umdie Daten der zugrundeliegenden Tabelle zu ändern, in anderen Fällen ist dies jedochmöglich. Wenn wir versuchen, die Daten in einem nicht aktualisierbaren Feld zu ändern,zeigt Microsoft Access in der Statusleiste eine entsprechende Meldung an. Die folgendeTabelle zeigt, wann ein Feld im Abfrageergebnis aktualisiert werden kann und wann nicht.

Abfrage oder Feld Geht es? KommentareAbfrage, die auf einer einzigen Ta-belle basiert

Ja

Abfrage, die auf mehreren Tabellenbasiert, die in einer 1:1-Beziehungstehen

Ja

Abfrage, die auf mehreren Tabellenbasiert, die in einer 1:m-Beziehungstehen

Meist Ja Hier gelten besondere Regeln.

Bild 1.4-7: Eingabezeile in Abfragen

Bild 1.4-8: Umsortieren der Sortier-kriterien durch Access

Page 367: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.4 Abfragen durchführen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-40 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Abfrage oder Feld Geht es? KommentareKreuztabellenabfrage Nein Statuszeilentext lautet: Diese D a-

tensatzgruppe kann nicht a k-tualisiert werden.

Pass-Through -Abfrage Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden.

Funktionsabfrage (z. B. Sum oderCount )

Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden.

Union- Abfrage Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden.

Eigenschaft KeineDuplikate aufJa gesetzt

Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden.

Abfrage, die eine eingebundeneODBC-Tabelle ohne eindeutigen In-dex oder eine Paradox-Tabelle ohnePrimärschlüssel enthält.

Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden.

Abfrage (oder zugrundeliegende Ta-belle), für die keine Aktualisierungs-Berechtigung gewährt ist.

Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden. Um Daten zuändern, muß die entsprechende Be-rechtigung erteilt werden.

Abfrage (oder zugrundeliegende Ta-belle), für die keine Berechtigung zumLöschen gewährt ist.

Nein Statuszeilentext lautet: Datensätzenicht gelöscht - Daten sindschreibgeschützt. Um Daten än-dern zu können, muß die entspre-chende Berechtigung erteilt werden.

Abfrage, die aus mehr als einer Ta-belle oder Abfrage besteht und dieTabellen oder Abfragen sind in derEntwurfsansicht nicht mittels einerVerknüpfungslinie miteinander ver-knüpft.

Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden. Wir müssendie Tabellen verknüpfen, um sie ak-tualisieren zu können.

Berechnetes Feld Nein Statuszeilentext lautet: Feld<Name> basiert auf einemAusdruck und kann nicht b e-arbeitet werden.

Feld ist schreibgeschützt Nein Statuszeilentext lautet: Diese D a-tensatzgruppe kann nicht a k-tualisiert werden. Die Daten-bank wurde schreibgeschützt (Nur-Lesezugriff) geöffnet oder befindetsich auf einem schreibgeschütztenLaufwerk.

Page 368: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-41

Abfrage oder Feld Geht es? KommentareFeld in einem durch einen anderenBenutzer gelöschten oder gesperrtenDatensatz

Nein Statuszeilentext lautet: Der Date n-satz in der Tabelle <Name>wurde von einem anderen B e-nutzer gelöscht. oder Der D a-tensatz in der Tabelle<Name> ist von einem anderenBenutzer gesperrt. Ein ge-sperrter Datensatz ist wieder aktuali-sierbar, sobald er freigegeben wird.

Feld vom Datentyp Memo oder OLEObjekt in einem Snapshot

Nein Änderungen anderer Benutzer an Fel-dern vom Datentyp Memo oder OLE-Objekt werden in einem Snapshotwiedergegeben, wenn die Daten auseiner nicht-ODBC-Datenquelle stam-men.

Aktualisieren von zugrundeliegenden Tabellen in einer 1:n-Abfrage

Wenn eine Abfrage auf einer 1:m-Beziehung basiert, ist es unter Umständen nicht mög-lich, die zugrundeliegenden Tabellen aus dem Dynaset zu aktualisieren. Die folgende Ta-belle listet die Feldtypen auf, die wir möglicherweise nicht modifizieren können, und gibtden Statuszeilentext an, der bei dem Versuch erscheint, die Felder zu bearbeiten. Außer-dem zeigt die Tabelle, wenn verfügbar, alternative Aktualisierungsmethoden.

Art des Feldes Statuszeilentext KommentareVerknüpfungsfeld der 1-Seite

Datensätze in der Tabelle<Name> hätten keinen Da-tensatz.

Wir können das Verknüp-fungsfeld der 1-Seite nichtbearbeiten, wenn verknüpfteDatensätze auf der m-Seitevorliegen, es sei denn, dieAktualisierungsweitergabezwischen den beiden Ta-bellen ist aktiviert

Neue Datensätze, wenn dasVerknüpfungsfeld der m-Seite nicht im Datenblatt er-scheint

Es können keine Datensätzeeingefügt werden; der Ver-knüpfungsschlüssel der Ta-belle <Name> ist nicht inder Datensatzgruppe.

Wir nehmen das Verknüp-fungsfeld der m-Seite in un-sere Abfrage auf, um dasHinzufügen neuer Datensät-ze zu erlauben.

Verknüpfungsfeld der m-Seite, nach dem Aktualisie-ren von Daten auf der 1-Seite

Um Änderungen an diesemFeld vornehmen zu können,muß erst der Datensatz ge-speichert werden.

Wir speichern den Daten-satz, dann müßte es möglichsein, Änderungen im Ver-knüpfungsfeld der m-Seitevorzunehmen.

Page 369: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.4 Abfragen durchführen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-42 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Art des Feldes Statuszeilentext KommentareLeeres Feld einer Inklusi-onsverknüpfung

Es können keine Datensätzeeingefügt werden; es gibtkeinen übereinstimmendenDatensatz auf der 1-Seite.

Wir haben versucht, einenWert in ein leeres Feld in derNur-n-Tabelle einer Inklusi-onsverknüpfung einzugeben.Dies ist nicht erlaubt, wenndie verknüpfte 1-Seiteebenfalls leer ist.

Leeres Feld einer Inklusi-onsverknüpfung

Es kann kein Wert in ein lee-res Feld auf der 1-Seite ei-ner Inklusionsverknüpfungeingegeben werden.

Wir haben versucht, einenWert in ein leeres Feld aufder 1-Seite einer Inklusions-verknüpfung einzugeben.Dies ist nur in der Nur-n-Tabelle möglich.

Neue Datensätze, wenn dergesamte eindeutige Schlüs-sel der ODBC-Tabelle nichtausgegeben wird

Es können keine Datensätzeeingefügt werden; der Pri-märschlüssel der Tabelle<Name> ist nicht in der Da-tensatzgruppe.

Wir markieren alle Primär-schlüsselfelder der ODBC-Tabellen, um ein Einfügen indiese Tabellen zu ermögli-chen.

1.4.3 Abfragen in 1:m Beziehungen

Neben den bisher behandelten Abfragen gibt es bei 1:m Beziehungen eine Reihe weitererverallgemeinerbarer Abfragen.

So können wir genau die umgekehrte Frage stellen. Welche Studenten sind ohne Klasse?Welche Klassen sind ohne Studenten?

Die erste Abfrage ist sehr einfach mit Hilfe der Detailtabelle zu lösen.Wir suchen hier einfach die Studenten, die noch keinen Eintrag inZeiger auf die Klassen haben (Bild 1.4-9).

1.5 Noch mehr Beziehungen

1.5.1 m:m Beziehungen

Nun wollen wir uns den beiden mc:mc Beziehungen zwischen klas-se und thema bzw. thema und professor zuwenden.

Bild 1.4-9:s_ohne_k

Page 370: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-43

Bei der Einrichtung der Beziehungen zwi-schen student und klasse haben wirbereits gesehen, daß unter Access eigent-lich nur 1:1 und 1:m Beziehungen zurVerfügung stehen. Die konditionalen Be-ziehungen erzeugen wir durch das Zulas-sen leerer Einträge mit dem Wert Null.Somit müssen wir die mc:mc Beziehungenin zwei 1:mc Beziehungen mitdazwischengeschalteten Ver-bindungsentitätsmengen umwandeln (Bild1.5-1).

Wir legen noch zwei Tabellen an, die beide jeweils nur aus Verbindungsschlüsseln zu denPrimärschlüsseln der beteiligten Entitätsmengen bestehen. Da beide Attribute mehrfacheWerte enthalten können, sind sie nur gemeinsam als Primärschlüssel zulässig. Für denschnellen Zugriff von beiden Seiten werden aber beide Attribute indiziert. Aus dieserTechnik können wir folgende Merkregel ableiten

Eine m:m Beziehung (analog mc:m, m:mc, mc:mc) wird in einem relationalen System da-durch realisiert, daß zusätzlich eine Verbindungsentitätsmenge eingefügt wird. Diese ent-hält als Attribute die Primärschlüssel der beiden beteiligten Attributsmengen. Die Verket-tung der beiden Attribute ist der Primärschlüssel der Verbindungsentitätsmenge. JedesAttribut wird für einen schnellen Zugriff indiziert.

fh06→ Dies soll nun am Beispiel der Verbindungsta-belle hoert demonstriert werden (Bild 1.5-2).Da in beiden Attributen nur vorhandene Schlüs-selwerte existieren dürfen, werden beide Bezie-hungen mit referentieller Integrität angelegt.

Die Verbindungstabelle liest legen wir völliganalog zu hoert an. Beide Tabellen füllen wirmit geeigneten Zeigerkombinationen, d. h. wirordnen den Klassen die richtigen Themen zuund sammeln alle Themen, die die verschiede-nen Professoren lesen können.

student klasse

themaprofessor

gehoert_zu

ist_klassensprecher

hoert

liest

Bild 1.5-1: Auflösung von m:m Beziehungen

Bild 1.5-2: Verbindungstabelle hoert

Page 371: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-44 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Anschließend binden wir die zusätzlichen Tabel-len in unser Unternehmensdatenmodell (UDM)ein, wie dies nebenstehend geschehen ist (Bild1.5-3).

Wir wollen wir nun herausfinden, welche Profes-soren die verschiedenen Studenten hören. Diesliefert uns die Abfrage s_hoert_p.. In das Be-ziehungsdiagramm dieser Abfrage übernehmenwir das Unternehmensdatenmodell mit der Aus-nahme, daß wie schon bei der Abfrage s_in_kdie ist_klassensprecher Beziehung ge-löscht wird (Bild 1.5-4).

Die anzuzeigenden Felder legen wirmit

snameknametnamepname

minimal fest und speichern die Abfra-ge wie erwähnt unter s_hoert_p.

Jetzt kommt die Stunde der Wahrheit.Wir öffnen diese Abfrage und reibenuns erstaunt die Augen, was uns Ac-cess alles liefert (siehe Tabelle).

Kann es wirklich sein, daß der Stu-dent Adam das Thema Rech-nungswesen in einem Semestereinmal beim Professor Meyer undeinmal beim Professor Matschkehört?

Sicher nicht! Aber was um alles in derWelt haben wir in unserem Entwurf

falsch gemacht?

Bild 1.5-3: Unternehmensdatenmodell(UDM)

Bild 1.5-4: Beziehungsdiagramm der Abfrages_hoert_p

Page 372: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-45

Nun, wir haben einmal erfaßt, welcheThemen eine Klasse hört. Dabei habenwir auch gleich den Zeitaspekt mit be-rücksichtigt. Im Klassenname steckt jadas Semester und im Semester stecktdas Jahr.

Die Beziehung liest ist aber eine„kann“ Beziehung. Hier haben wir er-faßt, welche Themen ein Professor inseinem Leben schon einmal gehaltenhat oder noch halten wird. Es ist abernirgends vermerkt, daß er diesesThema zu einem bestimmten Zeitpunktvor einer bestimmte Klasse wirklichliest. Die Beziehung liest ist eine„Planungsbeziehung“, d. h. hier kann der Stundenplanentwerfer nachschauen, welcheThemen ein Professor halten könnte, damit er sein Lehrdeputat erfüllt, ein geeigneter Do-zent gefunden wird usw.

→fh06

1.5.2 Korrektur eines Beziehungsentwurfs

fh07→ Um das Problem zu lösen, müssen wir einweiteres Attribut in die Beziehung hoerteinfügen, das mit dem Thema auch den Pro-fessor für die Klasse festlegt (Bild 1.5-5). Alserste Idee schwebt uns vor, diesen Zeiger aufdie Professorendatei deuten zu lassen.

Im Unternehmensdatenmodell müssen wir fürdiese neue Feld natürlich die Beziehung zuden Professoren ergänzen (Bild 1.5-6).

Die eingezeichnete Beziehung ist logisch undwird von Access unterstützt. Aber ist sie auchoptimal? Wenn wir ehrlich sind, nein. Gebenwir nämlich jetzt Daten in der Spalte hpnr der Tabelle hoert ein, so erfolgt nur einePrüfung, ob der Professor existiert.

S_hoert_p : AbfrageName Klassenname Thema Name

Adam 396SD6NT 1 Rechnerarchitekturen MayerAdam 396SD6NT 1 Rechnerarchitekturen ScheiblAdam 396SD6NT 1 Rechnungswesen MayerAdam 396SD6NT 1 Rechnungswesen BernertAdam 396SD6NT 1 Rechnungswesen MatschkeBerthold 396SD6TI 1 Rechnerarchitekturen MayerBerthold 396SD6TI 1 Rechnungswesen BernertBerthold 396SD6TI 1 Rechnungswesen MayerBerthold 396SD6TI 1 Rechnungswesen MatschkeBerthold 396SD6TI 1 Rechnerarchitekturen ScheiblBinder 396SD2NT 1 Rechnungswesen BernertBinder 396SD2NT 1 Rechnungswesen MayerBinder 396SD2NT 1 Rechnungswesen MatschkeBisanz 396SD2NT 1 Rechnungswesen MayerBisanz 396SD2NT 1 Rechnungswesen BernertBisanz 396SD2NT 1 Rechnungswesen MatschkeDahley 396SD6NT 1 Rechnerarchitekturen ScheiblDahley 396SD6NT 1 Rechnungswesen MatschkeDahley 396SD6NT 1 Rechnungswesen MayerDahley 396SD6NT 1 Rechnerarchitekturen MayerDahley 396SD6NT 1 Rechnungswesen Bernert

Bild 1.5-5: Ergänzung der Verbindungs-tabelle hoert

Page 373: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-46 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Es wird aber nicht überprüft, ob der Professor diesesThema überhaupt liest. Diese Informationen sind inliest abgelegt.

Besser wäre es, wenn htnr+hpnr als m:c Beziehungzu ltnr+lpnr ausgebildet würde. Es dürften ja nurdie Kombinationen htnr+hpnr in hoert auftau-chen, die es auch in liest gibt. Sonst würden wiru. U. einen Professor ein Thema halten lassen, das ernicht liest (obwohl er natürlich flexibel sein sollten).

Sicher haben Sie ebenso wie ich bei der Eingabe vonKombinationen in hoert und liest schon bei denersten Versuchen nicht darauf geachtet, ob ein Thema,das wir einer Klasse zuordnen, auch einen Dozentenhat. Dies müssen wir jetzt alles noch mit Hand über-

prüfen, weil die normale Referenzbildung von Access damit (noch) überfordert ist.

Bevor wir die Tabelle hoert vervollständigen, müssen wir prüfen, ob die Themen durchProfessoren abgedeckt sind. Es muß jedes gehörte Thema von mindestens einem Pro-fessor auch gelesen werden. Die Tabelle würde also im vorliegenden Beispiel so ausse-hen

Ehrlich gesagt habe ich beimAufstellen des Beispiels dieseProbleme nicht so vorausgese-hen. Ich hätte mich doch lieberauf ein Primitivbeispiel aus derLiteratur zurückziehen sollen.

Jetzt ist es aber zu spät. Hier müssen wir gemeinsam durch. Ich hoffe, Sie können undwollen mir noch folgen.

Das Beispiel zeigt sehr schön oder lieber sehr erschreckend, welchen Aufwand wir ei-gentlich betreiben müssen, um das Gesamtsystem „wasserdicht“ zu machen. Die Be-hauptung, daß Access dafür sorgt, daß ein „blutiger“ Endbenutzer eine ordentliche Da-tenbank aufbauen kann, ist schlichtweg falsch. Die Literatur und die Hersteller selbst gau-keln nicht ganz ohne Hintergedanken diese heile Welt vor und verschweigen einfach diewahren Probleme. Wenn Sie es nicht glauben, dann schauen Sie sich die Demoda-tenbank Nwind von Access an. Warum gibt es dort in der Tabelle Personal ein FeldVorgesetzte(r), das an keiner Stelle weiter benutzt wird. Hier würde eine reflexiveBeziehung entstehen, die tunlichst verschwiegen wird. Wir werden diese in einem derspäteren Abschnitte dieses Kapitels näher betrachten. Wenn also schon hier Schmerzenauftreten, so kann ich Ihnen versichern, es wird nur noch schlimmer.

Vergessen wir also auf keinen Fall die vielen offenen Aufgaben, die wir mit unseren jetzi-gen Kenntnissen noch nicht lösen können. Verschieben wir die Lösungen einfach auf dienächste Kapiteln.

Bild 1.5-6: UDM mit „echtem“Stundenplan

Klasse-Nr. Thema-Nr. Professor-Nr(n).1 2 2/4/71 3 1/41 4 fehlt, nachgetragen 12 2 2/4/7usw.

Page 374: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-47

Kehren wir vorerst wieder zu unserem Problemzurück, wobei wir beide Aspekte untersuchenwollen, d. h. wir beginnen mit der ersten, einfa-cheren Variante, in hoert das Feld hpnr zuergänzen.

Dies müssen wir auch der Abfrage natürlich mit-teilen, indem wir die Beziehungen korrigieren,d. h. die neue Beziehung zwischen hoert undprofessor einfügen und die Beziehung liestherausnehmen (Bild 1.5-7).

Die Beziehung liest ist im aktuellen Zusam-menhang nicht von Bedeutung. Wir benötigen sieerst wieder, wenn wir den Stundenplan aufstellenwollen, z. B. um zu prüfen, ob die Kombinationhtnr+hpnr erlaubt ist. Im nachfolgenden Ab-schnitt wird sie daher wieder eingefügt. Sie ver-schwindet also nur temporär.

Führen wir alle Schritte richtig durch,so erscheint die nebenstehende Ta-belle. In ihr können wir mehr oderweniger gut erkennen, daß jetzt je-des Thema in einer Klasse von nureinem Professor gehalten wird. DieUnübersichtlichkeit liegt an der Sor-tierung nach den Studenten.

Wir können die Abhängigkeit deutli-cher machen, indem wir die gleicheListe noch einmal erstellen, jetzt abermit der Sortierung nach den Klassen,den Themen und erst dann nach denNamen. Wir kopieren s_hoert_pum in s_hoert_p sortiert nach k,t,s , wobei wir zusätzliche Sortierungen vor-nehmen.

�Aufgabe:Probieren Sie diesen Schritt einmalselbst ohne weitere Erläuterungen hierim Text.

→fh07 Das Ergebnis sollte der nebenstehen-den Tabelle ähneln. �

Bild 1.5-7: korrigiertes Beziehungs-diagramm der Abfrage

s_hoert_p : AuswahlabfrageName Klassenname Thema Name

Mayer 396SD6TI 1 Rechnungswesen MatschkeMayer 396SD6TI 1 Rechnerarchitekturen ScheiblMayer 396SD6TI 1 Schaltungstechnik ScheiblMüller 396SD6TI 1 Rechnungswesen MatschkeMüller 396SD6TI 1 Rechnerarchitekturen ScheiblMüller 396SD6TI 1 Schaltungstechnik ScheiblAdam 396SD6NT 1 Rechnungswesen MayerAdam 396SD6NT 1 Rechnerarchitekturen MayerAdam 396SD6NT 1 Schaltungstechnik ScheiblAdam 396SD6NT 1 Mikrowellentechnik AltenkirchAdam 396SD6NT 1 Sensoren AusbornZuse 396SD6TI 1 Rechnungswesen MatschkeZuse 396SD6TI 1 Rechnerarchitekturen ScheiblZuse 396SD6TI 1 Schaltungstechnik ScheiblBisanz 396SD2NT 1 Rechnungswesen BernertBerthold 396SD6TI 1 Rechnungswesen MatschkeBerthold 396SD6TI 1 Rechnerarchitekturen ScheiblBerthold 396SD6TI 1 Schaltungstechnik Scheibl

s_hoert p sortiert nach k,t,s : AuswahlabfrageName Klassenname Thema Name

Berthold 396SD6TI 1 Rechnungswesen MatschkeEger 396SD6TI 1 Rechnungswesen MatschkeFanke 396SD6TI 1 Rechnungswesen MatschkeMayer 396SD6TI 1 Rechnungswesen MatschkeMüller 396SD6TI 1 Rechnungswesen MatschkeZuse 396SD6TI 1 Rechnungswesen MatschkeBerthold 396SD6TI 1 Rechnerarchitekturen ScheiblEger 396SD6TI 1 Rechnerarchitekturen ScheiblFanke 396SD6TI 1 Rechnerarchitekturen ScheiblMayer 396SD6TI 1 Rechnerarchitekturen ScheiblMüller 396SD6TI 1 Rechnerarchitekturen ScheiblZuse 396SD6TI 1 Rechnerarchitekturen ScheiblBerthold 396SD6TI 1 Schaltungstechnik ScheiblEger 396SD6TI 1 Schaltungstechnik ScheiblFanke 396SD6TI 1 Schaltungstechnik Scheibl

Page 375: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-48 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

1.5.3 Mehr-Felder-Indizes, Mehr-Felder-Beziehungen

Ist es bei Ihnen auch so, daß ein nicht gelöstes Problem kreist und kreißt (man beachtedie Schreibweise) und neue Ideen bringt. Also nach einer tiefen, schwarzen Nacht meldetsich Ihr Unterbewußtsein und weist Sie auf die Mehr-Felder-Indizes und die vielen Felderbei der Definition der Beziehungen hin. Sollte es nicht doch möglich sein, die Beziehun-gen zwischen hoert und liest folgerichtig zu realisieren? Wir greifen zum Hand-buch, zur Online-Hilfe und studieren einige Fachbücher.

Überall wird gerade einmal beschrieben, wie ein Mehr-Felder-Index angelegt wird undwozu ein solcher Index bei der schnellen Suche hilft. Aber hier brauchen wir ihn nicht nuroptional sondern zwingend logisch. Noch dazu müssen wir ihn mit einer zweiten Tabelleverbinden.

Hierzu öffnen wir das Unternehmensdatenmodell, um es entsprechend korrigieren, d. h.wir müssen der Beziehung hpnr<->pnr eine Doppelbeziehung (htnr+hpnr) <->(ltnr+lpnr) erzeugen.

Dies geht einmal über die Drag-Drop-Technik.Hierzu müssen wir in der Tabelle hoert beideFelder markieren und auf liest ziehen. Danachöffnet sich das Beziehungsfenster, in der wir diepassenden Felder von liest auswählen. Hierbeimuß wieder die Richtung beachtet werden.(ltnr+lpnr) ist in liest eindeutiger Primär-schlüssel, (htnr+hpnr) in hoert dagegennicht (Bild 1.5-8).

Es ist aber auch möglich, eine bestehende Bezie-hung mit einem Feld um ein weiteres Feld zu er-weitern. Hierzu öffnen wir mit Rechtsklick die Be-ziehung zum Ändern. Dann werden die Felder inder ersten freien Zeile des Beziehungsfenster fürbeide Tabellen nachgetragen.

Sobald wir diese Beziehung bestätigen, erscheinteine auch grafisch eindrucksvolle Doppelverbin-dung im Unternehmensdatenmodell.

Bild 1.5-8: Erzeugung einerDoppelbeziehung

Page 376: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-49

fh08→ Ich denke, Sie sollten sich, wenn Sie es bishierher geschafft haben, ruhig motivierend aufdie Schultern klopfen. So etwas werden Sie inder „normalen“ Literatur vergeblich suchen.

Parallel hierzu können wir die Abfrage-Beziehungen ändern. Halt! Es stellt sich natür-lich die Frage, ob dies sein muß, denn die jetztfestgelegte Doppelbeziehung hat erst einmalkeine Auswirkung auf die Abfragen selbst. Siedient einzig dazu, die referentielle Integrität beider Eingabe sicherzustellen.

Warum sollte also diese Doppelbeziehung(Bild 1.5-9) auch bei der Abfrage notwendigsein?

Probieren Sie es ruhig einmal aus. Starten Siedie Abfrage s_hoert_p sortiert nachs,k,t und vergleichen Sie das Ergebnis mitder letzten Tabelle. Es hat sich im Ergebnisnichts geändert.

Wir kopieren die Abfrage um in s_hoert_psortiert nach s,k,t mit Doppelbezie-hung und die Abfrage auf das neue Bezie-hungsschema um. Das Ergebnis ändert sichnicht.

Welche Alternative ist nun besser, oder sind bei-de vielleicht doch gleich?

Nun in der alten Fassung fehlt eine ganze Ta-belle. Sollte dies nicht Vorteile in der Laufzeit beigroßen Datenmengen bringen? Wie aber könnenwir dies abschätzen. Nun, wir sehen uns einfachdie SQL-Anweisungen beider Varianten an. Zuerst die „alte“ Variante

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM (klasse INNER JOIN student ON klasse.knr = student.sknr) INNER JOIN

(professor INNER JOIN (thema INNER JOIN hoert ON thema.tnr = hoert.htnr) ONprofessor.pnr = hoert.hpnr) ON klasse.knr = hoert.hknr

ORDER BY student.sname, klasse.kname, thema.tname;

und nun die „neue“ Variante

SELECT DISTINCTROW student.sname, thema.tname, professor.pnameFROM professor INNER JOIN (thema INNER JOIN (liest INNER JOIN ((klasse INNER

JOIN student ON klasse.knr = student.sknr) INNER JOIN hoert ON klasse.knr =hoert.hknr) ON (liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)) ONthema.tnr = liest.ltnr) ON professor.pnr = liest.lpnr

ORDER BY student.sname, klasse.kname, thema.tname;

Bild 1.5-9: Abfrage mit mehreren Attribu-ten

Bild 1.5-10: Korrektur der Abfrage-Beziehungen

Page 377: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-50 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Allein die Länge läßt uns vermuten, daß die alte Variante schneller ist. Sie führt einenJoin weniger aus (wegen der fehlenden Datei). Der in der neuen Variante zusätzliche Joinist dazu noch recht kompliziert Wir merken uns also

) Hinweis: Die Abfrage-Beziehungen sollte immer noch einmal per Hand optimiert werden.Die ungeprüfte Übernahme des Unternehmensdatenmodells ist nicht immer diebeste Lösung. Verknüpfungen zur Sicherstellung der referentiellen Integritätkönnen bei Abfragen, die keine Dateneingabe erlauben, immer entfallen. Siemachen die Abfrage nur unnötig langsam.

Rufen wir nun die Abfrage-Beziehungen s_hoert_p sortiert nach s,k,t auf, sohat sich dort eine winzige Kleinigkeit geändert. Zwei 1:m Beziehung sind zu allgemeinenBeziehungen geworden (eine fett markiert) (Bild 1.5-10).

Es handelt sich nicht mehr um Verknüpfungen, die so im Unternehmensdatenmodell exi-stieren, also fehlt jeweils die Brille.

Die Frage, die sich jetzt natürlich aufdrängt, ist die, welche der beiden Varianten die bes-sere ist. Die indirekte über eine zusätzliche Tabelle aber mit Indizes oder direkte ohnediese Indexunterstützung. Diese Frage sollten wir noch einmal aufgreifen, wenn wir einigetausend Datensätze in den verschiedenen Tabellen besitzen. Arbeitet Access die Sätzedann bei den Professoren sequentiell durch oder nicht? Ich kann die Frage an dieserStelle auch nicht beantworten. Wir werden sie aber im Kapitel über die sog. Rushmore-Optimierung noch einmal angehen.

Wir sollten natürlich die referentielle Integrität wenigstens einmal überprüfen. Hierzu ge-ben wir in der Tabelle hoert zu einer Klasse ein Thema ein, bei dem der Professorfalsch ist, d. h. dieses Thema nicht liest. Probieren Sie dies auf jeden Fall aus. Wenn IhrProgramm richtig ist, dann sollten jetzt folgende Fehlerfälle gemeldet werden

− Klasse fehlt− Thema fehlt− Professor fehlt− existenter Professor liest das

existente Thema nicht.

fh08→ Vielleicht haben Sie es noch nicht be-merkt, aber wir haben soeben eine ternä-re Beziehung kreiert und zwar eine mitBeziehungen zwischen Beziehungen. Umdies deutlicher zu machen, benutzen wirdas originale Chen-Diagramm (Bild 1.5-11) und fügen eine entsprechende Kantezwischen zwei Relationen ein. Logisch gesehen handelt es sich um eine Relation 3. Ord-nung.

student klasse

themaprofessor

gehoert_zu

ist_klassensprecher

hoert

lies t

1

mc

mc

mc

mc mc

c mc

cc

Bild 1.5-11: Ternäre Beziehung

Page 378: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-51

1.5.4 Rekursive Beziehungen (Reflexivverknüpfungen)

Sie meinen also, dies sei schon das Ende der Fahnenstange? Weit gefehlt! Was ge-schieht eigentlich, wenn wir zwei oder mehr Klassen notgedrungen für ein bestimmtesThema zusammenfassen, weil es nur einen Professor gibt, der dieses Thema vertritt. Dadiese Frage auch beim Zusammenstellen von Bauteilen zu Werkstücken auftritt, nenntman es in der Datenverarbeitung das Stücklistenproblem.

Logisch gesehen ist das ganz einfach. Wir fügen ein Feld kknr in die Tabelle klasseein, das einen Zeiger auf eine Klasse speichert, die in der betreffende Oberklasse ent-halten ist. Ziehen wir nun im Unternehmensdatenmodell das Feld kknr auf das Feldknr, dann weigert sich Access, diese Felder zu verbinden. Ist doch klar, im Handbuchsteht es ja auch anderes. Daher zuerst einmal die Definition der Reflexivverknüpfung

Eine Verknüpfung bestimmter Datensätze mit anderen Datensätzen derselben Tabelle heißt Reflexivver-knüpfung, wenn die verknüpften Datenfelder übereinstimmende Werte enthalten. Bei einer Reflexivver-knüpfung kann es sich sowohl um eine Gleichheitsverknüpfung als auch um eine Inklusionsverknüpfunghandeln.

und dann die Anweisungen zum Anlegen

1. Fügen Sie der Abfrage in der Entwurfsansicht die gewünschte Tabelle zweimal hinzu. Access zeigt dannim oberen Abschnitt des Fensters zwei Feldlisten für diese Tabelle an.

2. Erstellen Sie die Verknüpfung, indem Sie jeweils ein Feld der ersten Feldliste zum entsprechenden Feldder zweiten Feldliste ziehen.

Nun, das sieht auf den ersten Blick ganzgut aus und deckt sich mit unserer obigenIdee. Aber ist die Idee gut? Das „logische“Einfügen eines Verbindungsschlüssels indie eine Kopie der Tabelle und die Ver-knüpfung mit dem Primärschlüssel derzweiten Kopie impliziert eine 1:m Bezie-hung, d. h. eine Klasse kann höchstenseiner einzigen Oberklasse angehören.Was ist aber zu tun, wenn wir eine Klassefür ein weiteres Thema mit ganz anderenKlassen zu einer neuen Oberklasse zu-sammenfassen. Können wir Oberklassenzu Oberoberklassen zusammenfassen?Besteht nicht auch die Gefahr, daß eineKlasse zu sich selbst direkt oder indirektOberklasse werden könnte? Alle drei Fällelassen sich grafisch darstellen. In allenDiagrammen kommt jede Klasse nur ein-mal vor. Im ersten und einfachsten Fallhandelt es sich um einen Baum, im zwei-ten um eine Hierarchie, im dritten um ein allgemeines Netz (Bild 1.5-12).

Wir sollten zumindest die beiden ersten Varianten weiterverfolgen, d. h. die m:m Reflexiv-beziehung und die 1:m Reflexivbeziehung.

Klasse 8

Klasse 1 Klasse 2

Klasse 9

Klasse 3 Klasse 4

Klasse 8

Klasse 1 Klasse 2

Klasse 9

Klasse 3 Klasse 4

Klasse 8

Klasse 1 Klasse 2

Klasse 9

Klasse 3 Klasse 4

Bild 1.5-12: Baum, Netz

Page 379: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-52 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

1.5.4.1 m:m Reflexivbeziehung

So eine hübsche rekursive m:m Bezie-hung, wie eingezeichnet (Bild 1.5-13),wir offensichtlich von Access nicht un-terstützt, weil es überhaupt keine m:mBeziehungen unterstützt. D. h. wir müs-sen sie in zwei 1:m Beziehungen auflö-sen.

Und bist Du nicht willig, dann gebrauch’ich Gewalt.

Also legen wir eine neue Tabelle an, dienichts weiter als diese rekursive Bezie-hung enthält. fh09→

iknr ist der Zeiger auf die Oberklasse,ikknr der Zeiger auf die Unterklasse. DieOberklasse kommt garantiert mehrfach in die-ser Tabelle vor (mindestens zwei Unterklassensollten eine Oberklasse bilden). Die Unterklas-se kann u. U. Unterklasse von verschiedenenOberklassen sein, d. h. auch sie kann mehrfachauftreten. Kann eine Klasse nur einmal alsUnterklasse auftreten, so wäre das der Son-derfall des Baumes.

Wir legen also die Tabelle ist_teil_von anund binden diese in das Unternehmensdaten-modell ein (Bild 1.5-14).

Das funktioniert wie erwartet. Weitere Einzel-heiten zur Verarbeitung dieser rekursiven Be-ziehungen werden im Kapitel „Abfragen“ be-handelt.

1.5.4.2 1:m Reflexivbeziehung

Wir wollen uns nun noch einmal dem einfacheren Problem des echten Baumes zuwen-den. Einen solchen Baum können wir – zumindest in Ansätzen – mit Access-üblichenMitteln bearbeiten, d. h. wir kommen weitgehend ohne Programmierung aus.

Ein solcher Baum tritt z. B. bei der Katalogisierung von Disketten auf. Die Unterverzeich-nisnamen bilden einen echten Baum.

student klasse

themaprofessor

gehoert_zu

ist_klassensprecher

hoert

liest

ist_Teil_von

Bild 1.5-13: Rekursive Beziehung

Bild 1.5-14: Rekursive Beziehung imUnternehmensdatenmodell

Page 380: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-53

fh09x Wir wollen in unserem Beispiel davon ausge-hen, daß eine Klasse nur einmal zu einerOberklasse zusammengefaßt werden kann.Diese Bedingung ist relativ einfach zu realisie-ren. Wir führen in der Klassentabelle einenVerbindungsschlüssel ein. Dieser kann nureinen einzigen Wert haben. Da andererseitseine Klasse nur einmal auftreten kann, ist so-mit die Forderung automatisch erfüllt

Zuerst erweitern wir wie erwähnt unsere Klasseum ein weiteres Feld kknr (Bild 1.5-15).

Dann müssen wir die Reflexivbeziehung in un-ser Unternehmensdatenmodell einbinden (Bild1.5-16).

Zu diesem Zweck wird die Klasse noch ein-mal in das Beziehungsdiagramm eingeladenund mit der ursprünglichen Klasse über denVerbindungsschlüssel verknüpft.

Führen wir das wie dargestellt durch, spei-chern das UDM und öffnen es wieder, sostellen wir fest, daß Access seinen eigenenKopf hat (Bild 1.5-17). Es legt eine weitereAlias-Tabelle an, um Eindeutigkeit herzu-stellen.

Nun wird das Diagramm langsam unüber-sichtlich. Wir erinnern uns aber daran, daßes bei den 1:1, 1:c Beziehungen unerheblichist, welche Tabelle mehrfach angelegt wird.Mit dem Entwurf nach sparen wir eine Ta-belle ein.

Bild 1.5-15: Vorbereitung der 1:m Refle-xivbeziehung

Bild 1.5-16: UDM mit Reflexivbeziehung

Bild 1.5-17: UDM von Access korrigiert

Page 381: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.5 Noch mehr Beziehungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-54 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

1.6 Optimierung des Speicherbedarfs undLaufzeitverhaltens

1.6.1 Defragmentierung und Kompression

An die Pflegearbeiten denken wir beim Entwurfnoch nicht. Im Betrieb sehen wir aber sehrschnell, daß eine Access-Anwendung Platten-speicher frißt und kostbare Zeit vergeudet. Da-her sind die Pflegearbeiten ein notwendigeÜbel. Schließlich können wir uns nicht jeden Tag eine neue Platte oder einen schnellerenRechner kaufen.

Access arbeitet intensiv mit der Festplatte. Somit werden viele Cluster beschrieben undauch wieder gelöscht. Die regelmäßige Defragmentierung ist daher ein notwendiges Muß.

Im Gegensatz zum frühen dBase verwaltet Access seine Tabellen, Abfragen, Formulareusw. in derselben Datenbank. Somit werden Aufgaben, die früher DOS übernommen hat,von Access selbst ausgeführt. Objekte werden hinzugefügt und wieder gelöscht. Alle Ab-fragen führen zu temporären Tabellen, die auf Platte gespeichert werden. Diese verwaltetAccess in seiner Datenbank, indem es sie über Zeiger anspricht. Werden nun kleinereObjekte gelöscht und große Objekte hinzugefügt, so entstehen zwangsläufig Lücken inder Datenbank selbst. Somit müssen wir die Datenbanken ebenfalls defragmentieren,was hier komprimieren heißt.

Hierzu muß die Datenbank geschlossen werden. Über die Menüoption Extras|Daten-bank-Dienstprogramme|Datenbank komprimieren können wir dann die Kompri-mierung starten. Bei dieser Gelegenheit werden auch mögliche Fehler entdeckt. SindVerknüpfungen in der Datenbank vorhanden, so ist das Komprimieren in eine neue Da-tenbank oder einen anderen Ordner problematisch. Da aber Access selbst die Kompri-mierung auf eine temporäre Datenbank ausführt, kann ohne Probleme die alte Datenbanküberschrieben werden. Damit benötigen wir aber noch einmal den Speicherplatz der Da-tenbank auf unserer Festplatte.

Diese Aktion kann bis zu 50 % des Speicherplatzes einsparen.

1.6.2 Datenbank analysieren

1.6.2.1 Automatische Analyse

Ab Access Version 7.0 steht ein automatischer Analyseassistent zur Verfügung, die eineOptimierung der Datenbank verspricht. Es macht natürlich besonderen Spaß, diesen As-

Bild 1.5-18: Optimierter Entwurf

Page 382: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-55

sistenten auf Beispiele der „populären“ Access-Literatur anzuwenden. Hier ein Beispieleines Reiseveranstalters aus dem Verlag tewi:

Eine der zentrale Dateien enthält die Reiseziele

Reisezielnr Reiseland Reiseziel Etappe 1 Etappe 2 Etappe 3

1 USA Disney World2 USA Florida Key West Everglades St. Petersburg

3 USA San Francisco

4 Australien Sidney

5 Afrika Kenia

6 Indien Neu-Dheli

7 Ägypten Kairo Luxor Pyramiden

Wie wir schon an den Bezeichnern sehen, handelt es sich um einen klassischen Fall derVerletzung der 1NF. Eine Vielzahl von Reisen hat keine Etappe. Die Frage, was mit Rei-sen geschieht, die mehr als 3 Etappen haben, bleibt ungeklärt.

Der Assistent mit automatischer Ent-scheidung schlägt eine Zerlegung vor(Bild 1.6-1). Nun, immerhin etwas bes-ser als der Buchautor.

Eine Bearbeitung, wie vorgeschlagen,ist nicht möglich, weil die anderenEtappenfelder nicht verschoben son-dern zusammengefaßt werden müßten.Statt dessen verschieben wir die beidenFelder Etappe 1, Etappe 2 nochin die zweite Tabelle.

Richtig spannend ist, was nun der Assi-stent daraus macht:

Reisezielnr Reiseland Reiseziel Nachschlagen in Tabelle2

1 USA Disney World , ,2 USA Florida Key West, St. Petersburg, Everglades

3 USA San Francisco , ,

4 Australien Sidney , ,

5 Afrika Kenia , ,

6 Indien Neu-Dheli , ,

7 Ägypten Kairo Luxor, , Pyramiden

Kennummer Etappe 1 Etappe 3 Etappe 2

12 Key West St. Petersburg Everglades

3 Luxor Pyramiden

Hier wird eine Nachschlagetabelle generiert, die über eine Kennummer mit der Hauptta-belle verknüpft ist. Wir erkennen, daß der Relationstyp „verkehrt“ herum ist. Ein Verstoßgegen die 1NF wird nicht erkannt und schon gar nicht richtig gelöst.

Bild 1.6-1: Tabellenanalyse-Assistent

Page 383: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.6 Optimierung des Speicherbedarfs und Laufzeitverhaltens © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-56 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

Ähnlich chaotisch geht es weiter

Reisenr Veranstalter

Transportnr

Reisezieln

Reisebezeichnung Reisebeginn Reiseende Reisepreis Kinderermä

Kinderermä

3 2 2 3 USA-Rundreise 14 Tage 17.06.93 30.06.93 2.400,00 DM 30 20

4 3 4 3 0,00 DM 0 0

5 2 2 5 Foto-Safari in Kenia 03.10.93 15.10.93 3.200,00 DM 40 0

6 2 4 6 Unentdecktes Indien 02.03.93 23.03.93 1.900,00 DM 0 0

7 6 2 7 Pyramidentour 02.04.93 21.04.93 2.300,00 DM 40 20

Hier meint der Assistent, daß die Tabelle nicht aufzuteilen ist. Vielleicht liegt es auch aneinem Vorlagenfehler (fehlende Reisebezeichnung im 2. Datensatz). Die Reisebezeich-nung gehört zur Reise und nicht hierher. Die Kinderermäßigung ist wieder ein Verstoßgegen die 1NF. Bei mehr Daten könnten wir eine bessere Reaktion des Assistenten rech-nen.

Bei der Kundentabelle (alle für unser Problem unwichtige Spalten wie der Vorname, Stra-ße, PLZ usw. gelöscht):

Kundennummer Name Reise 1 Reise 2 Reise 3 Reise 4 Reise 5 Interessiert an

6 Reisegern

7 Brösel USA in 14 Tagen

8 Schlauch Japan Thailand

9 zu Spät Brasilien Paraquay

10 Scheibl Brasilien

wird ebenfalls keine Aufteilung vorgeschlagen. Der Verstoß gegen 1NF wird nicht er-kannt, aber auch die mögliche Verlagerung der Anrede in eine Nachschlagetabelle wirdnicht gemacht.

Die dargestellten Beispiele zeigen uns, daß der Assistent wohl ausschließlich Verstößegegen die 2NF erkennt, ohne ggf. nach einem Primärschlüssel zu suchen.

Die zweite Option Leistung wird zwar in der Literatur als sehr instruktiv bezeichnet.Leider meldet diese Option bisher bei allen Beispielen, daß alles in Ordnung ist. Dieskann daran liegen, daß die Entwürfe alle aus Access 2.0 stammen.

Für Kombinationsfelder und andere Steuerelemente, die eine SQL-Anweisung statt einerAbfrage als Datenherkunft besitzen, schlägt der Assistent eine Umwandlung in eine Ab-frage vor und generiert sie auf Wunsch automatisch Die Ausführung einer Abfrage ist of-fensichtlich schneller als die Ausführung einer SELECT- Anweisung. Damit steigt die An-zahl der Abfragen im Datenbankfenster schnell an.

Hier hilft uns eine neue Eigenschaft der Objekte weiter. Sie lassen sich aus- bzw. ein-blenden. Zu diesem Zweck rechtsklicken wir auf die Abfrage. Im Kontextmenü wählen wirdie Option Eigenschaften. Auf dem Dialogfenster können wir nun das Kontrollkäst-chen Ausgeblendet aktivieren. Um diese Objekte im Notfall wiederzufinden, aktivierenwir über Extras| Optionen … im Registerblatt Ansicht über das KontrollkästchenAusgeblendete Objekte die Anzeige aller Objekte. Die ausgeblendeten Objekte er-scheinen dann gegraut in den Listen. Bei dieser Gelegenheit können wir auch die S y-stemobjekte aktivieren. Sie erscheinen dann in der Liste der Tabellen:

Page 384: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Einführung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc01.doc – 9769 Seite: 1-57

MSysACEsMSysIMEXColumsMSysIMEXSpecsMSysModulesMSysObjectsMSysQueriesMSysRelationshipsMSysToolbars

Hierbei handelt es sich um Verwaltungstabellen, mit denen Access eine Datenbank orga-nisiert.

Die Vorschläge der Assistenten sind Vorschläge, die wir immer überprüfen sollten. EineAbfrage auf ein indiziertes Feld ist natürlich schneller als auf ein normales Feld. Nur wenndiese Abfrage einmal im Jahr erfolgt, so kann die Pflege des Index den Vorteil mehr alsvernichten.

1.6.2.2 Manuelle Analyse

Die automatische Analyse ist eine gute Gelegenheit, auch eine manuelle Analyse durch-zuführen. Hierbei untersuchen wir kritisch die Punkte:

1. Werden die Daten benötigt? Hier stellt sich nicht nur die Frage, ob die Daten irgendwoangezeigt und/oder verarbeitete werden, sondern auch ob sie wirklich benötigt werden.

2. Haben die Attribute den richtigen Datentyp? Anzustreben sind Ganzzahlen statt langerGanzzahlen bzw. Gleitpunktzahlen. Unter Umständen ist eine lineare Verschiebung(Rechnen in Pfennigen) sinnvoll. Nur bei der Ein- bzw. Ausgabe erfolgt eine Wandlung.

3. Da der Tabellenanalyse-Assistent bei Verstößen gegen die 1NF versagt, müssen wirdiese manuell erkennen und beseitigen. Hinweise auf solche Fehler sind „indizierte“Namen (mit laufender Nummer oder laufendem Buchstaben usw.). Häufig leere Felderoder das Fehlen von Daten ist ebenfalls verdächtig. Die Zerlegung einer Tabelle zurErfüllung der 1NF wird vom Assistenten nicht richtig unterstützt.

4. Der Tabellenanalyse-Assistent sucht nach redundanten Daten innerhalb von Tabellenin senkrechter Richtung. Sein Ziel (und das unsere) ist die Umwandlung von Daten-wiederholungen in Schlüsselwiederholungen. Die Wiederholungen der Werte inFremdschlüsseln sind erwünscht, Wiederholungen in Attributen dagegen nicht. Meistversteckt sich ein Verstoß gegen die 3NF hinter solchen Wiederholungen, d. h. dietransitive Abhängigkeit von einigen Attributen, die nicht Schlüsselattribute sind. Mit ei-nigen Verstößen leben wir ständig. Typisch ist die Abhängigkeit der Postleitzahl vonOrt, Straße und Hausnummer.Schlägt der Assistent eine Zerlegung einer bestehenden Tabelle in eine Master- undeine Detailltabelle vor, dann fügt er u. U. unnötige Verbindungsschlüssel ein. Dies ge-schieht z. B., wenn wir Bankname und BLZ in eine Tabelle aufgenommen haben. Dadann der Bankname bei gleicher BLZ oft unterschiedlich geschrieben wird, schlägt derAssistent eine Aufteilung drei Tabellen vor, was manuell verhindert werden sollte.

5. Werden alle Objekte benötigt? Oft legen wir Tabellen, Abfragen, Formulare, Berichte,Makros und Modulen testweise an und heben sie sicherheitshalber auf. Es wird dannschwierig, Objekte zu entdecken, die nirgends referenziert werden.Für diese Arbeit steht kein Assistent zur Verfügung. Wir können uns aber mit einemTrick die Arbeit erleichtern. Über den Dokumentierer, den wir aus dem Datenbankfen-

Page 385: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 1.6 Optimierung des Speicherbedarfs und Laufzeitverhaltens © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 1-58 D:\Eigene\Doku\DB\DBAcc01.doc – 9769

ster mit Extras|Analyse|Dokumentierer aufrufen, können wir uns Informationenüber diese Referenzen beschaffen. Hierzu wählen wir den letzten Eintrag Alle O b-jekttypen im Listenfeld O bjekte aus und schließen alle ein. Bei den Optionenwählen wir alle Elemente aus. Mit OK lösen wir dann die u. U. langwierige Analyse

aus.Am Ergebnis interessieren uns nur die Informationen zu den Referenzen der Objekteuntereinander. So finden wir auch Hinweise auf fehlende Tabellen usw. Dies sind Kan-didaten, die wir schnellstens löschen.

6. In Access 2.0 haben wir u. U. Formulare mit einem Bild ausgestattet. Hierzu wurde einOLE-Objekt eingebettet. Diese Technik wird automatisch auf Access 7.0 konvertiert.Hier können wir aber Bitmaps als Hintergrundbilder einfügen. Wir steigern somit dieVerarbeitungsgeschwindigkeit, wenn wir die OLE-Objekte entfernen und das Hinter-grundbild in die Eigenschaft Bild einfügen. Bei dieser Gelegenheit ändern wir auchdie anderen Eigenschaften zur Darstellung des Bildes Bildgrößenmodus und Bildnebeneinander.

7. Zum Schluß komprimieren wir die Datenbank noch einmal.

Page 386: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Prüfungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc02.doc – 12.04.97 12:23/12.04.97 12:23 Seite: 2-I

MS Access – Prüfungen

2 MS Access - Prüfungen ...............................................................................................2-1

2.1 Grundlagen ............................................................................................................2-1

2.2 Formale Prüfungen durch das Eingabeformat ..................................................2-1

2.2.1 Syntax ..............................................................................................................2-1

2.3 Logische Prüfungen über die Gültigkeitsregeln ................................................2-1

2.3.1 Syntax ..............................................................................................................2-1

2.3.2 Übungen ..........................................................................................................2-3

2.3.3 Schlüsselwahl ..................................................................................................2-4

2.4 Erweiterte Prüfungen ............................................................................................2-5

2.4.1 Duplikatsuche ..................................................................................................2-5

2.4.2 Inkonsistenzsuche ...........................................................................................2-6

Page 387: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Prüfungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc02.doc – 96329 Seite: 2-1

2 MS Access – Prüfungen

2.1 Grundlagen

Die Prüfungen sämtlicher Benutzereingaben ist das A und O der Datenbankverarbeitung.Wir können hierbei mehrere Ebenen unterscheiden, die Access mehr oder weniger gutunterstützt.

Legen wir eine neue Tabelle an, so ermöglicht Access uns, für jedes Feld Plausibilitätsre-geln festzulegen. Dies Regeln umfassen drei Stufen

• formale Prüfungen über das Eingabeformat• logische Prüfungen im Feld Gültigkeitsregeln• formale Prüfung im Feld Eingabe erforderlich• formale Prüfung im Feld Leere Zeichenfolge• logische Prüfungen über ein Nachschlagefeld.

Es handelt sich hierbei um

• feldinterne Prüfungen• datensatzinterne Prüfungen.

Daneben haben wir aber noch

• externe Prüfungen.

Diese externen Prüfungen greifen auf Daten zurück, die nicht im Datensatz selbst zu fin-den sind. Hierbei kann es sich um

• tabelleninterne Prüfungen• datenbankinterne Prüfungen

handeln. So ist die Prüfung eines Feldes auf Eindeutigkeit eine tabelleninterne Prüfung.Die Prüfung eines Verweisschlüssels auf Existenz in einer zweiten Tabelle ist dagegeneine datenbankinterne Prüfung.

2.2 Formale Prüfungen durch das Eingabeformat

2.2.1 Syntax

Ist schon ausführlich im Kapitel „Einführung“ abgehandelt.

2.3 Logische Prüfungen über die Gültigkeitsregeln

2.3.1 Syntax

Gültigkeitsregeln (Validation Rules) können wir eingeben für

Page 388: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Logische Prüfungen über die Gültigkeitsregeln © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-2 D:\Eigene\Doku\DB\DBAcc02.doc – 96329

Tabellenfelder; Tabellen-Datensätze, Steuerelemente (Kombinationsfeld, Kontrollkäst-chen, Listenfeld, Optionsfeld, Optionsgruppe, Textfeld, Umschaltfläche) in einem Formu-lar.

Bei der Erstellung eines Tabellenfeldes finden wir zwei Eingabefelder

• Gültigkeitsregel ( ValidationRule ) legt fest, welcher Ausdruck ausgewertetwird, wenn Daten in einem Feld oder einem Steuerelement, das an ein Feld gebundenist, hinzugefügt oder geändert werden oder wenn ein Datensatz gespeichert wird.

• Gültigkeitsmeldung (ValidationText ) gibt den Text der Meldung an, die er-scheint, wenn das Feld, das Steuerelement oder der Datensatz nicht den in der Eigen-schaft Gültigkeitsregel ( ValidationRule ) angegebenen Bedingungen ent-spricht.

Die maximale Länge für jede dieser Eigenschaften beträgt 255 Zeichen. Wenn wir keineGültigkeitsregel ( ValidationRule ) eingeben, so findet keine Überprüfung derGültigkeit statt, auch wenn wir einen Text vorbereiten. Wenn wir eine Gültigkeitsr e-gel festlegen und Gültigkeitsmeldung freilassen, zeigt Access eine Standard-Fehlermeldung an, falls die Gültigkeitsregel nicht eingehalten wird.

Einschränkungen:Steuerelemente: keineDatensätze: keine benutzerdefinierten Funktionen, Microsoft Access-

Domänenfunktionen, Aggregatfunktionen, die FunktionenAktuellerBenutzer ( CurrentUser ) oder Auswerten( Eval ), oder Bezüge auf Formulare, Abfragen oder Tabellen. Erlaubtsind Bezüge auf die Felder des Datensatzes.

Datenfelder: keine Bezüge auf andere Felder.

Die Eigenschaften EingabeErforderlich ( Required ) und LeereZeichenfolge( AllowZeroLength ) werden in Kombination mit der Eigenschaft Gültigkeitsregelverwendet. Die Eigenschaft EingabeErforderlich gibt an, ob ein Eintrag in einemFeld erforderlich ist. Die Eigenschaft LeereZeichenfolge gibt an, ob leere Zeichen-folgen "" zulässig sind.

Die Gültigkeitsregeln für Steuerelemente, Felder und Datensätze werden folgendermaßenangewandt:

• Die Gültigkeitsregeln für Felder und Steuerelemente werden angewandt, wenn dieDaten bearbeitet werden und ein anderes Feld oder Steuerelement den Fokus erhält,d. h. der Anwender das Feld oder Steuerelement verlassen will.

• Die Gültigkeitsregeln für Datensätze werden angewandt, wenn der Datensatz gespei-chert wird.

• Wenn Gültigkeitsregeln sowohl für Felder als auch für an Felder gebundene Steuere-lemente festgelegt werden, werden beide Gültigkeitsregeln angewandt, wenn die Datenbearbeitet werden und ein anderes Steuerelement den Fokus erhält.

Wenn wir die Gültigkeitsregel für ein Feld festlegen, läßt Access das Speichern einesNullwerts in dem Feld normalerweise nicht zu. Wenn das Speichern eines Nullwerts mög-

Page 389: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Prüfungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc02.doc – 96329 Seite: 2-3

lich sein soll, müssen wir Ist Null (Is Null) zur Gültigkeitsregel hinzufügen, z. B.<>8 Oder Ist Null.

Wenn wir einen neuen Datensatz hinzufügen, werden die Gültigkeitsregeln für den Da-tensatz beim Speichern des Datensatzes angewandt. Wenn wir einen Datensatz aktuali-sieren, wird die zugehörige Gültigkeitsregel beim Speichern des Datensatzes angewandt,selbst wenn die Daten in den von der Gültigkeitsregel betroffenen Feldern nicht geändertworden sind. Wir können keine Feld- oder Datensatz-Gültigkeitsregeln für Tabellen fest-legen, die nicht mit Access erstellt wurden (z. B. von dBase, Paradox oder SQL Server).Bei solchen Tabellen können wir lediglich Gültigkeitsregeln für Steuerelemente festlegen.

Wesentlich ist für uns bei dieser Syntax, daß wir in einem Feld nur dessen Inhalt prüfenkönnen und nicht auf den Inhalt anderer Felder zurückgreifen können. Diese Logik istdurchaus begründet. Die Felder sind voneinander abhängig. Bei der Eingabe kann jaauch ein Fehler im Bezugsfeld vorliegen. In diesem Fall könnten wir diesen Fehler nichtkorrigieren, da wir das laufenden Feld nicht verlassen können. Wir würden uns blockie-ren.

Solche feldübergreifenden Prüfungen gehören zur Datensatzprüfung. Diese hat jedochden Nachteil, daß es nur eine einzige gibt, so daß wir z. B. keine gezielten Fehlerhinweisegeben können, da wir sämtliche feldübergreifenden Prüfungen mit Und verknüpfen müs-sen.

In beiden Fällen ist es nicht möglich, auf externe Dateien zurückzugreifen

2.3.2 Übungen

Stellen Sie für folgende Felder die Plausibilitätsprüfungen auf. Es geht dabei ums Üben.Zweifeln Sie also nicht unnötigerweise die Regeln an.

) Hinweis: Prüfen Sie auf jeden Fall, auf welcher Ebene die Prüfung überhaupt erfolgenkann.

Feldname Regeln Eingabeformat Gültigkeitsregel Muß Leersname Mußfeld, nicht leer, 1. Buchstabe

groß alle anderen klein>L<????...

sgeschl Mußfeld, nur M oder Wsgeb Mußfeld, Student muß mindesten

15 Jahre alt seinsvord Mußfeldsknr wenn eingegeben, dann muß die

Klasse vorhanden seinsseit kann nur vorhanden sein, wenn

sknr gesetzt ist. Ist es vorhan-den, dann darf es höchsten 6 Jah-re zurückliegen.

kname Mußfeld, Rest siehe untenkanzahl leer oder >=0ksprecher muß, wenn vorhanden in der

Klasse seintname Mußfeld

Page 390: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Logische Prüfungen über die Gültigkeitsregeln © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-4 D:\Eigene\Doku\DB\DBAcc02.doc – 96329

Feldname Regeln Eingabeformat Gültigkeitsregel Muß Leertstunden Festkommazahl mit 1 Dezimalst.

leer oder größer 0

Der Klassenname ist häufig nicht eindeutig, da es jedes Semester die gleiche Klassenbe-zeichnung wieder geben kann.

2.3.3 Schlüsselwahl

Beispielsweise werden an der FHTW die Klassen folgendermaßen bezeichnet

D 7 TI 1� �

� � laufende Nummer�

� � ����� Studiengang wie NT Nachrichtentechnik, TI Technische Informatik usw.�

� ����������� aktuelles Semester� ��������������� Studienart (Direktstudium, Fernstudium usw.)

Wird die Klasse so bezeichnet, so benötigen wir einen Primärschlüssel z. B. in Form ei-nes Zählers. Wollen wir dagegen den Namen eindeutig machen, so müssen wir Informa-tionen ergänzen, z. B. der Art

95 S D 7 TI 1�

� � �

� � laufende Nummer�

� � � � ����� Studiengang wie NT Nachrichtentechnik, TI Technische Informatik�

� � � ����������� aktuelles Semester�

� � ��������������� Studienart (Direktstudium, Fernstudium usw.)�

� ������������������� Halbjahr� ������������������������� Jahr

Im weiser Voraussicht auf das kommende Jahrhundert, sollten wir dann sogar eine vier-stellige Jahreszahl verwenden. Aber auch dieser Schlüssel ist noch nicht vollständig, daes durchaus sein könnte, daß in verschiedenen Fachbereichen das gleiche Studien-angskürzel benutzt wird, so daß wir endgültig festlegen

3 95 S D 7 TI 1� �

� � �

� � laufende Nummer�

� � � � ����� Studiengang TI Technische Informatik�

� � � ����������� aktuelles Semester�

� � ��������������� Studienart (Direktstudium, Fernstudium usw.)�

� � ������������������� Halbjahr�

� ������������������������� Jahr� ����������������������������� Fachbereich

Die Art des Schlüssels nennt man „sprechender“ Schlüssel. D. h. jeder der die Aufteilungdes Schlüssels kennt, kann Informationen aus ihm ablesen. Im Gegensatz dazu nenntman die reinen Numerierungen „chaotische“ Schlüssel.

Wir können nun darüber streiten, ob es sich um einen zusammengesetzten Schlüsselhandelt oder nicht. So kann eine Abhängigkeit zwischen der Studienart und dem Studien-gang geben, d. h. ein Studiengang TI gibt es u. U. im Fernstudium nicht usw. Eine Ta-

Page 391: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Prüfungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc02.doc – 96329 Seite: 2-5

belle mit sprechendem Schlüssel muß immer sehr sorgfältig auf die 2NF überprüft wer-den.

Eine andere Frage, die sich stellt, ist die, ob der Schlüssel sinnvoll aufgebaut ist. Könntenicht

3DTI795S1

besser sein. Hier ist die Studienart und der Studiengang vorangestellt. Die Antwort lautetJain. Wir müssen die Frage beantworten, was wir eigentlich mit der Klasse und deren Be-zeichnung erreichen wollen.

Eine Klasse dient zuerst einmal der Stundenplangestaltung innerhalb eines Fachberei-ches, genauer eines Studienganges. Pro Semester wird ein bestimmtes Kontingent anFächern für eine fiktive Klasse angeboten. In diese Klasse treten dann die Studenten ein,wobei es ihnen weitgehend freigestellt ist, welche Klasse sie wählen und welche Fächersie belegen. Erst bei der Prüfung wird festgestellt, ob sie dieses hätten tun dürfen. Hierbeikommt manchmal ein böses Erwachen. Aber dies ist ein anderes Thema.

Somit hat die Jahreszahl eine höhere Priorität als der Studiengang. Wäre es dagegenwichtig, die Studenten einer Klasse durchgängig durch die Jahre zu verfolgen, dann hätteder Studiengang und das Eintrittsjahr usw. eine höhere Priorität als das laufende Jahr.

2.4 Erweiterte Prüfungen

fh05→ Trotz aller Vorsichtsmaßnahmen kann bei keinem DBMS sichergestellt werden, daß sichnicht mit der Zeit Inkonsistenzen einschleichen. Daher sollten wir bereits frühzeitig überzusätzliche Prüfungen der Konsistenz nachdenken.

Da es sich hierbei um Standardaufgaben handelt, bietet uns Access Musterlösungen an.Mit einem der Abfrageassistenten können wir auf schnellem Wege komplexe Abfragenerstellen. Wie eine solche Abfrage zu erstellen ist, haben wir bereits im Einführungskapi-tel kennengelernt. Zwei der dort erscheinenden Assistenten unterstützen Abfragen zurerweiterten Prüfung unserer Datenbank

• Abfrageassistent zur Duplikatsuche• Abfrageassistent zur Inkonsistenzsuche

Dabei bezieht sich der erste Assistent auf eine einzelne Tabelle, während der zweite eineBeziehung zwischen zwei Tabellen überprüft.

2.4.1 Duplikatsuche

Da eine Abfrage eine temporäre Zwischentabelle erzeugt, kann die Duplikatsuche sowohlauf Tabellen wie auch auf Abfragen angewandt werden.

Der Aufruf und die weitere Bearbeitung des Assistenten zur Duplikatsuche ist weitgehendselbsterklärend, so daß hier auf die Bildschirmausdrucke verzichtet wird. Statt dessen

Page 392: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Logische Prüfungen über die Gültigkeitsregeln © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-6 D:\Eigene\Doku\DB\DBAcc02.doc – 96329

wollen wir das Ergebnis analysieren und bei dieser Gelegenheit unsere SQL Kenntnisseerweitern.

Als Beispiel nehmen wir unsere Studentendatei, die wir auf doppelte Namen prüfen wol-len (auch wenn dies im „wahren Leben“ durchaus vorkommen kann). D. h. wir wählensname als Feld zur Überprüfung aus. Darüber hinaus wollen wir noch die Matrikel unddas Geburtsdatum anzeigen

Der Generator erzeugt eine Abfrage

SELECT DISTINCTROW student.snr, student.sname, student.sgeschlFROM studentWHERE (((student.sname) In (SELECT [sname] FROM [student] As Tmp GROUP BY

[sname] HAVING Count(*)>1 )))ORDER BY student.sname;

wobei uns insbesondere das Kriterium zur Auswahl interessiert.

Es sollen also alle Datensätze angezeigt werden, bei denen die Zählung des Aufkom-mens größer als 1 ist.

Dazu wird erst eine weitere Abfrage SELECT [sname] FROM [student] As TmpGROUP BY [sname] HAVING Count(*)>1 durchgeführt. Der Aliasname ist Tmp. Indiese Zwischentabelle werden alle Studentennamen augenommen und dabei gruppiert,d. h. gleiche Namen werden zu einem Datensatz zusammengefaßt. Die HAVING Klauselfür die Gruppierung entspricht der WHERE Klausel der Selektion. Wir können somit fürdie Gruppe weitere Kriterien festlegen. Hier werden die Sätze gezählt. Nur solcheGruppen werden aufgenommen, die mehr als einen Datensatz haben.

Geben wir z. B. den Namen Mayer noch einmal in unsere Studententabelle ein, so er-halten wir als Ergebnis der Abfrage:

s_doppelte_sname : AuswahlabfrageMatrikel Name Geburtsdatum

26 Mayer 15.06.621 Mayer 10.10.63

Ist das Feld indiziert, so verhindern wir solche Inkonsistenzen durch einen eindeutigenSchlüssel.

2.4.2 Inkonsistenzsuche

Die Inkonsistenzsuche ist schon etwas komplizierter, da sie eine Beziehung überprüft,d. h. mit zwei Tabellen arbeitet. Zwischen beiden muß eine 1:m Beziehung bestehen. DieInkonsistenzen von 1:1,1:c,c:c Beziehungen können wir i. a. an einer einzigen Tabelleuntersuchen, indem wir den fehlenden Verbindungsschlüssel in der Tabelle suchen.

Letzteres stimmt nicht immer. Denken Sie nur an die Idee, die Klassensprecher Bezie-hung durch ein logisches Feld bei den Studenten zu realisieren. In diesem Fall müßtenpro Klasse alle Studenten überprüft werden, ob genau einer einen Eintrag Ja enthält.Sowohl zu wenige als auch mehr wären falsch.

Page 393: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Prüfungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc02.doc – 96329 Seite: 2-7

Die Inkonsistenzsuche ist im Grunde die Umkehrung der referentiellen Integrität. Bei die-ser prüft Access bekanntlich, ob ein Detailsatz einen korrespondierenden Satz in der Ma-stertabelle besitzt. Nun können wir die umgekehrte Frage stellen, ob jeder Satz der Ma-stertabelle wenigstens einen Datensatz in der Detailtabelle besitzt. Damit überprüft dieseAbfrage die Richtigkeit der 1:m, c:m Beziehung im Unterschied zur 1:mc, c:mc Beziehung.Durch Festlegung des m verlangen wir, daß es zu jedem Datensatz der Mastertabelle (1-Tabelle) mindestens einer, ggf. mehrere Datensätze in der Detailtabelle existieren.

Es muß sich nicht unbedingt um einen Fehler handeln, wenn eine Mastertabelle keineDetailsätze besitzt. So kann eine Klasse zumindest eine gewisse Zeit ohne Studentenoder ohne Themen auskommen. Geht aber das Semester los, so wäre dies ein Fehler.Hierzu haben wir ja gerade die konditionale Beziehungen eingeführt. Diese wird durchdas Zulassen des Wertes Null in einem Verbindungsschlüssel realisiert. Was aber,wenn wir diese Eigenschaft zu einem bestimmten Zeitpunkt abschalten wollen, genauerzumindest überprüfen wollen.

Interessant ist dabei die Überprüfung der 1:m Beziehungen. Die m-Seite ist dabei schnellgetestet. Wir suchen einfach die Sätze mit dem Verbindungsschlüssel Null (Beispiels_ohne_k). Problematisch ist die 1-Seite. Damit haben wir schon unsere Beispiele abge-steckt. Wir fragen uns also, ob eine Klasse über Studenten bzw. über Themen usw. ver-fügt.

Die Eingaben für den Assistenten sind wieder so trivial, daßwir auf die Bildschirmausdrucke verzichten können. Zuerstwählen wir in beiden Fällen die Mastertabelle klasse aus.Im zweiten Fenster wird dann entweder student oderhoert hinzugefügt. Im dritten Fenster werden nur noch diebereits vorhandenen Beziehungen knr↔sknr bestätigt.Hier orientiert sich Access natürlich am allgemeinen Bezie-hungsdiagramm. Im vierten Fenster legen wir die angezeig-ten Felder fest. Eigentlich reicht uns später die Anzeige desKlassennamens kname, so daß wir nur diesen auswählen.Im letzten Fenster geben wir dann nur noch den Namen derAbfrage an.

Nach Beendigung des Assistenten schauen wir uns denEntwurf an. Er ist interessant und lehrreich (Bild 2.4-1). Wirerkennen den Pfeil von klasse nach student. DessenBedeutung wir klar, wenn wir uns die SQL-Anweisung anschauen

SELECT DISTINCTROW klasse.knameFROM klasse LEFT JOIN student ON klasse.knr = student.sknr WHERE ((student.sknr

Is Null));

Bild 2.4-1: Inkonsistenzab-frage

Page 394: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 2.3 Logische Prüfungen über die Gültigkeitsregeln © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 2-8 D:\Eigene\Doku\DB\DBAcc02.doc – 96329

Der Trick der Abfrage ist ein LEFT JOIN. Beachten wir vorerst dieKlauseln WHERE und DISTINCTROW noch nicht und schalten dieAnzeige von sknr ein, dann sorgt der LEFT JOIN für eine Listemit allen Klasse-Student Kombinationen und zusätzlich den Klassenohne Studentennummern. Aus diesen werden dann die Klassenausgewählt, die keinen studentischen Eintrag besitzen. Die Aus-wahlanweisung WHERE sorgt nun dafür, daß nur diese Zeilen aus-gewählt werden. Die Klausel DISTINCTROW sorgt dafür, daß jedeKlasse nur einmal angezeigt wird.

Eine Alternative zu dieser Inkonsistenzabfrage werden wir im näch-sten Kapitel kennenlernen.

k inkonsistent zu sKlassenname in Klasse395SD6TI 1 1395SD6TI 1 1395SD6TI 1 1395SD6TI 1 1...395SD2TI 1 5395SD3NT 1395SD2MSP1 7395SD2MSP1 7395SD3NT 2395SD3TI 1395SD3TI 2

gesuchter Eintrag

Page 395: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc - 12.04.97 12:25/12.04.97 12:25 Seite: 3-I

MS Access – Abfragen

3 MS Access - Abfragen .................................................................................................3-1

3.1 SELECT-Anweisung .............................................................................................3-2

3.1.1 Syntax ..............................................................................................................3-2

3.1.2 Prädikat............................................................................................................3-3

3.1.3 Feldliste............................................................................................................3-5

3.1.4 FROM Klausel..................................................................................................3-5

3.1.5 WHERE Klausel...............................................................................................3-5

3.1.6 GROUP BY Klausel .........................................................................................3-6

3.1.7 HAVING Klausel ..............................................................................................3-7

3.1.8 ORDER BY Klausel .........................................................................................3-7

3.1.9 WITH OWNERACCESS OPTION Klausel ......................................................3-8

3.1.10 DELETE Anweisung ......................................................................................3-8

3.1.11 INSERT INTO Anweisung .............................................................................3-9

3.1.12 SELECT … INTO Anweisung......................................................................3-10

3.1.13 UPDATE Anweisung....................................................................................3-10

3.1.14 UNION Operation ........................................................................................3-11

3.2 Einfache Auswahlabfragen ................................................................................3-11

3.2.1 Nachschautabellen ........................................................................................3-11

3.2.2 Erstellen einer Abfrage ..................................................................................3-12

3.2.3 Verknüpfungseigenschaften ..........................................................................3-13

3.2.4 Abfragekriterien .............................................................................................3-14

3.2.5 Berechnete Hilfsfelder ...................................................................................3-16

3.2.6 Aggregatfunktionen........................................................................................3-17

3.2.7 Gruppierung...................................................................................................3-19

3.2.7.1 Grundlagen.............................................................................................3-19

3.2.7.2 Anwendung.............................................................................................3-20

3.2.7.3 Gruppierung nach Größenklassen .........................................................3-22

3.3 Kreuztabellenabfragen .......................................................................................3-25

3.3.1 Grundlagen ....................................................................................................3-25

3.3.2 Entwurf einer Kreuztabelle mit dem Abfrageassistenten...............................3-25

Page 396: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Inhaltsverzeichnis © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-II D:\Eigene\Doku\DB\DBAcc03.doc – 12.04.97 12:25/12.04.97 12:25

3.3.3 Manueller Entwurf einer Kreuztabellenabfrage............................................. 3-28

3.4 Aktionsabfragen ................................................................................................. 3-29

3.5 Parameterabfragen ............................................................................................. 3-30

3.6 SQL-Abfragen ..................................................................................................... 3-32

3.6.1 UNION Abfrage ............................................................................................. 3-32

3.6.2 SQL Pass-Through-Abfrage.......................................................................... 3-33

3.6.3 SQL-Datendefinitionsabfrage........................................................................ 3-33

3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) .................. 3-34

3.7.1 Abfragen bei m:m Reflexivbeziehungen ....................................................... 3-35

3.7.1.1 Vorbereitung .......................................................................................... 3-35

3.7.1.2 Das Problem .......................................................................................... 3-36

3.7.1.3 Vereinigungsmenge Union .................................................................... 3-38

3.7.1.4 Testdaten ............................................................................................... 3-41

3.7.2 Abfragen bei 1:m Reflexivbeziehungen ........................................................ 3-43

3.7.2.1 Direkte Verknüpfung .............................................................................. 3-44

3.7.2.2 Abfragen in Abfragen ............................................................................. 3-45

3.7.2.3 Abfragen mit Abfragen ........................................................................... 3-48

3.8 Alternative SQL Anweisungen und weitere Besonderheiten ........................ 3-49

3.8.1 Direkte Rekursionen...................................................................................... 3-49

3.8.2 Abfragen in Abfragen .................................................................................... 3-52

3.9 Übungen .............................................................................................................. 3-59

3.9.1.1 Nicht-Abfragen ....................................................................................... 3-59

Page 397: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-1

3 MS Access – Abfragen

In diesem Kapitel wollen wir uns noch einmal systematisch mit den Abfragen beschäfti-gen. Hierbei geht es um das Anlegen von Abfragen, das Sortieren, das Formatieren, dasAusdrucken usw.

Wir unterscheiden folgende Abfragetypen

− Auswahlabfragen− Parameterabfragen− Kreuztabellenabfragen− Aktionsabfragen− SQL-Abfragen

Eine Auswahlabfrage ist der gebräuchlichste Abfragetyp. Sie ruft Daten aus einer odermehreren Tabellen ab und zeigt diese in einem Datenblatt an. Dort können wir die Daten-sätze (mit wenigen Einschränkungen) aktualisieren. Mit einer Auswahlabfrage können wirauch Datensätze gruppieren und Summen, Anzahl, Durchschnittswerte und andere Funk-tionen berechnen.

Eine Parameterabfrage ist eine Abfrage, die beim Ausführen ein Dialogfeld zum Eingebenvon Informationen anzeigt. Dies können Kriterien zum Abrufen von Datensätzen oderauch Werte sein, die in ein Feld eingefügt werden sollen. Parameterabfragen eignen sichbesonders als Basis für Formulare und Berichte. Wir können an Stelle einer Parameter-abfrage auch ein benutzerdefiniertes Formular oder Dialogfeld erstellen, das den Benut-zer auffordert, Informationen einzugeben.

Eine Kreuztabellenabfrage zeigt zusammengefaßte Werte (Summen, Anzahl, Durch-schnittswerte) für ein Feld einer Tabelle an und gruppiert diese nach einer Reihe von Ka-tegorien, die untereinander auf der linken Seite des Datenblatts erscheinen, und nacheiner anderen Reihe von Kategorien, die am oberen Rand des Datenblatts erscheinen.

Eine Aktionsabfrage führt in einer Operation Änderungen an einer Vielzahl von Datensät-zen durch. Es gibt folgende Arten von Aktionsabfragen:

− Tabellenerstellungsabfrage− Löschabfrage− Anfügeabfrage− Aktualisierungsabfrage.

Eine SQL-Abfrage ist eine Abfrage, die unter Verwendung einer SQL-Anweisung erstelltwird. Beispiele für SQL-Abfragen sind Union-, SQL Pass-Through-, Datendefinitions- undUnterabfragen.

Union-Abfrage

Dieser Abfragetyp kombiniert in den Abfrageergebnissen Felder (Spalten) aus einer odermehreren Tabellen oder Abfragen in einem Feld oder einer Spalte.

Page 398: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-2 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

SQL Pass-Through-Abfrage

Dieser Abfragetyp sendet Befehle direkt an ODBC-Datenbanken, wie z. B. Microsoft SQLServer. Dabei werden Befehle verwendet, die der Server unterstützt.

Datendefinitionsabfrage

Dieser Abfragetyp erstellt oder ändert Datenbankobjekte, wie z. B. Microsoft Access- oderMicrosoft SQL Server-Tabellen.

Unterabfrage

Dieser Abfragetyp besteht aus einer SQL SELECT- Anweisung innerhalb einer anderenAuswahlabfrage oder Aktionsabfrage. Wir können diese Anweisungen zum Definiereneines neuen Feldes in die Zeile Feld oder zum Definieren von Kriterien für ein Feld in dieZeile Kriterien des Abfrageentwurfsrasters eingeben. Mit Unterabfragen können wir diefolgenden Aufgaben ausführen:

− Testen, ob Ergebnisse der Unterabfrage vorhanden sind (dazu verwenden wirdie reservierten Wörter EXISTS oder NOT EXISTS )

− Suchen nach Werten in der Hauptabfrage, die gleich, größer als oder kleiner alsWerte sind, die die Unterabfrage ausgibt (dazu verwenden wir die reserviertenWörter ANY, IN oder ALL )

− Erstellen von Unterabfragen innerhalb von Unterabfragen (verschachtelte Un-terabfragen)

3.1 SELECT-Anweisung

3.1.1 Syntax

Basis aller SQL-Anweisungen ist SELECT. Grundsätzlich müssen wir uns dabei vor Au-gen halten, daß alle SQL-Anweisungen mengenorientiert sind, d. h. Mengen als Eingabe-daten erwarten und Mengen als Ausgabedaten liefern. Dabei kann es sich um leere Men-gen oder solche mit nur einem Eintrag (Datensatz) handeln.

SELECT [prädikat] { * | tabelle.* | [tabelle.]feld1 [AS alias1] [,[tabelle.]feld2 [AS al i as2] [, ...]]}

FROM tabellenausdruck [, ...] [IN externedate nbank][WHERE kriterien][GROUP BY gruppenfeldliste]

[HAVING gruppenkriterien ][ORDER BY sortierfelder ][WITH OWNERACCESS OPTION]

Weist das Access an, Informationen aus der Datenbank als Gruppe von Datensätzen zu-rückzugeben.

Die SELECT- Anweisung besteht aus folgenden Teilen:

Page 399: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-3

Teil Beschreibungprädikat Eines der folgenden Prädikate: ALL, DISTINCT, DISTINCTROW

oder TOP. Mit dem Prädikat schränken wir die Anzahl der zurückge-gebenen Datensätze ein. Wurde kein Prädikat angegeben, so ist dieStandardeinstellung ALL.

* Gibt an, daß alle Felder aus den angegebenen Tabellen ausgewähltwerden.

tabelle Der Name der Tabelle, aus der Datensätze ausgewählt werden.feld1, feld2 Die Namen der Felder, aus denen Daten abgerufen werden. Wenn

wir mehrere Felder angeben, werden diese in der angegebenen Rei-henfolge abgerufen.

alias1, alias2 Die Namen, die anstelle der ursprünglichen Spaltennamen als Spal-tenköpfe in tabelle verwendet werden.

tabellenausdruck Der Name der Tabelle(n) mit den Daten, die abgerufen werden sol-len.

externedatenbank Der Name der Datenbank mit den in tabellenausdruck angege-benen Tabellen, sofern sich die Tabellen nicht in der aktuellen Da-tenbank befinden.

Es gelten folgende Regeln:1. Zum Durchführen dieser Operation durchsucht Access die angegebene(n) Tabelle(n),

liest die gewählten Spalten, wählt die Zeilen aus, die die Kriterien erfüllen, und sortiertoder gruppiert die Ergebniszeilen in der angegebenen Reihenfolge.

2. SELECT-Anweisungen ändern die Daten in der Datenbank nicht.3. SELECT ist in der Regel das erste Wort in einer SQL-Anweisung. Die meisten SQL-

Anweisungen sind entweder SELECT- oder SELECT... INTO- Anweisungen.

Die minimale Syntax für eine SELECT- Anweisung ist:

SELECT felder FROM tabelle

Wir können ein Sternchen * verwenden, um alle Felder in einer Tabelle auszuwählen:

SELECT * FROM student;

Wenn ein Feldname in mehreren Tabellen der FROM-Klausel existiert, machen wir ihnmit dem Tabellennamen und den Punktoperator . vor dem Feldnamen eindeutig.

3.1.2 Prädikat

Das Prädikat legt die Datensätze an, die mit SQL-Abfragen ausgewählt werden

SELECT [ALL|DISTINCT|DISTINCTROW|[TOP n [PERCENT]]] FROM tabelle …

Prädikat WirkungALL Wenn wir kein Prädikat angeben, wird ALL angenommen. Es werden

Page 400: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-4 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Prädikat Wirkungalle Datensätze ausgewählt, die die Bedingungen in der SQL-Anweisungerfüllen. Die beiden folgenden Beispiele sind äquivalent und geben alleDatensätze aus der Tabelle professor zurück:SELECT ALL *FROM professor ORDER BY [pnr];SELECT * FROM professor ORDER BY [pnr];

DISTINCT Wählt Datensätze nicht aus, die in den ausgewählten Feldern mehrfachvorkommende Daten enthalten. Die Werte für alle in der SELECT-Anweisung aufgeführten Felder müssen eindeutig sein, damit sie in dasErgebnis der Abfrage aufgenommen werden. Beispielsweise könnenmehrere in der Tabelle professor aufgeführte Dozenten denselbenNachnamen haben. Wenn zwei Datensätze den Wert Schmidt imFeld pname enthalten, gibt die folgende SQL-Anweisung nur einen derDatensätze zurück, die Schmidt enthalten:SELECT DISTINCT [pname] FROM professor;

Wenn wir DISTINCT nicht angeben, gibt diese Abfrage beide Daten-sätze mit Schmidt zurück. Wenn die SELECT-Anweisung mehrereFelder enthält, muß die Kombination der Werte aus allen Feldern ein-deutig sein, damit ein bestimmter Datensatz in das Ergebnis aufgenom-men wird. Die Ausgabe einer Abfrage, die DISTINCT verwendet, kannnicht aktualisiert werden, und von anderen Benutzern nachträglich vor-genommene Änderungen werden in der Ausgabe nicht berücksichtigt.

DISTINCTROW Wählt Daten aus mehrfach auftretenden Datensätzen (und nicht nur ausmehrfach auftretenden Feldern) nur einmal aus.

TOP Gibt eine bestimmte Anzahl von Datensätzen zurück, die im oberen oderunteren Teil eines durch eine ORDER BY-Klausel angegebenen Be-reichs liegen. Angenommen, wir wollten die Namen der 25 jüngstenStudenten mit bestandenem Vordiplom ermitteln:SELECT TOP 25 student.sname, student.sgebFROM studentWHERE (((student.svord)=True))ORDER BY student.sgeb DESC;

Wenn wir keine ORDER BY-Klausel angeben, gibt die Abfrage 25 nichtnäher bestimmte Datensätze aus der Tabelle Studenten zurück, diedie in der WHERE-Klausel angegebene Bedingung erfüllen.Das TOP-Prädikat trifft keine Auswahl bei gleichen Werten. Wenn imvorhergehenden Beispiel das Geburtsdatum des 25. und des 26. Stu-denten übereinstimmen, gibt die Abfrage 26 Datensätze zurück.Wir können auch mit dem reservierten Wort PERCENT einen bestimm-ten Prozentsatz der Datensätze festlegen, die im oberen oder unterenTeil eines durch eine ORDER BY-Klausel angegebenen Bereichs lie-gen. Wollen wir statt der 25 jüngsten Studenten die jüngsten 20 Prozentder Studenten ermitteln, so lautet die Anweisung:SELECT TOP 20 PERCENT student.sname, student.sgebFROM studentWHERE (((student.svord)=True))ORDER BY student.sgeb DESC;

TOP hat keinen Einfluß auf die Aktualisierbarkeit der Abfrage.tabelle Der Name der Tabelle, aus der Datensätze abgerufen werden.

Page 401: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-5

3.1.3 Feldliste

Die Feldliste besteht aus einem oder mehreren Feldbezeichnern bzw. festgelegten Sym-bolen wie * (für alle) bzw. Aggregatfunktionen.

Mit Hilfe der Klause AS kann ein Aliasname vergeben werden, der für die laufende An-weisung gilt. Dieser ist hilfreich, wenn die Feldnamen in den beteiligten Tabellen nichteindeutig sind.

Mit den SQL-Aggregatfunktionen können wir eine Reihe statistischer Auswertungen vonWertemengen durchführen. Diese Funktionen:

Avg DurchschnittCount AnzahlFirst-, Last Erster bzw. LetzterMin-, Max Minimum bzw. MaximumStDev-, StDevP StandardabweichungSum-Funktion SummeVar-, VarP Varianz

werden in einem gesonderten Kapitel behandelt.

3.1.4 FROM Klausel

Mit der FROM Klausel geben wir die Tabellen oder Abfragen an, in denen die in derSELECT-Anweisung aufgeführten Felder enthalten sind.

Teil Beschreibungtabellenausdruck Ein Ausdruck, der eine oder mehrere Tabellen kennzeichnet, aus

denen Daten abgerufen werden. Der Ausdruck kann ein einzelnerTabellenname sein, ein Name einer gespeicherten Abfrage oderein zusammengesetzter Name, der sich aus einer VerknüpfungINNER JOIN, LEFT JOIN oder RIGHT JOIN ergibt.

externedatenbank Der vollständige Pfadname einer externen Datenbank, die alleTabellen in Tabellenausdruck enthält.

Es gelten folgende Regeln:

1. FROM ist erforderlich und muß auf alle SELECT-Anweisungen folgen.2. Die Reihenfolge der Tabellennamen in Tabellenausdruck ist ohne Bedeutung.3. Sie können Daten aus einer externen Datenbank schneller und komfortabler abrufen,

wenn Sie statt einer IN-Klausel eine eingebundene Tabelle verwenden.

3.1.5 WHERE Klausel

Mit der WHERE Klausel geben wir an, welche Datensätze aus den in der FROM Klauselaufgeführten Tabellen von einer SELECT-, UPDATE- oder DELETE-Anweisung bear-beitet werden sollen.

Page 402: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-6 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Teil Beschreibungkriterien Ein Ausdruck, den Datensätze erfüllen müssen, damit sie in das Abfrageer-

gebnis aufgenommen werden.

Es gelten folgende Regeln:

1. Access wählt die Datensätze aus, die die in der WHERE Klausel aufgeführten Bedin-gungen erfüllen. Wenn wir keine WHERE Klausel angeben, gibt die Abfrage alle Zeilenaus der Tabelle zurück. Wenn wir mehrere Tabellen in Ihrer Abfrage angeben und kei-ne WHERE Klausel oder JOIN Klausel angeben, erhalten wir ein kartesisches Pro-dukt der Tabellen.

2. WHERE ist optional, muß aber auf FROM folgen, wenn es angegeben wird.3. Wenn wir keine JOIN Klausel verwenden, um SQL-Verknüpfungsoperationen auf

mehreren Tabellen durchzuführen, kann das zurückgegebene Recordset-Objekt nichtaktualisiert werden.

4. WHERE ist der HAVING Klausel ähnlich. WHERE bestimmt, welche Datensätze aus-gewählt werden. Analog dazu bestimmt HAVING, welche Datensätze angezeigt wer-den, nachdem sie mit GROUP BY gruppiert wurden.

5. Wir verwenden die WHERE Klausel, um Datensätze auszuschließen, die nicht von ei-ner GROUP BY Klausel gruppiert werden sollen.

6. In der WHERE Klausel können wir verschiedene Ausdrücke verwenden, um zu be-stimmen, welche Datensätze die SQL-Anweisung zurückgibt.

7. Eine WHERE Klausel kann bis zu 40 Ausdrücke enthalten, die durch logische Operato-ren wie And und Or verknüpft sind.

8. Enthält ein Feldname ein Leerzeichen oder Satzzeichen, so schließen wir in eckigeKlammern [ ] ein.

9. Verwenden wir in den Kriterien ein Datum, so muß die Datumsangaben im amerikani-schen Datumsformat erfolgen. Wir können auch die DateValue Funktion verwenden,die aufgrund der in Windows eingestellten Ländereinstellungen das Datum wandelt.

3.1.6 GROUP BY Klausel

Eine GROUP BY Klausel faßt Datensätze, die in der angegebenen Feldliste dieselbenWerte enthalten, zu einem einzelnen Datensatz zusammen. Für jeden Datensatz wird einErgebniswert berechnet, wenn wir eine SQL-Aggregatfunktion wie Sum oder Count inder SELECT-Anweisung angeben.

Teil Beschreibunggruppenfeldliste Die Namen von bis zu 10 Feldern zum Gruppieren von Datensätzen.

Die Reihenfolge der Feldnamen in gruppenfeldliste bestimmtdie Gruppierungsebenen (von höchster zu niedrigster Ebene).

Es gelten folgende Regeln:

1. GROUP BY ist optional.2. Ergebniswerte werden nicht angegeben, wenn die SELECT-Anweisung keine SQL-

Aggregatfunktion enthält.

Page 403: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-7

3. Null Werte in GROUP BY Feldern werden berücksichtigt und gruppiert. NullWerte werden jedoch in keiner SQL-Aggregatfunktion ausgewertet.

4. Wir verwenden die WHERE Klausel, um Datensätze auszuschließen, die nicht von ei-ner GROUP BY Klausel gruppiert werden sollen.

5. Wenn ein Feld in einer GROUP BY Feldliste keine Memo- oder OLE-Objekt-Datenenthält, kann es auf alle Felder verweisen, die in der FROM Klausel aufgeführt sind,auch wenn das Feld nicht in der SELECT-Anweisung enthalten ist, sofern dieSELECT-Anweisung mindestens eine SQL-Aggregatfunktion enthält. Access kann nichtnach Memo- oder OLE-Objekt-Feldern gruppieren.

6. Alle Felder in der SELECT-Feldliste müssen entweder in der GROUP BY Klausel ent-halten sein oder als Argument für eine SQL-Aggregatfunktion angegeben werden.

3.1.7 HAVING Klausel

Die HAVING Klausel gibt in Verbindung mit einer GROUP BY Klausel an, welche dergruppierten Datensätze in einer SELECT-Anweisung angezeigt werden sollen. NachdemGROUP BY Datensätze kombiniert, zeigt HAVING alle von der GROUP BY Klauselgruppierten Datensätze an, die die in der HAVING Klausel angegebenen Bedingungenerfüllen.

Teil Beschreibunggruppenkriterien Dieser Ausdruck bestimmt, welche gruppierten Datensätze angezeigt

werden sollen.

Es gelten folgende Regeln:

1. HAVING ist optional und nur mit GROUP BY sinnvoll.2. HAVING hat eine ähnliche Funktion wie die WHERE Klausel, die bestimmt, welche

Datensätze ausgewählt werden. Nachdem Datensätze mit GROUP BY gruppiert wur-den, bestimmt HAVING, welche Datensätze angezeigt werden.

3. Eine HAVING Klausel kann bis zu 40 Ausdrücke enthalten, die durch logische Ope-ratoren wie And und Or verknüpft sind.

3.1.8 ORDER BY Klausel

Mit der ORDER BY Klausel geben wir die Sortierung die Ergebnisdatensätze einer Ab-frage nach einem oder mehreren angegebenen Feldern in aufsteigender oder absteigen-der Reihenfolge an.

Teil Beschreibungsortierfelder Die Namen der Felder, nach denen Datensätze sortiert werden sollen.

Mit den Zusätzen ASC oder DESC geben wir die Richtung der Sortie-rung an.

Es gelten folgende Regeln:

1. ORDER BY ist optional.2. Die Standardeinstellung für die Sortierreihenfolge ist aufsteigend (A bis Z, 0 bis 9).

Page 404: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-8 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

3. Mit dem Schlüsselwort DESC hinter dem Feldnamen geben wir die absteigende Rei-henfolge an.

4. Wenn wir ein Memo- oder OLE-Objekt-Feld in der ORDER BY Klausel angeben,tritt ein Fehler auf.

5. Wir können in der ORDER BY Klausel mehrere Felder angeben. Die Datensätze wer-den zuerst nach dem ersten im Anschluß an ORDER BY angegebenen Feld sortiert.Datensätze, die in diesem Feld denselben Wert haben, werden dann nach dem Wertim zweiten aufgeführten Feld sortiert usw. Bilden die Felder kein eindeutiges Sortier-kriterium, dann ist die Reihenfolge in dieser Stufe nicht voraussagbar

6. ORDER BY ist normalerweise der letzte Eintrag in einer SQL-Anweisung.

3.1.9 WITH OWNERACCESS OPTION Klausel

Die WITH OWNERACCESS OPTION Klausel verwenden wir in einer Mehrbenutzerumge-bung mit einer geschützten Arbeitsgruppe bei einer Abfrage, um dem die Abfrage ausfüh-renden Benutzer die gleichen Berechtigungen, die auch der Eigentümer der Abfrage be-sitzt, zu geben. Damit erweitern wir zeitweise die Zugriffsrechte auf Daten für bestimmteAbfragen, die sonst abgelehnt würden.

Es gelten folgende Regeln

1. Die WITH OWNERACCESS OPTION Deklaration ist optional.2. Wenn ein Benutzer normalerweise nicht zum Erstellen einer Tabelle oder zum Hinzu-

fügen zu einer Tabelle berechtigt ist, können wir dem Benutzer unter Verwendung vonWITH OWNERACCESS OPTION die Berechtigung zur Ausführung einer Tabellener-stellungs- oder Anfügeabfrage erteilen (also temporären Schreibzugriff).

3. Wenn wir die Einhaltung der Sicherheitseinstellungen für die Arbeitsgruppe und derBenutzerberechtigungen erzwingen möchten, geben wir die WITH OWNERACCESSOPTION Deklaration nicht an.

4. Diese Option erfordert, daß wir Zugriff auf die Datei SYSTEM.MDA haben, die der Da-tenbank zugeordnet ist. Die Option ist nur in geschützten Mehrbenutzerumgebungensinnvoll.

Das folgende Beispiel erlaubt dem Benutzer die Anzeige von Geburtsdaten, auch wenn eransonsten nicht zur Ansicht der Tabelle student berechtigt ist, sofern die Abfrage voneiner Person mit den nötigen Berechtigungen erstellt wurde:

SELECT [sname], [sgeb]FROM studentORDER BY [sname]WITH OWNERACCESS OPTION;

Die folgenden SQL-Anweisung sind der SELECT-Anweisung sehr ähnlich und werdendaher kurz dargestellt:

3.1.10 DELETE Anweisung

DELETE startet eine Löschabfrage, die Datensätze aus einer oder mehreren der in derFROM Klausel aufgeführten Tabellen löscht, sofern diese die in der WHERE Klausel an-gegebene Bedingung erfüllen.

Page 405: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-9

DELETE [tabelle.*]FROM tabelleWHERE kriterien

Es gelten folgende Regeln:

1. DELETE ist besonders hilfreich, wenn viele Datensätze gelöscht werden sollen.2. Wenn wir eine Tabelle löschen wollen, benutzen wir die Execute Methode zusam-

men mit einer DROP TABLE Anweisung verwenden. Hierbei wird aber die ganze Ta-belle physikalisch gelöscht. Im Gegensatz dazu werden durch DELETE nur die Datengelöscht. Die Tabellenstruktur und alle Tabelleneigenschaften bleiben erhalten.

3. Mit DELETE löschen wir auch Datensätze aus Tabellen, die in der FROM Klauselnicht auftauchen, falls diese im UDM mit der aktuellen Tabelle in einer 1:m Beziehungstehen und die Option Löschweitergabe aktiv ist. Dann werden alle passendenDatensätze der Detailtabelle (m-Seite) ebenfalls gelöscht.

4. Eine Löschabfrage löscht ganze Datensätze, nicht nur Daten in bestimmten Feldern.Wenn wir Werte in einem bestimmten Feld löschen möchten, müssen wir eine Aktuali-sierungsabfrage erstellen, die die Werte auf Null ändert.

) Achtung: Das Löschen von Datensätzen mit einer Löschabfrage kann nicht rückgän-gig gemacht werden. Aus Sicherheitsgründen prüfen wir die Ergebnisse an-hand einer Auswahlabfrage und wandeln diese in eine Löschabfrage.Im Fehlerfall hilft nur die regelmäßig erstellte Sicherungskopie.

3.1.11 INSERT INTO Anweisung

Mit INSERT INTO fügen wir einer Tabelle einen Datensatz oder mehrere Datensätzehinzu. Dies wird als Anfügeabfrage bezeichnet.

Abfrage zum Anfügen mehrerer Datensätze:

INSERT INTO ziel [IN externedatenbank] [(feld1[, feld2[, ...]])]SELECT [quelle.]feld1[, feld2[, ...]FROM tabellenausdruck

Abfrage zum Anfügen eines einzelnen Datensatzes:

INSERT INTO ziel [(feld1[, feld2[, ...]])]VALUES (wert1[, wert2[, ...])

Teil Beschreibungziel Der Name der Tabelle oder Abfrage, an die Datensätze angefügt

Page 406: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-10 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

werden sollen.externedatenbank Der Pfad einer externen Datenbank.quelle Der Name der Tabelle oder Abfrage, aus der Datensätze kopiert

werden sollen.feld1, feld2 Namen der Felder, an die Daten angefügt werden sollen, wenn diese

einem Argument ziel folgen, oder die Namen der Felder, aus de-nen Daten gelesen werden sollen, wenn diese einem Argumentquelle folgen.

tabellenausdruck Der Name der Tabelle(n), aus der oder denen Datensätze eingefügtwerden. Bei diesem Argument kann es sich um den Namen einereinzelnen Tabelle oder einen zusammengesetzten Namen (als Er-gebnis einer INNER JOIN, LEFT JOIN oder RIGHT JOIN Ope-ration) oder eine gespeicherte Abfrage handeln.

wert1, wert2 Die Werte, die in bestimmte Felder des neuen Datensatzes eingefügtwerden sollen. Jeder Wert wird in das Feld eingefügt, das der Positi-on des Wertes in der Liste entspricht: wert1 wird in feld1 desneuen Datensatzes eingetragen, wert2 in feld2 usw. Alle Wertemüssen in Anführungszeichen " " eingeschlossen und durch Kom-mas getrennt werden.

3.1.12 SELECT … INTO Anweisung

Mit der SELECT … INTO Anweisung erstellen wir eine Tabellenerstellungsabfrage.

SELECT feld1[, feld2[, …]] INTO neuetabelle [IN externedatenbank]FROM Quelle

Teil Beschreibungfeld1, feld2 Die Namen der Felder, die in die neue Tabelle kopiert werden sollen.neuetabelle Der Name der zu erstellenden Tabelle, der den Standard-Namens-

konventionen folgen muß. Wenn neuetabelle mit dem Nameneiner bereits bestehenden Tabelle übereinstimmt, tritt ein auffangba-rer Fehler auf.

externedatenbank Der Pfad einer externen Datenbank.quelle Der Name der bestehenden Tabelle, aus der Datensätze ausgewählt

werden. Es kann sich um eine einzelne Tabelle, um mehrere Tabel-len oder um eine Abfrage handeln.

3.1.13 UPDATE Anweisung

Mit der UPDATE Anweisung erstellen eine Aktualisierungsabfrage, die Werte in Felderneiner angegebenen Tabelle aufgrund angegebener Kriterien ändert.

Page 407: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-11

UPDATE tabelleSET neuerwertWHERE kriterien;

Teil Beschreibungtabelle Der Name der Tabelle, deren Daten geändert werden sollen.neuerwert Ein Ausdruck, der den Wert angibt, der in einem bestimmten Feld in den ak-

tualisierten Datensätzen eingefügt werden soll.kriterien Ein Ausdruck, der festlegt, welche Datensätze aktualisiert werden. Es wer-

den nur Datensätze aktualisiert, die die im Ausdruck angegebene Bedingungerfüllen.

3.1.14 UNION Operation

Die einzige Operation in diesem Zusammenhang erstellt eine Vereinigungsmenge zweiterTabellen, eine sog. Union-Abfrage.

[TABLE] abfrage1 UNION [ALL] [TABLE] abfrage2 [UNION [ALL] [TABLE]abfragen [ … ]]

Teil Beschreibungabfrage1,abfrage2,abfragen

Eine SELECT- Anweisung, der Name einer gespeicherten Abfrage oder derName einer gespeicherten Tabelle, der/dem das Schlüsselwort TABLEvorangeht.

Es gelten folgende Regeln:

1. Standardmäßig werden keine mehrfach vorkommenden Datensätze zurückgegeben,wenn wir eine UNION Operation einsetzen. Mit dem Prädikat ALL sorgen wir dafür,daß alle Datensätze zurückgegeben werden. Außerdem hat dies zur Folge, daß dieAbfrage schneller ausgeführt wird.

2. Alle Abfragen in einer UNION Operation müssen gleich viele Felder abrufen. DieseFelder müssen aber weder gleich groß sein noch denselben Datentyp haben.

3. Wir verwenden Alias Bezeichner nur in der ersten SELECT- Klausel, da diese in ande-ren Klauseln ignoriert werden. In der ORDER BY Klausel benutzen wir die Bezeichneraus der ersten SELECT- Klausel.

3.2 Einfache Auswahlabfragen

3.2.1 Nachschautabellen

Die einfachen Abfragen wurden schon recht ausführlich im Eingangskapitel beschrieben.Normalerweise wird eine Anwendung noch eine Vielzahl von „Nachschautabellen“ (Look-up Tables) besitzen, über die wir die Wertebereiche verschiedener Attribute einschrän-

Page 408: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-12 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

ken. Ein Beispiel war der Thesaurus unserer Stichwörter. Weitere Beispiele aus dem täg-lichen Leben sind die Anreden (Tabelle 3.2-1).

Wie immer können wir uns hierüberlegen, ob wir später Daten inProgramm umwandeln wollen odernicht. Benötigen wir die Briefanredewirklich oder hängen wir das n anden Herrn per Programm an? Un-tersuchen wir den Titel und bauendie Anrede erst dann zusammen?Legen wir statt dessen eine Ab-hängigkeitstabelle der folgendenForm an?

Das ganze kann natürlich ins Unermeßliche ge-hen. Also viel Spaß dabei.

Normalerweise handelt es sich um 1:m, c:mc usw.Beziehungen. Echte 1:1 Beziehungen wird es inunserem Entwurf nie geben, da die zugehörigenAttribute bereits in die Tabelle gehören. Andersverhält es sich mit den c:c Beziehungen, da wirhier ganz erheblich Speicher sparen können. Den-ken Sie nur an den Klassensprecher, der eine sol-che Beziehung darstellt.

3.2.2 Erstellen einer Abfrage�

Die Erstellung einer Abfrage erfolgt in den Schritten

1. Funktion aus dem Regiezentrum oder über die Menüleiste aufrufen.2. Tabellen hinzufügen/entfernen usw. (Doppelklick auf Tabellennamen)3. übernommenen Beziehungen korrigieren, d. h. überflüssige Verbindungen löschen,

neue hinzufügen, ggf. auch die Eigenschaft der Verbindung (INNER, LEFT, RIGHTJoin) ändern

4. Attribute zur Anzeige und zum Sortieren auswählen (Doppelklick auf Attributnamen)5. „Stumme“ Attribute im Kontrollkästchen Anzeigen markieren (genauer „ent-

markieren“)6. Sortierung festlegen im Feld Sortierung7. Einschränkende Bedingungen für die Auswahl der Zeilen definieren in den FeldernKriterien |oder

8. Testen durch Klick auf die Ikone Datenblattansicht9. Korrektur des Layouts10. Korrektur logischer Fehler, d. h. Rücksprung auf Schritt 2 oder 3 usw. �

Tabelle 3.2-1: Anreden

Anrede Titel BriefanredeHerr Dr.-Ing. HerrnFrau Dipl.-Ing. FrauHerr Dr. Prof.Frau Dr. Prof. Dr.Eure Eminenz Prof. Dr.-Ing.Eure DurchlauchtEure HeiligkeitHerr Prof.Frau Prof.Firma

Tabelle 3.2-2: Abhängigkeitstabelle

Titel männlich weiblichHerr Frau

Dr.-Ing. Herr Dr. Frau Dr.Dr. rer. nat. Herr Dr. Frau Dr.Dr. med. Herr Dr. Frau Dr.Prof. Herr Prof. Herr Prof.Prof. Dr. Herr Prof. Frau Prof.

Page 409: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-13

Ganz hilfreich ist es, die Option Ansicht|Tabellennamen anzuschalten. In diesemFall wird eine weitere Zeile mit den Tabellennamen in die Feldtabelle eingefügt. Dies istdann interessant, wenn Sie im Gegensatz zu diesem Manuskript Feldnamen doppelt ver-geben haben, also nicht mehr wissen, zu welcher Tabelle Nr oder Name gehören. Unskann dies wegen der eindeutigen Präfixe nicht passieren.

3.2.3 Verknüpfungseigenschaften

Noch ein Wort zu den Verknüpfungseigenschaften:

Typ BeschreibungINNER JOIN (Equi Join) nur Datensätze, die sowohl in Tabelle 1 wie auch in Ta-

belle 2 das Kriterium erfüllen, werden in den Dynasetübernommen

LEFT JOIN (Outer Join) alle Datensätze aus Tabelle 1 werden übernommen. AusTabelle 2 werden aber nur die Datensätze übernommen,die die Bedingung erfüllen

RIGHT JOIN (Outer Join) Umkehrung des LEFT JOINs

Auch wenn es sich bei einem Join um keine Mengenoperation im klassischen Sinne han-delt, sollen diese drei Verknüpfungen grafisch darstellt werden.

Ein Join vereinigt alle Felder der beteiligten Tabellen, wobei das Verknüpfungsattribut nureinmal auftaucht. Bei einem Outer Join sind eine Reihe von Feldern unbesetzt, wenn dortder passende Partner fehlt. Diese Eigenschaft können wir durch die Abfrage nach Null-werten ausnutzen.

Die folgenden Diagramm sollen diese Eigenschaften andeuten. Es handelt sich aber nichtum Mengenbeziehungen wie Durchschnitt, Vereinigung oder Differenz!

Inner Join Left Join Right Join

fh05→ Zur Übung wollen wir nun versuchen, alle Studenten mit der zusätzlichen Information, obsie Sprecher in einer Klasse sind, anzuzeigen. Hierzu kopieren wir unsere Abfragesprecher_in_k auf die Abfrage s_in_k mit Sprecher um, die wir dann weiterbearbeiten wollen. Das Umkopieren geht sehr einfach über die Zwischenablage. Alte Ab-frage markieren und mit � � in den Zwischenspeicher nehmen. Mit � � eine neueAbfrage anlegen. Zuerst ergänzen wir ksprecher als Anzeigefeld und verändern dieEigenschaft unserer 1:1 Beziehung auf LEFT JOIN.

Page 410: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-14 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Die Meldung ist nicht ganz erbaulich(Bild 3.2-1). Wenn wir genau hinschau-en, sehen wir sogar den Pfeil der Inklu-sionsbeziehung. Wir haben aber auchwirklich falsch gedacht. Eigentlich benö-tigen wir die 1:1 Beziehung überhauptnicht. Wir löschen sie aus unserer Ab-frage heraus.

Das erste Ergebnis (s_in_k mit Spre-cher) ist eigentlich auch nicht besonderserfolgreich, da jetzt bei jeder Klasse dieSprechernummer erscheint. Eigentlichwollten wir doch nur ein Ja bei den Stu-denten, die Klassensprecher in der ent-sprechenden Klasse sind. Bei allen ande-ren Studenten soll das Feld leer sein. Hierlernen wir nun, daß wir nur Datenbankfel-der anzeigen können. Solche„berechneten“ Felder benötigen ein Pro-gramm im Hintergrund. Programme se-hen wir uns aber erst in den nachfolgen-den Kapiteln näher an.

Bei dieser Gelegenheit können wir abereinmal ausprobieren, welche Wirkungen die Wahl der Verknüpfung bieten. Unser Listeenthält nämlich nur die Studenten mit einer Klassenzuordnung. Was ist aber mit denenohne eine solche? Diese erscheinen in unserer Ergebnistabelle nur, wenn wir einenLeft Join auf die Studentendatei machen.

3.2.4 Abfragekriterien

In den Abfragekriterien benutzen wir

− Vergleichsoperatoren mit zwei Feldern bzw. einem Feld und einer Konstantenwie <, <=, =, >=, >, <>

− Bereichsoperatoren wie Zwischen, In oder Wie mit Platzhaltern * bzw. ?− Verknüpfungsoperatoren Und zwischen den Attributen bzw. Oder in einem

Attribut− Verneinungsoperator Nicht

Die Hilfe unterstützt uns mit einigen Beispielen

Bild 3.2-1: Fehlermeldung

s_in_k mit Sprecher : AuswahlabfrageMatrikel Name K-Nr. Klassenname Sprecher

1 Mayer 1 395SD6TI 1 12 Müller 1 395SD6TI 1 17 Zuse 1 395SD6TI 1 1

10 Berthold 1 395SD6TI 1 114 Fanke 1 395SD6TI 1 125 Eger 1 395SD6TI 1 1

5 Adam 2 395SD6NT 1 212 Freitag 2 395SD6NT 1 216 Schulz 2 395SD6NT 1 217 Hofmann 2 395SD6NT 1 221 Dahley 2 395SD6NT 1 223 Ritter 2 395SD6NT 1 224 Kreft 2 395SD6NT 1 2

4 Huber 3 395SD1NT 1 411 Winkelmann 3 395SD1NT 1 422 Hemberger 3 395SD1NT 1 4

9 Bisanz 4 395SD2NT 113 Keyl 4 395SD2NT 118 Binder 4 395SD2NT 115 Lorenz 5 395SD2TI 119 Mai 7 395SD2MSP120 Oschipowski 7 395SD2MSP1

Inklusionsbeziehung

Page 411: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-15

Feld Ausdruck WirkungOrt "London" Bestellungen mit Zielort LondonOrt "London" Oder

"Frankfurt"Bestellungen mit Zielort Londonoder Frankfurt

Versanddatum =#02.02.1994# Bestellungen, die am 2. Februar1994 verschickt wurden

Versanddatum Zwischen #05. Jan. 94#Und #10. Jan. 94#

Bestellungen, die nicht vor dem 5.Januar 1994 und nicht nach dem10. Januar 1994 verschickt wur-den

Bland In ("Kanada";"Großbritannien")

Bestellungen mit BestimmungslandKanada oder Großbritannien

Bland Nicht "USA" Bestellungen, deren Bestimmungs-land nicht die USA sind

Bestelldatum < Datum( )- 30 Bestellungen, die mehr als 30 Tagealt sind

Bestelldatum Jahr([Bestelldatum])=1994

Bestellungen mit Bestelldatum imJahr 1994

Bestelldatum DatTeil("q";[Bestelldatum])=4

Bestellungen aus dem 4. Quartal deslaufenden Jahres

Bestelldatum DatSeriell(Jahr([Bestelldatum]);Monat([Bestelldatum])+1;1)-1

Bestellungen vom letzten Tag jedenMonats

Bestelldatum Jahr([Bestelldatum])=Jahr(Jetzt()) UndMonat([Bestelldatum])=Monat(Jetzt())

Bestellungen aus dem laufendenJahr und Monat

Empfänger Wie "S*" Bestellungen für Kunden, deren Na-men mit dem Buchstaben S begin-nen

Empfänger Wie "*Importe" Bestellungen für Kunden, deren Na-men mit dem Wort Importe enden

Empfänger Wie "[A-D]*" Bestellungen für Kunden, deren Na-men mit den Buchstaben A bis D(einschließlich) beginnen

Bestell-Nr Rechts([Bestell-Nr];2)="99"

Bestellungen mit Bestellnummern,die mit den Ziffern 99 enden

�Übung:Erstellen Sie eine Abfrage s_ohne_k, also eine Liste aller Studenten ohne Klassenzu-ordnung. Verwenden Sie hierbei nicht die Lösung aus dem letzten Kapitel (Inkonsistenz-suche). Zur Lösung benötigen Sie das Kriterium Ist Nicht Null. �

�Übung:Erstellen Sie eine Abfrage k_ohne_s, also eine Liste aller Klassen ohne Studenten. �

�Übung:Erstellen Sie eine Abfrage k_ohne_sprecher, also eine Liste aller Klassen ohne Spre-cher. �

Page 412: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-16 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

3.2.5 Berechnete Hilfsfelder�

Wir wollen nun noch einmal auf unsere Abfrage s_in_k mit Sprecher zurückkom-men. Hier hätten wir ein Hilfsfeld benötigt, das einen logischen Wert anzeigt, nämlich obder Student Klassensprecher ist oder nicht. Hierzu gehen wir in folgenden Schritten vor

1. Abfrage s_in_k mit Sprecher im Entwurfsmodus öffnen.2. Spalte ksprecher in der Tabelle der ausgewählten Felder suchen.3. Folgenden Anweisung eingeben

Klassensprecher: [ ksprecher]=[snr]4. Datenblattansicht anklicken. �

Es erscheint s_in_k mitSprecher mit allen Studen-ten. Wir denken noch einmaldaran, daß je nach der ge-wählten Verknüpfung alle Stu-denten (LEFT Join ) oder nurdie mit Klassenzuordnung(INNER JOIN ) erscheinen.

Rechts daneben finden wir ei-ne Spalte mit den Einträgen 0bzw. -1. Die Spaltenüber-schrift entspricht unserer Ein-gabe Klassensprecher:.Offensichtlich wird die logischeFunktion wie üblich als Ganz-zahl ausgewertet und dargestellt. Jetzt wäre es schön, wenn wir das Ergebnis noch for-matieren könnten. Für numerische Ausdrücke finden wir eine Reihe von Konvertierungs-funktionen

Funktion von inZCurrency (CCur) einem beliebigen gültigen Ausdruck CurrencyZDouble (CDbl) einem beliebigen gültigen Ausdruck DoubleZInteger (CInt) einem beliebigen gültigen Ausdruck IntegerZLong (CLng) einem beliebigen gültigen Ausdruck LongZSingle (CSng) einem beliebigen gültigen Ausdruck SingleZString (CStr) einem beliebigen gültigen Ausdruck StringZVariant (CVar) einem beliebigen gültigen Ausdruck Variant

s_in_k mit Sprecher : AuswahlabfrageMatrikel Name K-Nr. Klassenname Klassensprecher

1 Mayer 1 395SD6TI§1 -12 Müller 1 395SD6TI§1 07 Zuse 1 395SD6TI§1 0

10 Berthold 1 395SD6TI§1 014 Fanke 1 395SD6TI§1 025 Eger 1 395SD6TI§1 0

5 Adam 2 395SD6NT§1 012 Freitag 2 395SD6NT§1 016 Schulz 2 395SD6NT§1 017 Hofmann 2 395SD6NT§1 021 Dahley 2 395SD6NT§1 023 Ritter 2 395SD6NT§1 024 Kreft 2 395SD6NT§1 0

4 Huber 3 395SD1NT§1 -111 Winkelmann 3 395SD1NT§1 022 Hemberger 3 395SD1NT§1 0

9 Bisanz 4 395SD2NT§113 Keyl 4 395SD2NT§118 Binder 4 395SD2NT§115 Lorenz 5 395SD2TI§119 Mai 7 395SD2MSP120 Oschipowski 7 395SD2MSP1

Page 413: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-17

Also so geht es nicht. Einelogische Konvertierung exi-stiert nicht.

Aber können wir nicht dieFunktion

Wenn(Ausdruck; True-Teil;False-Teil)

IIf(Ausdruck, True-Teil,False-Teil)

verwenden?

Tatsächlich ist die Lösung unseres Problems folgendermaßen zu formulieren

Klasssensprecher: Wenn([ksprecher]=[snr];"Ja";"")

Hierbei können wir entscheiden, welche Texte angezeigt werden sollen. So ist es möglich,auch ein Nein auszugeben usw.

Hinweis: In der aus Access kopierten Tabelle treten die Einträge "" auf, die wirunter Access selbst nicht sehen. Wollen wir tatsächlich einen leeren Eintragvorfinden, dann programmieren wir

Klasssensprecher: Wenn([ksprecher]=[snr];"Ja";Null)

�Frage: Können wir hier auch eine logische Formatanweisung anwenden? �

3.2.6 Aggregatfunktionen

Neben den satzweisen Berechnungen wünschen wir uns bei Bedarf Gesamtergebnisse.Hierzu stellt uns Access folgende Funktionen zur Verfügung

Funktion ErgebnisSumme berechnet die Summe einer SpalteMittelwert Mittelwert der Werte einer SpalteMinimum kleinster Wert in einer SpalteMaximum größter Wert in einer SpalteAnzahl Anzahl der Werte in einer Spalte (Nullwerte werden nicht gezählt)StAbw Standardabweichung der Werte einer SpalteVarianz Varianz der Werte einer SpalteErster Wert des ersten Datensatzes in einer Tabelle (Dynaset)Letzter Wert des letzten Datensatzes in einer Tabelle (Dynaset)

Diese Funktionen können wir auf ganze Tabellen oder Gruppen anwenden. Näheres fin-den Sie in der Hilfe.

s_in_k mit Sprecher : AuswahlabfrageMatrikel Name K-Nr. Klassenname Klassensprecher

1 Mayer 1 395SD6TI§1 Ja2 Müller 1 395SD6TI§1 ""7 Zuse 1 395SD6TI§1 ""

10 Berthold 1 395SD6TI§1 ""14 Fanke 1 395SD6TI§1 ""25 Eger 1 395SD6TI§1 ""

5 Adam 2 395SD6NT§1 ""12 Freitag 2 395SD6NT§1 ""16 Schulz 2 395SD6NT§1 ""17 Hofmann 2 395SD6NT§1 ""21 Dahley 2 395SD6NT§1 ""23 Ritter 2 395SD6NT§1 ""24 Kreft 2 395SD6NT§1 ""

4 Huber 3 395SD1NT§1 Ja11 Winkelmann 3 395SD1NT§1 ""22 Hemberger 3 395SD1NT§1 ""

9 Bisanz 4 395SD2NT§1 ""13 Keyl 4 395SD2NT§1 ""18 Binder 4 395SD2NT§1 ""15 Lorenz 5 395SD2TI§1 ""19 Mai 7 395SD2MSP1 ""20 Oschipowski 7 395SD2MSP1 ""

Page 414: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-18 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Wahrscheinlich haben Sie die Aufgabe k_ohne_s bisher nichtgelöst, da Ihnen die zugehörige Aggregatfunktion gefehlt hat.Um die Anzahl der Studenten in einer Klasse feststellen zukönnen, sollten wir uns nicht auf das Feld kanzahl verlassen,oder haben Sie dieses bisher bei Ihren Eingaben immer um 1pro Student erhöht?

Eigentlich müßten wir die Liste nach den Klassen sortieren unddie Anzahl der Einträge pro Klasse zählen. Diese Tätigkeit nen-nen wir Gruppieren. Das Zählen führt zu einem berechnetenFeld Anzahl, das wir auswerten können.

Wir starten eine neue Abfrage, die wir aber ohne den Assisten-ten realisieren wollen. Wir wählen die Tabellen klasse undstudent aus. Nun verknüpfen wir beide Tabellen über knrund sknr , wobei wir einen OUTER JOIN wählen, so daß alleKlasseneinträge erscheinen (Klicken Sie hierzu rechts auf die Verbindungslinie und wäh-len Sie Verknüpfungseige nschaften aus).

Die Felder wählen wir wie bei der Inkonsistenzsuche. Zusätzlich aktivieren wir aber überAnsicht| Funktionen die Anzeige der Funktionenzeile. Im Feld kname aktivieren wirden Eintrag Gruppierung, im Feld sknr die Aggregatfunktion Anzahl. Die SQL-Anweisung lautet nun

SELECT DISTINCTROW klasse.kname, Count(student.sknr ) AS [Anzahl von sknr]FROM klasse LEFT JOIN student ON klasse.knr = student.sknrGROUP BY klasse.kname;

mit dem nebenstehenden Ergebnis. Die Tabelle enthält die ak-tuellen Belegungszahlen der Klassen. Wir erkennen, daß dieFunktion Gruppierung zur Klausel GROUP BY führt. DieFunktion Anzahl erzeugt ein berechnetes Feld Count ().Die Klausel DISTINCTROW ist Gruppierung eigentlich überflüssigund kann entfallen.

Das Ergebnis ist zwar sehr interessant, entspricht aber nochnicht der gestellten Aufgabe. Auf dieses Ergebnis werden wir noch einmal in einem derfolgenden Kapitel zurückkommen.

Jetzt müssen wir nur noch die Auswahlanweisung Ist Null ergänzen. Die Anzeige derAnzahl können wir dann abschalten. Somit besitzt unsere endgültige Lösung folgendeSQL-Anweisung

SELECT klasse.knameFROM klasse LEFT JOIN student ON klasse.knr = student.sknrGROUP BY klasse.knameHAVING (((Count(student.sknr)) Is Null));

mit einer weiteren neuen Klausel HAVING. Bei dieser Gelegenheit merken wir uns, daßdie Aggregatfunktion nicht den Wert 0 sondern Null liefert, wenn kein Treffer vorhan-den ist.

Bild 3.2-2: Abfrage mitAggregatfunktion

Klassenname Anzahl vonsknr

395SD1NT§1 3395SD2MSP1 2395SD2NT§1 3395SD2TI§1 1395SD3NT§1395SD3NT§2395SD3TI§1395SD3TI§2395SD6NT§1 7395SD6TI§1 6

hier steht die An-zahl der Studenten

Page 415: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-19

Vergleichen wir nun diese SQL-Anweisung mit der Inkonsistenzprüfung des vorherigenKapitels

SELECT DISTINCTROW klasse.knameFROM klasse LEFT JOIN student ON klasse.knr = student.sknrWHERE ((student.sknr Is Null));

finden wir neben der unterschiedlichen Anzeige knr bzw. kname deutliche Abwei-chungen in der Verarbeitung der Zwischendatei des LEFT JOIN. Im ersten Fall zählenwir die Verweisschlüssel durch und überprüfen das Ergebnis. Im zweiten Fall prüfen wirdie Sätze selbst und eliminieren die Doppeleinträge über die Klausel DISTINCTROW.

3.2.7 Gruppierung

3.2.7.1 Grundlagen

Im zurückliegenden Kapitel haben wir bereits gesehen, daß die Datengruppierung dieAggregatfunktionen erst wirklich zur Geltung bringen. Es handelt sich bei einer Gruppie-rung um die Zusammenfassung aller Datensätze mit den gleichen Werten in jeweils einerGruppe. Ändert sich der Inhalt des Gruppierungsmerkmales, dann spricht man von einemGruppenwechsel.

Insbesondere bei Berichten möchten wir jede Gruppe mit einem besonderen Gruppen-kopf starten und in einem Gruppenfuß die Ergebnisse der Gruppe zusammenfassen.

Der Begriff der Gruppierung stammt schon aus den Urzeiten der Programmierung, dieweitgehend listenorientiert (heute würde man berichtsorientiert sagen) war. Es entstanddie sog. „Normierte Programmierung“, die Regeln für solche Gruppenwechsel aufstellte.

Unser sprechender Schlüssel kname ist ein typischerVertreter für die Anwendung der Gruppierung, genauersogar für den mehrstufigen Gruppenwechsel. Stellen wiruns hierzu die Klassennamen in einer Liste sortiert vor.

Da die Namen eindeutig sind, bilden sie bereits die un-terste Gruppe. Die 2. Ebene bilden die Studiengänge. Esfolgen das Studiensemester, der Zugtyp, das Jahresse-mester, das Jahr und der Fachbereich.

Durch das Anordnen der Daten bilden wir also dieGrundlage für Gruppierungen.

K-Nr. Klassenname Anzahl Sprecher22 195SD3AI 124 195SD3AI 223 195SD3AI 33 396SD1NT 1 22 47 396SD2MST14 396SD2NT 15 396SD2TI 16 396SD3NT 18 396SD3NT 29 396SD3TI 1

10 396SD3TI 22 396SD6NT 1 30 21 396SD6TI 1 25 1

Page 416: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-20 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Taucht das Gruppierungsmerkmal mehrfach auf, dannerkennen wir die Gruppenbildung noch deutlicher. Ty-pisch ist die Gruppierung der Studenten nach ihrer Klas-senzugehörigkeit.

Ändert sich der Wert in einem Feld (oder Teilfeld), dannliegt ein Gruppenwechsel vor. Dabei kann es verschie-dene Effekte geben. Typisch ist, daß jeder Gruppen-wechsel einer höheren Ebene auch Gruppenwechsel derniedrigeren Ebene nach sich zieht, auch wenn sich dortder Wert nicht ändert. So müßten wir in diesem Fall auchdie Summenzahlen (z. B. Anzahl der Studenten) aus-drucken. Danach kämen die Summenzahlen des Studi-enganges usw.

Durch die geeignete Festlegung des Gruppierungs-schlüssels können wir die Verarbeitung deutlich be-schleunigen, da eine Gruppierung immer eine Sortierungimpliziert.

3.2.7.2 Anwendung

fh10→ Um die Anwendung der Gruppierungen sowie der Aggregatfunktionen zu demonstrieren,legen wir eine Tabelle über die Noten der Klausuren unserer Studenten an. Hierbei gehenwir davon aus, daß pro Thema in einem Semester beliebig viele Klausuren (ggf. auchNachklausuren usw. geschrieben werden können. Bei einigen Studenten kommt es leidervor, daß sie ein Thema in einem weiteren Studiensemester wiederholen müssen.

Zur Lösung dieser Aufgabe legen wir natürlich eine neue Tabelle an. Für diese müssenwir aber einen geeigneten Primärschlüssel definieren. Sicher benötigen wir die Studen-tennummer snr . Dann müssen wir das Thema in Form des Attributes tnr abspei-chern. Wegen der Wiederholer müssen wir das Studiensemester bzw. die Klasse erfas-sen, in der der Student die Note geschrieben hat. Zu guter Letzt müssen wir noch dieKlausuren durchnumerieren.

Die Abschlußnote setzt sich als Durchschnitt aller Klausurnoten eines Studiensemesterszusammen. Die Endnote ist die beste aller dieser Endnoten, wobei dies normalerweisedie zeitlich letzte Note ist.

Da wir bisher außer acht gelassen haben, daß ein Student im Laufe seines Studiums ver-schiedenen Klassen angehören kann, wollen wir dabei bleiben, auch wenn dies schon zuSchulzeiten mehr als unrealistisch ist.. Somit entfällt in unserem Modell eine Wiederho-lung, es sei denn, wir überarbeiten unseren Entwurf gründlich und führen eine m:m Be-ziehung zwischen student und klasse ein.

Matrikel Name Klassenname22 Hemberger 396SD1NT 1

4 Huber 396SD1NT 111 Winkelmann 396SD1NT 119 Mai 396SD2MST120 Oschipowski 396SD2MST118 Binder 396SD2NT 1

9 Bisanz 396SD2NT 113 Keyl 396SD2NT 115 Lorenz 396SD2TI 140 Mayer 396SD2TI 241 Hammer 396SD2TI 2

5 Adam 396SD6NT 121 Dahley 396SD6NT 112 Freitag 396SD6NT 117 Hofmann 396SD6NT 124 Kreft 396SD6NT 123 Ritter 396SD6NT 116 Schulz 396SD6NT 110 Berthold 396SD6TI 125 Eger 396SD6TI 114 Fanke 396SD6TI 1

1 Mayer 396SD6TI 12 Müller 396SD6TI 17 Zuse 396SD6TI 1

Gruppenwechsel1. Stufe

Gruppenwechsel1. und 2. Stufe

Gruppenwechsel2. Stufe

Page 417: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-21

In diesem Fall genügt eine vereinfachte Notenta-belle (Bild 3.2-3). Bei ihr wurde auf den Verbin-dungsschlüssel zur Klasse verzichtete, da dieKlasse über die Studentennummer bestimmbarist.

Eine Kleinigkeit ist an diesem Tabellenentwurfnoch interessant. Da es wahrscheinlich nie mehrals 255 Noten pro Fach und Semester gibt, istdie laufende Nummer vom Typ Byte deklariertworden, was wieder etwas Platz sparen sollte.

Die Tabelle binden wir in unser UDM ein(Bild 3.2-4). Dieses Modell unterstütztleider nicht mehr die referentielle Integri-tät, wenn wir die Notentabelle temporär inder Anwendung selbst anlegen und nichtin der zentralen Datenbank fh10dat.

Zum Testen füllen wir die Tabelle mit fol-genden Werten:

noteMatrikel Thema Nr Note

1 1 1 231 1 2 331 3 1 471 3 2 302 4 1 572 4 2 472 4 3 172 5 1 23

Nun können wir daran gehen, Mittelwert, Minimum und Maximum zu bestimmen. Hierzubenutzen wir einzig die Notentabelle. Zuerst einmal gruppieren wir sie nach der Studen-tennummer und der Themennummer (das Studiensemester entfällt wie schon erwähnt).Weiterhin legen wir drei berechnete Felder für den Durchschnitt, das Minimum und dasMaximum an. Die SQL-Anweisung lautet schlicht

SELECT DISTINCTROW note.nsnr, note.ntnr, Avg([nnote]*0.1) AS [Note],Min([nnote]*0.1) AS Minimum, Max([nnote]*0.1) AS Maximum

FROM [note]GROUP BY note.nsnr, note.ntnr;

Schöner ist aber die graphische Darstellung (Bild 3.2-5).Diese liefert uns nach der entsprechenden Formatierungdas nebenstehende Ergebnis.

Bild 3.2-3: Entwurf der Tabelle noten

Bild 3.2-4: UDM mit Notentabelle

noten : AuswahlabfrageMatrikel Thema Note Minimum Maximum

1 1 2,8 2,3 3,31 3 3,9 3,0 4,72 4 4,0 1,7 5,72 5 2,3 2,3 2,3

Page 418: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-22 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Das Ergebnis dieserAbfrage noten kön-nen wir nun mit dengewünschten weiterenDaten ergänzen (Bild3.2-6) und erzeugendamit das angestrebteErgebnis.

3.2.7.3 Gruppierung nach Größe nklassen

Die dargestellte Technik setzt voraus, daß sich die Gruppierungsfelder in den Abfragenselbst ändern. Was ist aber, wenn wir andere Gruppen zusammenfassen wollen, die sichzwar in den Feldwerten unterscheiden, wobei sich die Feldwerte aber zu Größenklassenzusammengefaßt werden sollen. Hierbei kann es sich um Preisklassen, Mengenklassen,Umsatzklassen usw. handelt.

Bei der ersten Lösung benutzen wir die Funktion Bereich:

Bild 3.2-5: Beispiel einer Gruppierung

Bild 3.2-6: Ergänzungen der Gruppierungsabfrage

noten ergänzt : AuswahlabfrageName Klassenname Thema Name Note Minimum Maximum

Mayer 396SD2TI 1 Datenbanken Scheibl 2,8 2,3 3,3Mayer 396SD2TI 1 Rechnerarchitekturen Hilbig 3,9 3,0 4,7Müller 396SD6TI 1 Schaltungstechnik Scheibl 4,0 1,7 5,7Müller 396SD6TI 1 Software-Engineering Mayer 2,3 2,3 2,3

Gruppierungen Berechnungen

Page 419: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-23

Bereich Bereich(zahl; startwert; stoppwert; intervall)Partition Partition(zahl, startwert, stoppwert, intervall)

gibt eine Zeichenfolge aus, die anzeigt, an welcher Stelle eine Zahl innerhalb einer be-rechneten Folge von Bereichen auftritt. Sie ist besonders nützlich in Abfragen (Auswahl-bzw. Kreuztabellenabfragen).

Typische Anwendungen sind Abfragen, die zeigen,− wie viele Bestellungen in unterschiedlichen Bereichen vorliegen (z. B. Bestellungen in

Höhe von 1 bis 1.000, 1.001 bis 2.000 usw.) (Auswahlabfrage).− ob Bestellungen termingerecht bearbeitet werden. Eine Kreuztabellenabfrage kann

aufführen, wie viele Bestellungen rechtzeitig, mit 1-5 Tagen Verzögerung, mit 6-10 Ta-gen Verzögerung usw. bearbeitet werden konnten.

Argument Beschreibungzahl Zahl vom Datentyp Long, die wir für die einzelnen Bereiche auswerten

möchten (meist die Feldvariable).startwert Zahl vom Datentyp Long, die den Anfang des Gesamtbereichs der Zah-

len definiert. Dieser Wert darf nicht kleiner als 0 sein.stoppwert Zahl vom Datentyp Long, die das Ende des Gesamtbereichs der Zahlen

definiert. Dieser Wert muß größer als der startwert sein.intervall Zahl vom Datentyp Long, die das Intervall für jeden Bereich in der Folge

von startwert bis stoppwert angibt. Dieser Wert darf nicht kleinerals 1 sein.

�Beispiel:In einer Kundendatei ist es wünschenswert, die Kundenzahlen nach den Postleitzahlbe-reichen gruppiert zu kennen. Wir simulieren dies, indem wir den Professoren Postleitzah-len zuordnen, die wir dann automatisch in Klassen einteilen möchten

Wir legen eine neue Abfrage p_klassifizierung an, in die wir nur die Tabelleprofessor ein-binden. Die Para-meter belegen wirfolgendermaßenund erhalten dasErgebnis

Feld: Wertbereich: Bereich([pplz];10000;90000;1000) pplzTabelle: professor

Funktion: Gruppierung AnzahlSortierung:

Anzeigen:Kriterien:

Page 420: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.2 Einfache Auswahlabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-24 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

Die Funktion Bereich() legt Größenklassen mit festerSchrittweite an. Jeweils eine Klasse wird für alle Werte un-ter- und oberhalb vorgesehen, falls dies notwendig ist. An-sonsten werden nur die Klassen angezeigt, die belegt sind.

In die zweite Spalte geben wir das Klassifizierungsfeld mitder Funktion Anzahl ein. Dies ergibt im Ergebnis eineSpalte mit den Anzahlen der Werte in den einzelnen Grö-ßenklassen.

Interessant ist wie immer die SQL-Anweisung dazu

SELECT DISTINCTROW Partition([pplz],10000,90000,1000) AS Wertbereich,Count(professor.pplz) AS [Anzahl von pplz]

FROM professorGROUP BY Partition([pplz],10000,90000,1000);

Nun sind die Postleitzahlen ein typischer Anwendungsfall dafür, daß eine feste Einteilungeigentlich nicht sinnvoll ist. Vielmehr wäre die Anpassung an bestimmte Vertriebsgebieteusw. wünschenswert. Zu diesem Zweck benötigen wir eine benutzerdefinierte Funktion, indie wir unsere Wertebereiche eintragen.

�Wir legen einen neuen Modul an, in den wir folgenden Code eingeben

Option Compare Database 'Verwenden der Datenbank-Sortierreihenfolge beimVergleich von Zeichenfolgen.

Option Explicit

Function groessenklasse1 (ByVal wert As Variant) As String'liefert Klassenzuordnung Select Case wert Case Is < 10000: groessenklasse = " : 9999" Case 10000 To 10499: groessenklasse1 = "10000:10499" Case 10500 To 10999: groessenklasse1 = "10500:10999" Case 11000 To 13999: groessenklasse1 = "11000:13999" Case 14000 To 19999: groessenklasse1 = "14000:19999" Case 20000 To 59999: groessenklasse1 = "20000:59999" Case 60000 To 62999: groessenklasse1 = "60000:62999" Case 63000 To 64999: groessenklasse1 = "63000:64999" Case 65000 To 65999: groessenklasse1 = "65000:65999" Case 66000 To 69999: groessenklasse1 = "65000:65999" Case 70000 To 79999: groessenklasse1 = "70000:79999" Case 80000 To 82999: groessenklasse1 = "80000:82999" Case 83000 To 89999: groessenklasse1 = "83000:89999" Case Else: groessenklasse1 = "90001: " End Select

End Function 'groessenklasse1 �

Die Funktion liefert für einen beliebigen Wert die Klassenzu-ordnung als Text zurück. Die Abfrage legt dazu eine Liste an,in der sie einerseits die vorkommenden Klassen einträgt.Parallel dazu wird die Anzahl der entsprechenden Klassehochgezählt. Da die Abfrage nicht weiß, welche Klassen esgibt, muß dieses Verfahren angewandt werden. Eine beste-hende Klasse wird nicht neu eingetragen, sondern nur ge-zählt.

Wertbereich Anzahl von pplz : 9999 110000:10999 514000:14999 215000:15999 216000:16999 117000:17999 160000:60999 263000:63999 165000:65999 170000:70999 171000:71999 183000:83999 186000:86999 489000:89999 190001: 2

Wertebereich Anzahl von pnr : 9999 110000:10499 410500:10999 114000:19999 660000:62999 263000:64999 165000:65999 170000:79999 283000:89999 690001: 2

Page 421: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-25

Im wesentlichen müssen wir nur darauf achten, daß unsere Klasseneinteilung lückenlosist. Durch die Wahl des Typs Variant lassen sich beliebige Feldtypen klassifizieren.Wir sind also nicht auf numerische Werte beschränkt.

3.3 Kreuztabellenabfragen

3.3.1 Grundlagen

fh10→ Kreuztabellen sind verdichtete Abfragen, die einem Kalkulationsblatt entsprechen. Kalku-lationsprogramme arbeiten ebenfalls mit Tabellen. Im Gegensatz zur Datenbanktabelleenthält aber jede Zelle unterschiedliche Informationen. So weit geht die Kreuztabellenicht. Sie enthält in den Zeilen keine Datensätze wie die Datenbanktabelle sondern ein-heitliche Themen, die durch einen Zeilennamen festgelegt sind.

Die Spaltenüberschriften sind nicht statisch, wie es die die Attributbezeichner einer Ta-belle sind. Vielmehr werden sie erst aus den Daten bestimmt.

Zur Demonstration stellen wir uns die Aufgabe, die Belegung der Themen durch die Klas-sen zu bestimmen. In den Kreuzungspunkten (den Zellen) soll die Anzahl der Studentenstehen, die das Thema hören (s_hoert_t Kreuztabelle 1).

3.3.2 Entwurf einer Kreuztabelle mit dem Abfrageassistenten

Wir können zur Erstellung einer Kreuztabelle den Ab-frageassistenten bemühen. Aber auch eine eigene De-finition per Hand eingeben.

s_hoert_t Kreuztabelle 1 : KreuztabellenabfrageKlassenname Summe Analoge

lektronDatenbanken

Digitalelektro

Mikrowellentec

Rechnerarchite

Rechnungswesen

Schaltungstech

Sensoren

Software-

Übertragungste396SD2MST1 6 2 2 2

396SD2NT 1 6 2 2 2396SD2TI 1 6 3 3396SD3NT 1 9 3 3 3396SD3NT 2 6 2 2 2396SD3TI 1 6 2 2 2396SD3TI 2 3 3396SD3TI 9 1 1396SD6NT 1 24 4 4 4 4 4 4396SD6TI 1 18 2 2 2 2 2 2 2 2 2

Bild 3.3-1: Abfragetyp wählen

Page 422: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.3 Kreuztabellenabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-26 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

�Der Abfrageassistent fragt zuerst einmalden Typ der Abfrage ab. Wir wählen denKreuztabellenabfrage-Assistenten (Bild3.3-1).

Bei der nächsten Abfrage (Bild 3.3-2)stehen wir dumm da, da die Kreuzta-

belle weder aus einer einzelnen Tabellenoch aus einer bereits vorhandenenAbfrage abgeleitet werden kann.

Diese Abfrage s_hoert_t entwerfenwir schnell wie in Bild 3.3-3 und startenden Assistenten noch einmal, um dieseAbfrage auszuwählen. In der nächstenAbfrage werden die Zeilen (Überschriften) festgelegt (Bild 3.3-4).

Hierbei ist es ganz hilfreich, daß uns derAssistent die späteren Ergebnisse durchVeränderung der Zeilenüberschriftenandeutet. Wir sehen, daß in den Zeilenmehrere Felder auswählen werden kön-nen, die zu Gruppen sortiert werden.Analog gehen wir nun im nächstenSchritt bei der Auswahl der Spalten-überschriften vor. Hier können wir abernur eines der verbleibenden Felderwählen.

Zuletzt kommt der Inhalt der Zellen andie Reihe (Bild 3.3-5).

Bild 3.3-2: Datentabelle festlegen

Bild 3.3-3: Auswahlabfrage s_hoert_t

Bild 3.3-4: Auswahl der Zeilenüberschriften

Page 423: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-27

Nach der Festlegung des Namens kön-nen wir die Abfrage gleich starten. Dadie Breite des Fensters nicht ausreicht,müssen wir die Anzeige rollen. Dabeiverschwinden aber die beiden erstenSpalten. Diese können wir mit For-mat/Spalten fixieren festhalten.

Natürlich interessiert uns jetzt, was derAssistent programmiert hat. Zu diesemZweck wechseln wir in den Entwurfsmo-dus(Bild 3.3-6).

Wir sehen die Gruppierungen der Zei-len- und Spaltenüberschriften, die Bil-dung der Zelleninhalte sowie die Er-gänzung der Zeilensumme. Insgesamthandelt es sich um eine andere Dar-stellung, da eine Eigenschaft Kreuz-tabelle erschienen ist.

Die eigentliche Auswertung erfolgt inSQL

TRANSFORM Count(s_hoert_t.sname) AS [Der Wert]SELECT s_hoert_t.kname, Count(s_hoert_t.sname) AS ZeilensummeFROM s_hoert_tGROUP BY s_hoert_t.knamePIVOT s_hoert_t.tname;

Die zentrale Anweisung ist

TRANSFORM TRANSFORM aggfunktionauswahlanweisungPIVOT pivotfeld [IN (wert1[, wert2[, ...]])]

die eine Kreuztabellenabfrage erstellt.

Argument Beschreibungaggfunktion Eine SQL-Aggregatfunktion, die Operationen an den ausgewählten

Daten ausführt.auswahlanweisung Eine SELECT Anweisung.pivotfeld Das Feld oder der Ausdruck, für den wir eine Achsendrehung durch-

führen möchten, um Spaltenüberschriften im Datenblatt der Abfragezu erstellen.

Bild 3.3-5: Festlegung des Zelleninhaltes

Bild 3.3-6: Kreuztabelle Entwurfsansicht

Page 424: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.3 Kreuztabellenabfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-28 D:\Eigene\Doku\DB\DBAcc03.doc – 9769

wert1, wert2 Fixierte Werte, die zum Erstellen der Spaltenüberschriften verwendetwerden.

TRANSFORM ist optional, ist jedoch normalerweise die erste Anweisung in einer SQL-Zeichenfolge, wenn sie angegeben wird. TRANSFORM geht einer SELECT Anweisungvoraus, die die als Zeilenüberschriften verwendeten Felder angibt, und einer GROUP BYKlausel, die die Gruppierung der Zeilen angibt. Optional können wir andere Klauseln(z. B. eine WHERE Klausel) für weitere Auswahl- oder Sortierkriterien angeben.

Die in pivotfeld zurückgegebenen Werte werden als Spaltenüberschriften im Daten-blatt der Abfrage verwendet. Im Beispiel erzeugen die gefundenen Themen bei derAchsdrehung die Spalten (pivot = Flügelmann), während die Klassen über die SELECTKlausel die Zeilen erzeugen.

Wir können die von Pivotfeld erstellten Überschriften auf fixierte Werte wert1, wert2beschränken, die in der optionalen IN Klausel aufgeführt sind. Wir können auch fixierteWerte angeben, für die keine Daten vorhanden sind, um zusätzliche Spalten zu erstellen.

Die Verwendung einer PIVOT Klausel ist äquivalent zur Einstellung der EigenschaftFixierteSpaltenüberschriften (ColumnHeadings ) im Eigenschaftsfenster derAbfrage in der Entwurfsansicht.

3.3.3 Manueller Entwurf einer Kreuztabellenabfrage

Der manuelle Entwurf ist in diesem Fall fastschneller als der automatische. Wir können näm-lich die Beziehungen auch direkt in der Kreuzta-bellenabfrage festlegen und müssen nicht überden Umweg über eine zusätzliche Abfrage ge-hen.

Zur Unterscheidung zum vorhergehenden Bei-spiel klappen wir die Tabelle um (Bild 3.3-7), d. h.transponieren die Matrix.

Im Ergebnis sehen wir, daß nur die Themen undKlassen aufgezählt werden, die etwas miteinan-der zu tun haben. Dies ist wiederum die Folge derINNER JOINs . Ggf. müssen wir diese ändern.

Bild 3.3-7: Definition einer Kreuzta-bellenabfrage

s_hoert_t Kreuztabelle Anzahl : KreuztabellenabfrageThema 395SD2MSP

1395SD2NT

1395SD2TI

1395SD3NT

1395SD3TI

1395SD3TI

2395SD3TI

9395SD6NT

1395SD6TI

1Analogelektronik 2Datenbanken 2 4 2 3 2 4 4 2Digitalelektronik 1Mikrowellentechnik 2 4 2 4 2Rechnerarchitektur 2 3 2 4Rechnungswesen 4 4 2Sensoren 4 2Software-Engineering

3 4 2

Übertragungstechnik

2

Page 425: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-29

Auch hier schauen wir uns wieder die SQL Anweisung an

TRANSFORM Count(student.sname) AS [Anzahl von sname]SELECT thema.tnameFROM thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)

INNER JOIN hoert ON klasse.knr = hoert.hknr) ON thema.tnr = hoert.htnrGROUP BY thema.tnamePIVOT klasse.kname;

die natürlich etwas komplizierter aussieht. Wir dürfen aber nicht vergessen, daß hier nurauf die Basistabellen zugegriffen wird, während im ersten Beispiel die Abfrages_hoert_t eingesetzt wird, das seinerseits mit

SELECT DISTINCTROW student.sname, klasse.kname, thema.tnameFROM thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)

INNER JOIN hoert ON klasse.knr = hoert.hknr) ON thema.tnr = hoert.htnrORDER BY student.sname;

die Joins durchführt.

3.4 Aktionsabfragen

Aktionsabfragen sind Abfragen, die eine weitere Aktion für die ausgewählten Datensätzenach sich ziehen. Typisch sind solche Abfragen, die systematisch Datensatzfelder verän-dern, Datensätze löschen usw. Insgesamt gibt es vier Aktionsabfragen:

Typ WirkungTabellenerstellungsabfrage erstellt aus dem Abfrageergebnis eine neue Tabelle und

keinen DynasetLöschabfrage löscht die ausgewählten DatensätzeAnfügeabfrage fügt eine bestimmte Menge von Datensätzen anAktualisierungsabfrage ändert eine ausgewählte Menge von Datensätzen nach

vorgegebenen Kriterien

Wir werden Aktionsabfragen normalerweise als Auswahlabfragen konstruieren, um dieWirksamkeit der Auswahl zu überprüfen. Anschließend wandeln wir sie in eine Aktions-abfrage um. Damit wir dann erkennen, daß eine solche Abfrage Daten verändert, findenwir ein Ausrufezeichen am Abfragesymbol.

Stellen wir uns also vor, daß wir sämtliche Stu-denten zweimal im Jahr löschen wollen, wenn siesich zwar eingeschrieben haben, aber noch kei-ne Klasse aufgesucht haben. Hierzu kopieren wireinfach unsere Abfrage s_ohne_k in eine Akti-onsabfrage s_ohne_k löschen um. Dannwechseln wir in die Entwurfsansicht und klickendie Ikone Löschabfrage an. Sofort ändertsich das Symbol in das Löschsymbol mit nachge-schaltetem Ausrufezeichen (Bild 3.4-1).

Öffnen wir nun diese Abfrage, dann werden wirBild 3.4-1: Löschabfrage

Page 426: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.4 Aktionsabfragen © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 3-30 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

zweimal auf unser Tun hingewiesen. Zuerst eine allgemeine Sicherheitsabfrage für dieAktionsabfrage. Nach der Auswahl der Sätze eine erneute Sicherheitsabfrage mit demHinweis, wie viele Datensätze gelöscht werden.

Wenn wir unsere Tabellen nun kritisch anschauen, dann entdecken wir das Feldkanzahl, das entweder ständig falsch ist oder mit Mühe aktualisiert werden muß. Ei-gentlich ist es überflüssig, da wir die Belegzahlen, wie in der Kreuztabellenabfrage bewie-sen, immer neu berechnen können. Aus Zeitgründen könnten wir aber diesen doch rechtgroßen Aufwand durch das zusätzliche Feld reduzieren wollen. Um nun die Belegzahlenzu aktualisieren, sollten wir aus unserer Auswahlabfrage k_ohne_s, die bekanntlich dieBelegzahlen berechnet, so abwandeln, daß das Feld kanzahl stimmt. Hierzu entwerfenwir eine Änderungsabfrage kanzahl_aktualisieren.

In der ersten Stufe wollen wir die gespeicherte und die gezählte Anzahl miteinander ver-gleichen. Dies ist recht einfach über

SELECT DISTINCTROW student.sknr, Count(student.sknr) AS [Anzahl von sknr]FROM studentGROUP BY student.sknr;

zu realisieren. Diese Abfrage speichern wir unter kzaehlen ab.

Nun erstellen wir eine Aktualisierungsabfrage neu, in-dem wir nur die Werteübergabe realisieren (Bild 3.4-2).Wichtig ist auch die Beziehung, da sie die Zählung derrichtigen Gruppen steuert.

Die Abfrage meldet sich mit den neuen Werten undträgt diese in die Tabelle klasse ein.

3.5 Parameterabfragen

Wenn die Zeit ins Land geht, dann verändern sich na-türlich die Inhalte der Dateien. So wollen wir oft bei denAbfragen von außen steuern, welche Datensätze aus-gewählt werden sollen. So möchten wir z. B. einmal dieStudenten nach ihrem Alter auswählen. Ein anderesMal interessieren uns die Studenten mit bestandenem oder nicht bestandenem Vordi-plom.

Für solche Abfragen sollte ein Pa-rameter vom Anwender abgefragtwerden. Zur Vorbereitung legenwir ein Formular mit zwei unge-bundenen Eingabefeldern an (Bild3.5-1). Die Felder erhalten dieBezeichner datumvon unddatumbis.

Wir öffnen das Formular und ge-ben den gewünschten Zeitbereich

Bild 3.4-2: Aktualisierung mitkanzahl_aktualisieren

Bild 3.5-1: Definition von Eingabeparametern

Page 427: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-31

an, z. B. 01.01.65 bis 31.12.65.

Bei geöffnetem Formular definieren wir nun eine Abfrage,in der wir das Kriterium von diesen Eingabeparameternabhängig machen wollen (Bild 3.5-2). Benutzen wir dabeiim Kriterium die Feldnamen aus dem Formular:

Zwischen [datumvon] Und [datumbis]

dann erhalten wir immer eine Parameterabfrage (Bild 3.5-3), die uns nach Eingabe von Werten die gewünschtenStudenten liefert.

Nun definieren wir eineAbfrage, in der wir Bezugauf dieses Formularnehmen (Bild 3.5-2). Be-nutzen wir dabei einfacheVariablennamen, dannerhalten wir immer eineParameterabfrage (Bild3.5-3).

Korrigieren wir dagegen die Auswahlabfrage auf die Fel-der unseres Formulars, indem wir folgende Referenz ein-geben

Zwischen DateValue([Formulare]![s ab einemGeburtsdatum Parameter]![datumab]) UndDateValue([Formulare]![s ab einem GeburtsdatumParameter]![datumbis])

dann werden die Daten aus dem Formular übernommen.

Das Ergebnis zeigt, daß unsere Abfrage sozusagen einen Rundruf startet, ob bestimmteDaten unter Windows bereitstehen. Wird dieser Rundruf beantwortet, so werden die Da-ten übernommen. Ansonsten erfolgt eine standardisierte Parameterabfrage.

Es handelt sich sicher in dieser Form nicht um eine besonders elegante Methode, Para-meter einzulesen. Sie hat erhebliche Nachteile. Ist nämlich das Formular nicht geöffnet,dann fordert unsere Abfrage die Daten wie üblich einzeln an. Die Abfrage denkt gar nichtdaran, das Formular von allein zu öffnen. Auch wenn das Formular existiert, treten nochProbleme auf. So müssen wir im Gegensatz zur erzwungenen Parametereingabe dieDaten mit DateValue noch ins amerikanische Format umwandeln.

Dieses Beispiel soll uns hauptsächlich zum ersten Mal die Technik der Referenz zeigenzwischen den Feldern unterschiedlicher Objekte. Es handelt sich um einen DynamischenDatenaustausch (DDE dynamic data exchange). Diesen müssen wir uns folgendermaßenvorstellen. Ein Kunde (Client) Auswahlabfrage stellt eine Nachricht an einen Diener(Server) Formular: s ab einem Geburtsdatum Parameter in die WindowsNachrichtenschlange. Wird der Server gefunden, dann stellt dieser seine Daten zur Ver-fügung. Wird er nicht gefunden, dann wird eine Ausnahmebehandlung

Bild 3.5-2: Definition der Ab-frage

Bild 3.5-3: Parameterabfrage

Page 428: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.4 Aktionsabfragen © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 3-32 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

(Fehlerbehandlung) durchgeführt, die ein Einlesefenster öffnet und den Parameter „zuFuß“ einliest.

Die DDE unter Windows läuft immer nach dem gleichen Schema ab. Die Adresse einerDDE Nachricht besteht aus

Anwendung!Thema!Element

wobei die Trennzeichen von Anwendung zu Anwendung etwas unterschiedlich sind. BeiAccess sind es grundsätzlich Ausrufezeichen. Die Anwendung ist in unserem Fall derFenstertyp [Formulare]. Das Thema ist der Formularname, so wie er in der Titellei-ste des Formulars auftritt. Das Element ist schließlich der Feldname.

Die Verbindung ist übrigens passiv, d. h. eine Änderung des Datums führt nicht automa-tisch zu einem Neuaufbau der parallelen Abfrage. Erst wenn wir diese neu starten, wer-den die neuen Werte wieder abgefragt.

Über die Verwendung der Operatoren ! und . zur Qualifizierung von Elementen inAusdrücken finden wir in der Hilfe folgende Aussagen:

Sie können die Operatoren ! und . in einem Bezeichner verwenden, um den Elementtyp, derunmittelbar folgt, zu kennzeichnen.

Der Operator ! zeigt an, daß das folgende Element ein benutzerdefiniertes Element ist (ein Ele-ment einer Auflistung). Verwenden Sie z. B. den Operator !, um auf ein geöffnetes Formular,einen geöffneten Bericht oder auf ein Steuerelement in einem geöffneten Formular oder Bericht zuverweisen.

Bezeichner Verweist aufFormulare![bestellungen] das geöffnete Formular bestellungenBerichte![rechnung] den geöffneten Bericht rechnungFormulare![bestellungen]![bestell-nr] das Steuerelement bestell-nr im geöffneten

Formular Bestellungen

Der Operator . zeigt normalerweise an, daß das folgende Element ein von Microsoft Access de-finiertes Element ist. Verwenden Sie den Operator . zum Beispiel, um auf eine Eigenschaft einesFormulars, Berichts oder Steuerelements zu verweisen.

Solange eine Referenz falsch geschrieben ist und solange das Parameterfenster nichtgeöffnet ist, erhalten Sie eine Parameterabfrage mit ihrer fehlerhaften Referenz. Ver-zweifeln Sie nicht, irgendwann klappt es schon.

3.6 SQL-Abfragen

3.6.1 UNION Abfrage

Mit der UNION Abfrage kombinieren wir Daten zwei oder mehr Tabellen bzw. Abfragen.Die Abfrage orientiert sich dabei an einander entsprechende Felder mehrerer Tabellenoder Abfragen. Die Inhalte dieser Felder werden dann in derselben Spalte ausgegeben.

Page 429: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-33

Dies entspricht der Vereinigungsmenge beider Tabellen, wobei doppelte Einträge elimi-niert werden.

Zur Erstellung einer UNION Abfrage gehen wir in folgenden Schritten vor:

1. Wir klicken im Datenbankfenster auf die Registerkarte Abfragen und dann auf Neu.2. Wir klicken im Dialogfeld Neue Abfrage auf Neue Abfrage und dann auf OK.3. Wir klicken im Dialogfeld Tabelle anzeigen auf Schließen, ohne Tabellen oder

Abfragen hinzuzufügen.4. Dann lösen wir Abfrage | SQL-spezifisch|Un i on aus.5. Wir geben die beiden SELECT- Anweisungen an, die wir verknüpfen wollen. Dazu

wählen wir UNION, um keine doppelten Datensätze zu erhalten, oder UNION ALL,um doppelte Datensätze zuzulassen.

) Tip: Am besten bereiten wir die SELECT- Anweisungen in zwei Auswahlabfragenvor und kopieren sie dann in die neue UNION Abfrage.

) Anmerkung: Jede SELECT- Anweisung muß die gleiche Anzahl Felder zurückgeben, undzwar in identischer Reihenfolge. Die Datentypen der zusammengehörendenFelder müssen kompatibel sein, mit einer Ausnahme: Wir können ein Zah-len- und ein Textfeld als einander entsprechende Felder verwenden.

6. Wenn wir in einer UNION Abfrage sortieren möchten, so geben wir hinter der letztenSELECT-Anweisung eine ORDER BY Klausel an. Die Feldnamen müssen bei dieserKlausel aus der ersten SELECT- Anweisung stammen.

) Vorsicht: Wandeln Sie eine Union-Abfrage nicht in einen anderen Abfragetyp, wiez. B. eine Auswahlabfrage, um, da Sie dann die gerade eingegebene SQL-Anweisung verlieren.

3.6.2 SQL Pass-Through-Abfrage

Dieser Abfragetyp sendet Befehle direkt an ODBC-Datenbanken, wie z. B. Microsoft SQLServer. Dabei werden Befehle verwendet, die der Server unterstützt. Mit einer SQL Pass-Through-Abfrage können wir z. B. Datensätze abrufen oder Daten ändern.

1. Wir erstellen nach dem Anlegen einer SQL Pass-Through-Abfrage eine Tabellener-stellungsabfrage, die auf der SQL Pass-Through-Abfrage basiert.

2. Wir fügen der Tabellenerstellungsabfrage alle Felder der SQL Pass-Through-Abfragehinzu, indem Sie das Sternchen * in den Entwurfsbereich ziehen.

3.6.3 SQL-Datendefinitionsabfrage

Wir verwenden SQL-Datendefinitionsabfragen, um in der aktuellen Datenbank Tabellenzu erstellen, zu löschen oder zu ändern, oder um Indizes zu erstellen.

1. Wir klicken im Datenbankfenster auf die Registerkarte Abfragen und dann auf Neu.

Page 430: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.6 SQL-Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-34 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

2. Wir klicken im Dialogfeld Neue Abfrage auf Neue Abfrage und dann auf OK.3. Wir klicken im Dialogfeld Tabelle anzeigen auf Schließen, ohne Tabellen oder

Abfragen hinzuzufügen.4. Dann lösen wir Abfrage | SQL-spezifisch|Datendefinition aus.5. Wir geben die SQL-Anweisung für Ihre Datendefinitionsabfrage ein. Eine Datendefiniti-

onsabfrage besteht immer nur aus einer einzigen Datendefinitionsanweisung. MicrosoftAccess unterstützt die folgenden Datendefinitionsanweisungen:

− CREATE TABLE erstellt eine Tabelle.− ALTER TABLE fügt einer bestehenden Tabelle ein neues Feld oder

CONSTRAINT hinzu.− DROP löscht eine Tabelle aus einer Datenbank oder entfernt einen Index aus

einem Feld bzw. einer Gruppe von Feldern.− CREATE INDEX erstellt einen Index für ein Feld oder eine Gruppe von Feldern.

) Vorsicht: Wandeln Sie eine Datendefinitionsabfrage nicht in einen anderen Abfrage-typ, wie z. B. eine Auswahlabfrage, um, da Sie dann die gerade eingegebe-ne SQL-Anweisung verlieren.

Beispiele:

Die folgende Datendefinitionsanweisung erstellt eine Tabelle mit dem Namen student .Die Anweisung schließt die Namen und Datentypen aller Felder der Tabelle ein und weistdem Feld snr einen Index zu, der es als Primärschlüssel kennzeichnet:

CREATE TABLE Freunde([snr] LONG,

[sname] TEXT,[sgeschl] TEXT,[sgeb] DATE,[svord] BOOLEAN[sknr] LONG,[sseit] DATECONSTRAINT [index1] PRIMARY KEY ([snr]));

Die folgende Datendefinitionsabfrage erstellt einen Mehr-Felder-Index auf der Basiszweier Felder:

CREATE INDEX neuerindexON student ([sname] ASC, [sgeb] DESC);

3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen)

In diesem Kapitel wollen wir noch einmal auf die Reflexivverknüpfungen eingehen, die jaerst durch geeignete Abfragen zum Leben erweckt werden.

Page 431: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-35

3.7.1 Abfragen bei m:m Reflexivbeziehungen

3.7.1.1 Vorbereitung

fh09→m:m Reflexivbeziehungen werden durch eine zusätzliche Datei realisiert, die den Primär-schlüssel der Tabelle zweimal enthält. Dies wurde am Beispiel der Tabelle klasse imKapitel „Beziehungen“ erklärt.

Die benutzten Testdaten werden im Kapitel 3.7.1.4 beschrieben.

In einer ersten Übung wollen wir die Oberklassen mit ihren Unterklassen zusammenstel-len. Hierzu entwerfen wir die Abfrage k_in_k (Bild 3.7-1).

Sie liefert uns als Ergebnis eine Liste aller Oberklassen:

Hierbei fällt aber schon auf, daß die Ab-frage keine Unterscheidung zwischen Basisklassen (mit eingeschriebenen Studenten)und bereits zusammengesetzten Klassen (ohne direkt eingeschriebene Studenten)macht.

Diese Abfrage können wir nun leicht umweitere Hierarchieebenen erweitern (Bild3.7-2), indem wir die Rekursionstabelleist_teil_von mehrfach einbinden.

Interessant wird aber das Ergebnis, wennwir die Studenten in unsere Abfragen hin-zunehmen.

Bild 3.7-1: Auswahlabfrage:k_in_k

k_in_k : AuswahlabfrageKlassen-Nr. Klassenname Klassen-Nr. Klassenname

6 396SD3NT 1 17 396SD3NT 98 396SD3NT 2 17 396SD3NT 99 396SD3TI 1 18 396SD3TI 9

10 396SD3TI 2 18 396SD3TI 917 396SD3NT 9 19 396SD3F3 918 396SD3TI 9 19 396SD3F3 91 396SD6TI 1 20 396SD6F3 92 396SD6NT 1 20 396SD6F3 9

19 396SD3F3 9 21 396SD6F3 823 396SD6F3 6 21 396SD6F3 81 396SD6TI 1 22 396SD6F3 7

10 396SD3TI 2 22 396SD6F3 718 396SD3TI 9 23 396SD6F3 620 396SD6F3 9 23 396SD6F3 622 396SD6F3 7 23 396SD6F3 6

Bild 3.7-2: Zusätzliche Hierarchieebene

Page 432: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-36 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

3.7.1.2 Das Problem

Fügen wir die neue Beziehungsstrukturz. B. in unsere Abfrage s_hoert_psortiert nach s,k,t ein (Bild 3.7-3), dann erzeugen wir gähnende Leere!Es wird kein Zusammenhang zwischenden Studenten und den Professorenmehr gefunden. Irgendwie versteht Ac-cess nicht, daß es sich bei der neuenTabelle um eine „Kann“-Beziehung han-delt. Eine Klasse hat ganz normaleThemen, sie kann aber auch für einigeThemen mit anderen Klassen zusam-mengefaßt werden, wobei dies mehrfachgeschehen kann. Mit anderen Wortenwollen wir die Ergebnismenge ohne dieRekursion mit der Ergebnismenge mitder Rekursion vereinigen. Bisher habenwir aber fast ausschließlich den Durchschnitt von Mengen gebildet.

Sehen wir uns dazu die SQL Anweisungen an. Zuerst ohne die Rekursion: s_hoert_p sor-tiert nach s,k,t

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM (professor INNER JOIN liest ON professor.pnr = liest.lpnr) INNER JOIN

(thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)INNER JOIN hoert ON klasse.knr = hoert.hknr) ON thema.tnr = hoert.htnr) ON(liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)

ORDER BY student.sname, klasse.kname, thema.tname;

Vielleicht sieht die Abfrage bei Ihnen auch so aus: s_hoert_p sortiert nach s,k,t Alternative

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM professor INNER JOIN ((klasse INNER JOIN student ON klasse.knr =

student.sknr) INNER JOIN (liest INNER JOIN (thema INNER JOIN hoert ONthema.tnr = hoert.htnr) ON (liest.lpnr = hoert.hpnr) AND (liest.ltnr =hoert.htnr)) ON klasse.knr = hoert.hknr) ON professor.pnr = liest.lpnr

ORDER BY student.sname, klasse.kname, thema.tname;

Wir stellen fest, daß die SQL-Anweisung für ein gegebenen Problem (gleiches Ergebnis)nicht eindeutig ist. Je nach der Reihenfolge, in der wir die Tabellen einfügen und ver-knüpfen ergeben sich andere Anweisungen. Beide Anweisungen führen aber zum glei-chen Resultat. Der Frage, ob die eine oder die andere Form Vorteile hat, wollen wir nochetwas zurückstellen.

Statt dessen bauen wir die Rekursion ein: s_hoert_p sortiert nach s,k,t mit Rekursion

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM ((professor INNER JOIN liest ON professor.pnr = liest.lpnr) INNER JOIN

(thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)INNER JOIN hoert ON klasse.knr = hoert.hknr) ON thema.tnr = hoert.htnr) ON(liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)) INNER JOINist_teil_von ON (klasse.knr = ist_teil_von.ikknr) AND (klasse.knr =ist_teil_von.iknr)

ORDER BY student.sname, klasse.kname;

Bild 3.7-3: Rekursion in einer bestehenden Ab-frage

Page 433: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-37

oder auch als Alternative: s_hoert_p sortiert nach s,k,t mit Rekursion Alternative

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM professor INNER JOIN (((klasse INNER JOIN student ON klasse.knr =

student.sknr) INNER JOIN ist_teil_von ON (klasse.knr = ist_teil_von.ikknr)AND (klasse.knr = ist_teil_von.iknr)) INNER JOIN (liest INNER JOIN (themaINNER JOIN hoert ON thema.tnr = hoert.htnr) ON (liest.lpnr = hoert.hpnr) AND(liest.ltnr = hoert.htnr)) ON klasse.knr = hoert.hknr) ON professor.pnr =liest.lpnr

ORDER BY student.sname, klasse.kname;

In beiden Fällen liefert die Abfrage kein Ergebnis!

Alles klar? Nein? Ich verstehe es ehrlich gesagt auch nicht. Eine Zeichnung sagt be-kanntlich mehr als tausend Wörter. Lassen Sie es uns einfach einmal aufzeichnen.

Wir beginnen mit der Anweisung ohne die Rekursion. Zur Vereinfachung sind in der fol-genden Anweisung die Klammern herausgehoben:

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM (professor INNER JOIN liest ON professor.pnr = liest.lpnr) INNER JOIN

(thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)INNER JOIN hoert ON klasse.knr = hoert.hknr) ON thema.tnr = hoert.htnr) ON(liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)

ORDER BY student.sname, klasse.kname, thema.tname;

Es gibt geschachtelte Joins und solche, die gleichrangig miteinander verknüpft werden.Die Zusammenstellung der Daten zeichnen wir nun stufenweise auf. Hierbei entstehenZwischentabellen.

Die leeren Kästchensind die sog. Dynasets,die als temporäre Ta-bellen angelegt wer-den. Mit ihnen könnenwir wie mit echten Ta-bellen arbeiten. JedeTabelle erscheint alsbeschriftetes Kästchen,jeder Klammeraus-druck als leeres Käst-chen. Wir sehen, wieschrittweise die Ergeb-nistabelle aufgebautwird (Bild 3.7-4). Wirstellen fest, daß auf

der untersten Hierarchiestufe eine Zwischentabelle angelegt wird, die die Zuordnung vonStudenten und Klassen über die Gleichheit von knr=sknr enthält. Dieser Zwischenta-belle wird über hoert die Themennummer angefügt, um dann mit thema die Bezeich-nung des Themas zu ergänzen. Parallel dazu werden die von den Professoren gelesenenThemen zusammengestellt und mit der Zwischentabelle abgestimmt. Daraus ergibt sichschließlich die Ergebnisliste.

professor liest

pnr=lpnr

thema

lpnr=hpnrltnr=htnr

tnr=htnr

hoert

studentklasse

knr=hknr

knr=sknr

Bild 3.7-4: Auflösung der SQL-Anweisung s_hoert_p sor-tiert nach s,k,t

Page 434: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-38 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Sehen wir uns nun an, was die Rekursion daraus macht (Bild 3.7-5).

Es ist leicht einzuse-hen, daß die zusätzli-che Bedingung bereitsverlangt, daß beideAttributwerte inist_teil_von gleichsein müssen, umüberhaupt eine Anzei-ge zu erzeugen. Wirkönnen diese Be-hauptung leicht nach-prüfen, indem wir in dieTabelle einfach dieKombination 1,1eintragen. Schon er-scheinen die Studen-ten der 1. Klasse.

Richtig wäre aber eine bedingungslose Vereinigung des bisherigen Ergebnisses mit de-nen der Teilklasse (Bild 3.7-6).

3.7.1.3 Vereinigungsmenge Union

Der bisherige Weg der Abfrage ist also nicht zielführend. Wir müssen die Vereinigung inirgend einer Weise realisieren. Dies wird aber nicht mehr von der Access Oberfläche un-terstützt. Hier finden wir keine Möglichkeit eine Vereinigung zu modellieren.

professor liest

pnr=lpnr

thema

lpnr=hpnrltnr=htnr

tnr=htnr

hoert

studentklasse

knr=hknr

knr=sknr

ist_teil_vonknr=ikknrknr=iknr

Bild 3.7-5: SQL-Anweisung mit Rekursion

professor liest

pnr=lpnr

lpnr=hpnrltnr=htnr

thema

tnr=htnr

hoert

studentklasse

knr=hknr

knr=sknr

thema

tnr=htnr

studentist_teil_von

iknr=hknr

ikknr=sknr

hoert

UNION

Bild 3.7-6: UNION Anweisung

Page 435: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-39

Zur Übung und auch zur Kontrolle legen wiruns zuerst einmal den rechten Teilbaum zu-recht. Dabei bemerken wir, daß wir die Klas-se auf jeden Fall über die 1:1 Beziehungikknr <-> knr mit einbeziehen müssen, umvon ihr den Klassennamen zu übernehmen.

Diese Technik ist immer hilfreich, um über-haupt die SQL-Anweisung fehlerfrei zu ent-wickeln.

Das Beziehungsdiagramm ist schnell ge-zeichnet (Bild 3.7-7).

Die zugehörige SQL-Anweisung lautet

SELECT DISTINCTROW student.sname,klasse.kname, thema.tname,professor.pname

FROM ((ist_teil_von INNER JOIN studentON ist_teil_von.ikknr = student.sknr) INNER JOIN ((professor INNER JOIN liestON professor.pnr = liest.lpnr) INNER JOIN (thema INNER JOIN hoert ONthema.tnr = hoert.htnr) ON (liest.ltnr = hoert.htnr) AND (liest.lpnr =hoert.hpnr)) ON ist_teil_von.iknr = hoert.hknr) INNER JOIN klasse ONist_teil_von.ikknr = klasse.knr

ORDER BY klasse.kname, student.sname;

oder:

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM professor INNER JOIN (klasse INNER JOIN (liest INNER JOIN (thema INNER

JOIN ((ist_teil_von INNER JOIN student ON ist_teil_von.ikknr = student.sknr)INNER JOIN hoert ON ist_teil_von.iknr = hoert.hknr) ON thema.tnr =hoert.htnr) ON (liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)) ONklasse.knr = ist_teil_von.iknr) ON professor.pnr = liest.lpnr

ORDER BY thema.tname, student.sname;

oder

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM professor INNER JOIN (klasse INNER JOIN (liest INNER JOIN ((ist_teil_von

INNER JOIN student ON ist_teil_von.ikknr = student.sknr) INNER JOIN (themaINNER JOIN hoert ON thema.tnr = hoert.htnr) ON ist_teil_von.iknr =hoert.hknr) ON (liest.lpnr = hoert.hpnr) AND (liest.ltnr = hoert.htnr)) ONklasse.knr = ist_teil_von.ikknr) ON professor.pnr = liest.lpnr

ORDER BY klasse.kname, student.sname;

Vielleicht finden Sie eine weitere Vari-ante. Auf jeden Fall sollten die Ergeb-nisse gleich (und richtig) sein (sieheTabelle) bevor wir die Vereinigungdurchführen, d. h. wir kontrollieren dasErgebnis anhand unserer Testdaten(siehe Kapitel 3.7.1.4).

Bild 3.7-7: Vorbereitung der Union

s_hoert_p in Oberklassen : AuswahlbfrageName Klassenname Thema Name

Binder 396SD3TI 9 Digitalelektronik KochHuber 396SD3TI 9 Digitalelektronik KochKeyl 396SD3TI 9 Digitalelektronik KochMai 396SD3TI 9 Digitalelektronik KochBerthold 396SD3NT 9 Mikroprozessorsysteme KoßHofmann 396SD3NT 9 Mikroprozessorsysteme KoßSchulz 396SD3NT 9 Mikroprozessorsysteme KoßWinkelmann 396SD3NT 9 Mikroprozessorsysteme Koß

Page 436: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-40 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Zur Prüfung wurden zweineue Klassen 17 und18 aus den Klassen 6,8bzw. 9,10 gebildet. D. h.

wir wählen erst einmal eine einstufige Hierarchie.

Der Student Binder ist im Ergebnis markiert,um ihn beispielhaft zu verfolgen. Ebenso schauenwir uns noch einmal die Klassen an. Auch hiersind die Klassen farblich herausgehoben. Die 9im Klassenname soll uns zeigen, daß es sich umeine zusammengesetzte Klasse handelt.

Jetzt ist es an der Zeit, beide Mengen mit der Anweisung UNION zu vereinigen. Zu die-sem Zweck kopieren wir die linke Hälfte also s_hoert_p sortiert nach s,k,tnach s_hoert_p alles k und kk , löschen das Semikolon, geben das Schlüssel-wort UNION ein und kopieren die SQL-Anweisung aus s_hoert_p in Oberklassenhinzu. Die gesamte SQL Anweisung lautet nun:

SELECT DISTINCTROW student.sname, klasse.kname, thema.tname, professor.pnameFROM ((ist_teil_von INNER JOIN student ON ist_teil_von.ikknr = student.sknr)

INNER JOIN ((professor INNER JOIN liest ON professor.pnr = liest.lpnr) INNERJOIN (thema INNER JOIN hoert ON thema.tnr = hoert.htnr) ON (liest.ltnr =hoert.htnr) AND (liest.lpnr = hoert.hpnr)) ON ist_teil_von.iknr = hoert.hknr)INNER JOIN klasse ON ist_teil_von.ikknr = klasse.knr

UNION SELECT DISTINCTROW student.sname, klasse.kname, thema.tname,professor.pname

FROM thema INNER JOIN ((klasse INNER JOIN student ON klasse.knr = student.sknr)INNER JOIN (professor INNER JOIN hoert ON professor.pnr = hoert.hpnr) ONklasse.knr = hoert.hknr) ON thema.tnr = hoert.htnr

ORDER BY student.sname, klasse.kname, thema.tname;

Da Access davon ausgeht, Datenaus verschiedenen Tabellen(spaltenweise) zusammenzufüh-ren, verliert es bei der Vereinigungdie Überschriften. Die Ergebnista-belle sieht wie nebenstehend aus.Der Student Binder aus derOberklassenbeziehungen ist wie-der markiert. Er besucht gleichzei-tig auch ein Thema in seiner nor-malen Klasse, so daß er zweimalerscheint.

Natürlich ist das erst einmal nureine einstufige Rekursion, d. h. wir können nun nicht erneut Oberklassen zu noch größe-ren Klassen zusammenfassen, ohne daß unsere Abfrage streikt. Dazu müßten wir näm-lich die Vereinigungen ebenfalls rekursiv durchführen können, was nach meinem bisheri-gen Wissenstand in SQL nicht geht.

Der Name der Abfrage soll andeuten, daß die Abfrage s_hoert_p (Student hört Pro-fessor) für alle Abhängigkeiten in Klassen (k) und Oberklassen (kk ) gebildet wird.

ist_teil_von : TabelleOberklasse Unterklasse

17 617 818 918 10

klasse : TabbelleK-Nr. Klassenname Anzahl Sprecher

1 395SD6TI 1 25 12 395SD6NT 1 30 23 395SD1NT 1 22 44 395SD2NT 15 395SD2TI 16 395SD3NT 17 395SD2MSP18 395SD3NT 29 395SD3TI 1

10 395SD3TI 214 395SD4NT 115 395SD4TI 116 396SD4MSP117 395SD3NT 918 395SD3TI 9

s_hoert_p alles k und kk : Auswahlabfragesname kname tname pname

Adam 396SD6NT 1 Mikrowellentechnik AltenkirchAdam 396SD6NT 1 Rechnerarchitekturen MayerAdam 396SD6NT 1 Rechnungswesen MayerAdam 396SD6NT 1 Schaltungstechnik ScheiblAdam 396SD6NT 1 Sensoren AusbornAdam 396SD6NT 1 Übertragungstechnik HilbigBerthold 396SD3NT 2 Mikroprozessorsysteme KoßBinder 396SD3TI 1 Digitalelektronik KochBinder 396SD3TI 1 Mikrowellentechnik MatschkeBisanz 396SD2NT 1 Rechnungswesen BernertDahley 396SD6NT 1 Mikrowellentechnik AltenkirchDahley 396SD6NT 1 Rechnerarchitekturen MayerDahley 396SD6NT 1 Rechnungswesen MayerDahley 396SD6NT 1 Schaltungstechnik ScheiblDahley 396SD6NT 1 Sensoren AusbornDahley 396SD6NT 1 Übertragungstechnik HilbigEger 396SD6TI 1 Mathematik WeißEger 396SD6TI 1 Rechnerarchitekturen Scheiblusw.

Page 437: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-41

Wir können uns jetzt aber noch weitere Fragen stellen:

1. Was geschieht eigentlich, wenn wir nun eine Klasse mit zwei Oberklassen verknüpfen?2. Was geschieht, wenn wir Oberklassen zu Oberoberklassen bilden usw.?

Zuerst einmal nichts, da die UNION darauf nicht reagiert. Wir müßten nun für jede Stufeeine eigene Abfrage definieren, was natürlich wenig praktikabel ist. Daher setzen wir allunsere Hoffnung ins Programmieren.

Die Erweiterung um eine Rekursionsstufe s_hoert_p alles k, kk und kkk wer-den wir zumindest einmal im nachfolgenden Kapitel demonstrieren.

→fh09�Aufgabe:Wie Sie in der letzten Tabelle sehen, ist zu jedem Student seine Ursprungsklasse ver-merkt. Haben Sie eine Idee, wie man auch die zusammengefaßte Klasse darstellenkann? Beim Student Binder sollte daher beim Thema Digitalektronik neben derKlassenbezeichnung 396SD3TI 1 auch die Klassenbezeichnung 95SD3NT 9 auftre-ten. �

3.7.1.4 Testdaten

Sicher ist es ganz hilfreich, an dieser Stelle einmal einige Testdaten manuell zu betrach-ten, um die Abfragen auf Herz und Nieren zu prüfen. Im letzten Kapitel haben wir eineeinstufige Hierarchie eingeführt. Diese wollen wir in den weiteren Kapiteln erweitern. Hier-zu entwerfen wir:

Stufe 3 21

Stufe 2 19

Stufe 1 17 18 206 8 9 10 1 2

Hofmann Berthold Binder Huber Eger AdamSchulz Winkelmann Mai Keyl Franke Dahley

Mayer FreitagMüller KreftZuse Ritter

Das Beispiel enthält eine unechte Hierarchie, indem die Klasse 20 sofort mit 19 zu 21wird, d. h. Klasse 20 überspringt eine Hierarchiestufe. Wir werden sehen, daß hierdurcherhebliche Schwierigkeiten entstehen.

Page 438: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-42 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Wir testen die 1. Stufe, d. h. alle Abfragen mit dem Zusatzk_in_k. Dabei sehen wir, daß die Zusammenfassung von 17und 18 in der Klasse 19 genauso behandelt wird wie die Zu-sammenfassungen der Basisklassen.

In der zweistufigen Hierarchie k_in_k_in_k finden wir logi-scherweise weniger Klassen. Die Klassen 19 und 21 habennicht genügend Vorgänger.

Die dritte Stufe inder streng hierar-chischen Abfragek_in_k_in_k_in_k läßt jetzt dieKlassen 1 und 2 unter den Tisch fallen. Damit ist dieKlasse 21 aber nicht mehr vollständig beschrieben!

Wie können wir nun dieses Ergebnis interpretieren?

Access liefert nicht die Antwort auf die Frage:

Welche Klassen sind in welcher Oberklasse zusammengefaßt?

vielmehr wird die Frage beantwortet:

Welche Klassen haben die gewünschte Anzahl Vorgänger?

Beide Fragen sind nur dann identisch, wenn es sich um eine strenge Hierarchie handelt.Diese wird im vorliegenden Fall durch die direkte Zuordnung von Klasse 20 zu Klasse21 verletzt.

In den nächsten Experimenten wollen wir nun einerseits dieses Manko beheben, da esauch im Leben nicht gut ist, Hierarchieebenen zu überspringen. Anderseits wollen wirnoch einmal zum allgemeineren Fall der m:m Rekursion zurückkehren. Hierzu ändern wirunseren Abhängigkeitsbaum folgendermaßen um

21

19 23

17 18 22 206 8 9 10 1 2

Hofmann Berthold Droske Huber Eger AdamSchulz Winkelmann Klubach Keyl Franke Dahley

Mayer FreitagMüller KreftZuse Ritter

Als kleines Schmankerl hängen wir in die Klasse 23 drei Basisklassen ein.

ist_teil_von : TabelleOberklasse Unterklasse

17 617 818 918 1019 1719 1820 120 221 1921 20

k_in_k_in_k : AuswahlabfrageKlasse Oberklasse OberOberkl

6 17 198 17 199 18 19

10 18 1917 19 2118 19 211 20 212 20 21

k_in_k_in_k_in_k : AuswahlabfrageKlasse Oberklasse OberOberkl OberOberO

6 17 19 218 17 19 219 18 19 21

10 18 19 21

Page 439: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-43

Der Aufruf der k_in_k Varianten liefert nun folgendes Ergebnis-se:

Wir sehen, daß in dermittleren Tabellenoch Doppelbelegun-

gen (fett dargestellt) existieren, d. h. es gibt auf dieser Ebene noch Oberklassen, die diegleichen Klassen umfassen. Die Zeilen unterscheiden sich in den nicht dargestelltenOberklassen. In der gewählten Darstellung ohne die Oberklassen könnten wir die Dop-peleinträge durch die Klausel DISTINCT statt DISTINCTROW eliminieren.

→fh09 In der dritten Spalte sind diese Doppeleinträge automatisch eliminiert, weil es auf dieserEbene keine Doppelverknüpfungen gibt.

Weitere Betrachtungen verschieben wir ins übernächste Kapitel, da wir uns noch kurz den1:m Reflexivbeziehungen zuwenden wollen.

3.7.2 Abfragen bei 1:m Reflexivbeziehungen

fh09a Diesen Beziehungstyp hatten wir ebenfalls anhand der Tabelle klasse eingeführt.Diese wird um eine zusätzliche Spalte kknr ergänzt, die einen Zeiger auf den Primär-schlüssel knr derselben Datei besitzt.

Für die Testdaten erweitern wir unsere Eingabe-plausibilitäten der Klassennamen so, daß auchBuchstaben/Ziffernkombinationen erlaubt sind, alsodas Eingabeformat wir auf LA geändert. Weiterhinwird zugelassen, daß F3 alsFachbereichsabkürzung möglich ist.

Unsere Testdaten umfassen zwei Sammelklassendesselben Studienganges (17,18). Weiterhin sinddiese beiden Klassen in einer Fachbereichsklasse19 zusammengefaßt. Bei dieser Gelegenheit gebenwir auch noch höhere Oberklassen 20 und 21ein. Dadurch entsteht eine baumartige Abhängigkeit(aber nicht streng baumartig). Die Tabelle klassesieht damit wie nebenstehend aus.

ist_teil_von : TabelleOberklasse Unterklasse

17 617 818 918 1019 1719 1820 120 221 1921 2322 122 1023 1823 2023 22

k_in_k k_in_k_in_k k_in_k_in_in_kKlasse Oberklasse Klasse OberOberkl Klasse OberOberOberkl

6 17 6 19 1 218 17 8 19 2 219 18 9 19 6 21

10 18 10 19 8 2117 19 17 21 9 2118 19 18 21 10 211 20 20 212 20 22 21

19 21 1 2323 21 1 231 22 2 23

10 22 9 2318 23 10 2320 23 10 2322 23

klasseK-Nr. Klassenname Anzahl Sprecher kknr

1 395SD6TI 1 25 1 202 395SD6NT 1 30 2 203 395SD1NT 1 22 44 395SD2NT 15 395SD2TI 16 395SD3NT 1 177 395SD2MSP18 395SD3NT 2 179 395SD3TI 1 18

10 395SD3TI 2 1814 395SD4NT 115 395SD4TI 116 396SD4MSP117 395SD3NT 9 1918 395SD3TI 9 1919 395SD3F3 9 2120 395SD6F3 9 2121 395SD6F3 8

Page 440: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-44 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

3.7.2.1 Direkte Verknüpfung

Wir beginnen analog zum vorherigen Kapitel miteiner einfachen Übung, die alle Oberklassen mitihren Unterklassen darstellen soll.

Die Abfrage nennen wir k_in_k. Sie bestehtnur aus zwei Instanzen der Tabelle klasse,die direkt miteinander verknüpft sind (Bild 3.7-8).

Die SQL-Anweisung dazu lautet:

SELECT DISTINCTROW klasse.knr,klasse.kname, klasse.kknr, klasse_1.kname

FROM klasse INNER JOIN klasse AS klasse_1 ON klasse.kknr = klasse_1.knrORDER BY klasse.kknr, klasse.knr;

Das Ergebnis zeigt die Linearisie-rung der doppelten Rekursion der

beiden Klassen 17, 18 in 19 sowie von 19, 20 in 21. D. h. die Zusammenfas-sung zweier Oberklassen zu Oberoberklassen wird von der Abfrage wie eine Zusam-menfassung zweier Basisklassen behandelt.

Wir erkennen auch, wie die Wahl des Feldes kname aus den beiden Tabellen gesteuertwird, d. h. welche Daten zur Anzeige gelangen.

Sie wollten eigentlich schon immer einmal wissen, welche Klassen zu Oberoberklassenzusammengefaßt wurden?

Bild 3.7-8: Abfrage k_in_k

k_in_k : AuswahlabfrageK-Nr. Klassenname kknr Klassenname

6 396SD3NT 1 17 396SD3NT 98 396SD3NT 2 17 396SD3NT 99 396SD3TI 1 18 396SD3TI 9

10 396SD3TI 2 18 396SD3TI 917 396SD3NT 9 19 396SD3F3 918 396SD3TI 9 19 396SD3F3 91 396SD6TI 1 20 396SD6F3 92 396SD6NT 1 20 396SD6F3 9

19 396SD3F3 9 21 396SD6F3 820 396SD6F3 9 21 396SD6F3 81 2 6 8 9 10

20 17 18

19

21

Page 441: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-45

Nichts leichter als das,wenn man einmal das Prin-zip verstanden hat. Wir ent-werfen (Bild 3.7-9), indemwir noch einmal die Tabelleklasse aufnehmen, undlassen Access arbeiten. Ausdem Ergebnis erkennen wir,daß die Anzahl der Trefferabgenommen hat, da nuneine Kette 19, 20 zu 21fehlt. Die Abfrage filtert allemöglichen dreistufigenHierarchien heraus.

Auch hier ist ein Blick auf die SQL-Anweisung sehr hilfreich. Sie wird länger und länger:

SELECT DISTINCTROW klasse.knr, klasse.kname, klasse.kknr, klasse_1.kname,klasse_1.kknr, klasse_2.kname

FROM (klasse INNER JOIN klasse AS klasse_1 ON klasse.kknr = klasse_1.knr) INNERJOIN klasse AS klasse_2 ON klasse_1.kknr = klasse_2.knr

ORDER BY klasse.kknr, klasse_1.knr, klasse.knr;

k_in_k_in_k : AuswahlabfrageK-Nr. Klassenname klasse.kknr Klassenname klasse_1.kknr Klassenname

6 395SD3NT 1 17 395SD3NT 9 19 395SD3F3 98 395SD3NT 2 17 395SD3NT 9 19 395SD3F3 99 395SD3TI 1 18 395SD3TI 9 19 395SD3F3 9

10 395SD3TI 2 18 395SD3TI 9 19 395SD3F3 917 395SD3NT 9 19 395SD3F3 9 21 395SD6F3 818 395SD3TI 9 19 395SD3F3 9 21 395SD6F3 81 395SD6TI 1 20 395SD6F3 9 21 395SD6F3 82 395SD6NT 1 20 395SD6F3 9 21 395SD6F3 8

3.7.2.2 Abfragen in Abfragen

Das sieht ja ganz nett aus, aber sorichtig elegant mit Selbstaufruf ist esdoch noch nicht. Wie wäre es dahermit folgendem Entwurf (Bild 3.7-10)?

Hier wird einfach das Ergebnis derletzten Abfrage mit sich selbst ver-knüpft. Von der Logik her ist diesein klassisch rekursiver Aufruf mitfolgender SQL Syntax:

SELECT DISTINCTROW k_in_k.knr, k_in_k.klasse.kname, k_in_k.kknr,k_in_k.klasse_1.kname, k_in_k_1.kknr, k_in_k_1.klasse_1.kname

FROM k_in_k INNER JOIN k_in_k AS k_in_k_1 ON k_in_k.kknr = k_in_k_1.knrORDER BY k_in_k.kknr, k_in_k.knr;

Bild 3.7-9: Entwurf der doppelt rekursiven Abfrage

Bild 3.7-10: Entwurf mit rekursivem Aufruf

Page 442: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-46 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Sie haben diese Abfrage erstellt? Geht sie wirklich, oder meldet sie nicht dauernd Table'klasse' is exclusively locked ? In diesem Fall sperrt sich die Abfrage selbst.Wir rechtsklicken daher auf den Hintergrund des Abfragefensters, wählen im Kontexmenüdie Option Eigenschaften und setzen die Eigenschaft Datensätze sperren aufeinen anderen Wert als Alle Datensätze.

Als erstes erhebt sichnatürlich die Frage,warum eine Selbstver-knüpfung erfolgen muß.Reicht nicht einfach eineVerknüpfung vonk_in_k mit klasse?(Bild 3.7-11).

Das Ergebnis dieser Abfrage zeigt wiederum nur eine zweistufige Hierarchie an. Die Ver-knüpfung mit klasse wird nur zur reinen Ergänzung der Klassennummer genommenund hat keinen Einfluß auf die Tiefe der Rekursion. Der Fehler in diesem Entwurf liegt inder falschen Verknüpfung von k_in_k . kknr zu klasse.knr . Betrachten wir nämlichk_in_k . kknr , so stellen wir fest, daß hier die Klassennummern der 2. Hierarchieebeneauftreten.

Ergänzen wir nun k_in_k zu k_in_k A1 um die Ausgabe des Feldes kla s-se_1.kknr, dann enthält dieses Feld die 3. Hierarchiestufe (Bild 3.7-12). Eine Ver-knüpfung von k_in_k A1 mit klasse über dieses Feld ist äquivalent zur Abfragek_in_k _in_k nach Bild 3.7-10.

Sie können sich sicher vorstellen, was passiert, wenn wir nun das gleiche Spiel mit derAbfrage k_in_k_in_k durchführen, um auf die 4. Hierarchiestufe zu gelangen.

k_in_k_in_k_in_kKlassen-Nr. Klassenname klasse.kknr Klassenname klasse_1.kknr Klassenname Klassen-Nr. Klassenname

6 396SD3NT 1 17 396SD3NT 9 19 396SD3F3 9 21 396SD6F3 88 396SD3NT 2 17 396SD3NT 9 19 396SD3F3 9 21 396SD6F3 89 396SD3TI 1 18 396SD3TI 9 19 396SD3F3 9 21 396SD6F3 8

10 396SD3TI 2 18 396SD3TI 9 19 396SD3F3 9 21 396SD6F3 8

k_in_k_in_k mit k_in_k : AuswahlabfrageK-Nr. Klassenname k_in_k.kknr Klassenname k_in_k_1.kknr Klassenname

6 395SD3NT 1 17 395SD3NT 9 19 395SD3F3 98 395SD3NT 2 17 395SD3NT 9 19 395SD3F3 99 395SD3TI 1 18 395SD3TI 9 19 395SD3F3 9

10 395SD3TI 2 18 395SD3TI 9 19 395SD3F3 917 395SD3NT 9 19 395SD3F3 9 21 395SD6F3 818 395SD3TI 9 19 395SD3F3 9 21 395SD6F3 8

1 395SD6TI 1 20 395SD6F3 9 21 395SD6F3 82 395SD6NT 1 20 395SD6F3 9 21 395SD6F3 8

Bild 3.7-11: Falscher Bezug Bild 3.7-12: Korrigierter Bezug

Page 443: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-47

Das Ergebnis stimmt uns erneut nachdenklich, da es zwar die 4. Hierarchiestufe anzeigt,aber nicht die Frage beantwortet, aus welchen Klassen sich 396SD6F3 8 zusammen-setzt. Ursache hierfür ist die Verletzung der strengen Baumhierarchie.

Wir sehen natürlich, daß Access nicht wirklich rekursiv arbeitet, da wir jede Stufe perHand programmieren müssen. Selbst wenn wir den gleichen Namen vergeben könnten,müßten wir noch ein Abbruchkriterium festlegen können, denn so eine Rekursion muß beialler Schönheit der Wiederholung endlich sein.

Wenn Ihnen diese TechnikSpaß macht, dann solltenSie das Ganze noch nachden Seiten erweitern, d. h.z. B. die Studenten mit hin-zuziehen (Bild 3.7-13).

Bei der Betrachtung des Er-gebnisses werden Sie sicherWünsche zur Sortierungentwickeln. So sollte die Li-ste z. B. nach den Oberklas-sen, dann nach den Klassenund zuletzt nach den Namensortiert sein. Dies sollte nun wirklich kein Problem mehr sein. Die SQL-Anweisung lautet

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname,klasse.kknr, klasse_1.kname

FROM (klasse INNER JOIN klasse AS klasse_1 ON klasse.kknr = klasse_1.knr) INNERJOIN student ON klasse.knr = student.sknr

ORDER BY klasse_1.kname, klasse.kname, student.sname;

Wir stellen aber auch fest, daß die folgende SQL-Anweisung

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname,klasse.kknr, klasse_1.kname

FROM klasse INNER JOIN (student INNER JOIN klasse AS klasse_1 ON student.sknr =klasse_1.knr) ON klasse.knr = klasse_1.kknr

ORDER BY klasse_1.kname, klasse.kname, student.sname;

das gleiche Ergebnis liefert.

klasse klasse

student

knr=sknr

kknr=knr

student klasse

sknr=knr

klasse

knr=kknr

Bild 3.7-13: Entwurf s_in_k_in_k

Page 444: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.7 Abfragen bei rekursiven Beziehungen (Reflexivverknüpfungen) © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-48 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Hier zu experimentieren undzu prüfen, kann durchaus hilf-reich sein.

→fh09a Wir stellen nämlich bei derSortierung nach den Studen-tennamen fest, daß es Dop-peleinträge in den Oberklas-sen gibt, obwohl dort ein Stu-dent physikalisch nur einmalexistieren kann. Dieses Pro-blem wollen wir noch einmalim nächsten Kapitel aufgrei-fen.

3.7.2.3 Abfragen mit Abfragen

Im letzten Kapitel hatten wir immer eine Abfragemit einer weiteren Tabelle verknüpft. Jetzt wollenwir dies steigern und zwei Abfragen miteinanderkombinieren

Hierzu betrachten wir die beiden Abfragens_hoert_p sortiert nach s,k,t unds_in_k . Genaugenommen hört eigentlich eineKlasse einen Professor mit einem Thema. DieStudenten führen nur zu einer Vervielfachung derErgebniszeilen. Können wir nicht noch die Abfrageauf s_in_k aufbauen?

Ja, dieses geht wirklich. Wir können statt eineroder mehrerer Tabellen auch Abfragen zu neuenAbfragen kombinieren (Bild 3.7-14).

Wir gehen sogar so weit, eine Abfrage k_hoert_p zu definieren und diese mit s_in_kzu kombinieren (Bild 3.7-15).

Es soll an dieser Stelle nicht verschwiegen wer-den, daß ein gewisses ungutes Gefühl bleibt, obdieser Weg, so elegant er auch erscheint, immerder optimale ist. Wird nämlich, wie im Beispielk_hoert_p nach gewissen Kriterien sortiert unddie Kombinationsabfrage nach ggf. den gleichenoder anderen, dann wird vielleicht noch einmalsortiert usw.

Mit anderen Worten. Testen und Ausprobieren istgut. Danach müssen wir aber Massendaten er-zeugen, um das Systemverhalten wirklich zu optimieren.

s_in_k_in_k : AuswahlabfrageMatrikel Name Klassenname Klassenname Klassenname K-Nr.

1 Mayer 395SD6TI 1 395SD6F3 9 395SD6F3 8 212 Müller 395SD6TI 1 395SD6F3 9 395SD6F3 8 217 Zuse 395SD6TI 1 395SD6F3 9 395SD6F3 8 21

10 Berthold 395SD6TI 1 395SD6F3 9 395SD6F3 8 2114 Franke 395SD6TI 1 395SD6F3 9 395SD6F3 8 2125 Eger 395SD6TI 1 395SD6F3 9 395SD6F3 8 21

5 Adam 395SD6NT 1 395SD6F3 9 395SD6F3 8 2112 Freitag 395SD6NT 1 395SD6F3 9 395SD6F3 8 2116 Schulz 395SD6NT 1 395SD6F3 9 395SD6F3 8 2117 Hofmann 395SD6NT 1 395SD6F3 9 395SD6F3 8 2121 Dahley 395SD6NT 1 395SD6F3 9 395SD6F3 8 2123 Ritter 395SD6NT 1 395SD6F3 9 395SD6F3 8 2124 Kreft 395SD6NT 1 395SD6F3 9 395SD6F3 8 21

3 Schulze 395SD3NT 1 395SD3NT 9 395SD3F3 9 196 Bergmann 395SD3NT 1 395SD3NT 9 395SD3F3 9 198 Schwinge 395SD3NT 2 395SD3NT 9 395SD3F3 9 19

26 Droske 395SD3TI 1 395SD3TI 9 395SD3F3 9 1927 Klubach 395SD3TI 1 395SD3TI 9 395SD3F3 9 1928 Römer 395SD3TI 2 395SD3TI 9 395SD3F3 9 1929 Schmeißel 395SD3TI 2 395SD3TI 9 395SD3F3 9 19

Bild 3.7-14: Abfrage mit Abfrage

Bild 3.7-15: Abfrage aus Abfragen

Page 445: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-49

Andererseits ist es doch bestechend, wenn wir inder obigen Abfrage nur s_in_k durchs_in_k_in_k oder s_in_k_in_k_in_k erset-zen müssen (Bild 3.7-16), um die entsprechendenkomplexen Ergebnisse zu erhalten.

s_hoert_p sortiert nach s,k,t mit s_in_k_in_k_in_k, k_hoert_p : AuswahlabfrageName Klassenname Klassenname Klassenname Thema Name

Bergmann 395SD3NT 1 395SD3NT 9 395SD3F3 9 Fertigungstechnik KnoppSchwinge 395SD3NT 2 395SD3NT 9 395SD3F3 9 Fertigungstechnik KnoppDroske 395SD3TI 1 395SD3TI 9 395SD3F3 9 Fertigungstechnik KnoppKlubach 395SD3TI 1 395SD3TI 9 395SD3F3 9 Fertigungstechnik KnoppRömer 395SD3TI 2 395SD3TI 9 395SD3F3 9 Fertigungstechnik KnoppSchmeißel 395SD3TI 2 395SD3TI 9 395SD3F3 9 Fertigungstechnik KnoppSchulze 395SD3NT 1 395SD3NT 9 395SD3F3 9 Fertigungstechnik KnoppZuse 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik WeißMüller 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik WeißKreft 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißBerthold 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik WeißFranke 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik WeißEger 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik WeißAdam 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißFreitag 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißSchulz 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißHofmann 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißDahley 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißRitter 395SD6NT 1 395SD6F3 9 395SD6F3 8 Mathematik WeißMayer 395SD6TI 1 395SD6F3 9 395SD6F3 8 Mathematik Weiß

3.8 Alternative SQL Anweisungen und weitere Besonderheiten

Wir verlassen jetzt wieder die 1:m Rekursion und kehren zum allgemeineren Fall der m:mRekursion zurück.

3.8.1 Direkte Rekursionen

fh09 Bei den Experimenten mit den rekursiven Problemen stoßen wir sehr schnell darauf, daßes von Bedeutung ist, an welcher Stelle wir eine Tabelle anhängen. Zu einer gewünsch-ten Lösung führen oft mehrere Wege, die sich in ihren SQL-Anweisungen unterscheiden.

Wir beginnen wie bei der 1:m Rekursion mit einer einfachen Abfrage der Studenten in denKlassen s_in_k .

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.knameFROM klasse INNER JOIN student ON klasse.knr = student.sknrORDER BY klasse.knr, student.sname;

Bild 3.7-16: Rekursive Abfrage mitAbfrage

Page 446: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.8 Alternative SQL Anweisungen und weitere Besonderheiten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-50 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Nun wollen wir Klassenlisten für diezusammengesetzten Klassen er-stellen. Dazu entwerfen wir dieweitere Abfrage s_in_k_in_k(Bild 3.8-1). Für die Listen ist essinnvoll, die Oberklasse als Haupt-sortierungsmerkmal festzulegen.Die weiteren Sortierkriterien kön-nen die Unterklasse und der Nameoder nur der Name sein.

Die zugehörige SQL-Anweisung istschon recht komplex, da sie ge-schachtelt ist:

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname,klasse_1.knr, klasse_1.kname

FROM klasse INNER JOIN ((klasse AS klasse_1 INNER JOIN ist_teil_von ONklasse_1.knr = ist_teil_von.ikknr) INNER JOIN student ON klasse_1.knr =

student.sknr ) ON klasse.knr = ist_teil_von.iknrORDER BY klasse.knr, klasse_1.knr, student.sname;

Wir erkennen drei INNERJOIN, entsprechend der dreiBeziehungen in unserer Abfrage.Als Ergebnis erhalten wir 25Namen, die in 4 Klassen gehen.

Der Vergleich mit den Testdatenzeigt, daß die Studenten derKlasse 1 zweimal auftauchen,einmal als Schüler der Klasse20 und einmal als Schüler derKlasse 22.

Verzichten wir auf die Anzeigeder Basisklasse, dann könnenwir klasse_1 herausnehmenund die Beziehung gleich vonikknr zu sknr herstellen.Dadurch sparen wir einen Join ein: s_in_k_in_k A1

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.knameFROM (klasse INNER JOIN ist_teil_von ON klasse.knr = ist_teil_von.iknr) INNER

JOIN student ON ist_teil_von.ikknr = student.sknrORDER BY klasse.knr, student.sname;

Hängen wir nun in dieser Abfrage eine weitere Klassentabelle an die Studenten an undkorrigieren die Ausgabe sowie die Sortierung, erhalten wir mit folgender SQL-Anweisung:

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname,klasse_1.knr, klasse_1.kname

Bild 3.8-1: Entwurf s_in_k_in_k

s_in_k_in_k : AuswahlabfrageMatrikel Name K-Nr. Klassenname K-Nr. Klassenname

17 Hofmann 17 396SD3NT 9 6 396SD3NT 116 Schulz 17 396SD3NT 9 6 396SD3NT 110 Berthold 17 396SD3NT 9 8 396SD3NT 211 Winkelmann 17 396SD3NT 9 8 396SD3NT 218 Binder 18 396SD3TI 9 9 396SD3TI 119 Mai 18 396SD3TI 9 9 396SD3TI 1

4 Huber 18 396SD3TI 9 10 396SD3TI 213 Keyl 18 396SD3TI 9 10 396SD3TI 225 Eger 20 396SD6F3 9 1 396SD6TI 114 Franke 20 396SD6F3 9 1 396SD6TI 1

1 Mayer 20 396SD6F3 9 1 396SD6TI 12 Müller 20 396SD6F3 9 1 396SD6TI 17 Zuse 20 396SD6F3 9 1 396SD6TI 15 Adam 20 396SD6F3 9 2 396SD6NT 1

21 Dahley 20 396SD6F3 9 2 396SD6NT 112 Freitag 20 396SD6F3 9 2 396SD6NT 124 Kreft 20 396SD6F3 9 2 396SD6NT 123 Ritter 20 396SD6F3 9 2 396SD6NT 125 Eger 22 396SD6F3 7 1 396SD6TI 114 Franke 22 396SD6F3 7 1 396SD6TI 1

1 Mayer 22 396SD6F3 7 1 396SD6TI 12 Müller 22 396SD6F3 7 1 396SD6TI 17 Zuse 22 396SD6F3 7 1 396SD6TI 14 Huber 22 396SD6F3 7 10 396SD3TI 2

13 Keyl 22 396SD6F3 7 10 396SD3TI 2

Page 447: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-51

FROM (klasse INNER JOIN (ist_teil_von INNER JOIN student ON ist_teil_von.ikknr= student.sknr) ON klasse.knr = ist_teil_von.iknr) INNER JOIN klasse ASklasse_1 ON student.sknr = klasse_1.knr

ORDER BY klasse.knr, klasse_1.knr, student.sname;

wieder das Ausgangsergebnis. In einem letzten Versuch erzeugen wir nun diese Abfragenoch einmal von Grund auf und erhalten eine weitere Variante:

SELECT DISTINCTROW student.snr, student.sname, klasse.knr, klasse.kname,klasse_1.knr, klasse_1.kname

FROM ((klasse INNER JOIN ist_teil_von ON klasse.knr = ist_teil_von.iknr) INNERJOIN student ON ist_teil_von.ikknr = student.sknr) INNER JOIN klasse ASklasse_1 ON student.sknr = klasse_1.knr

ORDER BY klasse.knr, klasse_1.knr, student.sname;

Somit haben wir genau so viele Varianten wie Beziehungen, die wir einmal aufzeichnen:

Bei der dritten Variante ist der oberste Join gegenüber der ersten Variante verdreht. Die-se scheinbare Kommutativität veranlaßt uns, die Tabelle student in Bild 3.8-1 linksanzubinden. Das Ergebnis ist eine leere Liste.

Hat eine der Alternativen Vorteile gegenüber den anderen? Wenn, ja, warum?

klasse ist_teil_von

student

klasse

ist_teil_von student

klasse

klasse

iknr=sknr

knr=iknr

sknr=knrknr=iknr

knr=iknr

knr=sknr

klasse ist_teil_von

knr=iknr

student

iknr=sknr

klasse

sknr=knr

Bild 3.8-2: Alternative SQL-Anweisungen

Page 448: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.8 Alternative SQL Anweisungen und weitere Besonderheiten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-52 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Wir sind noch nicht mit unserer Hierarchiefertig. Wir entwerfen s_in_k_in_k _in_kin der verkürzten Version (ohne Zwischen-klassen).

Das Ergebnis enthält nur noch 22 Studenten.Die möglichen Doppelbelegungen aus 18und 22 entfallen.

Zuletzt führen wir die Technik weiter zus_in_k_in_k _in_k_in_k :

Es verbleiben 18 Studenten in der oberstenKlasse.

Da wir natürlich neugierig und vom Pro-grammieren her gewöhnt sind, wollen wirauch die Zwischenergebnisse sehen. Alsoergänzen wir nun bei einer unserer komple-xeren Abfragen die Zwischentabellen (Bild3.8-3).

Statt der erwarteten 22 Studenten erhalten wir 29 Studenten. Die Klausel DISTINCTROWwirkt nicht mehr, da die Studenten aufgrund der Zwischenausdrucke unterschiedlicheKlasseneinträge haben, so daß die 7 Studenten aus Klasse 10 und 1 jetzt doppelt er-scheinen.

3.8.2 Abfragen in Abfragen

Auch hier wollen wir nun versu-chen, die Abfragen durch Nut-zung bestehender Abfragenkompakter zu gestalten.

s_in_k_in_k_in_k : AuswahlabfrageMatrikel Name Klassen-Nr. Klassenname

10 Berthold 19 396SD3F3 918 Binder 19 396SD3F3 917 Hofmann 19 396SD3F3 9

4 Huber 19 396SD3F3 913 Keyl 19 396SD3F3 919 Mai 19 396SD3F3 916 Schulz 19 396SD3F3 911 Winkelmann 19 396SD3F3 9

5 Adam 23 396SD6F3 618 Binder 23 396SD6F3 621 Dahley 23 396SD6F3 625 Eger 23 396SD6F3 614 Franke 23 396SD6F3 612 Freitag 23 396SD6F3 6

4 Huber 23 396SD6F3 613 Keyl 23 396SD6F3 624 Kreft 23 396SD6F3 619 Mai 23 396SD6F3 6

1 Mayer 23 396SD6F3 62 Müller 23 396SD6F3 6

23 Ritter 23 396SD6F3 67 Zuse 23 396SD6F3 6

s_in_k_in_k_in_k_in_k : AuswahlabfrageMatrikel Name Klassen-Nr. Klassenname

5 Adam 21 396SD6F3 810 Berthold 21 396SD6F3 818 Binder 21 396SD6F3 821 Dahley 21 396SD6F3 825 Eger 21 396SD6F3 814 Franke 21 396SD6F3 812 Freitag 21 396SD6F3 817 Hofmann 21 396SD6F3 8

4 Huber 21 396SD6F3 813 Keyl 21 396SD6F3 824 Kreft 21 396SD6F3 819 Mai 21 396SD6F3 8

1 Mayer 21 396SD6F3 82 Müller 21 396SD6F3 8

23 Ritter 21 396SD6F3 816 Schulz 21 396SD6F3 811 Winkelmann 21 396SD6F3 8

7 Zuse 21 396SD6F3 8

Bild 3.8-3: Abfrage mit Zwischenwerten

Page 449: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-53

Wir wollen bei der Abfrage s_in_k_in_k aufden Vorgänger s_in_k zurückgreifen (Bild3.8-4). Zu diesem Zweck muß die benutzteAbfrage ein vorbereitetes Feld zur Verknüp-fung besitzen.

Danach können wir systematisch die Abfrage-tiefe vergrößern (Bild 3.8-5).

Trennen wir nun die Studenten von denKlassen, so lassen sich Abfragen der Artk_in_k … entwickeln. Diese haben folgendeSQL-Anweisungen:

k_in_k :SELECT DISTINCTROW klasse_1.knr,

klasse_1.kname, klasse.knr,klasse.kname

FROM klasse INNER JOIN (ist_teil_vonINNER JOIN klasse AS klasse_1 ONist_teil_von.ikknr = klasse_1.knr) ONklasse.knr = ist_teil_von.iknr;

k_in_k _in_k :SELECT DISTINCT klasse_2.knr, klasse_2.kname, klasse.knr, klasse.knameFROM klasse INNER JOIN (ist_teil_von INNER JOIN (ist_teil_von AS ist_teil_von_1

INNER JOIN klasse AS klasse_2 ON ist_teil_von_1.ikknr = klasse_2.knr) ONist_teil_von.ikknr = ist_teil_von_1.iknr) ON klasse.knr = ist_teil_von.iknr

ORDER BY klasse.knr, klasse_2.knr;

und k_in_k _in_k_in_k :SELECT DISTINCTROW klasse_2.knr, klasse_2.kname, klasse.knr, klasse.knameFROM klasse INNER JOIN ((ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1

ON ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN (ist_teil_von ASist_teil_von_2 INNER JOIN klasse AS klasse_2 ON ist_teil_von_2.ikknr =klasse_2.knr) ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr) ON klasse.knr =ist_teil_von.iknr

ORDER BY klasse_2.knr;

Bild 3.8-4: Abfrage mit Abfrage

Bild 3.8-5: Erweiterung der Rekursionstiefe

Page 450: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.8 Alternative SQL Anweisungen und weitere Besonderheiten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-54 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Mit Hilfe dieser Abfragen istes nun nicht schwierig, Al-ternativen für unser Abfra-ge der Forms_in_k_in_k … mitk_in_k … zu erstellen (Bild3.8-6).

Erstellen wir Abfragen mitdem Abfrage-Editor, so er-stellt dieser aufgrund desUDM automatisch die Be-ziehungen. Dies ist aberbei rekursiven Beziehun-

gen nicht immer die richtige Wahl (Bild 3.8-7). Sie führt zu einem leeren Ergebnis.Wie können wir uns die-sen Effekt erklären? Nun,die eigentliche Abfragewird als SQL Anweisungausgeführt. Diese ist einelineare Anweisung, dievon links nach rechtsabgearbeitete wird. Da-bei ist es sehr wohl wich-tig, in welcher Reihenfol-ge z. B. die verschiede-nen Joins ausgeführtwerden. Hierzu der Ver-gleich der beiden Vari-

anten. Zuerst die vom System automatisch angelegte

SELECT DISTINCTROW klasse_2.knr, klasse_2.kname, klasse.knr, klasse.knameFROM (klasse INNER JOIN ((ist_teil_von INNER JOIN ist_teil_von AS

ist_teil_von_1 ON ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN(ist_teil_von AS ist_teil_von_2 INNER JOIN klasse AS klasse_2 ONist_teil_von_2.ikknr = klasse_2.knr) ON ist_teil_von_1.ikknr =ist_teil_von_2.iknr) ON klasse.knr = ist_teil_von.iknr) INNER JOIN student ONklasse.knr = student.sknr;

und nun die korrigierte (Bild 3.8-9)

SELECT DISTINCTROW student.snr, student.sname, klasse_2.knr, klasse_2.kname,klasse.knr, klasse.kname

FROM klasse INNER JOIN (((ist_teil_von INNER JOIN ist_teil_von ASist_teil_von_1 ON ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN(ist_teil_von AS ist_teil_von_2 INNER JOIN klasse AS klasse_2 ONist_teil_von_2.ikknr = klasse_2.knr) ON ist_teil_von_1.ikknr =ist_teil_von_2.iknr) INNER JOIN student ON klasse_2.knr = student.sknr) ONklasse.knr = ist_teil_von.iknr

ORDER BY student.sname;

Bild 3.8-6: Abfragen mit k_in_k…

Bild 3.8-7: Abfrage mit automatischer Verknüpfung

Page 451: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-55

wobei in beiden die Stel-lung der Tabelle studentfett herausgehoben ist. Sogroß, wie vielleicht erwartet,sieht der Unterschied garnicht aus. Wir versuchendaher wieder dieAbfragebäume abzuleiten

ist_teil_von ist_teil_von_1

klasse

ikknr=iknr

knr=iknrBild 3.8-8: Korrigierte Abfrage

Bild 3.8-9: Bearbeitungsbaum 1

ist_teil_von ist_teil_von_1 ist_teil_von_2

student

klasse_2

ikknr=iknr ikknr=knr

ikknr=iknr

sknr=knr

klasse

iknr=knr

Bild 3.8-10: Bearbeitungsbaum 2

Page 452: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.8 Alternative SQL Anweisungen und weitere Besonderheiten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-56 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Versuchen wir nuneinmal, dieseBäume nachzuvoll-ziehen und die Er-gebnisse zu ver-stehen. Wie wirsehen, ist der unte-

re Teil beider Bäume gleich und dazu noch ineiner Art paralleler Abfrage realisiert. Beginnenwir mit der linken Verknüpfung

Diese Abfrage liefert uns alle OberOberklassen,d. h. zweistufige Zusammenfassungen. DieSQL-Anweisung lautet

SELECT DISTINCTROW ist_teil_von.iknr, ist_teil_von_1.iknr, ist_teil_von_1.ikknrFROM ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ON

ist_teil_von.ikknr = ist_teil_von_1.iknr;

Der fett markierte Teil entspricht der ersten inneren Klammer des Originalausdrucks.

Analog verknüpfen wir jetzt auf der rechten Seite ist_teil_von_2 und klasse mitfolgendem Ergebnis

Dies entspricht einer Elimination der Basisklassen. Die SQL Anwei-sung lautet

SELECT DISTINCTROW ist_teil_von_2.iknr, klasse.knrFROM klasse_2 INNER JOIN ist_teil_von AS ist_teil_von_2 ON

klasse_2.knr = ist_teil_von_2.ikknrORDER BY ist_teil_von_2.iknr,klasse_2.knr;

Die Namensvergabe erreichen wir durch dreifaches Einfügen vonist_teil_von mit anschließendem Löschen. Dies entspricht derzweiten inneren Klammer. Da der INNER JOIN kommutativ ist,sollte das Ergebnis sich nicht ändern, wenn Sie statt dessen

SELECT DISTINCTROW ist_teil_von.iknr, klasse.knrFROM ist_teil_von_2 INNER JOIN klasse AS klasse_2 ON ist_teil_von_2.ikknr =

klasse_2.knrORDER BY ist_teil_von.iknr, klasse.knr;

programmieren. Ein OUTER JOIN ist dagegen nicht kommutativ.

Im nächsten Schritt bauen wir nun beideAbfragen zusammen.

Es ergibt sich der Zusammenhang derBasisklassen (Klassen 1. Stufe) zurOberklasse 4. Stufe. Es treten bei Mehr-fachverknüpfungen passende Einträge indieser Tabelle auf.

Bild 3.8-11: Teilabfrage 1

iknr ikknr//iknr ikknrist_teil_von ist_teil_von_1

19 17 819 17 619 18 919 18 1021 19 1821 19 1721 23 1821 23 2221 23 2023 18 923 18 1023 20 123 20 223 22 123 22 10

iknr knrist_teil_von_2 klasse

17 617 818 918 1019 1719 1820 120 221 1921 2322 122 1023 1823 2023 22

iknr iknr iknr knrist_teil_von ist_teil_von_1 ist_teil_von_2 klasse

21 23 22 121 23 20 121 23 20 221 19 17 621 19 17 821 23 18 921 19 18 921 23 22 1021 23 18 1021 19 18 10

Page 453: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-57

Die SQL Anweisung lautet

SELECT DISTINCTROW ist_teil_von.iknr, ist_teil_von_1.iknr, ist_teil_von_2.iknr,klasse_2.knr

FROM (ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ONist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN (ist_teil_von ASist_teil_von_2 INNER JOIN klasse AS klasse_2 ON ist_teil_von_2.ikknr =klasse_2.knr) ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr

ORDER BY ist_teil_von.iknr, klasse_2.knr;

Der markierte Teil entspricht wiederum vollständig der mittleren Klammer unserer Aus-gangsabfrage. Der zugehörige Bearbeitungsbaum ist in Bild 3.8-12 dargestellt. Es handeltsich um einen ausgeglichenen Baum minimaler Tiefe.

ist_teil_von ist_teil_von_1 ist_teil_von_2 klasse_2

ikknr=iknr ikknr=knr

ikknr=iknr

Bild 3.8-12: Bearbeitungsbaum

Es wird Ihnen aber durchaus gelingen, folgende Abfrage zu erzeugen

SELECT DISTINCTROW ist_teil_von.iknr, ist_teil_von_1.iknr, ist_teil_von_2.iknr,klasse_2.knr

FROM ((ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ONist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN ist_teil_von ASist_teil_von_2 ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr) INNER JOINklasse AS klasse_2 ON ist_teil_von_2.ikknr = klasse_2.knr

ORDER BY ist_teil_von.iknr, klasse_2.knr;

Diese Anweisung unterscheidetsich von der vorherigen. Wirzeichnen den Bearbeitungs-baum auf (Bild 3.8-13) und er-halten eine lineare Liste.

Die Anzahl der Knoten (d. h. derINNER JOIN) und auch das Er-gebnis ist völlig gleich, so daßbeide Abfragen äquivalent sind.

Es ist natürlich an dieser Stelleschwer zu sagen, welche derbeiden Formeln besser ist. Man könnte vermuten, daß dies vielleicht von der Größe dereinzelnen Tabellen abhängt. Hierzu sind weitergehende Untersuchungen notwendig.

Interessant bleibt trotzdem die Erkenntnis, daß der interne Generator in Abhängigkeit vonder Erstellung der Abfrage unterschiedliche Anweisungen erzeugt.

ist_teil_von ist_teil_von_1

ist_teil_von_2

klasse_2

ikknr=iknr

ikknr=knr

ikknr=iknr

Bild 3.8-13: Äquivalenter Bearbeitungsbaum

Page 454: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.8 Alternative SQL Anweisungen und weitere Besonderheiten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-58 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

Jetzt ergänzen wir eine weitere Klasse auf der linken Seite. Als zusätzliches Anzeigefeldwählen wir die Klassennummer. Im Ergebnis ändert sich nichts, da natürlich die Klassenalle in der Klassentabelle enthalten sind und keine zusätzliche Durchschnittsbildung er-folgt.

Löschen wir das Anzeigefeld ist_teil_von.iknr soändert sich nichts. Löschen wir dagegen das Anzeigefeldist_teil_von_1.iknr, so fallen die Doppelnennungenvon 9 und 10 weg, die auf der 3. Hierarchiestufe er-zeugt werden, weg. Die Doppelnennungen von 1 und10, die auf der 2. Hierarchiestufe gebildet werden, bleibendagegen erhalten.

Dieser Effekt verschwindet wieder, wenn wir aus der SQL Anweisung

SELECT DISTINCTROW klasse.knr, ist_teil_von_2.iknr, klasse_1.knrFROM (((ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ON

ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN ist_teil_von ASist_teil_von_2 ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr) INNER JOINklasse AS klasse_1 ON ist_teil_von_2.ikknr = klasse_1.knr) INNER JOIN klasseON ist_teil_von.iknr = klasse.knr

ORDER BY klasse_1.knr;

die Klausel DISTINCTROW löschen. Nehmen wir nun weiterhin die Anzeige vonist_teil_von_2.iknr heraus

SELECT DISTINCTROW klasse.knr, klasse_1.knrFROM (((ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ON

ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN ist_teil_von ASist_teil_von_2 ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr) INNER JOINklasse AS klasse_1 ON ist_teil_von_2.ikknr = klasse_1.knr) INNER JOIN klasseON ist_teil_von.iknr = klasse.knr

ORDER BY klasse_1.knr;

dann bleiben nur noch die Basisklassen selbst übrig.

Es ändert sich natürlich nichts, wenn wir die äquivalente Abfrage

SELECT DISTINCTROW klasse.knr, klasse_2.knrFROM ((ist_teil_von INNER JOIN ist_teil_von AS ist_teil_von_1 ON

ist_teil_von.ikknr = ist_teil_von_1.iknr) INNER JOIN (ist_teil_von ASist_teil_von_2 INNER JOIN klasse AS klasse_2 ON ist_teil_von_2.ikknr =klasse_2.knr) ON ist_teil_von_1.ikknr = ist_teil_von_2.iknr) INNER JOINklasse ON ist_teil_von.iknr = klasse.knr

ORDER BY klasse_2.knr;

knr iknr knrklasse ist_teil_von_2 klasse_1

21 22 121 20 121 20 221 17 621 17 821 18 921 22 1021 18 10

knr knrklasse klasse_1

21 121 221 621 821 921 10

Page 455: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Abfragen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc03.doc – 9769 Seite: 3-59

wählen. Zu guter Letzt ergänzen wir noch unsere Studen-ten an der klasse_2 und erhalten dann das nebenste-hende Ergebnis durch geeignete Sortierung z. B. nach demStudentennamen.

Natürlich stellen wir uns noch die Frage, warum unsererekursive Definition den Fehler der mehrfachen Studentenin einer einzigen Klasse zeigt.

Nun, dies liegt schlicht und einfach daran, daß wir zu vieleFelder auswählen, insbesondere die ganzen Zwischen-klassen. In diesem Fall eliminiert die KlauselDISTINCTROW nicht alle Einträge. Dies pflanzt sich dannbeliebig weit fort und ist nicht mehr reparabel, weil StudentDroske für alle weiteren Abfragen immer mit den Klassen9, 18, 19 bzw. 9, 18, 23 verknüpft ist. Somit ist er bei Betrachtung des gesamtenDatensatzes unterschiedlich. Erst durch Weglassen der Zwischenklassen erreichen wirdas gesuchte Ergebnis.

3.9 Übungen

3.9.1.1 Nicht-Abfragen

Gar nicht so selten, aber häufig totgeschwiegen werden die Nicht-Abfragen. In einer ein-zigen Tabelle fragen wir einfach auf ungleich <> ab. Bei der Verknüpfung zweier Tabel-len hatten wir diese Abfrage in der einfachen Form als Inkonsistenzsuche kennengelernt.Dieser Bezeichnung ist manchmal irreführend, da wir bei allen xc-Beziehungen solcheInkonsistenzen bewußt einplanen. Ein typisches Beispiel war die Abfrage s_ohne_k.

Schon etwas komplexer war die Umkehrung k_ohne_s. Hier benötigten wir eine Aggre-gatfunktion, um diese Abfrage zu realisieren. In einer m:1 Beziehung wäre dies die Inkon-sistenzsuche auf der Seite der Mastertabelle, die ja in einer solchen Beziehung minde-stens einen Detailsatz haben müßte.

Jetzt wollen wir uns aber einer ähnlichen Fragestellung in mx:mx Beziehungen zuwen-den.

�Aufgabe 3-1: Nicht-Abfrage

Erstellen Sie eine Abfrage k_hoertnicht_t , die eine Liste alle Themen liefert, die ei-ne Klasse nicht hört. Die Klasse wird dabei über einen Parameter eingegeben. �

Diesen Abfragetyp benötigen wir immer dann, wenn wir in einem Formular zwei Listenverwalten wollen, bei denen sich durch Pfeilschalter die Einträge hin und her schiebenlassen. So enthält die linke Liste alle Themen, die eine Klasse schon hört, während dierechte List die Restmenge enthält.

Zur Lösung der Aufgabe überlegen wir folgendes:

Matrikel Name Klassen-Nr.5 Adam 26 Bergmann 6

10 Berthold 121 Dahley 226 Droske 925 Eger 114 Franke 112 Freitag 217 Hofmann 227 Klubach 924 Kreft 2

1 Mayer 12 Müller 1

23 Ritter 228 Römer 1029 Schmeißel 1016 Schulz 2

3 Schulze 68 Schwinge 87 Zuse 1

Page 456: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 3.9 Übungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 3-60 D:\Eigene\Doku\DB\DBAcc03.doc - 970310

1. Zuerst suchen wir einmal eine Lösung, die alle Themen anzeigt, die die Klasse hörtk_hoert_t. Eigentlich benötigen wir hierzu nur die Beziehung zwischen hoert undthema. Die Klassenfelder würden sich bei einer Parameterabfrage so und so nur wie-derholen.

2. Grundsätzlich stehen uns zwei Möglichkeiten offen – die In Funktion und die JoinVerknüpfung. Erstere läßt sich negieren, so daß wir mit ihr beginnen:

SELECT DISTINCTROW thema.tnr, thema.tname FROM thema WHERE thema.tnr In (SELECT hoert.htnr FROM hoert WHERE hoert.hknr=[Klassennummer];);

3. Gesucht sind alle Themen, die in der Auswahlabfrage zur Tabelle hoert mit der rich-tigen Klassennummer auftreten. Die Abfrage liefert uns diese Liste aller Themen.

4. Jetzt müssen wir die Abfrage nur noch invertieren: SELECT DISTINCTROW thema.tnr, thema.tname FROM thema WHERE thema.tnr Not In (SELECT hoert.htnr FROM hoert WHERE hoert.hknr=[Klassennummer];);

Für eine Alternative mit der Anweisung Join müssen wir bereits einen größeren Anlaufnehmen:

1. Zuerst benötigen wir wieder eine Liste mit allen Themen, die eine Klasse hört. Es reichthier aber eine einfache Abfrage der Tabelle hoert:

SELECT DISTINCTROW hoert.htnr FROM hoert WHERE hoert.hknr=[Klassennummer];

2. Als nächstes erzeugen wir eine Tabelle mit allen Themen und einer Spalte, in der dievermerkt ist, ob die Klasse das Thema hört. Dies erreichen wir mit einem LEFTJOIN:

SELECT DISTINCTROW thema.tnr, thema.tname FROM thema LEFT JOIN [hoert_t mit Parameter] ON thema.tnr = [hoert_t mit

Parameter].htnr;

3. Zuletzt müssen wir nur noch die Themen ausblenden, die einen solchen Eintrag haben: SELECT DISTINCTROW thema.tnr, thema.tname FROM thema LEFT JOIN [hoert_t mit Parameter] ON thema.tnr = [hoert_t mit

Parameter].htnr WHERE [hoert_t mit Parameter].htnr Is Null;

Noch eine Variante gefällig? Hierzu erzeugen wir eine Tabelle mit allen Themen, dieüberhaupt gehört werden und blenden die aus, die von der gewünschten Klasse gehörtwerden:

SELECT DISTINCTROW thema.tnr, thema.tnameFROM thema LEFT JOIN hoert ON thema.tnr = hoert.htnrWHERE (((hoert.hknr)<>[Klassennummer]));

Offen bleibt weiterhin die Frage, welche der Alternativen die schneller ist.

Page 457: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 10.03.97 10:44/12.04.97 12:29 Seite: 4-I

MS Access – Formulare

4 MS Access - Formulare ................................................................................................4-1

4.1 Einfache Formulare gestalten ..............................................................................4-1

4.1.1 Formulargestaltung mit den Assistenten .........................................................4-1

4.1.2 Arbeiten mit einem Formular ...........................................................................4-5

4.1.2.1 Navigation in Tabellen..............................................................................4-5

4.1.2.2 Suche in Tabellen, Abfragen und Formularen .........................................4-6

4.1.3 Filter .................................................................................................................4-8

4.2 Steuerelemente in Formularen ..........................................................................4-11

4.2.1 Grundlagen ....................................................................................................4-11

4.2.2 Menüleiste......................................................................................................4-13

4.2.3 Liste ...............................................................................................................4-14

4.2.3.1 Automatische Verknüpfung einer Liste mit einem Feld..........................4-14

4.2.3.2 Listen als Zählfelder ...............................................................................4-18

4.2.4 Kombinationsfeld ...........................................................................................4-19

4.2.4.1 Kombinationsfeld mit fremder Tabelle....................................................4-19

4.2.4.2 Kombinationsfeld zur Tabellensuche .....................................................4-20

4.2.5 Schaltflächen .................................................................................................4-22

4.2.6 Zusatzelemente .............................................................................................4-24

4.2.7 Typ eines Steuerelementes ändern...............................................................4-25

4.3 Komplexe Formulare ..........................................................................................4-25

4.3.1 Haupt-/Unterformular .....................................................................................4-26

4.3.1.1 Generieren eines Hauptformulars mit Unterformular .............................4-26

4.3.1.2 Kombinationsfelder in Unterformularen..................................................4-29

4.3.2 Synchronisierte Formulare.............................................................................4-30

4.4 Prüfungen in Formularen ...................................................................................4-33

4.4.1 Syntax ............................................................................................................4-34

4.5 Zuordnungsformulare ........................................................................................4-34

4.5.1 1:1, 1:c Beziehungen .....................................................................................4-34

4.5.2 1:m Beziehung...............................................................................................4-34

4.5.3 m:1 Beziehung...............................................................................................4-36

Page 458: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Inhaltsverzeichnis © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-II D:\Eigene\Doku\DB\DBAcc04.doc – 12.04.97 12:29/12.04.97 12:29

4.5.4 m:m Beziehung ............................................................................................. 4-37

4.5.4.1 Eine Tabelle als Subjekt ........................................................................ 4-37

4.5.4.2 Die Verbindungstabelle als Subjekt ....................................................... 4-40

4.5.5 m:m:m Beziehung ......................................................................................... 4-42

4.5.6 Synchrone Unterformulare ............................................................................ 4-46

4.5.6.1 Programmierte Synchronisierung .......................................................... 4-46

4.5.6.2 Automatische Synchronisierung ............................................................ 4-48

4.6 Suchfunktionen .................................................................................................. 4-51

4.6.1 Direkte Suche im Kombinationsfeld .............................................................. 4-51

4.6.2 Suchfunktionen in m:m Beziehungen ........................................................... 4-53

4.6.2.1 Aufklapplisten in Unterformularen/Datenblattansichten ........................ 4-53

4.6.2.2 Aufklapplisten mit noch nicht gewählten Einträgen ............................... 4-55

4.6.2.3 m:m:m Beziehung mit Suchfunktion ...................................................... 4-57

4.6.2.4 Programmierte Suche/Zuordnung ......................................................... 4-59

4.6.3 Suchfunktionen in m:1 Beziehungen ............................................................ 4-63

4.7 Optimierung der Formularassistenten ............................................................. 4-66

4.7.1 AutoFormate selbst erstellen ........................................................................ 4-66

4.7.2 AutoFormat überarbeiten .............................................................................. 4-67

4.7.3 Standards für Steuerelemente ändern.......................................................... 4-67

4.7.4 Symbolleisten anpassen ............................................................................... 4-68

Page 459: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-1

4 MS Access – Formulare

„Von der Wiege bis zur Bahre, Formulare, Formulare“

In diesem Kapitel wollen wir uns mit der Oberflächengestaltung beschäftigen. Hierbei gehtes um das Anlegen von Formularen für die Datenerfassung aber auch für die Anzeigeusw.

) Anmerkung: In (hoffentlich) allen Formularen ist folgende Ereignisprozedur einprogram-miert:

Private Sub Form_Load()'Formular wird geöffnet Me.Caption = Me.Caption + " [" + gibname(gibdbpfadname()) + "]"

'so nur NameEnd Sub 'Form_Load

Sie sorgt dafür, daß beim Laden in der Titelleiste eines Formulars immer derName der Datenbank ergänzt wird. Dies hilft bei der Zuordnung der Bei-spieldatenbanken.

4.1 Einfache Formulare gestalten

In Access Version 2.0 benötigten wir immer eine Abfrage als Grundlage eines Formulars.Ab der Version 7.0 können wir Formulare auch direkt erstellen.

4.1.1 Formulargestaltung mit den Assistenten

Das Anlegen eines Formulars ist mit Hilfe des Formularassistenten recht einfach. Hierzurufen wir aus dem Datenbankfenster die Formulare auf und aktivieren die Funktion Neu.

Als erstes müssen wir den Tabellentyp die Tabelle oderdie Abfrage eingeben, für die wir ein Formular anlegenwollen (Bild 4.1-1).

Daran erkennen wir, daß wir Formulare immer nur fürein Objekt anlegen können. Wir erinnern uns abergleichzeitig, daß es bereits bei der AbfrageverarbeitungSchwierigkeiten mit der Neueingabe von Datensätzengegeben hat, wenn z. B. zwei Tabellen beteiligt waren.Wir beginnen daher mit einer „harmlosen“ Tabelle. Diessind alle Tabellen, die keine oder nur eine 1- Bezie-hung zu anderen Tabellen haben, d. h. Mastertabellensind. Eine solche Tabelle ist klasse . Wir könnenKlassen anlegen, ohne dabei Rücksicht auf andere Ta-bellen nehmen zu müssen. Bei den Studenten ginge

dies natürlich auch, obwohl es durchaus sinnvoll sein kann, diese in einem Arbeitsgangeiner Klasse zuzuordnen. Somit sind auch mc-Tabellen Kandidaten für die ersten For-mulare.

Bild 4.1-1: Festlegung des For-mulartyps und der Tabel-le/Abfrage

Page 460: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.1 Einfache Formulare gestalten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-2 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Die Formulartypen haben folgende Bedeutung

Typ WirkungEntwurfsansicht Erstellt ein neues Formular ohne den Einsatz eines Assi-

stentenFormularassistent Assistent zur Formulargenerierung aus den Feldern einer

oder mehrerer Tabellen/AbfragenAutoFormular: Einspal-tig

Assistent zur Formulargenerierung aus den Feldern einerTabelle/Abfrage in einspaltiger (satzweiser) Darstellung

AutoFormular: Tabella-risch

Assistent zur Formulargenerierung aus den Feldern einerTabelle/Abfrage in tabellarischer Darstellung

AutoFormular:Datenblatt

Assistent zur Formulargenerierung aus den Feldern einerTabelle/Abfrage in Datenblattdarstellung

Diagrammassistent Assistent, der ein Formular mit Diagramm erstellt.Pivot-Tabellen-Assistent

Assistent, der ein Formular aus einer Excel-Pivot-Tabelle er-stellt.

Wir markieren für das Formular den Formularassistenten und starten damit eine Transak-tion, d. h. eine Kette verbundener Fenster. Diese führt uns zu einem hoffentlich befriedi-genden Ergebnis. Das folgende Beispiel könnten wir auch automatisch erstellen lassen.Wir benutzen aber den Assistenten, um den Umgang mit ihm zu üben.

Im ersten Fenster dieser Kette wählen wir dieFelder aus, die wir bearbeiten wollen. Dieskann einzeln > oder in Gruppen >> (d. h.

alle) geschehen (Bild 4.1-2). Hierbei könnenwir z. B. auch weitere Tabellen oder Abfragenhinzuziehen, so daß wir nicht auf die zuerstgewählte Tabelle beschränkt sind.

Das nächste Fenster erlaubt uns das Layoutfestzulegen (Bild 4.1-3). Hierbei steht uns dieeinspaltige Darstellung (d. h. ein Datensatzmit seinen benannten Feldern), die Tabel-lendarstellung und das Datenblatt zur Verfü-gung. Die letzten beiden Layouts ähneln sichstark. Hier werden in einem Formular mehre-re Datensätze dargestellt.

Bild 4.1-2: Darzustellenden Felder wählen

Bild 4.1-3: Formular-Layout

Page 461: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-3

Über den Stil (Bild 4.1-4) können wir dieDarstellung der Fensterelemente variieren.Der Assistent bietet uns hier eine Fülle vonVarianten.

Nun geben wir dem Formular noch einensinnfälligen Namen, der dann in der Titellei-ste des Formulars auftaucht (Bild 4.1-5) undstellen es endgültig fertig.

Je nach dem weiteren Vorgehen können wirdas Formular gleich mit Daten ausprobierenoder im Entwurfsmodus öffnen.

Da wir das For-mular noch bear-beiten wollen,klicken wir dieOption DenFormul a-rentwurfverändern an.In diesem Fallerscheint derFormulareditor(Bild 4.1-6). Es ist aber kein Problem, vonder Formulardarstellung in die Entwurfsdar-stellung zu wechseln und umgekehrt.

In der Entwurfsdarstellung erkennen wir bereits Formularkopf und Detailbereich. DerFormularfuß ist noch verdeckt. Besonders in Berichten haben wir noch eine Gruppierungdes Detailbereiches in Seitenkopf, eigentlicher Detailbereich und Seitenfuß.

Zum besseren Verständnis werdendie nebenstehenden Bezeichnun-gen (Bild 4.1-7) eingeführt. Im we-sentlichen werden wir uns auf denDetailbereich konzentrieren. Dortfinden wir derzeit alle ausgewähltenFelder. Rechts daneben ist das Ei-genschaftsfenster (Bild 4.1-8) zusehen. Dieses enthält alle Eigen-schaften des jeweiligen Steuerele-mentes. Beim Öffnen sind dies dieEigenschaften des Formulars. Klik-ken wir dagegen ein Textfeld an,dann ändert sich diese Liste.Gleichzeitig wird das angeklickte

Element markiert.

Bild 4.1-4: Wahl des Stils

Bild 4.1-5: Festlegung des Formularkopfes

Bild 4.1-6: Formularedi-tor mit generierten Fel-dern

Bild 4.1-7: Bezeichnungen

Formularfuß

Formularkopf

Detailbereich

Page 462: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.1 Einfache Formulare gestalten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-4 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Je nachdem, wo wir das Ele-ment anklicken werden die Be-zeichnung und das Textfeldmarkiert oder nur eines von bei-den. Dabei ändert sich auch dieForm des Cursors (Doppelpfeil,Hand, Zeigefinger). Dies zeigtuns, daß beide Felder zusam-mengehören. So können wirdem Bezeichnungsfeld eineSchnelltaste zuweisen, die aberdafür sorgt, daß der Cursornicht auf es selbst sondern auf

das nachfolgende Textfeld positioniert wird, denn nur dieses läßt eine Eingabe zu. Esheißt übrigens Textfeld, da es nur Eingabe von Texten zuläßt. Zum Glück erfolgt eineautomatische Wandlung, so daß uns dies nicht besonders stört.

Markieren Sie nun das Bezeichnungsfeld Klassen-Nr.: allein und ändern Sie die Ei-genschaft Beschriftung auf &Klassen-Nr.:. Sofort wird in der Anzeige das Kunterstrichen und damit als Schnelltaste markiert. Wir können in Zukunft sofort mit derTastenkombination

� � direkt in das Textfeld springen.

In den Textfeldern finden wir die Bindung der Steuerelemente an Tabellenelemente dar-gestellt. Hierdurch wird das Textfeld mit einer Tabellenzelle verknüpft, deren Inhalt esspäter in ihm anzeigen soll. Den Namen des Tabellenelementes wird gleichzeitig in dieEigenschaft Steuerelementinhalt eingetragen, über den diese Verknüpfung erfolgt.

Wir können nun die Felder noch herumschieben, umbenennen und mit Schnelltasten ver-sehen usw. Um den Entwurf schließlich zu prüfen, klicken wir die Ikone Formulara n-sicht an. Es erscheint das fertige Formular mit dem ersten Datensatz der Tabelle.

Dabei fällt uns auf, daß der Cursor in der Klassennummer steht, obwohl diese als Zählfeldnicht veränderbar ist. Ein Tastenanschlag erzeugt nur ein müdes Pieps. Daher ist es an-gebracht, das Feld mit Aktiviert: Nein, Gesperrt: Ja aus der Bearbeitung her-auszunehmen. Ggf. ändern wir die Rahmenart, Farbe usw. so, daß dies für den Benutzerdeutlich wird. Über Fenster|Größe an Formular anpassen können wir die Ränderso setzten, daß alle Elemente sichtbar sind.

Bild 4.1-8: Eigenschaftsfenster eines Feldes

Page 463: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-5

4.1.2 Arbeiten mit einem Formular

4.1.2.1 Navigation in Tabellen

Neben den schon bekannten Feldern taucht beim Aktivierendes Formulars eine Tabellenlaufleiste am unteren linken Randauf (Bild 4.1-9). Diese zeigt uns die Position des Tabellencur-sors an. So wollen wir einen Zeiger auf eine Zeile der aktuellenTabelle bezeichnen. Denken Sie jedoch daran, daß die Tabelleauch ein Dynaset einer Abfrage sein kann, also eine temporäreTabelle. Somit zeigt der Tabellencursor nicht unbedingt auf ei-nen Datensatz einer Tabelle sondern auf mehrere Datensätzein verschiedenen Tabellen.

Durch Klicken auf die Symbole der Tabellen-laufleiste können wir folgende Ergebnisse erzielen (von links nach rechts)

− Sprung auf den Tabellenanfang. auch � �− eine Zeile zurück, auch �− eine Zeile vorwärts, auch �− Sprung auf das Tabellenende, auch � �− Sprung auf den ersten freien Datensatz.

Blättern wir über das Ende hinaus oder klicken wir die rechte Ikone an, so erscheint eineleere Maske mit der Bezeichnung (AutoWert) in der Klassennummer. Dies ist offen-sichtlich die Maske zur Neueingabe. Bevor wir nun neue Datensätze eingeben, wollen wiruns noch ein wenig mit den vorhandenen Datensätzen beschäftigen. Dabei stellen wirfolgende Eigenschaften fest

1. Das Zählfeld Klassen-Nr. läßt sich nicht verändern.2. Alle anderen Felder können wir im Rahmen der Gültigkeitsregeln verändern. Bei Feh-

lern erscheinen genau die Fehlermeldungen, die wir bereits beim Tabellenentwurf ein-gegeben haben.

3. Die Veränderungen in einem Datensatz werden sofort wirksam, wenn wir den Tabel-lencursor verschieben.

4. Drücken wir dagegen � , so wird der alte Feldinhalt wiederhergestellt.5. Wir springen mit � von Textfeld zu Textfeld und mit � wieder zurück.

Nun ist es bei der zu erwartenden Datenmenge sicher sehr mühsam, sich durch die vie-len Datensätze zu klicken. Wir benötigen eine schnelle Suchfunktion. Uns ist aufgefallen,daß in der Tabellenlaufleiste auch das mittlere Feld Datensatz: veränderbar ist, ob-wohl es nicht vom angesprungen wird. Geben wir dort eine Satznummer ein undverlassen das Feld (z. B. mit ), dann erscheint sofort die gewünschte Tabellenzeile.

Einerseits können wir uns natürlich die Satznummern nicht merken, andererseits fragenwir uns, was geschieht mit den Satznummern, wenn wir einen Datensatz löschen. Lö-schen? Wie soll denn das geschehen? Wenn wir in einem Feld drücken, verschwin-det ein Zeichen aber nicht der Datensatz. Unter Bearbeiten finden wir die Option L ö-schen gegraut. Wie soll das Löschen eines Datensatzes also funktionieren? Unser Blickfällt auf Bearbeiten| Datensatz markieren. Lösen wir diese Option aus, so wird

Bild 4.1-9: Bearbei-tungsfelder eines For-mulars

Tabellenlaufleiste

Zeilenmarker

Page 464: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.1 Einfache Formulare gestalten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-6 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

der Zeilenmarker dunkel (Bild 4.1-9). Der Datensatz ist markiert. Jetzt erscheint auch dieOption Bearbeiten| Löschen bzw. die Taste � wird wirksam.

Natürlich sollten wir keinen Datensatz lö-schen, den wir schon mit Studenten oderThemen versorgt haben, sonst erhalten wireine freundliche Meldung (Bild 4.1-10).

Sie werden sicher noch ein paar löschbareKlassen finden. Dabei bemerken Sie, wie

sich die Anzahl der Datensätze verringert und gleichzeitig die Numerierung verschiebt.Das Suchen nach der Datensatznummer ist also nicht die optimale Lösung. Wir versu-chen es daher mit dem Klassennamen, weil die Klassennummer natürlich auch eher pro-blematisch ist.

) Tip: Am Zeilenmarker erkennen Sie auch den Bearbeitungszustand des Daten-satzes. Sobald Sie Veränderungen vornehmen, verändert sich das Dreieckin einen Schreibstift. Eine Bewegung des Tabellencursors schreibt dann dieDaten zurück. � stellt dagegen den alten Datenbestand wieder her. DerStift wird wieder zu einem Dreieck.

4.1.2.2 Suche in Tabellen, Abfragen und Formularen

Wir öffnen die Tabelle klasse, positionie-ren den Cursor im Namensfeld und klicken aufdie Ikone Suchen bzw. drücken � . Soforterscheint eine Suchmaske (Bild 4.1-11). DieseSuchfunktion ist sehr allgemein, d. h. wir findendie Ikone bei der Darstellung von Tabellen, Ab-fragen und auch Formularen. In die Suchmaskegeben wir nun unseren Wunsch ein.

Dabei fällt auf, daß die vorgegebene Formatie-rung des Feldes (einfügte Zeichen) nicht be-achtet wird. Der Hintergrund hierfür liegt in derOption Alle Felder. Mit ihr können wir so-zusagen eine Textsuche über die ganze Breiteder Tabellenzeile erzwingen. In diesem Fall wäre eine Formatierung wenig hilfreich. DieSuche erfolgt also auf den tatsächlichen Satzinhalt und nicht auf dessen formatierte An-zeige.

Unser Blick streift wie üblich über das Fenster und fällt auf Formatierung beachten.Sollte dies eine Lösung bringen? Angeklickt ergibt sich keine Veränderung im Suchfeld.Auch bei der Neueingabe eines Suchbegriffes wird die Formatierung nicht beachtet. Dafürfindet die Funktion jetzt keine Datensätze mehr. Erst wenn den Klassennamen genaurichtig formatiert eingeben, also mit allen Leerstellen, ist die Suche wieder erfolgreich.Was sagt den die Online-Hilfe dazu?

Bild 4.1-10: Überwachung der Integrität

Bild 4.1-11: Suchmaske und Treffer

Page 465: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-7

Formatierung beachtenGibt an, ob die Suche formatierte Daten enthält. Klicken Sie auf Ja, so sucht Microsoft Access nachden Daten in der Form, wie sie formatiert und angezeigt werden. Klicken Sie auf Nein, so suchtMicrosoft Access nach den Daten, wie sie in der Datenbank gespeichert sind, was nicht immer derDarstellung auf dem Bildschirm entspricht. Die Voreinstellung ist Nein.Mit dieser Funktion können Sie die Suche auf Daten in einem bestimmten Format beschränken.Klicken Sie z.B. auf Ja, und geben Sie im Argument Suchen nach den Wert 1.234 ein, um den Wert1.234 in einem Feld zu finden, das für die Verwendung von Kommas formatiert ist. Klicken Sie aufNein, wenn Sie 1234 eingeben möchten, um nach Daten in diesem Feld zu suchen.Wenn nach einem Datum suchen möchten, klicken Sie auf Ja, um das Datum mit der exakten For-matierung zu finden, z. B. 01. Juli 1965. Wenn Sie auf Nein klicken, geben Sie das Datum im Argu-ment Suchen nach in dem Format ein, das im Dialogfeld Ländereinstellungen der MicrosoftWindows-Systemsteuerung eingestellt ist. (Dies ist das kurze Datumsformat, wie in der Register-karte Datum des Dialogfeldes Ländereinstellungen angezeigt.) Ist z.B. das kurze Datumsformat aufT/M/JJ eingestellt, so können Sie 7/1/65 eingeben, damit Microsoft Access alle Einträge in einemDatumsfeld sucht, die dem 7. Juli 1965 entsprechen, unabhängig von der Formatierung des Feldes.

Na, ja, irgendwie ist da aber doch der Wurm drin. Wir wollen doch nicht nur nach demDatum suchen.

Die Suche beginnt mit dem Datensatz aufdem der Tabellencursor steht. Die AktionWeitersuchen meldet sich am Ende derTabelle mit Bild 4.1-12.

Die anderen Optionen der Suche sind weit-gehend selbsterklärend. Wir können denSuchbegriff entweder vollständig, am Anfang des Feldes oder im Feld suchen. Dabeikönnen wir die Groß-/Kleinschreibung beachten oder nicht. Auch die Suchrichtung kön-nen wir umdrehen.

Bei großem Datenbestand werden Sie natürlich schnell bemerken, daß die Geschwindig-keit sehr stark von der Art der Suche abhängt. Entscheidend ist dabei, ob

− vollständig in einem Index− unvollständig (also am Feldanfang, im Feld) in einem Index− in einem nichtindizierten Feld− oder gar in allen Feldern

gesucht wird. Die Geschwindigkeit nimmt jedesmal ab.

Die Suchfunktion startet immer mit der Einstellung, daß im aktuellen Feld der gesamteFeldinhalt gesucht werden soll. Welcher Benutzer kennt aber schon die exakte Schreib-weise von Namen, insbesondere von Firmennamen usw. Angenehm wäre es, wenn wirdie Parameter an unsere Wünsche anpassen könnten. Dies gelingt uns durch ein eigenesMakro, das wir der Fernglas-Ikone hinterlegen.

�Wir wollen mit einem Makro die Suchfunktion so ändern, daß sie immer einen Teil desFeldinhaltes sucht. Hierzu gehen wir in folgenden Schritten vor:

1. Wir öffnen zu diesem Zweck im Datenbankfenster die Registerkarte Makro und klik-ken auf Neu. In das Eingabefenster geben wir nun folgende Werte ein

Bild 4.1-12: Abfrage nach teilweiser Suche

Page 466: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.1 Einfache Formulare gestalten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-8 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Aktion KommentarAusführenMenübefehl Menüleiste=Formular, Menün ame=Bearbeiten,Befehl=Suchen,Unterbefehl=Tastaturbefehle Tastenfolge=%VT %A %S (Teil des Feldinhaltes Aktuelles Feld Eingabefeld

aktivieren), Wa r ten=Nein

Nach der Auswahl der Aktionen öffnen sich im unteren Teil des Formulars verschiede-ne Felder, deren Inhalte hier im Kommentar vermerkt sind. Diese Werte geben wir je-weils ein.Nähere Einzelheiten zur Makroprogrammierung werden im entsprechenden Kapitelgegeben. Hier sei zur Erklärung nur angeführt, daß wir zuerst den (vorhandenen) Men-übefehl auswählen. Anschließend simulieren wir mit Tastaturbefehle die Benut-zereingabe. Das % Zeichen steht dabei für die � Taste, d. h. wir aktivieren mit %Vdas Kombinationsfeld: Vergleichen:. Mit T wählen wir den Eintrag Teil desFeldinhaltes. Die Tasteneingabe %A schaltet die Option Aktuelles Feld ein.Mit %S stellen wir den Cursor ins Suchfeld, damit der Benutzer gleich einen Wert ein-geben kann.

2. Wir speichern das Makro unter dem Namen SuchenFeld .3. Wollen wir nun ein einer Datenbank immer mit diesen Einstellungen suchen, dann öff-

nen wir ein Formular dieser Datenbank und rechtsklicken auf die Symbolleiste. Es er-scheint das Kontextmenü, in dem wir Anpassen… auslösen. Es handelt sich um dieübliche Anpaßfunktion für Symbolleisten unter Windows. Um nun die Standardsucheaufzulösen, ziehen wir erst einmal die Fernglas-Ikone aus der Symbolleiste heraus.

4. Anschließend müssen wir unser neues Makro einfügen. Zu diesem Zweck wiederholenwir den Vorgang in umgekehrter Richtung. Dieses Mal wählen wir aber im Dialog Sy m-bolleisten anpassen die Kategorie Alle Makros (ganz am Ende der Liste)aus. In der Liste Objekte suchen wir das Makro SuchenFeld und ziehen es mitder Maus auf die Symbolleiste. Das Makro wird nun erst einmal mit der Standardikonefür Makros als Schriftrolle angezeigt.

5. Mit einem Rechtsklick auf die Ikone öffnen wir das Kontextmenü mit verschiedenenOptionen zum Verändern der Schaltfläche. Über Schaltflächensymbol wählen…gelangen wir zum Dialog Schaltflächensymbol wählen. Nun noch ein Klick aufdas Fernglas sowie OK und die neuen Einstellungen werden ab sofort aktiv. Wir kön-

nen das Anpassen beenden. �

Über diesen Weg haben wir für die aktuelle Datenbank die Suchfunktion in allen Anwen-dungen umgestellt, also für Tabellen, Abfragen und Formulare.

4.1.3 Filter

Die Größe des zu bearbeitenden Dynasets können wir auch mitHilfe eines Filters einschränken. Access unterstützt drei Arten zumFiltern von Datensätzen: Auswahlbasierter Filter,Formularbasierter Filter und

Spezialfilter/sortierung. Die Wahl der Methode ist abhängig von den Kriterien,denen die gefilterten Datensätze entsprechen sollen, und von der gewünschten Sortier-reihenfolge (sofern sortiert werden soll).

Die Filter Auswahlbasierter Filter und Formularbasierter Filter sind dieeinfachsten Methoden zum Filtern von Datensätzen. Wenn wir im Formular, Unterformu-lar oder Datenblatt leicht ein Auftreten des Wertes finden und markieren können, den diegefilterten Datensätze enthalten sollen, verwenden wir Auswahlbasierter Filter,

Page 467: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-9

ansonsten verwenden wir Formularbasierter Filter. Mit diesen Filtern können wirauch Abfragen erstellen. Dazu speichern wir einfach den fertigen Filter als Abfrage. ZumErstellen komplexer Filter verwenden wir dagegen Spezialfilter/sortierung.

Auswahlbasierter Filter

1. Zuerst suchen wir in einem Feld eines Formulars, Unterformulars oder Datenblattsnach einem Auftreten des Wertes, den die gefilterten Datensätze enthalten sollen.

2. Wir markieren den Wert und klicken dann in der Symbolleiste auf die erste Ikone.Durch die Art und Weise, wie wir den Wert auswählen, bestimmen wir, welche Daten-sätze der Filter ausgibt:Auswahl AusgabeGesamter Inhalt eines Feldes (oder Set-zen des Cursors in ein Feld, ohne etwaszu markieren)

Gesamter Inhalt des Feldes, das demmarkierten Feldinhalt entspricht

Teil eines Wertes beginnend beim erstenZeichen in einem Feld

Der Wert in diesem Feld beginnt mit denZeichen, die Sie beim Auswählen markierthaben

Teile eines Wertes beginnend hinter demersten Zeichen in einem Feld

Alles oder einen Teil eines Wertes in die-sem Feld, das dieselben Zeichen enthält,die Sie beim Auswählen markiert haben

3. Wenn wir die Datensatzgruppe weiter einschränken möchten, wählen wir einen weite-ren Wert aus und klicken dann erneut auf die erste Ikone. Dies wiederholen wir solan-ge, bis das Ergebnis befriedigend ist.

Formularbasierter Filter

1. Hier klicken wir in der Datenblatt- oder Formularansicht zuerst auf die mittlere Ikone,um zum Fenster Formularbasierter Filter zu wechseln. Dies ist das leereDatenblatt oder Formular.

2. Wir klicken auf das Feld, für das wir die Auswahlkriterien festlegen möchten.3. Wir geben die Kriterien ein. Hierbei hilft uns die Rolloikone, die bei den meisten Fel-

dern auftaucht, wenn wir sie fokussieren.• Zum Suchen nach Datensätzen, in denen ein Kontrollkästchen, eine Umschaltfläche

oder ein Optionsfeld aktiviert oder nicht aktiviert ist, klicken wir auf das Kontrollkäst-chen oder die Schaltfläche, bis die gewünschte Einstellung gesetzt ist. Wenn wir ineine neutrale Einstellung zurück wechseln möchten, so daß die Schaltfläche oderdas Kontrollkästchen nicht als Kriterium zum Filtern von Datensätzen verwendetwird, klicken wir erneut, bis die Schaltfläche oder das Kontrollkästchen wieder abge-blendet erscheint.

• Zum Suchen nach Datensätzen, in denen ein bestimmtes Feld leer oder nicht leerist, geben wir Ist Null bzw. Ist Nicht Null in das Feld ein.

• Zum Suchen nach Datensätzen unter Verwendung eines Kriterienausdrucks gebenwir den Ausdruck in das entsprechende Feld ein. Wir können zum Erstellen desAusdrucks jedoch auch den Ausdruckseditor verwenden.

4. Geben wir in mehr als einem Feld Werte an, so entspricht dies einer Und Verknüpfung.5. Zum Angeben von Alternativwerten für die Datensätze, die der Filter ausgeben kann,

klicken wir am unteren Rand des Fensters auf die Registerkarte Oder. Diese Karte istaktivierbar sobald wir ein erstes Kriterium definiert haben.

Page 468: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.1 Einfache Formulare gestalten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-10 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Der Filter gibt die Datensätze aus, in denen alle in der Registerkarte Suchen Nachdefinierten Werte oder alle auf den folgenden Registerkarten Oder definierten Werteenthalten sind.

5. Zuletzt klicken wir in der Symbolleiste auf die letzte Ikone, um den Filter zu aktivieren.6. Beim Schließen der Abfrage oder des Formulars wird der Filter automatisch gespei-

chert.

Spezialfilter / sortierung

1. Wir aktivieren eine Datenblatt- oder Formularansicht.2. Dann lösen wir den Menüpunkt Datensätze|Filter � |Spezialfilter/sor-tierung aus. Es erscheint der Abfrage-Editor.

3. Durch Doppelklick wählen wir die Felder hinzu, die wir zum Festlegen der Werte oderKriterien benötigen, anhand derer der Filter nach Datensätzen sucht.

4. Für die ausgewählten Felder können wir eine Sortierreihenfolge festlegen.5. In der Kriterienzeile für die ausgewählten Felder geben wir nun einen Wert, nach dem

gesucht werden soll, oder einen Ausdruck ein.6. Sind wir mit den Eingaben fertig, so klicken wir auf die Ikone mit dem Trichter, um den

Filter anzuwenden.

fh10 Wir wollen z. B. nur die Studienrichtung TI bearbeiten,die bereits Studenten enthält. Hierzu geben wir neben-stehendes Filter als Spezialfilter ein (Bild 4.1-13). Übereinen Rechtsklick auf das Feld Kriterien könnenwir den Ausdruckseditor aufrufen, um die Filterbedin-gung einzugeben.

Durch Aktivieren des Filters erhalten wir eine Auswahlder Klassen, die die Kriterien erfüllen, wie es oben imBild zu sehen ist.

Logisch gesehen handelt es sich um eine dynamischeWHERE Klausel, zusätzlich angewandt auf unsere Ta-belle.

Speichern wir den Filter mit dem Formular ab, dannwird er in eine Abfrage umgewandelt. Rufen wir dasFormular wieder auf, so sehen wir, daß Access unsereEingabe verändert hat (Bild 4.1-14).

Bild 4.1-13: Filter

Page 469: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-11

4.2 Steuerelemente in Formularen

4.2.1 Grundlagen

fh11→ Wir müssen nun irgendwann daran denken, daßeine Anwendung auch selbständig, d. h. nicht un-ter der vollständigen Oberfläche von Access selbstlaufen sollte. Dies bedeutet, daß die vielen bereitsvorhandenen Ikonen auf dem eigenen Formularangeordnet werden müssen usw.

Das ganze Problem fällt unter den Begriff derSteuerelemente. Steuerelemente sind sichtbareObjekte auf einem Fenster, die nicht weiter verfei-nert werden können. Ein Fenster selbst kann wie-derum Fenster erzeugen usw. Dies können dieSteuerelemente nicht. Zwei Steuerelemente haben wir bereits kennengelernt. Es sind dasBezeichnungsfeld und das Textfeld. Aber es gibt noch mehr.

Eine Reihe der Steuerelemente können wir an Tabellenfeldern binden, andere Steuere-lemente an ganze Tabellen. Es gibt aber auch ungebundene Steuerelemente, so wie wirsie für die Parametereingabe kennengelernt haben. Diese stellen quasi Variablen in un-serm Programm dar. Als dritte Alternative finden wir die berechneten Steuerelemente.

Steuerelemente werden normalerweise über die Toolbox im Entwurfsmodus an-gesprochen. Fehlt dort die Anzeige, dann müssen wir sie mit Ansicht|Toolboxaktivieren. Es steht auch eine Ikone Toolbox zur Verfügung (Bild 4.2-1).

Wir wollen uns nur auf einige wichtigeSteuerelemente konzentrieren, die wir fürdas weitere Vorgehen benötigen.

Alle Steuerelemente plazieren wir auf derArbeitsfläche, indem wir sie anklickenund in der Arbeitsfläche aufziehen.

Doppelklicken wir die Ikone, so könnenwir mehrere gleichartige Steuerelementeerzeugen, ohne die Toolbox neu anklik-ken zu müssen.

Bild 4.1-14: Gespeichertes Filter

Objekt auswählenBezeichnungsfeldOptionsgruppe

KombinationsfeldBefehlsschaltfläche

Optionsfeld

ObjektfeldSeitenumbruchLinie

Steuerelementass.TextfeldUmschaltflächeKontrollkästchenListenfeldBildGebund. ObjektfeldUnterformularRechteck

Bild 4.2-1: Toolbox

Page 470: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-12 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

�Wollen wir z. B. die beiden Ikonen zum Umschalten derAnsichten vom Formular zum Datenblatt und umgekehrt in un-sere Kopfzeile einbauen, dann stehen uns zwei Möglichkeitenoffen. Wir können mit dem Befehlsschaltflächenassistenten ar-beiten oder ohne ihn. Ohne Assistent gehen wir folgenderma-ßen vor:

1. Formular im Entwurfsmodus aufrufen2. Befehlsschaltfläche in den Kopf positionieren3. Eigenschaften der Befehlsschaltfläche ändern auf

Name: sfformularBeschriftung leerBild: Symbol MS-Access Formular aus der Liste auswählen.

4. Die Schritte 2 und 3 für die Schaltfläche sfdatenblatt wiederholen.5. In die Formularansicht wechseln und über Fenster|Größe an Formular anpa s-

sen das Fenster optimieren. �

Die Alternative, den Assistenten zur Unterstützung heranzuziehen, betrachten wir im Ka-pitel 4.2.5. Die Aktionen, mit denen eine solche Schaltfläche auf ein Benutzerereignisreagiert, müssen wir auf das Programmierkapitel verschieben.

Die Eigenschaften der Steuerelemente legen wir in einem gesonderten Fenster fest. DasFenster öffnen wir durch Rechtsklick auf das Steuerelement im Kontextmenü unter demPunkt Eigenschaften. Das Fenster enthält 5 Register:

FormatDatenEreignisAndereAlle

wobei Alle die Vereinigung der vier anderen Registerkarten ist. Alle Eigenschaftszeilensind ähnlich aufgebaut. Zuerst finden wir die feste Eigenschaftsbezeichnung. Dahinter istein Wertefeld, in das wir unsere individuelle Einstellung eingeben können. Ist der Werte-bereich begrenzt, so finden wir das Feld als Kombinationsfeld vor, d. h. sobald wir es fo-kussieren erscheint eine Rolloikone zum Ausklappen der Liste. Rechts neben dem Wer-tefeld finden wir hin und wieder eine Editorikone (drei Punkte), die auf einen Eingabeedi-tor verzweigt.

Eine Reihe von Eigenschaften finden wir bei fast allen Steuerelementen. So können wirfür fast alle Elemente einen Statuszeilentext angeben, der als Hilfe in der Status-zeile angezeigt wird, wenn wir das Element fokussieren. Ergo finden wir die Eigenschaftnur bei Elementen, die fokussiert werden können.

Eine ähnliche Eigenschaft ist SteuerelementTip Text, die einen Text für die„Sprechblase“ des Elements enthält. Diese Sprechblase erscheint, wenn wir die Maus aufdem Element verharren lassen.

�In der Entwurfsansicht werden einige zusätzliche Lineale usw. angezeigt. Damit entsprichtdas Fenster nicht dem endgültigen Fenster. Die Anpassung erfolgt in folgenden Schritten:

Bild 4.2-2: Einfügen vonSteuerelementen

Page 471: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-13

1. Wir wechseln in die Formularansicht des Fensters.2. Wir rufen die Menüoption Fenster| Größe an Formular anpassen auf.3. Wie wechseln wieder in die Entwurfsansicht. Beim Schließen des Formulars werden

die neuen Abmessungen gespeichert. �

Damit wird die Größe des Fensters auf seine Ansichtsgröße eingestellt. Diese Abmes-sungen bleiben erhalten. Immer wenn wir die Elemente auf dem Formular verändern oderverschieben, können wir die Formulargröße entsprechend korrigieren.

4.2.2 Menüleiste

Wo Schaltflächen, d. h. Reaktionen auf Ereignisse existieren, sollte eine Menüleiste nichtweit sein (Bild 4.2-2). Denn wir sollten alle Ereignisse auch über eine Menüoption auslö-sen können. Schließlich zeigt uns dies Access in beeindruckender Weise. Wie aber kön-nen wir einem Formular eine Menüleiste verpassen?

�Es handelt sich um eine Eigenschaft des gesamten Formulars. Also markieren wir dasFormular und klicken die Ikone Eigenschaften an. Dann gehen wir in folgendenSchritten weiter:

1. Wir markieren das ganze Formular, d. h. keine derBalken Formularkopf, Detailbereich bzw.Formularfuß darf markiert (dunkel) sein. Einegünstige Stelle ist eine Fläche links oben. Sobald wirsie anklicken, erscheint ein schwarzes Viereck.

2. Wir öffnen dann das Eigenschaftsfenster des ge-samten Formulars (Bild 4.2-3).

3. In der Zeile Menüleiste klicken wir auf dasEditorschaltfeld rechts außen.

4. In einem ersten Fenster werden uns nun eine Viel-zahl von fertigen Menüvorlagen angeboten (Bild 4.2-4).

5. Jetzt sind wir im Menü-Editor (Bild 4.2-5). �

Der Menü-Editorbietet uns, wieschon erwähnt, ei-ne Fülle fertigerMenüleisten an, diewir z. T. aus Ac-cess selbst kennen.Wir können nun einganz neues Menüaufbauen oder einbestehendes Menü abwandeln. Wählen wir z. B. dasMenü Formular aus, dann werden wir einige Op-

tionen einfach löschen. So möchten wir z. B. in einer Multiuser Umgebung nicht, daß je-der Benutzer seine private Datenbank aufbaut. Vielmehr soll er ausschließlich mit derzentralen Datenbank auf dem Server arbeiten. Also löschen wir aus der Gruppe &Dateiden Punkt Neue Date nbank anlegen heraus.

Bild 4.2-3: Formulareigen-schaften

Bild 4.2-4: Auswahl der Menüvor-lage im Menüeditor

Page 472: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-14 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Umgekehrt können wir neue Optionen eingeben.Dazu schaffen wir über die SchaltflächeEinfügen schaffen wir uns an geeigneter Stelle

einen Platz. Stellen mit den Pfeiltasten die Ebe-ne des Eintrages ein und ergänzen die Felder imKopf des Formulars. Im Feld Beschriftung:tragen wir den Text ein. Hierbei markieren wirmit dem kaufmännischen Und & die Schnellta-ste. Im Feld Aktion: können wir auswählen,ob eine Standardoption der Access Menüs, einselbstgeschriebenes Makro oder eine Prozeduraufgerufen werden soll. Diesen können wir dannArgumente übergeben. Im Feld Statusze i -lentext geben wir dem neuen Menüpunkt ei-ne Kurzhilfe mit.

Wenn wir jetzt den Menüeditor beenden, so möchte er den Namen des neuen Menüswissen. Mit diesem Namen und den Bezeichnungen für die einzelnen Menüpunkte legtder Editor jeweils einen Eintrag in den Makros an. Dies kontrollieren wir, indem wir dasRegister Makros öffnen.

Starten wir nun das Formular in Formularansicht, so besitzt es selbst kein Menü, da esein MDI-Fenster von Access ist. Wir erkennen aber, daß sich die Menüleiste von Accessselbst verändert hat. Jetzt ist unsere neue Menüleiste wirksam.

4.2.3 Liste

Wenn wir unser Formular k kritisch betrachten, so haben wir mit dem Feld Sprecher:noch so unsere Probleme. Soll der Benutzer erst in die Studentendatei gehen, dort denStudenten suchen, sich die Nummer merken, in das Klassenformular wechseln und danndie Nummer hier eingeben, um endlich an den Namen zu kommen? Wäre es nicht bes-ser, er könnte sich eine Tabelle aller Studenten, am besten sogar nur der Studenten deraktuellen Klasse anschauen? Könnte in dieser Liste der Sprecher nicht markiert sein?Wäre es sogar möglich, die Klassensprecherwahl hier sofort einzugeben?

Für solche Probleme haben wir mehrere Alternativen. Entweder wir verwenden eines dervorgefertigten komplexen Formulare, hier z. B. ein Haupt-/Unterformular oder wir fügenpassende Steuerelemente wie Listen, Kombinationsfelder usw. manuell ein.

Mit Hilfe einer gebundenen Liste erstellen wir eine sehr schnelle Lösung. Dabei könnenwir entweder die Liste mit einem Feld automatisch verbinden oder diese Aufgabe mit eini-gen wenigen Programmanweisungen programmieren.

4.2.3.1 Automatische Verknüpfung einer Liste mit einem Feld

Wir legen ein neues Formular aus der Tabelle klasse an und wechseln in den Ent-wurfsmodus.

Bild 4.2-5: Menüeditor

Page 473: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-15

Um eine automatische Verknüpfung her-zustellen, klicken wir in der Toolbox die Iko-ne für den Steuerelementassistenten an.Gleiches erreichen wir über den MenüpunktAnsicht|Steuerelementassistent...

Wir ziehen eine Liste auf unserem Formularauf. Sogleich meldet sich der Steuerelement-assistent mit einer ersten Abfrage (Bild 4.2-6). Er will wissen, ob die Liste aus einer Ta-belle oder Abfrage gefüllt wird, durch denProgrammierer frei gefüllt wird oder ob essich um eine Suchliste handelt.

Als nächstes fragt er dann, aus welcher Tabelle die Liste gefüllt werden soll (Bild 4.2-7).Durch Anklicken der Optionenfelder können wir die Auswahl der angezeigten Objekte sosteuern, daß er uns die vorbereiteten Abfragen anzeigt. Hier wählen wir s_in_k aus.

Wenn wir nun die Studententabelle ausge-wählt haben, will der Assistent die Felder wissen, die in der Tabelle erscheinen sollen(Bild 4.2-8).

Wir wählen die beiden ersten Spalten aus.Die anderen Felder sind ja bereits im For-mular sichtbar und müssen nicht noch ein-mal erscheinen.

Wir wissen, daß wir snr in den Klassen-sprecher übernehmen wollen. Eine Anzeigeder Nummer soll aber nicht unbedingt erfol-gen. Vielmehr wollen wir nur den Namen inder Liste darstellen. Dies gelingt uns, indemwir im nächsten Fenster einfach die 1. Spalteauf Null zuziehen (Bild 4.2-9)

Bild 4.2-6: Steuerelementassistent

Bild 4.2-7: Eingabe der QuelleBild 4.2-8: Auswahl der angezeigten Felder

Bild 4.2-9: Festlegung der Spaltenbreite

Page 474: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-16 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Jetzt müssen wir festlegen, welches Feld (nämlich snr) in das Formular übernommenwerden soll (Bild 4.2-10), wenn wir in der Liste einen Namen anklicken, und wohin esübernommen werden soll (in ksprecher) (Bild 4.2-11).

Schlußendlich schließen wir die Transaktionmit der Eingabe des Listennamens ab (Bild4.2-12).

Natürlich wollen wir noch einen Blick auf dieEigenschaften des Feldes werfen (Bild 4.2-13).

Die Verknüpfung mit dem Formular erfolgtüber den Wert ksprecher der EigenschaftSteuerelementinhalt. Der Inhalt derListe wird durch eine SQL-Anweisung fest-gelegt. Diese ist recht einfach zu verstehen:

SELECT DISTINCTROW [s_in_k].[snr],[s_in_k].[sname] FROM [s_in_k];

Von den beiden Spalten wird dieerste Spalte über die EigenschaftGebundene Spalte anksprecher gebunden. DieseSpalte wird aber mit der Spalten-breite 0 cm angezeigt, so daß siein der Liste selbst nicht zu sehen ist.Trotzdem ist sie vorhanden undkann verwendet werden.

Wenn wir nun das Formular testen,so können wir in den Klassen blät-tern. In der Studentenliste wechseltder Leuchtbalken automatisch aufden aktuellen Klassensprechern.

Bild 4.2-10: Auswahl des Quellfeldes Bild 4.2-11: Auswahl des Zielfeldes

Bild 4.2-12: Festlegung der Listenbezeich-nung

Bild 4.2-13: Eigenschaften des Listenfeldes

Page 475: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-17

Ein Klick auf einen anderen Studenten und schon wird die Klassensprechernummer ge-ändert. Diese sperren wir jetzt natürlich für die direkte Eingabe (schließlich haben wir einevornehme Zuordnung programmiert).

Ein Problem sehen wir aber sofort. Die Liste der Studenten ist eine vollständige Liste undnicht die der zugeordneten Studenten. Wir haben die falsche Abfrage gewählt (bzw. wirmüssen eine neue Abfrage gestalten).

Wir benötigen also eine Abfrage, die die Klassennummer als Parameter übernimmt undnur die Studenten der Klasse auswählt. Hierzu kopieren wir die Abfrage s_in_k um indie Abfrage s_in_k Parameterabfrage. Zur Beschränkung der Klassen tragen wir indas Kriterienfeld [Formulare]![k mit s_liste ]![ knr ] ein. Bei dieser Gelegen-heit können wir die Sortierung streichen, die für eine Klasse wenig Sinn macht.

Nun kopieren wir das Formular k mit s_liste alle in k mit s_liste um. Dannkommt der schwierigere Schritt. Die Auswahl der Liste muß nun auf die neue Abfrage er-folgen. Also wird die SQL-Anweisung geändert auf:

SELECT DISTINCTROW [s_in_k Parameterabfrage].[snr], [s_in_kParameterabfrage].[sname] FROM [s_in_k Parameterabfrage];

Der nächste Probelauf zeigt uns nun die Studenten der 1. Klasse. Der Klassensprecherist ordnungsgemäß markiert. Leider wechselt die Liste beim Blättern in den Klassen nicht.Sie wird nicht aufgefrischt.

Jetzt ist ein Makro oder eine Ereignisprozedur gefragt. Dazu müssen wir nur wissen, wel-ches Ereignis wir wählen müssen. Beim Blättern in den Klassen tritt ein Datensatzwechselauf, der zu einer neuen Anzeige führt. Es ist also zu vermuten, daß das Ereignis BeimAnzeigen ausgeführt wird. Dieses Ereignis suchen wir in den Formulareigenschaftenund aktivieren den Codeeditor. Er meldet sich mit einer Rahmenprozedur, in die wir eineeinzige Zeile eintragen:

Private Sub Form_Current() s_liste.RequeryEnd Sub 'Form_Current

Diese Anweisung sagt dem Listenfeld, daß es sich neu aufzubauen hat, d. h. eine neueAbfrage s_in_k Parameterabfrage starten soll.

Jetzt sollt das Formular ordentlich arbeiten. Wer aber sucht, der findet immer noch etwas.Wie können wir den Klassensprecher löschen? Schließlich haben wir die Beziehung als1:c Beziehung angelegt, also sollte das c auch nachträglich realisierbar sein. Diese Auf-gabe lösen wir mit einer Befehlsschaltfläche im Kapitel 4.2.5.

Page 476: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-18 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

4.2.3.2 Listen als Zählfelder

Eine auf den ersten Blick überra-schende Anwendung einer Listebesteht darin, nur die Anzahl einerBeziehung darzustellen. Wir nutzenhierbei den internen Mechanismusvon Access zum Aufbau einer Listeaus. Eine Liste muß, bevor siedargestellt wird, als interne Tabelleangelegt werden. Daher ist dieBasis einer Liste eine Tabelle odereine Abfrage. Diese Abfrage mußsich in irgendeiner Form an denInhalt des Formulars anpassenlassen. Daher versorgt Access dieAbfrage mit den notwendigenParametern, führt sie aus und stellt das Ergebnis dar.

Wollen wir nun z. B. in unserer Klassenverwaltung neben der gespeicherten Anzahl vonStudenten die wirklich gezählte darstellen, dann müssen wir nur die Länge der internenTabele in ein Anzeigefeld übertragen.

Im Detail hängen die möglichen Lösungen vom jeweiligen Anwendungsfall ab. Wird, wiein unserem Beispiel, die Liste selbst angezeigt, so genügt es, deren Länge direkt in einemTextfeld mit Hilfe der Eigenschaft

Steuerelementinhalt: =[s_liste].[ListCount]

auf die Anzahl der Listenelemente zu setzen.

Wenn wir dazu ein neues Formular k mit s_liste Zählfeld anlegen, dannfunktioniert die Parameterübergabe an die Abfrage s_in_k Parameterabfrage nichtmehr, weil diese das angegebene Formular nicht findet. Wir müssen also eine neueAbfrage erstellen und die SQL-Anweisung auf diese Abfrage umschreiben.

Dann können wir ein neues Textfeld anlegen, dessen EigenschaftSteuerelementinhalt wir, wie angegeben, eingeben (das = nicht vergessen!).

Wollen wir dagegen die Liste selbst nicht sehen, dann wäre es mit Kanonen gegenSpatzen geschossen, wenn wir eine Liste anlegen, diese unsichtbar machen würden, nurum deren Anzahl zu bestimmen. Hierzu würde es genügen, eine Abfrage zu starten, dieuns nur Anzahl liefert. Damit diese aber mit der Klassen-Nummer des Formulars versorgtwird, muß das Ergebnis an ein Listenfeld gebunden werden. Die Anfrage k_anzahl istrelativ leicht erstellt:

Feld: snr sknrTabelle: student student

Funktion: Anzahl BedingungSortierung:

Anzeigen:Kriterien [Formulare]![k Zählfeld]![ knr ]

Bild 4.2-14: k_eingabe mit s_Liste

Page 477: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-19

Das Auswahlfeld ist sknr, dem wir als Parameter ein Formularfeld mit der Klassen-Nummer übergeben. Von einem beliebigen zweiten Feld, z. B. snr bestimmen wir dieAuftretenshäufigkeit über die Funktion Anzahl.

Wir fügen nun ein Listenfeld (kein Textfeld!!) in unser Formular ein und geben derEigenschaft Datensatzherkunft: den Wert

Select [Anzahl von snr] From [k_anzahl Parameterabfrage];

Diese SQL-Anweisung liefert nur einen Wert, der dann in der Liste dargestellt wird.Hierdurch vermeiden wir umfangreiche Zwischentabellen usw. Wir müssen aber über einesolche Anweisung gehen, da die Zuweisung = [k_anzahl Parameterabfrage]![Anzahl

von snr] nicht funktioniert! Nun hat die Liste wieder das Problem der Aktualisierung, alsomüssen wir eine winzige Ereignisprozedur einfügen, damit beim Blättern die wahreAnzahl aktualisiert wird (die Liste heißt gezählt ):

Private Sub Form_Current() gezählt.RequeryEnd Sub 'Form_Current

4.2.4 Kombinationsfeld

Ihnen gefällt das mit der Liste nicht so besonders? Sie wollen lieber den Klassensprecherdirekt angezeigt sehen? Die Studentennummern stören Sie? Außerdem solle derKlassensprecher schneller über seinen Namen zu finden sein! Nun, hier hilft uns einKombinationsfeld weiter.

4.2.4.1 Kombinationsfeld mit fremder Tabelle

Wir schalten den Steuerelementassistenten ein und beginnen mit einem Formular, dasnur die Klasseninformationen enthält. Z. B. kopieren wir das letzte Formular k um in kmit s_kombi .

Wir können entweder das Feld ksprecher löschen oder umwandeln. Um denKombinationsfeldassistenten kennenzulerenen, löschen wir das Feld ziehen ein neuesKombinationsfeld auf. Da die gesamte Transaktion genauso wie bei einer Liste erfolgt,sollen nur die Eingaben kurz aufgeführt werden:

Bei der Quelle geben wir vorerst einenPlatzhalter ein, weil wir dieses Mal direkteine Quelle als SQL-Anweisung eingebenwollen. Dazu öffnen wir das Formular in derEntwurfsansicht, wählen dasKombinationsfeld an und löschen denEintrag in der EigenschaftDatensatzherkunft.

Anschließend rufen wir den Abfrage-Editor auf. Wir wählen nur die Tabelle studentaus und doppelklicken auf snr, sname sowie sknr (Reihenfolge entsprechend der

Nr Fenster Eingabe/Auswahl1 Inhalt aus Tabelle2 Quelle s_in_k als Dummy3 Felder snr,sname

4 Spalten 1. Spalte auf 0 cm5 zu übertragen snr

6 Zielfeld ksprecher

7 Bezeichner Sprecher:

Page 478: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-20 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Abfrage s_in_k einhalten. Im letzten Feld schalten wir die Anzeige ab und geben alsKriterium [knr] ein (Bild 4.2-15). Die neue SQL-Anweisung

SELECT DISTINCTROW student.snr, student.sname FROM student WHERE(((student.sknr)=[knr])) ORDER BY student.sname;

bestätigen wir. Die anderen Felder müssen nicht geändertwerden, da sich die richtigen Werte besitzen sollten:Spaltenzahl: 2, Spaltenbreiten: 0cm;2,54cm,Gebundene Spalte: 1. Ggf. müssen die Wertekorrigiert werden.

Starten wir nun das Formular, dann erhalten wir dasgewünschte Ergebnis, d. h. es erscheint in Kombifeld mitdem Namen des Klassensprechers. Auch die Liste zeigtdie Studenten der Klasse. Aber leider wieder nur bei derersten Klasse.

Hierzu müssen wir wieder ein wenig programmieren:

Sub Form_Current ()'aktualisiert Liste, wenn Formularinhalt wechselt DoCmd.Requery "s_liste"End Sub 'Form_Current

Auch diese Syntax ist erlaubt, indem sie eine Methode vonDoCmd (einen Makro von Access) aufruft.

4.2.4.2 Kombinationsfeld zur Tabellensuche

Als nächstes wollen wir ein Kombinationsfeld für die schnelle Suche nach dem Klassen-namen einsetzen. Da wir u. U. den Klassennamen ändern wollen, müssen wir zwischenden Tabellenfeld und dem Suchfeld unterscheiden. Wir legen daher mit dem Steuerele-mentassistenten ein zusätzliches Kombinationsfeld an.

Zuerst kopieren wir das Formular k mit s_kombi in k mit k_suche um und fügenein zusätzliches Kombinationsfeld ein, dessen Bezeichnung wir löschen.

Wenn wir die Felder wie nebenstehendfüllen, dann wird das Kombinationsfeldbeim Durchlaufen der Klassen im Haupt-formular zwar mitgeführt. Es läßt sich auchaufklappen, nur eingeben können wirnichts, bzw. wir können in der Aufklapplistekeine andere Klasse anklicken. Accessweist auf die Verknüpfung mit dem Zielfeldhin. Diese automatische Verknüpfungmüssen wir lösen, um eine Suche zu ermöglichen. Dazu löschen wir den Inhalt vonSteuerelementinhalt. Wenn wir das Feld schon lösen, dann können wir auch dieSortierung der Liste durch ORDER BY klasse.kname verbessern. Dies tippen wir ein

Bild 4.2-15: Abfrage-Editor

Bild 4.2-16: Formular mitKombinationsfeld

Nr Fenster Eingabe/Auswahl1 Inhalt aus Tabelle2 Quelle klasse

3 Felder knr,kname

4 Spalten Schlüssel ausblenden5 zu übertragen knr

6 Zielfeld knr

7 Bezeichner Suche:

Page 479: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-21

oder ergänzen es über den Abfrage-Editor. Im Kombinationsfeld erscheint der Text U n-gebunden.

Starten wir jetzt unser Formular, so ist das Such-feld leer. Sobald wir das erste Zeichen eingeben(z. B. eine 9 ), erscheint der erste Listentreffer imTextfeld schwarz unterlegt. Sobald wir eine weite-res Zeichen eingeben, das zu einem nicht vorhan-denen Namen gehört, verschwindet die Hinterle-gung. Im Textfeld steht kein Treffer mehr. Natür-lich können wir auch die Liste aufklappen und di-rekt suchen (Bild 4.2-17).

Wenn wir nun das Suchfeld verlassen, passiert nichts. Das Hauptformular zeigt sichdurch unsere Listensuche unbeeindruckt. Wir müssen noch eine Suche des Datensatzeserzwingen, wenn wir das Suchfeld verlassen. Hierzu dient folgende Ereignisprozedur

Sub suche_k_AfterUpdate()'Eingabe im Suchfeld If Not IsNull(suche_k) Then knr.Enabled = True knr.SetFocus DoCmd.FindRecord suche_k, A_START, False, A_DOWN, False, A_CURRENT, True kname.SetFocus knr.Enabled = False End IfEnd Sub 'suche_k_AfterUpdate

Sie wird aktiviert, wenn wir das Feld suche_k verändert haben. Ist das Feld nicht leer,dann wird der Cursor auf knr gesetzt. Es erfolgt ein Suchvorgang in der Datenbank.Anschließend wird der Cursor auf das Feld kname positioniert. Die Fokussierung kannaber nur dann erfolgen, wenn das Feld aktivierbar ist. Somit müssen wir das Feld erstaktivierbar machen.

Sicher wundern Sie sich, daß wir nicht im Feld kname suchen sondern in knr . Diesliegt darin begründet, daß unsere Liste eine unsichtbare Spalte mit der Klassennummerenthält, die wir durch die Festlegung Gebundene Spalte = 1 nach außen exportie-ren. Über diese erfolgt dann Suche in der Datenbank. Wenn Sie dies selbst überprüfenmöchten, dann geben Sie doch einfach

Debug.Print suche_k

ein. Im Direktfenster sehen Sie dann die Satznummer und nicht den eingegebenen Klas-sennamen.

Wenn die Suche also im Zentralspeicher über eine Liste erfolgt, so fragen wir uns so-gleich, ob dann eine Indizierung der Tabelle nach dem Klassennamen überhaupt sinnvollist. Erkennt Access, daß wir als Sortierung kname vorgegeben haben und daß die Ta-belle über dieses Attribut einen Index besitzt? Fragen über Fragen, auf die das Handbuchkeine Antwort gibt.

Bild 4.2-17: Suche in den Klassen

Fehler

Page 480: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-22 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Beim Testen fällt uns auf, daß mit dem Blättern das Suchfeld nicht nachgeführt wird. Auchhier liegt der Grund in der gelösten Bindung. Wir müssen daher selbst das Suchfeld ak-tualisieren. Das Ereignis kennen wir aber schon:

Sub Form_Current()'aktualisiert Liste, wenn Formularinhalt wechselt DoCmd.Requery "s_liste" suche_k.Value = knrEnd Sub 'Form_Current

Wir ergänzen nur eine Zeile, um das zweite Kombinationsfeld zu positionieren. Hier giltdas gleiche wie beim Rückgabewert. Die Bindung erfolgt über knr .

4.2.5 Schaltflächen

Wollen wir später auf die unter Access vorgefertigten Symbolleisten, Menüleisten usw.verzichten, so müssen wir unsere Formulare rechtzeitig mit Ikonen versehen. Dies ist beiden Standardikonen sehr einfach über den Schaltflächenassistenten möglich. Mit denStandardikonen ist auch immer eine Standardikone verknüpft (und umgekehrt).

Wollen wir z. B. auf die Tabellenlaufleiste verzichten, dann benötigen wir einige Befehls-schaltflächen. Wir kopieren das Formular k um in k mit Schaltflächen. In derEntwurfsansicht vergrößern wir den Formularkopf. Sollte er nicht sichtbar sein, so aktivie-ren wir in vorher mit Ansicht|Formularkopf / fuß

Bei eingeschalteter Assistentenikone erzeu-gen wir eine erste Befehlsschaltfläche imFormularkopf. Es öffnet sich das erste Fen-ster des Befehlsschaltflächen-Assistenten(Bild 4.2-18). Mit der Wahl der Aktion er-scheint eine Standardikone.

Gefällt uns diese Ikone nicht, so können wiraus den vorhandenen Symbolen eine ande-re Ikone wählen (Bild 4.2-19) oder gar überDurchsuchen eine völlig neue Ikone zuord-

nen.

Zu guter Letzt vergeben wir noch einen Na-men für die Schaltfläche (Bild 4.2-20).

Bild 4.2-18: Festlegen der Schaltfläche

Bild 4.2-19: Auswahl des Ikonenbildes

Page 481: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-23

und schon ist die Schaltfläche auf unserem Formular (Bild4.2-21). Hier können wir die Größe noch etwas reduzie-ren, sie neu positionieren usw. Sehr interessant ist es, beieinem Formular mit Standardschaltflächen in die Modulnzu schauen. Dort ist Quellcode angekommen. Typisch

sind folgende Sequenzen

Sub sf_neu_Click() On Error GoTo Err_sf_neu_Click DoCmd.GoToRecord , , acNewRecExit_sf_neu_Click: Exit SubErr_sf_neu_Click: MsgBox Err.Description Resume Exit_sf_neu_ClickEnd Sub 'sf_neu_Click

Sie enthalten eine vorbereitete Fehlerbehandlung, rufen i. a. eine Aktion auf und beendendas Ereignis. Für das Löschen eines Datensatzes finden wir:

Sub sf_löschen_Click() On Error GoTo Err_sf_löschen_Click DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70Exit_sf_löschen_Click: Exit SubErr_sf_löschen_Click: MsgBox Err.Description Resume Exit_sf_löschen_ClickEnd Sub 'sf_löschen_Click

Und das Formular beenden wir mit

Sub sf_beenden_Click () On Error GoTo Err_sf_beenden_Click DoCmd QuitExit_sf_beenden_Click: Exit SubErr_sf_beenden_Click: MsgBox Error$ Resume Exit_sf_beenden_ClickEnd Sub 'sf_beenden_Click

Bild 4.2-20: Namensvergabe

Bild 4.2-21: Positionierungeiner Schaltfläche

Page 482: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.2 Steuerelemente in Formularen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-24 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Nun wollen wir noch einmal auf unser Formular k mit s_kombi zurückkommen, beidem wir noch immer nicht den Sprecher löschen können. Hierzu legen wir eine Schaltflä-che an, die wir mit Sprecher löschen beschriften. Im Ereignis Beim Klicken pro-grammieren wir

Sub sfsprecherloeschen_Click ()'bearbeitet Schaltfläche, aktualisiert Liste ksprecher = Null s_liste.RequeryEnd Sub 'sfsprecherloeschen_Click

Auch beim Löschen des Sprechers müssen wir das Kombinationsfeld auffrischen. Nur soverschwindet der alte Sprechername aus dem Feld und der Liste.

4.2.6 Zusatzelemente

Access 7.0 verfügt im Menü Einfügen über mehrere Optionen, mit denen wir Seiten-zahlen bzw. Datum und Uhrzeit einfügen können. Mit der Auswahl einer der Optionen öff-net sich ein weiteres Fenster zur Einstellung der Eigenschaften der Felder. Hierbei müs-sen wir jedoch beachten, daß die Bereitstellung der Daten nur einmal beim Öffnen desFormulars erfolgt. Wollen wir also z. B. eine „echte Uhr“ auf unserem Formular laufen las-sen, dann müssen wir den Inhalt des Feldes regelmäßig erneuern.

�Hierzu gehen wir in folgenden Schritten vor:

1. Wir öffnen unser Formular in Entwurfsansicht.2. Über Einfügen|Datum und Zeit… erzeugen wir ein Textfeld zur Datumsanzeige.

Die Darstellung legen wir im aufspringenden Fenster nach unserem Geschmack ein.Es erscheint ein Textfeld mit der Eigenschaft Steuerelementinhalt:=Format(Datum();"Datum, lang") & " " & Format(Zeit();"Zeit,lang"). Den Namen des Feldes legen wir mit Zeit fest. Machen wir dies in allenFormularen, so können wir ein einziges Makro für alle Zeitfelder definieren.

3. Wir positionieren das Feld an eine geeignete Stelle des Formulars (z. B. in den For-mularkopf.

4. Damit die Zeit regelmäßig aufgefrischt wird, müssen wir den Feldinhalt über das Zeit-geberereignis des Formulars korrigieren. Dieses Ereignis ruft ein Makro auf, daß denFeldinhalt neu schreibt. Zu diesem Zweck legen wir aus dem Register Makro desDatenbankfensters ein neues Makro mit dem Namen Zeit anzeigen an. Es be-steht nur aus einer Aktion:

Aktion KommentarAktualisierenDaten Feld Zeit aktualisieren

mit der das Zeitfeld neu geschrieben wird.5. Um dieses Makro ablaufen zu lassen, suchen wir das Ereignis Bei Zeitgeber in

der Eigenschaftsliste des Formulars. In das Eingabefeld geben wir Zeit anzeigenein oder suchen das Makro in der Suchliste.

6. Mit der Eigenschaft Zeitgeberintervall legen wir den Abstand zwischen denAuffrischungen in ms fest. Ein Wert 1000 läßt die Uhr im Sekundentakt laufen. �

Page 483: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-25

4.2.7 Typ eines Steuerelementes ändern

Ebenfalls aber der Version 7.0 ist es möglich, den Typ eines Steuerelementes zu ändern,so daß das falsche Element nicht gelöscht und neu eingeben werden muß. Damit könnenwir sehr schnell mit Hilfe des AutoFormular-Assistenten ein Formular erstellen und nach-träglich ändern.

Der Assistent legt für jedes Attribut ein Textfeld an. Rechtsklicken wir nun auf eines derSuchfelder (z. B. Studentennamen), so finden wir im aufspringenden Kontextmenü denEintrag Ändern zu � mit einem Untermenü, das uns die möglichen Transformationenanzeigt. Ein Klick auf Kombinationsfeld wandelt das Textfeld in ein Kombinations-feld, das natürlich zur Suche gut geeignet ist. Mir müssen aber beachten, daß nur die Ei-genschaften übernommen werden, die im Textfeld vorhanden sind. Eine Verknüpfung zurTabelle geht verloren.

�Beispiel:

1. Im Register Tabellen des Datenbankfensters markieren wir die Tabelleprofessor und erzeugen über Einfügen|Aut oFormular ein Formular, das wirunter dem Namen p abspeichern.

2. Die Eigenschaft Beschriftung des Formulars ändern wir auf Eingabe: Profe s-sor.

3. Wir ändern durch Rechtsklick auf das Textfeld pname den Typ dieses Steuerele-mentes auf Kombinationsfeld. Die Eigenschaft Name, die dabei verlorengeht,setzen wir wieder auf pname.

4. Starten wir das Formular in der Formularansicht, so verhält es sich zuerst einmal wievorher. Die Aufklappliste des Namens ist aber leer und enthält nicht die erwartetenProfessorennamen.

5. Wir klicken daher in der Eigenschaft Datensatzherkunft die Editorikone an. Eserscheint der Eingabeeditor für SQL-Anweisungen. Zuerst müssen wir die Tabel-le/Abfrage angeben, aus der die SQL-Anweisung generiert werden soll. Hier reicht unsdie Tabelle professor .

6. Aus der Tabelle wählen wir die zwei Felder pnr und pname durch Doppelklick aus.Bei pname ändern wir noch die Sortierung in Aufsteigend. Nun schließen wir denEditor und bestätigen die Sicherheitsabfrage. Im Wertefeld finden wir nun den Eintrag:SELECT DISTINCTROW professor.pnr, professor.pname FROM professor ORDER BY

professor.pname;

7. Aktivieren wir nun das Formular, so zeigt die Aufklappliste die Professorennummernstatt der Namen an. Diesen Fehler können wir über die Eigenschaften Spaltenzahl:2, Spaltenbreite: 0cm;4cm korrigieren. (Eine Alternative besteht darin, die Rei-henfolge der Felder in der SQL-Anweisung zu tauschen).

8. Ein Test zeigt uns, daß das Kombinationsfeld keinen Namen anzeigt, also nicht aufden aktuellen Datensatz positioniert wird. Ein Wechsel des Namens positioniert umge-kehrt nicht das Formular neu. Diese Suchvorgänge wollen wir zusammengefaßt im Ka-pitel 4.6 behandeln, da hier doch einiges zu programmieren ist. �

4.3 Komplexe Formul are

Wir wollen uns nun den weiteren Formulartypen von Access zuwenden. Besonders wich-tig erscheint dabei das schon erwähnte Kombinationsformular.

Page 484: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.3 Komplexe Formulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-26 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

4.3.1 Haupt-/Unterformular

4.3.1.1 Generieren eines Hauptformulars mit Unterformular

Das Anlegen eines Haupt-/Unterformulars wollen wir am Beispiel der Klassenbelegungdemonstrieren. Hierzu kopieren wir unser Formular k nach k mit s_unterformularund öffnen es im Entwurfsmodus.

Jetzt aktivieren wir die Assistentenikone inder Toolbox und ziehen ein Unterformularauf unserem Hauptformular auf. Es er-scheint ein erstes Fenster (Bild 4.3-1), indem wir entscheiden können, ob ein Un-terformular aus einem neuen oder einemvorhandenen Formular erstellt werden soll.

Im folgenden Fenster gibt es zwei Bereiche.Wir müssen festlegen, welche Tabel-le/Abfrage im Unterformular dargestelltwerden soll und welche Felder selektiertwerden (Bild 4.3-2).

Wir wählen die Tabelle student aus. Da-bei merken wir uns, die Auswahl der Stu-denten mit einer Abfrage weiter einzu-schränken. Mit >> wählen wir alle Felder

aus. Da das Hauptformular die Klasse ent-hält, verzichten wir auf sknr.

Als nächstes kommt der entscheidendeSchritt, die beiden Formulare zu verknüp-fen. Der Assistent schlägt hierbei im auto-matischen Betrieb eine sinnvolle Verknüp-fung vor (Bild 4.3-3), die wir bestätigenkönnen.

Nach Eingabe des Unterformularnamenssind wir bereits fertig und können den Assi-stenten schließen (Bild 4.3-4).

Bild 4.3-1: Auswahl des Quelltyps für dasUnterformular

Bild 4.3-2: Auswahl der Quelle und der Fel-der für das Unterformular

Bild 4.3-3: Auswahl der Verknüpfung

Page 485: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-27

Im Gegensatz zur Version 2.0 speichert dieVersion 7.0 ohne Rückfrage unter dem glei-chen Namen, der als Bezeichnung desUnterformulars erscheint. Dies ist bei vielenFormularen sehr verwirrend.

Benennen wir aber das Unterformular in kmit s_unterformular Unterform u-lar um, dann müssen wir auch den Ver-weis im Hauptformular ändern. Diese Na-mengebung hat den Vorteil, daß Hauptfor-mular und Unterformulare im Datenbank-fenster hintereinander stehen.

Mit hoher Wahrscheinlichkeit ist das Layout des Unterformulars nicht zufriedenstellend.Die Überschriften stimmen nicht, die Schriftart, Spaltenbreite usw. sowie die Anzeige derTabellenlaufleiste sind unbefriedigend oder störend. Dies können wir ab alles im Unter-formular selbst ändern. Hierzu wird es aufgerufen und wie ein normales Formular bear-beitet. Dies geht aber nur bedingt, da das Formular in Tabellenform angelegt wurde. Beiden Spaltenüberschriften benutzt Access die Einträge aus der Eigenschaft Beschri f -tung des Tabellenentwurfs. In der Datenblattansicht erscheinen aber die Feldbezeich-ner.

Wir probieren es daher zu Fuß und legen über AutoFormular ein einspaltiges Formu-lar für die Tabelle student unter dem Namen k mit s_unterformular Unte r -formular1 an. In ihm löschen wir das Feld sknr , schalten die Navigationsschaltflä-chen ab, korrigieren die Schriftarten usw. Zum Schluß binden wir dieses Formular in dasTrägerformular k mit s_unterformular ein.

Beim Testen bemerken wir sehr schnell, daß pro Klasse nur der Klassensprecher er-scheint. Die automatische Verknüpfung hat also doch Schwierigkeiten mit der Doppelver-knüpfung der beiden Tabellen. Tatsächlich finden wir Einträge in den Eigenschaften deseingebetteten Feldes

Eigenschaft automatisch geändertVerknüpfen von sknr;snr sknrVerknüpfen bis knr ; ksprecher knr

die wir ändern müssen.

) Achtung: Ist die Eigenschaft Extras| Optionen|Register Tabellen/Abfragen| AutoVerk nüpfung aktivieren eingeschaltet, so setzt Access bei je-der Änderung des Formulars die Verknüpfung wieder zurück. Damit wir kei-ne unliebsamen Überraschungen erleben, schalten wir dieses Kontrollkäst-chen aus.

Bild 4.3-4: Namensvergabe

Page 486: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.3 Komplexe Formulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-28 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Wir sollten nun das Feld für Un-terformular nicht zu schmal ma-chen, da wir sonst die Tabellen-laufleiste abschneiden. Im Ent-wurf sehen wir übrigens nur ei-nen Platzhalter für die Unterta-belle, so daß wir deren Layoutspäter in der Formularansichtnoch einmal korrigieren sollten(Bild 4.3-5).

Ein Problem ergibt sich dabei.Die Tabelle wird nicht genau indas vorgesehene Feld hinein-passen. Wir können zwar in der

Formularansicht die Spaltenbreiten anpassen, müssen das aber offensichtlich bei jedemAufruf des Hauptformulars tun, da die Spaltenbreiten im Unterformular abgespeichertwerden. Diese Informationen wird aber beim Beenden des Hauptformulars verworfen.

Das Layout des Unterformularsstammt aus dem Formular selbst(Bild 4.3-6). Solange wir diesesnicht anpassen, erscheint dasUnterformular immer in seinerursprünglichen Form. Wir kön-nen nun ins Unterformularwechseln und dort überFormat|Spaltenbreite die-se hinfummeln.

Bild 4.3-5: Layout Hauptformular

Bild 4.3-6: Einpassen des Unterformulars

Bild 4.3-7: Formatierung

Bezug zum Unterformular

Breite vom Benutzer verändert

Bildlaufleisten desUnterformulars

Breite wird hier festgelegt

Page 487: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-29

Daß es sich hierbei um eineinterne OLE-Verbindung zwi-schen den beiden Formularenhandelt, erkennen wir am Stan-dardnamen Eingebettetund am Verhalten des Unter-formulars im gegebenen Fen-ster. Wir können über die Opti-on Ansicht| Unterformu -lardatenblatt die Anzeigeim Teilfenster von der Tabellen-in die Feldansicht umschalten(Bild 4.3-8), wenn wir mit demCursor im Unterformular ste-hen. Wir sehen nur einen Ausschnitt aus dem Unterformular. Dieses verhält sich aberansonsten wie im Originalzustand.

Schauen wir noch einmal in der Formularansicht auf das Unterformular. Es erscheinentatsächlich nur die Studenten der angezeigten Klasse. Wir können neue Studenten ein-geben und gleich der Klasse zuordnen. Dies ist aber nur dadurch möglich, daß wir sämtli-che Felder eingeben (außer dem Fremdschlüssel). Ansonsten würden uns die Gültigkeits-regeln von student einen Strich durch die Rechnung machen und die Neueingabe ab-lehnen.

4.3.1.2 Kombinationsfelder in Unterformularen

Der Entwurf des neuen Unterformulars in der einspaltigen Darstellung statt der Daten-blattdarstellung verleitet uns nun zum Experimentieren. Was geschieht eigentlich, wennwir in ein Unterformular die verschiedenen Sichtobjekte wie Kombinationsfeld, Listenfeld,Optionenfeld und Kontrollkästchen einfügen und anschließend dieses Unterformular inseiner Datenblattdarstellung in ein Hauptformular einbinden? Diese Frage ist natürlichsehr eng mit dem Übergang von Formular- auf Tabellendarstellung verknüpft.

In der Dokumentation zur Datenblattdarstellung finden wir bereits einen ersten Hinweis.Im Datenblatt eines Formulars hält Access immer Platz frei für einen Listenfeldpfeil amrechten Ende eines als Listenfeld oder Kombinationsfeld definierten Feldes. Dieser Pfeilist jedoch nur dann sichtbar, wenn der Fokus sich in dem Feld befindet.

�Diese Felder werden also im Datenblatt besonders behandelt:

1. Zum Experimentieren kopieren wir k mit s_unterformular Unterformular1 ink mit s_unterformular Unterformular2 um.

2. Wir öffnen das Unterformular in der Entwurfsansicht und ändern das Textfeld snamemit Rechtsklick im Kontextmenü Ändern zu|Kombinationsfeld in ein Kombinati-onsfeld um. Dieses ist, wie wir schon wissen, an das Formular gebunden, zeigt alsoweiter den richtigen Studentennamen an. Die Aufklappliste ist aber leer.

Bei dieser Gelegenheit sollten wir überlegen, was wir eigentlich wollen. Das Unterformularbefindet sich im Klassenformular. Eine Suche nach einem neuen Namen muß dafür sor-gen, daß der aktuelle Student durch einen neuen Studenten ersetzt wird. Dieser neue

Bild 4.3-8: Unterformular in Felddarstellung

Page 488: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.3 Komplexe Formulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-30 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Student muß aber aus der Menge der noch klassenlosen Studenten kommen, sonstmüßten wir ihn bei seiner alten Klasse abmelden und hier neu anmelden. Geht wenig-stens der einfache Wechsel?. Um dies zu testen, gehen wir folgendermaßen vor

3. Wir programmieren unser Kombinationsfeld wie üblich. Als Datensatzherkunfterzeugen wir die SQL-Abfrage:SELECT DISTINCTROW student.snr, student.sname FROM student WHERE(((student.sknr) Is Null)) ORDER BY student.sname;

die alle klassenlosen Studenten auswählt4. Jetzt haben wir einen winzigen Widerspruch. Im Textfeld des Kombinationsfeldes soll

der aktuelle Student stehen. Dieser gehört aber sicher nicht zur Liste der klassenlosenStudenten. Ein Kombinationsfeld zeigt aber nur eines seiner Mitglieder an.

So geht es offensichtlich nicht. Dieser ganzen Problematik wollen wir uns noch einmal imKapitel 4.5 zuwenden.

4.3.2 Synchronisierte Formulare

Ein Haupt- mit Unterformular ist eine Möglichkeit, eine 1:m Beziehung darzustellen.Manchmal ist es aber nicht möglich, alle Daten auf einem Formular unterzubringen. Hierwünschen wir uns zwei getrennte Formulare, deren Datensätze synchronisiert werden.Genaugenommen handelt es sich um zwei verschiedene Synchronisationen, je nachdemwelches Subjekt wir wählen. Synchronisiert das 1-Formular, so sollten im m-Formularbeim Blättern nur die zugehörigen Datensätze zu sehen sein. Umgekehrt gibt es zu jedemm-Formular nur ein passend gefülltes 1-Formular.

Als Beispiel legen wir zwei Formulare k und s mit Hilfe des AutoFormular-Assistentenan. Hierzu klicken wir im Datenbankfenster jeweils die Tabellen klasse bzw. studentan und lösen die Menüoption Einfügen|Aut oFormular oder die Ikone Neues O b-jekt aus. In den Formularen können wir noch Kleinigkeiten (Text der Titelleiste, Deakti-vierung der Zählfelder usw.) ändern, die wir unter den angegebenen Namen speichern.

Betrachten wir nun das Formular s als Subjekt, dann führt das m-Formular das 1-Formular. In diesem Fall gibt es nur eine passende Klasse pro Student. Die Aufgabe be-steht also darin, k mit der Klasse zu öffnen, auf die in s der Fremdschlüssel sknrverweist. Hierzu steht uns eine Makroaktion SuchenDatensatz zur Verfügung, dieunter Access Basic FindRecord heißt.

�Die Makrolösung erzeugen wir in folgenden Schritten:

1. Wir wechseln im Datenbankfenster auf das Register Makros und lösen dort Neu

aus.2. In das erscheinende, leere Makrofenster geben wir nun nacheinander folgende Akti-

onszeilen ein. Dabei erscheinen im unteren Teil verschiedene, weitere Felder zur Spe-zifikation der Aktion. Diese lassen wir auf ihren Standardwerten bis auf die dargestell-ten Änderungen:AuswählenObjekt

Objekttyp: FormularObjektname: kIm Datenbankfenster: Nein

Page 489: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-31

Mit dieser ersten Aktion wechseln wir in das offene Formular k. Damit die Suche rich-tig funktioniert, müssen wir uns im passenden Feld befinden. Daher setzen wir den Fo-kus mit der Aktion:GeheZuSteuerelement

Steuerelementname: knrauf den Primärschlüssel im Formular k. Anschließend können wir die SynchronisationbeginnenSucheDatensatz

Suche nach: Formulare![s]! sknrindem wir auf den Feldinhalt von sknr im Formular s zurückgreifen. Damit ist si-chergestellt, daß die richtige Klasse zum Studenten angezeigt wird.

3. Nachdem wir das Makro unter k auswählen aufgrund s gespeichert haben, kön-nen wir es ausprobieren. Hierzu öffnen wir beide Formulare s und k. Im Daten-bankfenster aktivieren wir das Makro durch Doppelklick. Ist kein Fehler vorhanden,dann wird die Klasse auf den Eintrag beim Studenten synchronisiert.

4. Im Fehlerfall aktivieren wir im Makroeditor die schrittweise Verfolgung . Immerwenn wir das Makro (mit dem Ausrufezeichen) starten, zeigt es jetzt die einzelnen Ak-tionen an. �

Nun können wir von keinem Benutzer verlangen, daß er jedesmal das Makro aktiviert, umdie Synchronisation durchzuführen. Vielmehr sollte die Synchronisation bei jedem Satz-wechsel im Studentenformular automatisch erfolgen. Zur Lösung des Problems müssenwir ein geeignetes Ereignis auswählen, das diese Synchronisation erzwingt. Bei jedemSatzwechsel wird im Formular s das Ereignis Anzeigen aktiviert. Wir können es nut-zen, um unser Makro zu aktivieren.

�Wir ergänzen also unsere Anwendung folgendermaßen:

1. Wir öffnen das Formular S in der Entwurfsansicht und suchen die Eigenschaft BeimAnzeigen.

2. Jetzt geben wir entweder den Namen des Makros k auswählen aufgrund s einoder wählen es aus der heruntergeklappten Liste.

3. Nach dem Speichern öffnen wir wieder beide Formulare in der Formularansicht. Jetztmuß jeder Studentenwechsel zu einer Synchronisation des Klassenformulars führen.Ist das Formular k nicht geöffnet, so erhalten wir eine Fehlermeldung. Ähnliches wi-derfährt uns, wenn wir auf einen Studenten ohne Klassenzuordnung stoßen. �

Es wäre also wichtig, diese beiden Fälle in geeigneter Form abzuarbeiten. Eine Alternati-ve bestände darin, das Formular k automatisch zu öffnen. Hierzu müßten wir in unse-rem Makro vor die erste Aktion eine Zeile einfügen und die Aktion

ÖffnenFormularFormularname: k

einzufügen. Jetzt wird immer ein Klassenformular geöffnet. Die Alternative bestände darinzu prüfen, ob das Klassenformular geöffnet ist, um es dann zu synchronisieren.

�für die zweite Lösung wählen wir folgenden Weg:

1. Wir öffnen das Makro.

Page 490: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.3 Komplexe Formulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-32 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

2. Wir ergänzen eine Bedingungsspalte, indem wir entweder die Ikone oder dieMenüoption Ansicht|Bedingungen auslösen. Sofort wird vor der Aktionsspalte ei-ne Bedingungsspalte eingefügt, in der wir unsere Bedingungen eingeben können. Istdie angegebene Bedingung wahr, dann wird die Aktion ausgeführt, ansonsten wird sieausgelassen.

3. Leider gibt es keine (Makro-)Funktion, mit der wir prüfen können, ob ein Formular ge-öffnet ist. Deshalb müssen wir eine kleine Access Basic Funktion istgeöffnetschreiben, die die Anwort gibt:Public Function istgeöffnet(formularname As String) As Boolean'prüft, ob ein Formular geöffnet ist istgeöffnet = SysCmd(acSysCmdGetObjectState, acForm, formularname)End Function 'istgeöffnet

Diese Funktion erledigt verschiedene Aufgaben:− Anzeigen eines Statusanzeigers oder eines bestimmten Textes in der Statusleiste− Zurückgeben von Informationen über Microsoft Access und seine zugehörigen

Dateien− Zurückgeben des Zustands eines angegebenen Datenbankobjektes, um festzu-

stellen, ob das Objekt geöffnet ist, ob es sich um ein neues Objekt handelt oder obes geändert, aber nicht gespeichert wurde

SyntaxRückgabewert = SysCmd(Aktion[, Text][, Wert])Objektzustand = SysCmd(Aktion[, Objekttyp][, Objektname])

Hierzu rufen wir im Datenbankfenster das Register Module auf und aktivieren dasModul allgemein. Nach Eingabe der angegebenen Zeilen schließen wir den Modulwieder.

4. Nun können wir unser Makro um die Bedingungen erweitern:Bedingung Aktion Kommentar

istgeöffnet("k")=Wahr Und[Formulare]![s]![sknr] IstNicht Null

AuswählenObjekt Fokus auf Fo r mular k

... SetzenWert Klassennummer aktivi eren

... GeheZuSteuerelement Fokus auf Klassennu mmer

... SuchenDatensatz Klasse über Klasse nnummer suchen

... GeheZuSteuerelement Fokus auf Klasse nname

... SetzenWert Klassennummer deaktivieren (nicht änderbar)

... AuswählenObjekt wieder zurück zum Fo r mular s

Wir rufen die Funktion auf und prüfen sie auf wahr. Das Ergebnis verknüpfen wir mitder Abfrage, ob der Student einen Eintrag im Feld sknr besitzt. Damit nun diese Be-dingung auch auf die folgenden Zeilen wirkt, ergänzen wir in den betreffenden Zeilen… . Diese Punkte bewirken eine Wiederholung der letzten Bedingung.

4. Nun können wir einen Abschlußtest durchführen. Bei dieser Gelegenheit fällt uns auf,daß die Klassenanzeige bei Studenten ohne Zuordnung stehen bleibt. Damit sind dieDaten auf dem Bildschirm inkonsistent und führen beim Benutzer zur Verwirrung. Da erin den Klassen auch blättern kann, kommen weitere Inkonsistenzen hinzu. In irgend ei-ner Form müssen wir die fehlende Zuordnung anzeigen. �

Ein Problem können wir dadurch beseitigen, daß wir die Navigationsschaltflächen imFormular k deaktivieren. Wollen wir das nicht, so muß im Studentenformular erneut an-gezeigt werden, daß keine Synchronität herrscht.

Eine erste Idee besteht darin, mit Hilfe einer Anzeige (Kontrollkästchen) die Synchronitätanzuzeigen. Über dieses Kästchen könnte der Benutzer die Synchronisierung insgesamtein- bzw. ausschalten. Die notwendige Logik dahinter ist gar nicht so einfach zu formulie-

Page 491: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-33

ren. Es könnte ja sein, daß der Benutzer das Kontrollkästchen einschalten will, nachdemes unser Programm aufgrund der fehlenden Zuordnung ausgeschaltet hat.

Eine zweite Möglichkeit wäre das Löschen der Feldinhalte des Klassenformulars, wasaber nur dann funktioniert, wenn wir auf eine neue Klasse positionieren, um diese ggf.eingeben zu lassen.

�Wir tasten wir uns am besten langsam an die Lösung heran, indem wir die Synchronisie-rung gezielt ein- und ausschalten:

1. Wir öffnen das Formular s in der Entwurfsansicht.2. Wir wechseln mit Ansicht|Seitenkopf /-fuß in den Kopf des Formulars und zie-

hen aus der Werkzeugsammlung ein Kontrollkästchen auf das Formular, das wir be-schriften und mit dem Namen kkSynchronisation versehen.

3. Den Standardwert beim Öffnen des Formulars legen wir über die Eigenschaft Sta n-dardwert auf Falsch.

4. Wechselt der Benutzer den Wert auf Wahr, dann müssen wir ggf. das Formular köffnen (wenn es noch nicht geöffnet ist) und das Makro starten, um das Formular ksofort zu synchronisieren. Hierzu müssen wir ein weiteres Makro anlegen. DurchRechtsklick auf das Kontrollkästchen (nicht auf seine Bezeichnung!) öffnen wir dasKontextmenü und lösen Ereignis… aus. Im aufspringenden Fenster Editor au s-wählen markieren wir Makro-Editor und bestätigen das Fenster.

5. Access Basic fragt nun nach dem Namen des neuen Makros, den wir zu Synchron i -sation ein angeben. Mit der Bestätigung öffnet sich der Makroeditor.

6. Hier geben wir folgende Bedingungen und Aktionen ein:Bedingung Aktion Kommentar

Nicht istgeöffnet("k") Und[Formulare]![s]![kkSynchronisation]=Wahr

ÖffnenFormular Öffnet Formular k

[Formulare]![s]![kkSynchronisation]=Wahr AusführenMakro ruft Makro k auswählen aufgrund s auf

7. Jetzt müssen wir im Makro k auswählen aufgrund s auch noch den Zustand desKontrollkästchens berücksichtigen. Somit ändert sich dort die Bedingung aufistgeöffnet("k")=Wahr Und [Formulare]![s]![sknr] Ist Nicht Null Und

[Formulare]![s]![kkSynchronisation]=Wahr

8. Ein Abschlußtest zeigt, daß sich über das Kontrollkästchen die Synchronisation ein-bzw. ausschalten läßt. �

�Aufgabe 4.3-1:

Ändern Sie die Anwendung so ab, daß die erwähnten Fälle (fehlende Zuordnungen, Be-nutzeraktionen usw.) zu einer Anzeige der Synchronisation führen. Dabei sollte aber dieGrundeinstellung beim Durchgang durch einen klassenlosen Studenten nicht verlorengehen. �

4.4 Prüfungen in Formul aren

Kapitel wird noch bearbeitet.

Formulare dienen der Aus- aber auch der Eingabe. Dabei müssen alle Eingabedaten ingeeigneter Weise überprüft werden.

Page 492: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.4 Prüfungen in Formularen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 4-34 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

4.4.1 Syntax

4.5 Zuordnungsformulare

In diesem Kapitel wollen wir noch einmal systematisch zusammenfassen, wie die theore-tischen Beziehungen zwischen den Tabellen in der Praxis über Eingaben in Formularenrealisiert werden. Ziel sollte es dabei sein, nicht die Verbindungsschlüssel selbst einge-ben zu müssen. Vielmehr sollte für den Benutzer immer die Möglichkeit bestehen, auseiner entsprechenden Liste auswählen zu können.

Die konditionalen Beziehungen fangen wir immer mit dem Datentyp Null ab, der be-kanntlich „undefiniert“ bedeutet, d. h. wir benutzen diesen Typ häufig als Vorgabewert. BeiZahlen müssen wir dies tun, da andernfalls 0 eingesetzt wird. Dieser Wert verletzt i. a.die referentielle Integrität, insbesondere wenn der Primärindex der Nachschautabelle einZähler ist. Dieser ist garantiert nie 0.

4.5.1 1:1, 1:c Beziehungen�

Diese Beziehung wird durch einen Verbindungsschlüssel (Fremdschlüssel) in einer derEntitätstypen hergestellt. Wir gehen in folgenden Schritten vor

1. Basis des Formulars ist die Tabelle, in der sich der Verbindungsschlüssel befindet. Fürdiese Tabelle entwerfen wir ein einfaches Formular mit allen relevanten Feldern.

2. Das Feld mit dem Verbindungsschlüssel wird deaktiviert und gesperrt.3. Wir ergänzen eine Liste für die verknüpfte Tabelle und verbinden diese mit dem Ver-

bindungsschlüssel.4. Ggf. führen wir statt dessen eine Abfrage ein, wenn die Datensätze der verknüpften

Tabelle in der Liste eingeschränkt werden sollen. In diesem Fall muß die Abfrage beijedem Wechsel des Basissatzes erneuert werden, damit die Liste immer aktuell ist.

5. Um die c-Bedingung zu erfüllen, legen wir eine Schaltfläche an, die den Verbindungs-schlüssel löscht. �

Dieses Verfahren wurde hinlänglich im Kapitel 4.2.4 dargestellt.

4.5.2 1:m Beziehung

fh12 Ehrlich gesagt, ist die 1:m Beziehung prinzipiell einfacher als die 1:1 Beziehung zurealisieren. Gehen wir von der Detailtabelle (geführte Tabelle) aus, dann müssen wir nurdie zuletzt erwähnte Elimination der bereits benutzten Elemente in unserer Liste weglas-sen. Schon haben wir die gewünschte 1:m (c:m, 1:cm, c:cm) Beziehung. Anders herum istes etwas schwieriger.

Auch hier können wir somit Empfehlungen für Musterlösungen aufstellen.

�Ist die Detailtabelle das Subjekt (Hauptformular), dann gehen wir in folgenden Schrittenvor:

Page 493: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-35

1. Wir legen ein AutoFormular für die Detailtabelle an.2. Wir ergänzen ein Listenfeld.3. Im Listenfeld zeigen wir die Mastertabelle an.4. Wir verknüpfen die gebundene Spalte der Liste mit dem Verbindungsschlüssel in der

Detailtabelle. �

Beispiel:

fh12 Wir wollen das Verfahren anhand der Zuordnung von Studenten zu Klassen durchführen.

Für die Tabelle student legen wirein einspaltiges AutoFormular an. Aufihm ergänzen wir eine Liste, die wir miteiner sortierten Liste der Klassen ver-knüpfen (Bild 4.5-1).

Die SQL-Anweisung lautet dann:

SELECT DISTINCTROW klasse.knr,klasse.kname FROM klasse ORDERBY klasse.kname;

Wir sperren noch die Matrikel- sowieKlasseneingabe und ergänzen eineSchaltfläche zum Löschen des Eintra-ges und wären eigentlich schon fertig,wenn nicht noch dieses Feld Ei n-trittsdatum: wäre. Das sollte nurdann eingebbar sein, wenn eine Klas-

se zugeordnet ist. Nur deswegen müssen wir noch ein wenig programmieren.

Ja, sie haben recht, auch wegen der Schaltfläche müssen wir einige Zeilen Code schrei-ben.

Die folgenden Anweisungen sorgen beim Satzwechsel für die richtige Einstellung desFeldes Eintrittsdatum:

Sub Form_Current() If IsNull(sknr) Then sseit.Enabled = False 'sperrt Eintrittdatum sseit.Locked = True sfklöschen.Enabled = False 'sperrt Schaltfläche Else sseit.Enabled = True 'gibt Eintrittsdatum frei sseit.Locked = False sfklöschen.Enabled = True 'gibt Schaltfläche frei End IfEnd Sub 'Form_Current

Hierbei müssen wir beachten, daß die Abfrage sknr = Null nicht richtig wirkt. AccessBasic interpretiert als einen Vergleich mit einer Standardvariablen und nicht als Prüfung,ob die Variable undefiniert ist. Mit den nachfolgenden Zeilen löschen wir die Klassenzu-ordnung, wobei wir ein vorhandenes Eintrittsdatum ebenfalls löschen:

Bild 4.5-1: Formularentwurf für eine 1:m Bezie-hung aus Sicht der m-Tabelle

Page 494: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-36 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Sub sfklöschen_Click() sknr = Null 'löscht Verbindungsschlüssel sseit = Null 'löscht Eintrittsdatum sseit.Enabled = False 'sperrt Eintrittsdatum sseit.Locked = True sname.SetFocus 'weg von Schaltfläche sfklöschen.Enabled = False 'sperrt SchaltflächeEnd Sub 'sfklöschen_Click

Mit den folgenden Anweisungen sorgen wir dafür, daß nach der Klassenzuordnung einDatum eingesetzt werden kann.

Sub k_liste_Click() sseit.Enabled = True 'gibt Eintrittsdatum frei sseit.Locked = False sseit.SetFocus 'setzt Fokus zur Eingabe sfklöschen.Enabled = True 'gibt Schaltfläche freiEnd Sub 'k_liste_Click

�Aufgabe:Sorgen Sie dafür, daß der Fokus bei der letztenAktion auf dem Eintrittsdatum steht.

Das Eingabeformular sollte sich wie in Bild 4.5-2präsentieren. �

Sie sehen also, daß die 1:m Beziehung wirklichdeutlich weniger Arbeit bereitet als die 1:1 Bezie-hung.

4.5.3 m:1 Beziehung

Sie werden sich sicher wundern, warum jetzt noch ein Kapitel über die Umkehrung folgt.Kommen wir aber auf die Idee, die Bearbeitung der Klassen mit einer Zuordnung vonStudenten zu verbinden, so gelingt uns die Anzeige der Studenten zwar mit Hilfe einesUnterformulars in einem Hauptformular. Versuchen wir aber, im Unterformular einen neu-en Studenten zuzuordnen, dann wird dieser als neuer Student angelegt. Die Eingabebe-dingungen für den Studenten (fehlendes Geburtsdatum usw.) verhindern jedoch, daß dieswirklich geschieht. Das Unterformular kann nämlich nicht zwischen den beiden Optionen„neu zuordnen“ und „neu eingeben“ unterscheiden. Aus diesem Grund verhindern wir so-gar in unserem Unterformular die Eingabe, indem wir die Eigenschaft Standardbea r -beitung auf Nur lesen setzen. In diesem Fall enthält das Datenblatt im Unterformu-lar keine Eingabezeile.

Richtigerweise müßte es unser Formular erlauben, einen bisher nicht zugeordneten Stu-denten mit einer Klasse zu verbinden. Hier müssen wir einen anderen Weg einschlagen,um diese Eigenschaft eines Unterformulars zu umgehen. Da hierzu eine Suchliste sinn-voll ist, verschieben wir die Aufgabe auf das entsprechende Kapitel 4.6.3.

Eine Variante wollen wir aber schon betrachten.

Bild 4.5-2: Eingabeformular für 1:mBeziehung

Page 495: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-37

4.5.4 m:m Beziehung

Einen Höhepunkt haben wir uns bis zum Schluß aufgehoben, die m:m Beziehung. DieseBeziehung wird in den Lehrbüchern gerne totgeschwiegen. Trotzdem kommt sie an vielenStellen vor, ja wahrscheinlich öfter als die 1:m Beziehung. Sehen Sie sich nur die Bestel-lung eines Kunden an, auf dessen Bestellschein viele Einzelposten stehen. Sozusagendie Retourkutsche ist die Rechnung, die einen Kunden mit einer Vielzahl von Einzelpo-sten verknüpft. Eine Baugruppe besteht aus einer Vielzahl von Bauteilen. Die Bauteilewerden aber in vielen Baugruppen eingesetzt usw. usw. Wie wird so etwas nun eingege-ben.

4.5.4.1 Eine Tabelle als Subjekt

Wir wissen, daß eine m:m Beziehung in zwei 1:m Beziehungen und einer Verbindungsta-belle aufgelöst wird. Die Beziehung ist symmetrisch, d. h. wir können wählen, welches dieBasistabelle ist. Werden die Themen den einzelnen Klassen zugeordnet, oder sollen dieKlassen einzelne Themen erhaltet? Meist gibt es einige Gründe für den einen oder ande-ren Ansatz. So werden wir per Hand normalerweise eine Klasse hernehmen und ihr dielaut Stundenplan notwendigen Themen zuordnen. Die Suche nach einer Klasse für ein(noch so schönes) Thema ist eher unwahrscheinlich.

Ein Eintrag der Basistabelle wird als einspaltiges Formular aufgebaut. Diesem Datensatzordnen wir dann eine Vielzahl von Partnern der zweiten Tabelle zu. D. h. einer Klassewollen wir hintereinander mehrere Themen zuordnen und diese, wenn es geht, auch alleauf dem Bildschirm sehen. Dies ist ein typischer Anwendungsfall für unser Haupt- undUnterformular.

�Für den Entwurf eines solchen Formulars können wir uns folgendes Verfahren notieren

1. Anlegen einer Abfrage für den abhängigen 1:m Teil der Relation. Hierbei müssen wirunbedingt den Verbindungsschlüssel der Verbindungstabelle und nicht den Primär-schlüssel der Mastertabelle auswählen. Würden wir dieses tun, so könnten wir denZähler dann nicht mehr ändern bzw. der Wert würde in die falsche Tabelle eingetragenwerden.

2. Start eines Formularentwurfs mit Auswahl des Formularassistenten.3. Eingabe der Basistabelle4. Der Formulartyp ist Haupt-/Unterformular5. Als Unterformular wählen wir die Abfrage aus Schritt 1 aus.6. Die weiteren Fenster bearbeiten wir wie üblich, d. h. wir wählen den Anzeigestil aus

und setzen den Formulartitel fest usw.7. Meldet das Programm, daß es keine Verknüpfung zwischen Haupt- und Unterformular

herstellen konnte, so müssen wir diese Verknüpfung per Hand herstellen (siehe Bei-spiel).

8. Probelauf, Korrektur des Layouts und Abspeichern des Unterformulars bzw. desHauptformulars. �

Beispiel:Wir beginnen nicht mit dem erwähnten Beispiel der Klassen-Themen-Beziehung hoert,weil diese, wie wir wissen, von der Professoren-Themen-Beziehung liest abhängt, sodaß wir uns zuerst dieser Relation zuwenden. Die Klassen-Themen-Beziehung hoert

Page 496: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-38 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

ist genaugenommen eine Dreiecksbeziehung, die noch eine Idee komplizierter aussiehtals die jetzt gewählte Beziehung liest.

Wir legen zuerst eine neue Abfrage liest_t an (Bild4.5-3). Dabei wählen wir auf jeden Fall die Attribute desPrimärschlüssels in der Verbindungsdatei aus. Aus derMastertabelle übernehmen wir alle für uns interessan-ten Felder außer dem Primärschlüssel. Eine kurzeKontrolle zeigt uns, daß alle Einträge der Tabelleliest erscheinen.

Im zweiten Schritt öffnen wir ein neues Formular für dieTabelle professor (mit dem Namen p mitt_unterformular). In dieses Formular fügen wir einUnterformular ein. Als Datenquelle für das Unterformu-lar geben wir die gerade erstellt Abfrage liest_t an.

Wir übernehmen alle Felder, obwohl wirlpnr nicht benötigen. Der Wert steht be-reits im Hauptformular. Der Assistentbraucht es aber zur Herstellung der Ver-knüpfung. Wir löschen es daher später wie-der.

Die Verknüpfung mit dem Hauptformularerstellen wir in weiser Voraussicht manuell(Bild 4.5-4)

Jetzt öffnen wir das Unterformular und lö-schen die überflüssige Spalte. Nach einwenig Kosmetik sieht das Ergebnis wie in Bild 4.5-5 aus.

Wollen wir statt des Endlosformulars lieber eineDatenblattdarstellung, so erstellen wir ein weiteresFormular p mit t_unterformular Unter-formular1,das zum Ergebnis in Bild 4.5-6 führt.

Bild 4.5-3: Abfrage für Unterfor-mular

Bild 4.5-4: Herstellung der Verknüpfung

Bild 4.5-5: Formular für eine m:mBeziehung mit Endlosunterformular

Page 497: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-39

Es wäre nun müßig, alle Fehlermöglichkeiten undReaktionen des Formulars zu erläutern, probierenSie es einfach einmal aus. Wichtig sind folgendeFälle

• Eingabe eines neuen Themas• Eingabe eines neuen, aber doppelten Themas• Eingabe eines nicht vorhandenen Themas• Änderungen am Thema bzw. bei der Stunden-

zahl

Der letzte Test ist natürlich von Ihren Absichtenabhängig. Soll jeder Benutzer Themen und Stun-denzahlen ändern können, oder ist dies eine privi-legierte Funktion eines einzigen Benutzers? Siekönnen die Änderungen sehr einfach verhindern,indem Sie im Unterformular beide Felder deaktivie-ren. Schon können die Benutzer nur noch dieThemen-Nr. eingeben, um einem Professor ein

neues (mögliches) Thema zuzuordnen.

Bevor wir uns nun der Frage zuwenden, was geschehen soll, wenn uns diese dummeThemen-Nr. partout nicht einfallen will, üben wir die ganze Aktion noch einmal am umge-kehrten Fall

�Aufgabe:Entwickeln Sie ein Formular zur Eingabevon neuen Themen mit der Möglichkeit,dabei gleich Professoren zuzuordnen(Bild 4.5-7).

Für die ganz Zähen unter Ihnen stelltsich natürlich die Frage, ob wir nichtauch gleich die Klassen zuordnen kön-nen. Dies läuft auf die Frage hinaus, obAccess auch zwei Unterformulare verar-beiten kann. Diese Aufgabe verschiebenwir noch etwas bis ins Kapitel 4.5.5.

Es sollte Ihnen nun nicht schwerfallen,das nebenstehende Ergebnis innerhalb weniger Minuten zu entwerfen, wenn Sie sich ge-nau an den Vorgehensplan halten. �

An diesem Beispiel können wir demonstrieren, warum es gut ist, ein Feld zu sperren, abertrotzdem mit dem Cursor markieren zu können. Gehen Sie einmal in das Feld Name:und starten Sie dann eine Suche. Die Suche bezieht sich auf das Feld pname, aber nurwenn wir es nicht deaktiviert haben. Die Felder Name und Wohnort werden also nurgesperrt, aber nicht deaktiviert.

Die Suche erfolgt natürlich nur in der Abfrage selbst, d. h. in der Liste der Professoren,die dieses Thema bereits lesen, nicht im gesamten Lehrkörper.

Bild 4.5-6: Formular für eine m:mBeziehung mit Datenblattunterfor-mular

Bild 4.5-7: Eingabeformular der inversen m:mBeziehung

Page 498: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-40 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

4.5.4.2 Die Verbindungstabelle als Subjekt

Beide bisher entwickelten Formulare haben den Nachteil, daß sie die Verknüpfungen im-mer nur dann zulassen, wenn der passende Partner vorhanden ist. Wir können also nuretwas umständlich einen neuen Professor und ein neues Thema zu diesem eingeben.

�Die Lösung dieser Aufgabe basiert auf einem Formular mit Unterformular, das einKombinationsfeld besitzt. Zum Eintragen eines neuen Themas (Professors) müssen wireine Ereignisprozedur schreiben. Dies läuft in folgenden Schritten ab:

1. Wir erstellen mit dem Generator einfache Eingabeformulare für Profes-soren (professor ) und Themen (thema ) (wenn diese nicht schondurch den Tabellenassistenten erzeugt worden sind). Zu diesem Zweckmarkieren wir im Datenbankfenster im Registerblatt Tabellen diesebeiden Tabellen hintereinander. Im Rollomenü die Ikone Neues Pr o-jekt können wir AutoFormular anklicken, um diese Formulare er-stellen zu lassen. Ggf. führen wir leichte Korrekturen des Layouts durch(z. B. Ändern der Titelleiste usw.)

2. Auf die gleiche Weise legen wir ein Unterformular für die Tabelle liest(zuerst einmal als normales Formular) an (l_eingabe Unterformular ). Diese ver-ändern wir aber grundlegend. Daher wechseln wir in die Entwurfsansicht und öffnendas Eigenschaftsfenster des Formulars. Um das Formular später als Unterformulareinsetzen zu können, setzen wir die Eigenschaft Standardansicht auf Date n-blatt.

3. Je nachdem, wo wir das Unterformular einsetzen wollen, löschen wir eines der beidenAnzeigefelder für die Verbindungsschlüssel lpnr bzw. ltnr. Nehmen wir als Bei-spiel eine Einbindung der Themen in das Professorenformular, dann brauchen wir dieAnzeige der Professorennummer. nicht noch einmal. Wir löschen daher das Anzeige-feld zu lpnr .

4. Das zweite Feld ist weniger für die Darstellung geeignet, da es eine kryptische Num-mer enthält. Wir wollen es daher in ein Kombinationsfeld mit dem Thema wandeln. Zudiesem Zweck rechtsklicken wir das Feld an. Im nun erscheinenden Kontextmenü fin-den wir unter Ändern zu � eine Liste aller erlaubter Elementtypen, in der wir Ko m-binationsfeld auswählen. Damit wird das Textfeld durch ein Kombinationsfeld er-setzt.

5. Nun zeigt das Kombinationsfeld immer noch nur die Themennummer. an. Wir müssendaher die Eigenschaft Datensatzherkunft so programmieren, daß zusätzlich dasThema erscheint. Hierzu können wir natürlich die SQL-Anweisung eintippen. Einfachergeht es aber über den Generator, den wir durch Klick auf die Editorikone rechts nebendem Eingabefeld für die SQL-Anweisung aktivieren.

6. Nun öffnet Access den Dialog Tabelle anzeigen, in dem wir die Tabelle themamit Doppelklick wählen und dann Schließen auslösen. Nun sehen wir in der oberen

Hälfte des Fensters SQL-Anweisung : Abfrage-Editor die Tabelle thema mitihren Attributen. Aus diesen wählen wir durch Doppelklick tnr und tname aus.Beim zweiten Attribut ergänzen wir noch die Sortierung in Aufsteigend. Andieser Stelle merken wir uns die Reihenfolge der Felder, da dies für ein Kombinations-feld wichtig ist. Die Rückfrage beim Schließen dieses Fensters bestätigen wir. Jetzt hat

Page 499: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-41

die Eigenschaft Datensatzherkunft folgenden Wert:SELECT DISTINCTROW thema.tnr, thema.tname FROM thema ORDER BY th ema.tname;

7. Nun müssen wir noch die Anzeige im Kombinationsfeld ändern und die Verknüpfungherstellen, so daß in unsere Tabelle liest die Themennummer und nicht das The-ma eingetragen wird. Zu diesem Zweck muß die Eigenschaft Gebundene Spalteauf 1 stehen (es sei denn wir hätten in Punkt 6 die Reihenfolge vertauscht). DieSpaltenzahl muß auf 2 und die Spaltenbreite auf 0cm;4cm geändert wer-den. Damit unterdrücken wir die Anzeige der Themennummer. Die Breite der Themen-spalte korrigieren wir am besten direkt mit der Maus in der Tabellenansicht. Vorhersollte aber noch das Bezeichnungsfeld auf Thema geändert werden.

8. Wir wechseln in die Eigenschaften des Formulars und ändern Navigationsschal t -flächen auf Nein. Dadurch navigieren wir später im Unterformular nur mit denBildlaufleisten. Jetzt können wir das Formular unter l_eingabe Unterformularspeichern.

9. Wir müssen nun noch ein Hauptformular für unser Unterformular anlegen. Hier könnenwir entweder das in Schritt 1 erzeugte Formular benutzen oder weitere erzeugen. Wirgenerieren aus der Tabelle professor ein Eingabeformular und speichern es unterl_eingabe . Auf diesem Formular schaffen wir nach unten etwas Platz und zieheneinfach aus dem Datenbankfenster l_eingabe Unterformular auf diesen freienPlatz. Access erzeugt dabei ein entsprechendes Feld, das es darüber hinaus auchnoch richtig verknüpft. So werden in die Eigenschaften Verknüpfen von und Ve r -knüpfen nach automatisch auf lpnr und pnr gesetzt.

10. Nun können wir das Formular (Bild 4.5-8) speichernund testen. Es ist möglich, bei einem Professor einThema zu wechseln, solange er noch keine Vorle-sung darüber gehalten hat. Gleiches gilt für das Lö-schen. Besteht aber schon ein Eintrag in der Ta-belle hoert , dann ist dies nicht mehr möglich. Esist auch möglich, am Ende des Unterformulars einneues Thema für einen Professor nachzutragen. Esmuß aber vorhanden sein. Durch die Löschweiter-gabe können wir übrigens Professoren und Themenso löschen, daß auch die Einträge in der Tabelleliest verschwinden, wobei auch hier gilt, daß dasThema nicht schon vor einer Klasse gehalten wurdeusw.

11. Leider ist es nicht möglich, einem Professor eingänzlich neues Thema zuzuordnen. Ein Kombinati-onsfeld erlaubt nur den Zugriff auf vorhandene Ein-träge. Somit müssen wir vorher das Thema einge-geben haben. Um auch hier zu einer benutzerfreundlichen Lösung zu gelangen, müs-sen wir etwas programmieren. Der Auslöser für die Ereignisprozedur ist die Tatsache,daß ein eingegebenes Thema nicht zu finden ist. Wir wechseln daher in das Unter-formular und suchen in der Eigenschaftsliste des Kombinationsfeldes das EreignisNicht in Liste. Dieses Ereignis wird aktiviert, wenn der Eintrag im Textfeld desKombinationsfeldes nicht gefunden wurde, bevor die interne Fehlermeldung dazu er-scheint. Wenn es uns jetzt gelingt, ein neues Thema aufzunehmen, dann sollte essich sofort mit dem aktuellen Professor verknüpfen lassen. Hierzu geben wir über denCodeeditor folgendes Programm ein:Private Sub ltnr_NotInList(NewData As String, Response As Integer)Dim rsthema As Recordset

Bild 4.5-8: Professor mit The-menzuordnung über Kombinati-onsfeld

Page 500: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-42 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Dim m_tnr As Long 'spielklang ("xylophon.wav") 'neues Thema? Beep If MsgBox("Thema fehlt! Soll es angelegt werden?", vbOKCancel + vbQuestion, _ "Anfrage") = vbOK Then Set rsthema = CurrentDb.OpenRecordset("thema") 'Tabelle öffnen rsthema.AddNew 'Datensatz anhängen rsthema!tname = NewData 'Wert des Kombifeldes übertragen rsthema.Update 'DS zurückschreiben rsthema.Bookmark = rsthema.LastModified 'auf neuen Satz positionieren m_tnr = rsthema!tnr 'neue Themennummer merken 'Eingabedialog mit neuem DS durchführen DoCmd.OpenForm FormName:="thema", WindowMode:=acNormal, _ WhereCondition:="tnr = " & m_tnr Response = acDataErrAdded Else Beep MsgBox "Bitte ein vorhandenes Thema wählen!", vbInformation, "Hinweis" Response = acDataErrContinue 'Standard-Fehlermeldung unterdrüclen End IfEnd Sub 'ltnr_NotInList

Die Ereignisprozedur _ NotInList liefert über den ersten Parameter NewDataden vom Benutzer eingegebenen Wert und erwartet über den zweiten ParameterResponse die Antwort der Verarbeitung zurück. Hierbei stehen uns folgende einge-baute Konstanten zur Verfügung:Konstante BeschreibungacDataErrDisplay (Voreinstellung) Zeigt dem Benutzer die Standardmeldung an.

Wir verwenden diese Konstante, wenn wir verhindern möchten,daß der Benutzer zum Listenfeld des Kombinationsfeldes einenneuen Wert hinzufügt.

AcDataErrContinue Zeigt dem Benutzer nicht die Standardmeldung an. Wir verwen-den diese Konstante, wenn wir eine benutzerdefinierte Meldunganzeigen möchten.

AcDataErrAdded Zeigt dem Benutzer keine Meldung an, erlaubt jedoch in derNotInList- Ereignisprozedur das Hinzufügen des Eintrags zumListenfeld des Kombinationsfeldes. Nach dem Hinzufügen desEintrags aktualisiert Microsoft Access die Liste durch erneutesAbfragen des Kombinationsfeldes. Microsoft Access vergleichtdann erneut die Zeichenfolge mit dem Listenfeld des Kombinati-onsfeldes und speichert den Wert des Arguments NewData indem Feld, an das das Kombinationsfeld gebunden ist. Befindetsich die Zeichenfolge nicht im Listenfeld, zeigt Microsoft Accesseine Fehlermeldung an.

Nach einer Sicherheitsabfrage legen wir einen neuen Datensatz in der Tabellethema an, wechseln in das Eingabeformular thema und erwarten dort die Ergän-zung der fehlenden Daten. Danach ist es möglich, das neue Thema dem Professorzuzuordnen.

4.5.5 m:m:m Beziehung

) Achtung: Das nachfolgende Beispiel dient nur der Übung dieses hochinteressantenProblems. Es entspricht unserem Entwurf „Klasse kann Thema bei einemProfessor hören“. Wir verknüpfen hierbei jedoch noch nicht einen konkretenProfessor mit einer Vorlesung.

Page 501: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-43

Das Beispiel soll unser Verständnis für die Unterformulare verbessern. Wir wollen zusätz-lich zur Themen-Professoren-Beziehung liest noch eine Themen-Klassen-Beziehunghoert aufbauen, d. h. wir können auf einem Formular ein Thema einigen Professorenund einigen Klassen zuordnen. Was dagegen noch fehlt, ist die gleichzeitige Zuordnungvon Thema + Professor zu einer Klasse.

�Wir starten mit einigen Vorbereitungsschritten:

1. Zuerst legen wir ein AutoFormular für die Tabellethema an und speichern es unter t mitp+k_unterformular.

2. Als nächstes konstruieren wir Abfragen liest_p (Bild4.5-9) und hoert_k (Bild 4.5-10). Die erste Abfrageliefert uns eine Liste aller Themen, die ein Professorliest. Die zweite Liste enthält alle Themen, die eineKlasse hört.

3. Desweiteren legen wir zwei Datenblattformulare für dieTabellen liest_p bzw. hoert_k an und speicherndiese als t mit p+k_unterformular Unterfor-mular1 bzw. Unterformular2. In beiden Daten-blattformularen entfernen wir den Bezug auf das Thema.

Nun wollen wir diese beiden Datenblattformulare in unserHauptformular integrieren.

4. Wir öffnen das Hauptformular t mitp+k_unterformular und schaffen genug Platz.

5. Nacheinander fügen wir nun zwei Unterformulare ein,wobei wir die beiden vorbereiteten Formulare angeben.Die Verknüpfung erfolgt manuell über die jeweiligenThemennummern.

6. Das fertige Formular (Bild 4.5-11) zeigt uns beim Blätternin den Themen die Professoren an, die es lesen können,sowie die Klassen, die es hören bzw. gehört haben. �

Bild 4.5-9: Entwurf liest_p

Bild 4.5-10: Entwurfhoert_k

Page 502: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-44 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Testen wir nun das Formular weiter, dannkönnen wir einem Thema weitere Profes-soren zuordnen. Ein Neueintrag bei denKlassen führt aber zu einer Fehlermel-dung (Bild 4.5-12).

Ursache hierfür ist der fehlende Bezugdes Themas zu einem Professor. Es wäreja auch schlimm, wenn wir unser mühsamaufgebautes Gerüst zur referentiellen In-tegrität einfach so unterlaufen könnten.Access reagiert also ganz richtig. EinNeueintrag im Unterformular Klassen: muß neben der Klassen- und Themennummerauch eine Professorennummer enthalten.

Der Fehler bei unserem Entwurf liegt schon in der Abfrage. Wir sollten nicht, wie gesche-hen, hoert_k verwenden, sondern eine neue Abfrage hoert_kp entwerfen, die beider Zuweisung einer Klasse zu einem Thema auch den Dozenten dazu berücksichtigt(Bild 4.5-13).

Wir können nun gleich diesen Prototyp testen, obsie alles erledigt, was wir wünschen, bevor wir einDatenblattformular von ihm anlegen. Die wesentli-chen Prüfung sind Änderung und Neueingabe. Da-zu ist es notwendig, die Liste der Schlüsselkombi-nationen in liest zu kennen, d. h. einige Profes-soren-Themen Beziehungen. Auch einige Klassensind ganz hilfreich.

Zuerst prüfen wir, ob eine erlaubte Kom-bination aufgenommen wird. Zu diesemZweck geben wir in der untersten Zeileeine vorhandene Klasse ein. Sobald wirdie Zelle verlassen, wird der Klassenna-me eingetragen und die beiden anderenVerbindungsschlüssel auf 0 gesetzt.Jetzt müssen wir in beide Spalten einegültige Kombination eintragen. Verlassenwir dann die Spalte, so erscheint derProfessorennamen.

Bild 4.5-11: Formular mit zwei Unterformula-ren

Bild 4.5-12: Fehlermeldung beiKlasseneingabe

Bild 4.5-13: Abfrage hoert_kp

Bild 4.5-14: Ergebnis von hoert_kp in derTestphase

Diese Kombination muß inliest vorhanden sein!

Page 503: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-45

Doppelte Themen, nicht vorhandeneKlassen, Themen mit falschen Dozentenusw. sollten abgelehnt werden. Das Än-dern und Löschen sollte natürlich auchfunktionieren (Bild 4.5-15).

Wir erzeugen aus der Abfrage ho-ert_kp wieder ein Datenblattformular,bei dem wir die unnötigen Felder wie z. B.die Themennummer weglassen. DiesesFormular speichern wir unter dem Nament mit p+k_unterformular Unter-formular3.

Die Änderung am Hauptformular be-schränkt sich in der Korrektur der laufen-den Nummer. Dies können wir direkt imContainer für das Unterformular durchfüh-ren (Bild 4.5-16).

Wenn jetzt alles funktioniert, haben wirkeine einzige Zeile programmieren müs-sen. Daher starten wir das Formular undschauen.

Hurra, es funktioniert. Wir haben also ei-ne Dreifachverknüpfung ohne eine ZeileCode auf einem einzigen Formular reali-siert (Bild 4.5-17).

Zwei der 1:m Beziehungen sind als Un-terformulare zu sehen, die dritte ergibtsich durch die mögliche Mehrfacheingabeeines Wertes.

Wir sollten noch einen Abschlußtestdurchführen und nachdenken, was nochfehlt.

Bild 4.5-15: Neueingabe

Bild 4.5-16: Korrektur der Verknüpfung

Bild 4.5-17: Eingabeformular: Thema

beim Ändern

vorhandene Klasse

erlaubte Kombination

hier korrigieren

Page 504: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-46 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Richtig, die Umkehrung dieser Zuordnung,d. h. die Eingabe einer Klasse mit Zuordnungder Themen und der Professoren zu dieserKlasse usw. (Bild 4.5-18).

Zu diesem Zweck ergänzen wir am bestenunser Formular k mit s_liste um eineUnterformular. Die notwendige Abfrage wan-deln wir aus hoert_kp ab zu hoert_tp.Wie aus dem Namen schon zu ersehen ist,ersetzen wir den Klassennamen durch dasThema.

Dieses Datenblattformular hängen wir in dasHauptformular ein und erhalten damit ein

Formular, das alle relevanten Informationen zur Klasse hat, angefangen von der Studen-tenliste über den Klassensprecher bis hin zu den Themen der Klasse mit den zugeord-neten Professoren.

Der weiteren Phantasie zur Stundenplangestaltung usw. sind nun keine Grenzen mehrgesetzt. Nur die Zeit ist der limitierende Faktor. Ansonsten wird keine Anwendung jemalswirklich fertig.

4.5.6 Synchrone Unterformulare

4.5.6.1 Programmierte Synchronisierung

Im letzten Kapitel wurden beide Unterformulare vom Hauptformular weitgehend unabhän-gig voneinander synchronisiert. Wie funktioniert dies aber, wenn die Formulare unterein-ander abhängen?

Dieser Fall tritt auf, wenn wir Tabellen mit zwei oder mehr 1:m Beziehungen in der glei-chen Richtung modellieren. Leider ist unser Beispiel einer Fachhochschule an dieserStelle unvollständig. Die einzige 1:m Beziehung, die keine aufgelöste m:m Beziehung ist,ist die Relation gehoert_zu. Wir müssen also einfach eine 1:m Beziehung an die Stu-denten anhängen, um diesen Fall zu konstruieren.

Bild 4.5-18: Eingabeformular: Klasse

Page 505: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-47

Es muß also etwas sein, was jeder Student mehr-fach hat oder haben kann, was aber individuell seinmuß, sonst haben wir wieder eine m:m Beziehung.Somit können es keine Bücher sein. Auch bei Kin-dern wird es schwierig, da diese von zwei Studentenstammen können. Die Noten hängen wiederum vonden Themen ab. Also mal ehrlich, so richtig saubere1:m Beziehungen sind eher selten. Wir nehmen da-her einfach an, daß keine zwei Studenten dieselbenKinder hat, um voran zu kommen.

Mit der Wahl einer Klasse sollen alle Studenten er-scheinen. Mit der Wahl des Studenten sollen dessenAbkömmlinge zu sehen sein (Bild 4.5-19).

Das Geheimnis dieser Synchronisation ist ein ge-meinsames, verstecktes Feld, über das die beiden Un-terformulare gleichläufig gehalten werden (Bild 4.5-20).

Wir legen drei Formulare aus den Tabellen klasse,student und abkömmling an. Bei den beiden letztenTabellen setzen wir die Standardansicht auf D a-tenblatt. Im 1. Unterformular binden wir knr ansknr , womit die Studentenliste automatisch an die Klas-se angepaßt wird. Für das 2. Unterformular haben wirkein solches Feld. Also legen wir es ungebunden mit demNamen snr an.

Immer wenn wir im Unterformular einen anderen Stu-denten auswählen, so muß dieses Feld aktualisiert wer-den, damit es ein Neuaufbau der Liste der Abkömmlingeerzwingt.

Die Bewegung des Satzzeigers in einem Unterformular entspricht dem Klick auf eine derNavigationsschaltflächen, was ein Ereignis Beim Anzeigen im Unterformular auslöst.Dieses Ereignis nutzen wir, um das Synchronisationsfeld zu füllen:

Private Sub Form_Current()'Neuanzeige aktualisiert das Synchronisationsfeld Forms![k mit s+a_unterformular]![snr] = snrEnd Sub 'Form_Current

Nun binden wir noch das 2. Unterformular an dieses Feld, das wir unsichtbar machen,und schon funktioniert das Formular wie gewünscht.

Nicht nur die Anzeige vorhandener Abhängigkeiten sondern auch das Neueingeben vonAbkömmlingen wie auch Studenten bereitet keine Schwierigkeiten (solange alle Mußfel-der eingegeben werden).

Bild 4.5-19: Snchrone Unter-formulare

Bild 4.5-20: Synchronisation

Synchronisationsfeld

Page 506: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-48 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

4.5.6.2 Automatische Synchronisierung

Wir fragen uns nun, ob die Synchronisation auch ohne Programmierung funktioniert. Imletzten Beispiel haben wir aus dem Unterformular heraus ein Feld im Hauptformular ge-setzt, daß wiederum automatisch das zweite Unterformular triggerte.

Als Beispiel wählen wir die Frage, wel-che Themen ein Professor bei welcherKlasse hält und welche Studenten indiese Klasse gehen. Letztendlich heißtdies: Welche Studenten unterrichtetein Professor?

Zu diesem Zweck kopieren wir dasFormular p mit Kombifeld in pmit t,k,s_unterformular um.Weiterhin benötigen wir drei Unterfor-mulare:

1. Liste der Themen des Professors2. Liste der Klassen für ein Thema des

Professors3. Liste der Studenten in einer dieser

Klassen.

Diese Unterformulare können wir ent-weder direkt erstellen oder auf Abfra-gen aufbauen. Wir entscheiden uns für Abfragen. Wobei wir für das erste Unterformularkeine komplexe Abfrage benötigen. Hier genügt die direkte Angabe des Auswahlkriteri-ums:

SELECT DISTINCTROW liest.lpnr, professor.pname, liest.ltnr, thema.tname FROMthema INNER JOIN (professor INNER JOIN liest ON professor.pnr = liest.lpnr)ON thema.tnr = liest.ltnr ORDER BY thema.tname;

Für die beiden anderen Unterformulare entwerfen wir:

t_hoert_kThemen des Professors werden von welchen Klassen gehalten? Das Ergebnis ist:

SELECT DISTINCTROW hoert.htnr, thema.tname, hoert.hknr, klasse.kname,hoert.hpnr

FROM klasse INNER JOIN (thema INNER JOIN hoert ON thema.tnr = hoert.htnr) ONklasse.knr = hoert.hknr

WHERE (((hoert.hpnr)=[pnr]))ORDER BY klasse.kname;

wobei als zusätzliche Einschränkung die Abfrage nach pnr auftritt.

k_hat_sKlasse hat welche Studenten? Das Ergebnis ist:

SELECT DISTINCTROW klasse.knr, klasse.kname, student.snr, student.snameFROM klasse INNER JOIN student ON klasse.knr = student.sknr

Bild 4.5-21: Synchronisation mehrererUnterformulare

Page 507: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-49

ORDER BY klasse.kname, student.sname;

Mit der SQL-Anweisung bzw. mit den Abfragen erzeugen wir Unterformulare in Daten-blattansicht mit den Namen p mit t,k,s_unterformular Unterformular1…3.Hierbei wählen wir nur die Felder aus, die uns später auf dem Unterformular interessie-ren. Also lassen wir überall den Professor weg. Im zweiten Formular streichen wir dasThema, da dieses in ersten Unterformular zu sehen ist. Im dritten Unterformular be-schränken wir uns ausschließlich auf die Studentendaten.

Wir integrieren die drei Unterformulare in unsere Hauptformular, wobei wir bei den beidenletzten Unterformularen keinen Wert auf die richtige Verknüpfung legen. Diese müssenwir so und so manuell erstellen.

Am besten gehen wir schrittweise vor. Das Unterformular 1 wird mit dem Assistenten in-tegriert. Eine Verknüpfung erfolgt von lpnr auf pnr . Damit wird dieses Unterformularbeim Satzwechsel im Hauptformular automatisch nachgeführt. Um die Referenzen besserzu verdeutlichen, geben wir dem Container für das Unterformular den Namen UForm1.

Als nächstes integrieren wir p mit t,k,s_unterformular Unterformular2 unterdem Namen UForm2. Dieses hat (mit Ausnahme des Parameters pnr ) keinen Bezugzum Hauptformular. Vielmehr soll es nur die Klassen anzeigen, die das im Unterformular1 markierte Thema hören. Somit benötigen wir ein gemeinsames Synchronisationsfeldformular_tnr . Nur wie füllen wir es? Der Steuerelementinhalt:

=Formulare![p mit t,k,s_unterformular Unterformular1]![ltnr]

führt nicht zum Erfolg, da es kein aktives Formular p mit t,k,s_unterformularUnterformular1 zur Laufzeit gibt. Im Synchronisationsfeld erscheint die Fehlermel-dung #Name. Die Referenz muß richtig lauten:

=[UForm1].[Formular]![ltnr]

Steuerelement ist der Container UForm1. Dieser hat die Eigenschaft Formular. Wennsie es nicht glauben, dann schauen Sie in der Hilfe unter Unterformular Eige n-schaften nach:

In der folgenden Liste sind die Eigenschaften aufgeführt, die Sie für ein Unterformular/einen Un-terbericht einstellen können. Den Eigenschaften, die nur gelten, wenn sich das Steuerelement ineinem Formular befindet, ist (NF) für "Nur Formulare" nachgestellt.

Klicken Sie auf einen der folgenden Namen, um zusätzliche Informationen über die jeweilige Ei-genschaft anzuzeigen, wie z.B. andere Beschränkungen, die regeln, wann die Eigenschaft verfügbarist und ob Sie diese über das Eigenschaftenfenster, ein Makro oder Visual Basic einstellen können.

Aktiviert (Enabled) (NF) InAuswahl (InSelection) (NF)Anzeigen (DisplayWhen) (NF) InReihenfolge (TabStop) (NF)Application Links (Left)BeimDoppelklicken (OnDblClick) (NF) Marke (Tag)BeimHingehen (OnEnter) (NF) MitBezeichnungsfeldBeimKlicken (OnClick) (NF) MitDoppelpunktBeimVerlassen (OnExit) (NF) NameBereich (Section) Oben (Top)Bericht (Report) Rahmenart (BorderStyle)

Page 508: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.5 Zuordnungsformulare © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-50 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Bezeichnungsausrichtung Rahmenbreite (BorderWidth)BezeichnungsfeldX (LabelX) Rahmenfarbe (BorderColor)BezeichnungsfeldY (LabelY) Reihenfolgenposition (TabIndex) (NF)Breite (Width) Sichtbar (Visible)EreignisprozPräfix (EventProcPrefix) Spezialeffekt (SpecialEffect)Formular (Form) Statuszeilentext (StatusBarText) (NF)Gesperrt (Locked) (NF) Steuerelementart (ControlType)Hauptobjekt (Parent) Vergrößerbar (CanGrow)Herkunftsobjekt (SourceObject) Verkleinerbar (CanShrink)Hilfekontext (HelpContextID) VerknüpfenNach (LinkMasterFields)Höhe (Height) VerknüpfenVon (LinkChildFields)

Sie können die Eigenschaften Formular (Form) und Bericht (Report ) verwenden, umauf ein Formular, einen Bericht oder auf das Formular bzw. auf den Bericht, das demUnterformular-Steuerelement bzw. dem Unterbericht-Steuerelement zugeordnet ist, zu verweisen.

Somit können wir im Unterformular die Variable ltnr referenzieren, um sie in unserSynchronisationsfeld zu kopieren.

Nun können wir unser zweites Unterformular mit den Klassen richtig verknüpfen:

Name: UForm2Herkunftsobjekt: p mit t,k,s_unterformular Unterform ular2Verknüpfen von: htnrVerknüpfen nach: formular_tnr

Ein Test zeigt uns den Wechsel in den Klassen, wenn wir den Datensatzzeiger im Unter-formular für die Themen bewegen.

Nun sollte es keine Schwierigkeit bereiten, das dritte Unterformular unter dem NamenUForm3 einzubinden. Zur Synchronisation legen wir ein Feld formular_knr an. Diesesoll die richtigen Studenten ansteuern. Für aktualisieren seinen Inhalt über:

=[UForm2].[Formular]![hknr]

und können mit ihm das dritte Unterformular synchronisieren:

Name: UForm3Herkunftsobjekt: p mit t,k,s_unterformular Unterform ular3Verknüpfen von: knrVerknüpfen nach: formular_knr

Nach diesem Prinzip können wir nun beliebig viele Unterformulare verknüpfen. Ein Ab-schlußtest zeigt, daß bei jedem Satzwechsel in einem Unterformular alle abhängigenUnterformulare aufgefrischt werden (das Hauptformular triggert das erste Unterformular).Access achtet also automatisch auf die richtige Reihenfolge.

Page 509: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-51

Nach geeigneter Kosmetik könnenwir den Entwurf (Bild 4.5-22) been-den und abspeichern.

Dieses Beispiel zeigt deutlich, daßwir oft ohne Programmierung aus-kommen. Access hat bereits eineVerkettung von Unterformularen vor-gesehen, die wir entsprechen nutzenkönnen.

Verständlicherweise vorsichtig solltenwir mit dem Verlangen von Benutzernsein, die jetzt in diesem Formularnoch alles korrigieren bzw. neu ein-geben wollen. Das ist sicher nicht dierichtige Stelle, um über die Suchenach einem Professor einen Stu-denten einer Klasse und dieser Klas-se dann noch ein neues Thema zu-ordnen zu wollen.

4.6 Suchfunktionen

Wir haben schon mehrfach im Text verschiedene Suchfunktionen angesprochen. Diesebezogen sich einmal auf die eingebaute Suchfunktion (Kapitel 4.1.2.2) sowie das Suchenin Listen (Kapitel 4.2.3.1) und Kombinationsfeldern (Kapitel 4.2.4.1). Wir wollen diesesKapitel noch ein wenig vertiefen.

4.6.1 Direkte Suche im Kombinationsfeld

Zuerst sollten wir eine Technik kennenlernen, die bei Eingabe eines Suchbegriffs direktden Treffer bzw. den Nichttreffer anzeigt. Hierzu benutzen wir als Beispiel das AutoFor-mular p, wie es vom Generator erstellt wird.

In dieses Formular plazieren wir ein unge-bundenes Kombinationsfeld (Bild 4.6-1).

Die zugehörige Liste füllen wir wie darge-stellt mit den gewünschten Datenfeldern.Ganz hilfreich ist es, den Suchfeldern aufsämtlichen Formularen eine einheitlicheErkennungsfarbe zuzuordnen. Bei der Be-nutzung des Assistenten müssen wir dar-auf achten, daß die Sortierung aus derTabelle professor übernommen wird.Ist dort keine angegeben oder ist siefalsch, dann müssen wir die EigenschaftDatensatzherkunft noch einmal

Bild 4.5-22: Entwurf dreier Unterformulare

Bild 4.6-1: Anlegen eines Suchfeldes

Page 510: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-52 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

überarbeiten.

Das Kombinationsfeld zeigt bereits die gewünschten Eigenschaften, daß es. wenn dieEingabe zu wenige Zeichen hat, sofort den nächsten Treffer anzeigt, das erste falscheZeichen aber den Treffer verschwinden läßt. Die Bestätigung ist aber nicht möglich, dadas Kombinationsfeld gebunden ist. Zur weiteren Bearbeitung müssen wir also die Eigen-schaft Steuerelementinhalt löschen.

Nun müssen wir mit dem Wert dieses Feldes das Formular synchronisieren. Der besteZeitpunkt dazu ist, wenn wir das Suchfeld vollständig verändert haben. Somit program-mieren wir das Ereignis Nach Aktualisierung mit Hilfe der folgenden Anweisungen

Sub suche_pname_AfterUpdate()'sucht über KombifeldDim zustand As Integer If Not IsNull(Me.suche_pname) Then zustand = Me.pnr.Enabled Me.pnr.Enabled = True Me.pnr.SetFocus DoCmd.FindRecord Me.suche_pname Me.pname.SetFocus Me.pnr.Enabled = zustand End IfEnd Sub 'suche_pname_AfterUpdate

) Wichtig! Wir müssen dabei beachten, daß der Rückgabewert von suche_pnameaufgrund der gebundenen Spalte eine Zahl ist.

Nun können wir natürlich auch noch über die Navigationsschaltflächen die Professorenwechseln. Hierbei ist es recht störend, wenn das Namensfeld und das Suchfeld unter-schiedliche Namen anzeigen. Wir sollten also nach Korrekturen, nach Satzwechseln usw.den Inhalt des Suchfeldes anpassen mit

Sub Form_Current() Me.suche_pname.SetFocus 'hier soll es losgehen If (Me.pnr <> Me.suche_pname) Or IsNull(Me.suche_pname) Then Me.suche_pname = Me.pnr 'suche_pname gibt pnr zurück! End IfEnd Sub 'Form_Current

Mit der Klausel IsNull(Me.suche_pname ) steuern wir, ob das Suchfeld zu Beginnder Formularbearbeitung noch leer ist (weglassen) oder gleich mit dem ersten Namenbeginnt.

Passen wir nicht ganz genau auf, dann schleicht sich folgender Fehler ein. Wenn wir ei-nen neuen Professor eingeben, dann fehlt dieser in der Suchliste. Diese wird nur einmalbeim Formularstart aufgebaut. Ein Neueintrag fehlt dann und führt zur Fehlermeldung,daß das Kombinationsfeld einen Namen enthält, der nicht in der Liste ist, obwohl wir denNamen vor wenigen Sekunden eingegeben haben. Abhilfe bringen die folgenden Anwei-sungen:

Sub Form_AfterInsert ()'nach einer Neueingabe unbedingt notwendig DoCmd.Requery "suche_pname"End Sub 'Form_AfterInsert

Page 511: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-53

Das gleiche gilt beim Löschen:

Private Sub Form_AfterDelConfirm(Status As Integer)'nach einer Löschung unbedingt notwendig DoCmd.Requery "suche_pname"End Sub 'Form_AfterDelConfirm

4.6.2 Suchfunktionen in m:m Beziehungen

Aus der Bearbeitung von Haupt- und Unterformularen hatten wir uns noch ein schwierigesProblem aufgehoben. Wir wollten die Unterformulare aus den jeweiligen Tabellenlistenfüllen. Das Problem ist wieder verallgemeinerbar, so daß wir es eigentlich mit jedem derFormulare angehen können.

4.6.2.1 Aufklapplisten in Unterformularen/Datenblattansichten

Sicher sind Ihnen die vielen Aufklapplisten unter Access aufgefallen. Sobald wir ein Feldanklicken erscheint am rechten Rand eine Ikone mit einem Pfeil nach unten. Mit dieserkönnen wir dann eine Liste aufklappen. Es handelt sich um Kombinationsfelder, die abererst bei Fokussierung ihre Eigenschaft offenbaren. Können wir dieses praktische Verhal-ten nicht auch für unsere Zwecke gebrauchen? Wie dies geschieht, wollen wir im folgen-den untersuchen.

Als Beispiel kopieren wir das gerade erstelle Formularp mit Kombifeld in p mit t_unterformularum. Dazu erstellen wir ein Datenblattformular vonthema , das wir in das Hauptformular einbinden.

Sehen wir uns nun das Unterformular in der Entwurfs-ansicht an, dann ist dies ein gewöhnliches einspaltigesFormular (Bild 4.6-2).Bild 4.6-2: Entwurf eines Unter-

formulars

Page 512: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-54 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Was geschieht eigentlich, wenn wir das Textfeld The-ma durch ein Kombinationsfeld umwandeln, das mitder Tabelle thema verknüpft wird (Bild 4.6-3)?

Hierbei müssen wir einige Eigenschaften ändern:

Steuerelementinhalt: ltnrDatensatzherkunft: SELECT DISTINCTROW thema.tnr,

thema.tname FROM thema ORDER BYthema.tname;

Spaltenzahl: 2Spaltenbreiten: 0cm;3cmGebunden Spalte: 1

Bevor wir in das Hauptformular wechseln, genügt es, indie Datenblattansicht umzuschalten, um das spätereVerhalten auszuprobieren. Das Feld hat jetzt eineSchaltfläche für ein Aufklappmenü erhalten, das nachAuslösung alle Themen anzeigt (Bild 4.6-4).

Die Zelle in der Spalte zeigt jetzt das gleiche Verhaltenwie unser im letzten Kapitel beschriebenes Suchfeld.Wir können nun Zeichen eingeben und schon erscheintder passende Treffer in der Zelle. Wir können aberauch die Liste ausklappen und ein Thema hier direktsuchen.

Wenn nun alles richtig vorbereitet ist, so sollte dasHauptformular p mit t_unterformular die Neu-eingabe oder die Änderung eines Themas über eineAufklappliste erlauben (Bild 4.6-5).

Natürlich bleibt unser zufriedenerBlick sinnend auf derAnalogtechnik hängen. Sie ist undbleibt nun einmal doppelt. Wir verlan-gen ja gar nicht, das die belegtenThemen markiert sind, damit wir sienicht versehentlich löschen, dennschließlich schützt uns davor diesorgfältig mitgeführten Integritätsbe-dingungen (Probieren Sie es ruhigeinmal aus).

Schön wäre es aber doch, ein beste-hendes Thema und natürlich ein neu-

es Thema nur noch aus den verbleibenden Themen wählen zu können.

Hier steht einfach die Logik des Kombinationsfeldes dagegen. Es verlangt, daß dasTextfeld aus der Liste stammt. Es erlaubt eben nicht genau das Gegenteil. Aufgeben?

Bild 4.6-3 Unterformular mitKombinationsfeld

Bild 4.6-4: Aufklappliste in derDatenblattansicht

Bild 4.6-5: Hauptformular mit Unterformular undAufklappliste

Page 513: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-55

4.6.2.2 Aufklapplisten mit noch nicht gewählten Einträgen

fh14 Wie wäre es denn, wenn wir in das Unterformular noch eine Spalte einführen würden, diesich auf die freien Themen bezieht? Wir könnten dann doch das dort ausgewählte Themain die Liste herüberziehen?

Im ersten Schritt sollten wir hierfür eine Abfrage definieren, die uns alle Themen anzeigt,die ein Professor nicht liest. Das hört sich einfacher an als es ist. Es gibt nämlich in SQLkeinen Join oder ähnliches, der diese einfach so liefert. Auch die Inkonsistenzabfrage hilftuns bei diesem Problem nicht weiter. Wir erinnern uns aber an die Mengenlehre undüberlegen, daß die Differenz der Menge aller Themen minus der Menge der vorgelese-nen Themen die Menge der nicht gelesenen Themen bildet. Aber auch hier suchen wirvergeblich nach einer passenden SQL Anweisung.

Wir müssen einfach lernen, zwischen den Zeilen des Handbuches bzw. der Online-Hilfezu lesen. Dort finden wir unter dem Stichwort EXISTS

SELECT [Vorname], [Nachname] FROMPersonal AS E WHERE EXISTS (SELECT *FROM Bestellungen AS O WHEREO.[Personal-Nr] = E.[Personal-Nr]);

Wählt den Namen jedes Arbeitnehmersaus, der mindestens eine Bestellung aufge-geben hat. Dieser Vorgang kann auch miteiner INNER JOIN-Operation ausgeführtwerden.

Wenn wir also die positive Selektion durch einen INNER JOIN ersetzen können, könntedann nicht das Gegenteil der Selektion unser Problem lösen? Tatsächlich liefert die Ab-frage p_liestnicht_t das gewünschte Ergebnis. Hierzu wählen wir nur die Feldertname,tnr aus den Tabellen thema,liest aus und beschränken tnr durch fol-gendes Kriterium

Nicht In (SELECT liest.ltnr FROM liest WHERE (liest.lpnr= Formulare![p mitt_Zuordnung]![pnr] ))

Das Vergleichsfeld ist schon auf die spätere Einbindung in das Hauptformular vorbereitet.Die gesamte SQL-Anweisung der Abfrage p_liestnicht_t lautet dann

SELECT DISTINCTROW thema.tname, thema.tnrFROM themaWHERE (((thema.tnr) Not In (SELECT liest.ltnr FROM liest WHERE (liest.lpnr=

Formulare![p mit t_zuordnung]![pnr] ))))ORDER BY thema.tname;

Als Hauptformular benutzen wir p mit t_zuordnung, das wir aus p mitt_unterformular ableiten. Analog kopieren wir das Unterformular in p mitt_zuordnung Unterformular1 um, das wir mit dem Hauptformular richtig verknüp-fen.

Page 514: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-56 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

In das Unterformular fügen wir ein Kombinationsfeldein, das mit den Daten aus p_liestnicht_t gefülltwird (Bild 4.6-6). Die Eigenschaft Datensatzhe r -kunft besitzt folgenden Eintrag:

SELECT DISTINCTROW [p_liestnicht_t].[tname],[p_liestnicht_t].[tnr] FROM [p_liestnicht_t];

Die Beschriftung des neuen Feldes ist natürlich mit Ab-sicht so kurz gewählt, denn wir müssen die Anzeige indiesem Feld unterdrücken (Bild 4.6-7). Dieses errei-chen wir durch eine angepaßte Spaltenbreite. Der ak-tuelle Wert des Zeigers in der Freitabelle interessiertuns in diesem Zusammenhang wirklich nicht.

Weiterhin müssen wir bei einem Satzwech-sel dafür sorgen, daß die Liste aktualisiertwird:

Private Sub Form_Current()'Liste der freien Themen auffrischen DoCmd.Requery "formular_tname"End Sub 'Form_Current

Wenn wir dieses Formular testen, dann erhalten wir natürlich eine Parameterabfrage fürden nicht auffindbaren Parameter Formulare![p mit t_zuordnung ]![ pnr ]. Dieseentfällt später, wenn das Hauptformular existiert. Wir geben jetzt eine beliebige Professo-rennummer ein.

Wenn dies alles klappt, dann rufen wirstatt dessen das Hauptformular auf.Das Ergebnis sieht wie in Bild 4.6-8aus.

Die Zuordnung eines neuen Themassollte ab sofort ohne eine Fehlermel-dung möglich sein. Solange wir denDatensatz nicht verlassen haben, istdie Freiliste unverändert, d. h. enthältnoch das übertragene Thema. Sobaldwir die Zeile verlassen, wird die Freili-ste neu aufgebaut.

Problematischer ist der Fall einer Themenänderung (Bild 4.6-9). Wie wir sehen, schütztuns die referentielle Integrität automatisch davor, Unsinn in unsere Datenbank hineinzu-geben.

Bild 4.6-6: Kombinationsfeld fürdie freie Liste

Bild 4.6-7: Test des Unterformulars

Bild 4.6-8: Zuordnung eines neuen Themas

Page 515: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-57

Nun sollte alles wie gewünscht funk-tionieren. Wir stellen dabei fest, daßes unter Access relativ einfach ist, dieeinzelnen Komponenten auszutesten.Schwierigkeiten entstehen meist da-durch, daß bestimmte Teile nicht wieerwartet ausgelöst werden. Die Ursa-chen dafür sind durchaus nicht immertrivial.

Ein weiteres Beispiel hierzu zeigt unsdas nächste Formular.

4.6.2.3 m:m:m Beziehung mit Suchfunktion

Wir haben noch einen Sonderfall bei der Bearbeitung der Klasse. Hier müssen wir nachder Wahl des Themas einen passenden Professor suchen, der dieses Thema lesen kann.Wir erkennen schon die Problematik dieser Dreiecksbeziehung. Nach der Suche einesneuen Themas für eine Klasse muß die Liste der Professoren angepaßt werden.

Um hier eine geeignete Lösung zu entwickeln, legen wir ein Formular s mitp+t_zuordnung an. Da normalerweise ein solches Formular nicht gleichzeitig zur Klas-sensprecherzuordnung bzw. zur Studentenverwaltung genutzt wird, sperren wir alle Fel-der gegen Eingabe. Den Klassensprecher zeigen wir mit seinem Namen an (Bild 4.6-10).Zu diesem Zweck wandeln wir die angezeigte Sprechernummer in eine einzeilige Listeum, die wir mit einer gezielten SQL-Anweisung füllen (Bild 4.6-11).

Damit diese zweite Liste immer aktualisiert wird, er-gänzen wir im Hauptprogramm:

Private Sub Form_Current() s_liste.Requery ksprecher.RequeryEnd Sub 'Form_Current

Als nächstes kopieren wir k mit s_liste ,p+t_unterformular Unterformular1 um in k mit p+t_zuordnung Unte r -formular1. In diesem Unterformular geben wir den beiden Zählerfeldern die Namenformular_htnr und formular_hptnr , um Verwechslungen mit den Feldnamen zuvermeiden. Gleichzeitig wandeln wir die beiden Textfelder tname und pname zu Kom-binationsfeldern, denen wir die Namen kb_tname bzw. kb_pname geben. Dies be-wirkt, daß im Unterformular nun beim Fokussieren der Zellen Rolloikonen auftreten. DieListen sind aber jeweils leer.

Bild 4.6-9: Fehlerhafte Änderung

Bild 4.6-10: reduzierte Klassen-eingabe

Page 516: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-58 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Daher ändern wir folgende Eigenschaften

EigenschaftName kb_tname kb_pnameSteuerelementinhalt: htnr hpnrDatensatzherkunft: SELECT thema.tnr, thema.tname FROM

thema ORDER BY thema.tname;SELECT DISTINCTROW professor.pnr,professor.pname, liest.ltnr FROM professorINNER JOIN liest ON professor.pnr =liest.lpnr WHERE(((liest.ltnr)=[formular_htnr])) ORDER BYprofe ssor.pname;

Spaltenzahl: 2 2Spaltenbreiten: 0cm;4cmGebunden Spalte: 1 1

Damit schränken wir die angezeigten Professoren auf solche ein, die das Thema lesenkönnen.

Wir ergänzen im Unterformular noch folgende Programmstücke:

Private Sub Form_Current() kb_pname.RequeryEnd Sub 'Form_Current

Private Sub kb_tname_AfterUpdate() DoCmd.Requery "kb_pname"End Sub 'kb_tname_AfterUpdate

Private Sub formular_hpnr_AfterUpdate() kb_pname.RequeryEnd Sub 'formular_hpnr_AfterUpdate

Rufen wir nun das Unterformular selbst in der Formularansicht auf, so erkennen wir keineFehler. Wandeln wir aber die Standardansicht in Datenblatt um, so finden wir inder Professorenspalte nur dann Namen, wenn sie (zufällig) in der Liste der möglichenProfessoren des aktuellen Themas existieren. Die Ursache für dieses Verhalten liegt inder Tatsache, daß es genau nur eine Liste für jede Spalten gibt. Was wir aber eigentlichbenötigen ist eine Liste für jede Zelle.

Dies ist noch ein ungelöstes Problem, an dem Sie sich versuchen können.

Wenn wir nun das Unterformular in unserem Hauptformular ausprobieren, dann sehen wirden gleichen Effekt. Wir sind nun in der Lage Themen und zugehörige Professoren füreine Klasse sowohl über die Nummern wie über die Kombinationsfelder zu ändern, lö-

Bild 4.6-11: Sprechername als Liste

Page 517: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-59

schen und neu einzugeben. Im ersten Fall müssen wir die erlaubten Kombinationen ken-nen, während im zweiten Fall nur die erlaubten Kombinationen anwählbar sind.

Natürlich erkennen wir weitere Schwächen des Programmes. So lassen sich Themenzweimal zuordnen, was eigentlich unsinnig ist.

Vorsichtshalber kopieren wir die Anwendung um in k mit p+t_Zuordnung1…,ändern und den Bezug auf das Unterformular und legen wir eine Abfragek_hoertnicht_t an, die uns alle Themen liefert, die eine Klasse bisher nicht hört. DieSQL-Anweisung hierzu lautet

SELECT DISTINCTROW thema.tnrFROM themaWHERE (((thema.tnr) Not In (SELECT hoert.htnr FROM hoert WHERE (hoert.hknr=

Formulare![k mit p,t_zuordnung1]![knr] ))))ORDER BY thema.tname;

Als erstes wandeln wir im Unterformular das Kombinationsfeld für die Themennamenwieder in ein Textfeld und verbinden es mit tname . Dann ergänzen wir ein weiteresKombinationsfeld kb_tname , das wir mit dieser Abfrage verbinden. Durch diese Gleich-benennung können wir die Ereignisprozeduren übernehmen. Das Kombinationsfeld wirdnun mit der Abfrage k_hoertnicht_t verknüpft. Mit einem kleinen Test des Unterfor-mulars prüfen wir, ob tatsächlich nur die noch nicht zugeordneten Themen erscheinen, obnach der Auswahl eines dieser neuen Themen eine Übernahme erfolgt und ob die Pro-fessorenliste aufgefrischt wird.

Wenn alles klappt, probieren wir dasHauptformular aus (Bild 4.6-12).

Wir können folgende Eigenschaften fest-stellen

− neue Themen lassen sich aus derMenge der freien Themen durch An-klicken der Aufklappschaltfläche in derSpalte ?? ergänzen.

− bestehende Themen lassen sich ana-log dazu abändern.

− Zu den Themen werden die passendenProfessoren ausgewählt, d. h. die Pro-fessoren, die das betreffende Themalesen können.

− In der Spalte Professoren werden aber immer nur die Namen aus dem aktuellenPool angezeigt, so daß viele Zellen u. U. leer sind.

4.6.2.4 Programmierte Suche/Zuordnung

Jetzt wollen wir noch einmal unserer ursprünglichen Idee nachgehen, Listen mit verfügba-ren Einträgen auf den Formularen anzuzeigen (Bild 4.6-13), aus denen der Benutzer sei-ne Werte auswählt. Diese Listen ersetzen sozusagen die gesonderten Aufklapplisten, dasie ständig die offenen Klassen, Themen und Professoren usw. anzeigen.

Bild 4.6-12: m:m:m Beziehung mit Suchfunk-tionen

Page 518: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-60 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Bei Formularen mit zwei oder mehr Unterformularen (z. B. t mitp+k_unterformular) kommt ein zusätzliches Problem hinzu, da der Professor in zweiUnterformularen Professoren: und Klassen: auftaucht. Unser Programm weißdaher bei einem Klick auf eine einzige Liste nicht, welches der beiden Unterformulare ei-gentlich gemeint ist. Lösen wir daher diese Problemen, so können wir die Erfahrungenleicht auf andere Fälle übertragen.

Wir sollten uns nocheinmal klar machen,was wir alles mit diesemFormular erledigenwollen:

1. Wir können in denThemen blättern unddabei sehen, wer dasThema liest und wel-che Klassen dasThema bei welchenProfessoren hören;

2. Wir können ein neuesThema eingeben;

3. Bei allen Themenkönnen wir neueProfessoren als Do-zenten eintragen,Professoren austauschen bzw. löschen, wenn es die Integritätsbedingungen erlauben.Sobald ein Professor neu eingetragen wird, muß er für die Klassenzuordnung bereitstehen;

4. Wir können eine Thema einer neuen Klasse zuordnen, bzw. die Klassenzuordnungändern. Bei dieser Gelegenheit wird auch der Professor aus der Menge der erlaubtenProfessoren zugeordnet bzw. geändert.

5. In allen Listen erscheinen, wenn irgendwie möglich, nur die erlaubten Werte. Meldun-gen des Systems werden dadurch auf ein Minimum beschränkt.

Bei unserem Gedanken über Streichen eines Professors bei einem Thema fallen uns sie-dendheiß weitere Probleme ein

1. Was geschieht, wenn ein Professor emeritiert wird bzw. die Hochschule wechselt?2. Wann löschen wir veraltete Themen?3. Wann werden die Datenstämme von Uraltinformationen entlastet?

Über all diese Probleme schweigen sich die meisten Autoren aus verständlichen Gründenaus. Auch wir wollen die Fragen im Hinterkopf behalten und uns wieder den vordergrün-digen Problemen zuwenden, denn noch tut unser Formular nicht das, was wir wollen.

Wir ergänzen nun auf unserem Hauptformular t mit p+k_zuordnung insgesamt dreiKombinationsfelder. Das im Beispiel zu sehende Listenfeld dient nur der Anzeige derKlasse in einer Klassenliste. Da es direkt an das Unterformular gebunden ist, zeigt es

Bild 4.6-13: Haupt-/Unterformular mit Zuordnungs-Kombinationsfeldern

Page 519: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-61

zwar automatisch die Klasse an. Eine Eingabe ist aber nicht möglich. Wir arbeiten dahernur mit ungebundenen Kombinationsfeldern, müssen dafür etwas programmieren.

Die drei Kombinationsfelder können mit Hilfe des Assistenten erstellt werden. Wir müssenaber bei einigen Feldern Hand anlegen

1 Name: p_liste für UForm1 k_liste für UForm3 p_liste für UForm32 Datensatzherkunft: SELECT DISTINCTROW

professor.pnr,professor.pname FROMprofe ssorWHERE (((professor.pnr)Not In (SELECTliest.lpnr FROM liestWHERE (liest.ltnr=[tnr])))) ORDER BYprofessor.pname;

SELECT DISTINCTROWklasse.knr, klasse.knameFROM klasse WHERE(((klasse.knr) Not In(SELECT hoert.hknr FROMhoert WHERE(hoert.htnr=[tnr] ))))ORDER BY kla sse.kname;

SELECT DISTINCTROWprofessor.pnr,professor.pname FROMprofessor INNER JOINliest ON professor.pnr =liest.lpnr WHERE(((liest.ltnr)=[tnr]))ORDER BYprofessor.pname;

3 Spaltenzahl: 2 2 24 Spaltenbreiten: 0cm;3cm 0cm;3cm 0cm;3cm5 Gebundene Spa l te: 1 1 16 Listenbreite: 3cm 3cm 3cm7 Nach Aktualisi erung: [Ereignisprozedur] [Ereignisprozedur] [Ereignisprozedur]

Für die SQL-Abfrage greifen wir auf den Abfrage-Editor zurück. Hierzu positionieren denCursor in das Feld Datensatzherkunft und klicken auf die Editorikone. Im Abfrage-fenster (Bild 4.6-14) können wir nun die Abfrage nach unseren Vorstellungen modellieren.

Alle drei Abfragen haben es „in sich“. Bei den beiden ersten benötigen wir eigentlich ersteine Hilfsabfrage für das, was wir nicht haben wollen. Das funktioniert durchaus, indemwir diese Abfrage erstellen, die SQL-Anweisung in den Zwischenspeicher nehmen unddann in einer neuen Abfrage einbringen.

Das Schöne an diesem Editor ist weiter,daß wir (abgesehen von notwendigen Ein-gaben der Parameter) sofort das Ergebnisausprobieren können. So sichern wir unse-re Abfrage gegen Fehler ab.

Wie schon erwähnt handelt es sich um un-gebundene Kombinationsfelder. Dahermüssen sie zur richtigen Zeit aufgefrischtwerden. Ihre Ergebnisse müssen in geeig-neter Weise verarbeitet werden.

Da die Kombinationsfelder untereinander inBeziehung stehen, unterscheiden sich die Aktionen etwas. Die erste Ereignisprozedursorgt dafür, daß die Kombinationsfelder beim Satzwechsel im Hauptformular(Themenwechsel) nachgeführt werden:

Private Sub Form_Current() [p_liste für UForm1].Requery [p_liste für UForm1].Value = "" [k_liste für UForm3].Requery [p_liste für UForm3].RequeryEnd Sub 'Form_Current

Wählen wir einen Professor im Kombinationsfeld für die Kann-Lesen Beziehung aus,dann wird folgende Ereignisprozedur ausgeführt:

Bild 4.6-14: Abfrage-Editor

Ggf. mit einer zweitenAbfrage erzeugen

Page 520: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-62 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Private Sub p_liste_für_UForm1_AfterUpdate() [t mit p+k_zuordnung Unterformular1]!lpnr = [p_liste für UForm1].Value [t mit p+k_zuordnung Unterformular1].Requery [p_liste für UForm1].Requery [p_liste für UForm3].RequeryEnd Sub 'p_liste_für_UForm1_AfterUpdate

Sie überträgt den angeklickten Professor (genauer seine Nummer) in den aktuellen Da-tensatz des Unterformulars. Dort wird entweder ein vorhandener Eintrag überschriebenoder ein neuer Eintrag angefügt. Damit dies geschieht und damit die Anzeige wiederstimmt, wird das ganze Unterformular aufgefrischt. Anschließend wird die Professorenlisteerneuert, denn schließlich ist ein Professor weggefallen. Nicht vergessen dürfen wir diezweite Professorenliste, bei der der angeklickte Professor hinzukommt.

Das zweite Unterformular benötigt zwei Eingaben. Einmal müssen wir auf die Klassenzu-ordnung reagieren:

Private Sub k_liste_für_UForm3_AfterUpdate() [t mit p+k_zuordnung Unterformular3]!hknr = [k_liste für UForm3].Value [t mit p+k_zuordnung Unterformular3].RequeryEnd Sub 'k_liste_für_UForm3_AfterUpdate

Dann muß ein Professor zugeordnet werden:

Private Sub p_liste_für_UForm3_AfterUpdate() [t mit p+k_zuordnung Unterformular3]!hpnr = [p_liste für UForm3].Value [t mit p+k_zuordnung Unterformular3].RequeryEnd Sub 'p_liste_für_UForm3_AfterUpdate

In beiden Fällen fehlt noch die Auffrischung der Listen selbst. Im ersten Fall (Klassen) istsie (noch) unnötig, da der Eintrag unvollständig ist, im zweiten Fall (Professoren) ändertsich die Liste nicht.

Irgendwann muß aber die Klasse aus der Liste der Klassen ohne Thema herausgenom-men werden. Ähnliches gilt für direkte Manipulationen im Unterformular, indem wir dortz. B. eine Zeile löschen. Beides führt zu einer Ereignisprozedur innerhalb des Unterfor-mulars:

Private Sub Form_Current()'bei Positionierung und beim Schreiben Listen auffrischen. Forms![t mit p+k_zuordnung]![k_liste für UForm3].Requery Forms![t mit p+k_zuordnung]![k_liste für UForm3].Value = "" Forms![t mit p+k_zuordnung]![p_liste für UForm3].Value = ""End Sub 'Form_Current

Ähnliche Anweisungen im ersten Unterformular führen aber dazu, daß unser Formular ineine Dauerschleife läuft. Hier müssen wir uns auf das Neueingeben

Private Sub Form_AfterInsert()'nach Einfügen muß Professor raus aus der Liste Forms![t mit p+k_zuordnung]![p_liste für UForm1].Requery 'und in die andere hinein Forms![t mit p+k_zuordnung]![p_liste für UForm3].RequeryEnd Sub 'Form_AfterInsert

und die Löschaktion beschränken:

Page 521: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-63

Private Sub Form_AfterDelConfirm(Status As Integer)'nach Löschung muß Professor zurück in die Liste Forms![t mit p+k_zuordnung]![p_liste für UForm1].Requery 'und aus der anderen heraus Forms![t mit p+k_zuordnung]![p_liste für UForm3].RequeryEnd Sub 'Form_AfterDelConfirm

4.6.3 Suchfunktionen in m:1 Beziehungen

Und es ist immer noch ein Problem offen. Dieses stammt aus der Betrachtung der m:1Beziehungen. Wir erinnern uns, daß bei der Darstellung der m Beziehung in einem Un-terformular, dieses bei Bearbeitung die Datensätze der Detailltabelle verändert, löschtund ggf. neue Datensätze anlegt, was nicht erwünscht ist. Mit anderen Worten: Wir wollenunsere Klassen-Studenten-Verwaltung vervollständigen.

Zur Erarbeitung der Lösung kopieren wir k mit s_liste in k mit s_zuordnungum (Bild 4.6-15). In diesem Formular wollen wir nun eine Liste mit allen noch nicht zuge-ordneten Studenten und ein Unterformular mit allen zugeordneten Studenten plazieren.

Über Schaltfeld soll dann ein freier Studenten derKlasse zuzuordnen werden. Umgekehrt soll über einweiteres Schaltfeld ein im Unterformular markierterStudenten aus der Klasse herausnehmen werden.

Die Liste derfreien Studentenist klassisch mitHilfe einer Abfra-ge programmiert(Bild 4.6-16).

Die SQL-Anweisung in derAbfrage lautetrichtig schöneinfach:

SELECT DISTINCTROW student.snameFROM studentWHERE (((student.sknr) Is Null));

Das Unterformular zeigt das Gegenteil an, nämlichalle Studenten, die der aktuellen Klasse zugeordnet

sind.

Nun können wir darangehen, die Schaltflächen zu programmieren. Ganz hilfreich ist es,da die Liste am Anfang nicht positioniert ist, die Zuordnungsschaltfläche zu deaktivieren.Dies können wir statisch beim Entwurf oder dynamisch beim Laden erreichen

Private Sub Form_Load()'Formular wird geöffnet Me.Caption = Me.Caption + " [" + gibname(gibdbpfadname()) + "]" 'so nur Name

Bild 4.6-15: Formular: k mit s-zuordnung

Bild 4.6-16: Freiliste

Page 522: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-64 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Me![sf_zuordnen].Enabled = FalseEnd Sub 'Form_Load

Sie wird aktiviert, wenn wir die Liste anklicken und dabei einen Studenten markieren

Private Sub sfrei_liste_Click() sf_zuordnen.Enabled = TrueEnd Sub 'sfrei_liste_Click

Bei einem Doppelklick auf die Liste soll der Student übernommen werden. Hierzu simulie-ren wir einfach einen Klick auf die Schaltfläche:

Private Sub sfrei_liste_DblClick(Cancel As Integer) Call sf_zuordnen_ClickEnd Sub 'sfrei_liste_DblClick

Mit dem Auslösen der Schaltfläche sf_zuordnen soll die Klassennummer in das Feldstudent.sknr eingetragen werden. Hierzu programmieren wir

Private Sub sf_zuordnen_Click() Dim db As Database, student As Recordset Dim kriterium If Not IsNull(sfrei_liste) Then Set db = DBEngine.Workspaces(0).Databases(0) 'Tabelle öffnen Set student = db.OpenRecordset("student", DB_OPEN_DYNASET) 'Suchkriterium mit markiertem Studenten aufbauen kriterium = "snr=" + sfrei_liste student.FindFirst kriterium 'Student suchen student.Edit student.sknr = knr 'Zeiger auf Klasse eintragen student.sseit = Now 'heutiges Datum eintragen student.Update 'Satz zurückschreiben student.Close [k mit s_zuordnung Unterformular1].Requery 'Student ergänzen sfrei_liste.Requery 'Student löschen sfrei_liste = Null 'bei Doppelauslösung sonst Umschreibung s_liste.Requery 'auch in diese Liste hinein Me![sf_entfernen].SetFocus 'um sf_zuordnen abschalten zu können Me![sf_zuordnen].Enabled = False End IfEnd Sub 'sf_zuordnen_Click

Jetzt schreiben wir direkt in eine Tabelle hinein. Nähere Einzelheiten folgen im Kapitelüber das Programmieren.

Beachten Sie die Auffrischanweisungen. Bei der Liste verschwindet ein Eintrag, im Un-terformular wird ein Eintrag ergänzt.

Und nun noch das ganze umgekehrt

Private Sub sf_entfernen_Click()'löscht beim Studenten Zeiger auf Klasse Dim db As Database, student As Recordset Dim kriterium If Not IsNull(Me![k mit s_zuordnung Unterformular1]![snr]) Then 'Suchkriterium aufgrund des markierten Studenten erstellen kriterium = "snr=" + Str(Me![k mit s_zuordnung Unterformular1]![snr]) Set db = DBEngine.Workspaces(0).Databases(0) 'Tabelle öffnen Set student = db.OpenRecordset("student", DB_OPEN_DYNASET) student.FindFirst kriterium 'Studenten suchen

Page 523: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-65

student.Edit student.sknr = Null 'Zeiger auf Klasse löschen student.sseit = Null student.Update 'zurückschreiben student.Close [k mit s_zuordnung Unterformular1].Requery 'Student streichen sfrei_liste.Requery 'Student einfügen s_liste.Requery 'auch hier löschen End IfEnd Sub 'sf_entfernen_Click

Die Abfrage, ob ein Element selektiert ist, ist eine reine „Angstanweisung“, da die Schalt-fläche nur aktiviert ist, wenn ein solches Element markiert ist.

�Aufgabe:Beseitigen Sie den Fehler, daß aus einer leeren Studentenliste gelöscht werden kann.�

Es könnte nun sein, daß wir Semester für Semester neue Studenten eingeben und jedenmühsam einer Klasse zuordnen. Könnten wir nicht alle oder einen Großteil der Studentenmarkieren und auf einen Schlag zuordnen?

Hier finden wir ab der Version 7.0 im Listenfeld die Eigenschaft Mehrfachauswahl( MultiSelect ), mit der wir angeben können, ob ein Benutzer mehrfache Auswahlen ineinem Listenfeld treffen kann. Wie dies geschieht bestimmen die Einstellungen:

Einstellung Beschreibung Visual BasicKeins (Voreinstellung) Mehrfachauswahl ist nicht möglich. 0Einzeln Mehrere Elemente werden ausgewählt bzw. ihre Auswahl

wird aufgehoben, indem sie mit der Maus ausgewählt wer-den oder � gedrückt wird.

2

Erweitert Mehrere Elemente werden durch Klicken mit der Maustastebei gleichzeitigem Drücken von � oder durch Drückenvon � � � � usw. zur Erweiterung der Auswahl vomvorher ausgewählten Element bis zum aktuellen Elementausgewählt. Mit � und Klick auf ein Element wählen die-ses einzelne Element aus oder heben die Auswahl auf.

1

Zum Testen und Programmieren kopieren wir unser Formular k mit s_zuordnungum in k mit s_zuordnung1. Das Unterformular können wir gemeinsam benutzen.

Nun ändern wir die Eigenschaft der Liste der nicht zugeordneten Studenten in Erwei-tert ab. Schon zeigt es das erwünschte Verhalten. Damit aber die Studenten auchwirklich zugeordnet werden, müssen wir noch unsere Ereignisprozedur sf_zuordnenanpassen.

Das Mehrfachauswahlfeld liefert uns die markierten Einträge als AuflistungItemsSelected zurück. Über die Anweisung For Each variable Insteuerelement.ItemsSelected erhalten wir nacheinander die Indizes der markier-ten Listeneinträge, mit dem wir über steuerelement.ItemData(index) in den ge-bundenen Wert erhalten. Somit ändert sich unsere Programm minimal:

Private Sub sf_zuordnen_Click()

Page 524: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-66 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Dim db As Database, student As Recordset Dim kriterium Dim element As Variant 'wegen For Each If sfrei_liste.ItemsSelected.Count > 0 Then Set db = DBEngine.Workspaces(0).Databases(0) 'Tabelle öffnen Set student = db.OpenRecordset("student", DB_OPEN_DYNASET) For Each element In sfrei_liste.ItemsSelected 'Suchkriterium mit markiertem Studenten aufbauen kriterium = "snr=" + sfrei_liste.ItemData(element) student.FindFirst kriterium 'Student suchen student.Edit student.sknr = knr 'Zeiger auf Klasse eintragen student.sseit = Now 'heutiges Datum eintragen student.Update 'Satz zurückschreiben Next student.Close [k mit s_zuordnung Unterformular1].Requery 'Student ergänzen sfrei_liste.Requery 'Student löschen sfrei_liste = Null 'bei Doppelauslösung sonst Umschreibung s_liste.Requery 'auch in diese Liste hinein Me![sf_entfernen].SetFocus 'um sf_zuordnen abschalten zu können Me![sf_zuordnen].Enabled = False End IfEnd Sub 'sf_zuordnen_Click

Diesmal ist die Abfrage, ob eine Selektion erfolgte keine „Angstanweisung“, da der Be-nutzer durchaus alle Einträge abwählen kann, um dann die Schaltfläche zur drücken.

Aufgabe:Korrigieren Sie das Programm so, daß die Schaltfläche nur aktivierbar ist, wenn ein min-destens ein Element markiert ist. Denken Sie dabei auch an die Tastatureingaben. Be-nutzen Sie nicht das Ereignis _KeyPress , da die Pfeiltasten kein Zeichen an das Pro-gramm liefern. �

4.7 Optimierung der Formularassistenten

Access ab der Version 7.0 erlaubt die Beeinflussung der Formularassistenten, d. h. wirkönnen selbst AutoFormate definieren, um unsere Wünsche nach einheitlichem Layout zurealisieren.

4.7.1 AutoFormate selbst erstellen

In allen Formularen des Manuskriptes sind die Textfelder grundsätzlich aus der Schreib-maschinenschrift Courier New gesetzt. Des weiteren werden alle Zählfelder (Primär-schlüssel) grundsätzlich ohne Rahmen, nicht aktivierbar und gesperrt dargestellt.

Es wäre nun schön, wenn viele dieser Eigenschaften automatisch generiert würden, sodaß die Nacharbeit reduziert wird. Um dies zu bewerkstelligen, öffnen wir ein solcherma-ßen vorbereitetes Formular in der Entwurfsansicht.

Nun lösen wir Format | AutoFormat … aus. Wir wählen aber keines der vordefiniertenFormate, sondern klicken auf Anpassen… . Im folgenden Dialog können wir entweder ein

neues Format kreieren oder den Standard verändern. Wir wählen wir die oberste Optionund bestätigen den Dialog. Nach der Vergabe eines sinnfälligen Namen wird das neue

Page 525: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-67

Format angelegt. Die drei unteren Kontrollkästchen zeigen uns, welche Formatierungenübernommen werden. Es handelt sich Schriftart, Farbe und Rahmen.

Wir können nach der Erzeugung alle bereits vorhandenen Formulare nacheinander öff-nen und mit dem neuen Stil formatieren. Eine gewisse Kontrolle ist dabei natürlich not-wendig, da Access neben Farben und Schriften auch die Größe der Elemente so anpaßt,wie wir es manuell mit Hilfe der Menüoption Format | Größe anpassen|An Textgr ö-ße getan hätten. Hierbei kann sich die Lage der Steuerelemente zueinander ändern, waswir manuell korrigieren sollten.

Hierzu werden durch Aufziehen oder durch Anklicken mit gedrückter Taste �

mehrereSteuerelemente markiert. Dann können wir über die Menüoptionen Format |A usrichten

eine Reihe weiterer Optionen auswählen, die weitgehend selbsterklärend sind. Diese Op-tionen erreichen wir auch durch Rechtsklick im Kontextmenü.

Der Bezug bei allen Ausrichtoperationen ist jeweils das extreme Element in der gewähltenRichtung.

Wir können auch den Abstand zwischen Steuerelementen vergrößern oder verkleinern.Hierzu steht uns die Menüoption Format |Horizontaler Abstand|Vergrößern inverschiedenen Varianten zur Verfügung.

Überhaupt bietet es sich an, die Eigenschaften der Steuerelement gemeinsam zu ändern,d. h. erst alle Steuerelemente anzulegen, um sie dann gemeinsam zu pflegen.

4.7.2 AutoFormat überarbeiten

Access übernimmt beim Anlegen eines AutoFormats die Formatierungen des Beispielfor-mulars. Dieses muß aber nicht alle Steuerelemente enthalten, so daß hier keine Über-nahme erfolgen kann. So muß festgelegt werden, ob ein Ja/Nein-Feld als Textfeld oderals Kontrollkästchen angelegt wird. Auch kann es sein, daß die Übernahme nicht voll be-friedigend ist.

Die direkte Angabe der einzelnen Eigenschaften ist nicht möglich. Daher legen wir einneues, leeres Formular an, in das wir alle Steuerelemente einfügen, deren Stil wir ändernwollen. Bei einem schon vorhandenen Formular formatieren wir das erste Steuerelementseines Typs und übertragen dann das Format auf alle anderen Elemente. Da diese Funkti-on nicht in den Menüoptionen zu finden ist, übernehmen wir sie als Symbol auf unsereSymbolleiste (siehe Kapitel 4.7.4). Ein Doppelklick auf den Besen schaltet diese Funktiondauerhaft ein. Jetzt markieren wir nacheinander alle Elemente. Mit � oder durch er-neuten Klick auf die Ikone schalten wir die Funktion wieder aus.

Jetzt können wir ein neues AutoFormat anlegen oder ein bestehendes korrigieren.

4.7.3 Standards für Steuerelemente ändern

Mit dem benutzerdefinierten AutoFormat oder der Formatübertragung bearbeiten wirnachträglich bereits vorhandene Formulare. Generieren wir dagegen ein neues AutoFor-mat, dann benutzt Access immer sein Standardformat.

Page 526: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 4.6 Suchfunktionen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 4-68 D:\Eigene\Doku\DB\DBAcc04.doc – 9769

Dieses Standardformat sehen wir,wenn wir in der Toolbox auf ein Ele-ment klicken gleichzeitig das Eigen-schaftenfenster geöffnet haben (Bild4.7-1).

Jetzt können wir im Eigenschaftenfen-ster die Standards des markiertenSteuerelementtyps korrigieren. Damiterhalten ab sofort alle neuen Elemente

dieses Typs (im gleichen Formular) die korrigierte Eigenschaft.

Umgekehrt können wir aber auch die Eigenschaften eines bestehenden Elementes alsVorlage übernehmen. Hierzu steht die Menüoption Format | Stan dardsteuer ele -ment einstellungen zur Verfügung. Wir können aber auch eine Ikone in unsere Sym-bolleiste aufnehmen, die die Funktion aktiviert.

Um dagegen den Standard für alle zukünftigen Formulare dauerhaft festzulegen, müssenwir den beschriebenen Weg einschlagen, d. h. ein temporäres Formular mit allen Ele-mente erzeugen und die Eigenschaften unseren Wünschen anpassen. Diese Formatie-rungen speichern wir unter einem sinnfälligen Namen. Damit nun diese Formatierung zumStandard wird, rufen wir Extras| Optionen …|Registerblatt Formul a-re/Berichte auf und geben den Namen der neuen Formatierung unter Formula r -vorlage: ein. Mit Übernehmen und OK wird diese Änderung dauerhaft.

Wie wir an den anderen Feldern des Registerblattes sehen, können wir analog Vorlagenfür unsere Berichte einrichten.

Diese Änderungen werden in der Arbeitsgruppen-Informationsdatei System.MDW ge-speichert. Diese Datei ist für alle anderen Datenbanken sichtbar und stellt also auch de-ren Standard um.

4.7.4 Symbolleisten anpassen

Ein Teil der Formatierungsfunktionen finden wir in der Symbolleiste Format(Formular/Berichtsentwurf). Diese Sammlung ist aber nicht vollständig. Wir kön-nen über Ansicht| Symbolleisten …|Anpassen… einen Dialog zur Veränderung derSymbolleisten starten. In der Kategorie Formular- und Berichtsentwurf findenwir eine Reihe weiterer Ikonen, die wir einfach mit der Maus auf die Symbolleiste ziehen.

Neben den Ausrichtsymbolen sind weitere Symbole sehr nützlich:

Ändert die Reihenfolge der Steuerelemente.

Ändert Steuerelementgröße in Abhängigkeit von Schriftart oder Bild.

Bild 4.7-1: Standardeigenschaften

Element anklicken

Typ kontrollieren

Page 527: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Formulare © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc04.doc – 9769 Seite: 4-69

Weist vordefiniertes Format zu.

Kopiert die Formatierung eines Steuerelementes zu einem anderen.

Speichert die Formatierung des aktuellen Steuerelementes als Vor-einstellung.

Weist den aktuell markierten Steuerelementen Eigenschaften-Voreinstellungen zu.

Page 528: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Makros © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc05.doc – 12.04.97 13:33/12.04.97 13:33 Seite: 5-I

MS Access – Makros

5 Makros ...........................................................................................................................5-1

5.1 Grundlagen ............................................................................................................5-1

5.1.1 Definition eines Makros ...................................................................................5-1

5.1.2 Makros oder Access Basic? ............................................................................5-1

5.1.3 Erstellen eines Makros ....................................................................................5-2

5.1.4 Makros bearbeiten ...........................................................................................5-4

5.2 Syntax .....................................................................................................................5-4

5.2.1 Bezeichner, Sonderzeichen.............................................................................5-4

5.2.2 Aktionen ...........................................................................................................5-5

5.2.3 Konstanten.......................................................................................................5-6

5.2.4 Bedingungen....................................................................................................5-6

5.3 Fehlersuche ...........................................................................................................5-7

Page 529: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Makros © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc05.doc – 96141 Seite: 5-1

5 Makros

5.1 Grundlagen

5.1.1 Definition eines Makros

Makros sind Zusammenstellungen von Aktionen unter einem gemeinsamen Namen, überden das Makro aufgerufen werden kann. Dann werden die Aktionen automatisch abgear-beitet.

Einfach können wir uns ein Makro als die Aufzeichnung von Benutzeraktionen vorstellen.

Die Makrosprache ist, weil sie auf den Endanwender abzielt, deutsch. Daher ist es mehroder weniger hoffnungslos, die englischen Ausdrücke in deutsche umwandeln zu wollen.

5.1.2 Makros oder Access Basic?

Wann sollte ein Makro verwendet werden?

Makros stellen ein schnelles Verfahren dar, einfache Vorgänge, wie das Öffnen undSchließen von Formularen, das Ein- und Ausblenden von Symbolleisten oder das Ausfüh-ren von Berichten durchzuführen. Wir können die erstellten Datenbankobjekte problemloszusammenfügen, da wir sich nur um ein Minimum an Syntax kümmern müssen: die Ar-gumente jeder Aktion werden im unteren Teil des Makrofensters angezeigt.

Außer wegen der einfachen Handhabung, die Makros bieten, werden sie für folgendeseingesetzt:

− Erstellen einer benutzerdefinierten Menüleiste− Festlegen globaler Tastenbelegungen− Ausführen eines eigenen Makros oder einer eigenen Prozedur unter Verwen-

dung einer Symbolleisten-Schaltfläche. Wir können einer Symbolleisten-Schalt-fläche ein Makro zuordnen, jedoch keine Visual Basic-Prozedur. Um eine VisualBasic-Prozedur auszuführen, müssen wir immer ein zugehöriges Makro mit derAktion AusführenCode erstellen, das wir dann der Symbolleisten-Schaltflächezuordnen.

− Ausführen einer Aktion oder einer Gruppe von Aktionen beim ersten Öffnen ei-ner Datenbank (AutoExec )

Wann sollte Visual Basic verwendet werden?

Wir sollten Visual Basic anstelle von Makros verwenden, wenn Sie folgendes durchführenmöchten:

− Vereinfachen der Wartung unserer Datenbank. Da Makros, wie die Formulareund Berichte, die sie verwenden, eigenständige Objekte darstellen, ist eine Da-tenbank, die viele Makros beinhaltet, welche auf Ereignisse in Formularen undBerichten reagieren, unter Umständen schwer zu warten. Im Gegensatz dazusind Visual Basic Ereignisprozeduren fester Bestandteil der Formulare und Be-richte. Wenn wir ein Formular oder einen Bericht von einer Datenbank zu einer

Page 530: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-2 D:\Eigene\Doku\DB\DBAcc05.doc – 96141

anderen verschieben, werden die in das Formular oder den Bericht integriertenEreignisprozeduren ebenfalls übernommen.

− Erstellen eigener Funktionen. Microsoft Access bietet eine Vielzahl eingebauterFunktionen. Mit Hilfe von Visual Basic können wir auch eigene Funktionen er-stellen, um entweder Berechnungen durchzuführen, die die Leistungsfähigkeitvon Ausdrücken überschreiten, oder um komplexe Ausdrücke zu ersetzen.

− Verdecken von Fehlermeldungen. Wenn etwas Unerwartetes eintritt, währendein Benutzer mit unserer Datenbank arbeitet, und Access daraufhin eine Feh-lermeldung anzeigt, kann dem Benutzer diese Meldung merkwürdig erscheinen,besonders dann, wenn er noch nicht mit Access vertraut ist. Mit Hilfe von VisualBasic können wir den Fehler bei seinem Auftreten abfangen und dann entwedereine eigene Meldung anzeigen oder korrigierende Aktionen starten.

− Erstellen oder Bearbeiten von Objekten. In den meisten Fällen ist es am be-quemsten, ein Objekt in seiner Entwurfsansicht zu erstellen oder zu ändern. Eskann jedoch vorkommen, daß wir die Definition eines Objekts per Code bear-beiten möchten. Mit Hilfe von Visual Basic können wir alle Objekte einer Daten-bank sowie die Datenbank selbst bearbeiten.

− Ausführen von Aktionen auf Systemebene. Wir können die AktionAusführenAnwendung in einem Makro verwenden, um eine weitere Windows-basierte oder MS-DOS-basierte Anwendung aus unserer Anwendung herausauszuführen. Viel mehr können wir jedoch nicht mit einem Makro außerhalb vonMicrosoft Access durchführen. Mit Visual Basic können wir dagegen überprüfen,ob sich eine bestimmte Datei im System befindet. Wir können die OLE-Automa-tisierung oder den dynamischen Datenaustausch (DDE) verwenden, um mit an-deren Windows-basierten Anwendungen, wie Microsoft Excel, zu kommunizie-ren. Außerdem können wir Funktionen in Windows-DLLs (Dynamic-Link Librar-ies) aufrufen.

− Bearbeiten von aufeinander folgenden Datensätzen. Mit Visual Basic können wirin einer Gruppe von Datensätzen einen Datensatz nach dem anderen durchge-hen und jeweils eine Operation ausführen. Makros dagegen arbeiten mit ganzenDatensatzgruppen zugleich.

− Übergeben von Argumenten an Visual Basic-Prozeduren. Wir können beim Er-stellen eines Makros für dessen Aktionen im unteren Teil des Makrofensters Ar-gumente festlegen. Diese Argumente können jedoch beim Ausführen des Ma-kros nicht geändert werden. Wenn wir dagegen Visual Basic verwenden, könnenwir Argumente an den Code übergeben, während dieser ausgeführt wird. Au-ßerdem können wir Variablen für Argumente verwenden, was in Makros nichtmöglich ist. Dadurch erreichen wir eine große Flexibilität beim Ausführen unse-rer Visual Basic-Prozeduren.

5.1.3 Erstellen eines Makros�

Erstellen eines Makros per Hand

1. Wir klicken im Datenbankfenster auf die Registerkarte Makros.2. Wir klicken auf Neu.3. Wir klicken in der Spalte Aktion auf das erste Feld und anschließend auf den Pfeil,

um die Aktionsliste anzuzeigen.4. Wir klicken auf die gewünschte Aktion.5. Wir geben (bei Bedarf) einen Kommentar für die Aktion ein.

Page 531: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Makros © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc05.doc – 96141 Seite: 5-3

6. Wir setzen bei Bedarf im unteren Teil des Fensters Argumente für die Aktion.7. Ggf. wiederholen wir die Schritte 4 bis 6 in einer neuen Zeile. �

) Tip: Um schnell ein Makro zu erstellen, das eine Aktion für ein bestimmtesObjekt ausführt, ziehen wir das Objekt aus dem Datenbankfenster in eineAktionszeile des Makrofensters. Wir können z. B. ein Formular in eine Akti-onszeile ziehen, wenn wir ein Makro erstellen möchten, das ein Formularöffnet. Dazu klicken wir auf die Menüoption Fenster|Nebeneinander ,um das Makrofenster und das Datenbankfenster so zu positionieren, daßbeide auf dem Bildschirm sichtbar sind. Dann klicken wir in dem Daten-bankfenster auf die Registerkarte für den Objekttypen, den sie ziehen wol-len. Anschließend klicken wir auf das Objekt und ziehen dieses dann in eineAktionszeile. Zu jedem Aktion gibt es eine Standardaktion, die in die Akti-onsspalte eingetragen wird, während das Objekt in die Argumente über-nommen wird. Wenn wir ein Makro in eine Aktionszeile ziehen, wird eine Ak-tion zum Ausführen des Makros hinzugefügt. Wenn wir andere Objekte(Tabellen, Abfragen, Formulare, Berichte oder Module) in eine Aktionszeileziehen, wird eine Aktion zum Öffnen des jeweiligen Objekts hinzugefügt.

Beim Ziehen des Objekts wird gleichzeitig auch das Argument Objekttyp der Aktion ge-setzt. Die nachstehende Tabelle zeigt die Aktionsargumente, die wir durch Ziehen einesObjekts aus dem Datenbankfenster setzen können:

Aktion Zu ziehendes Objekt ArgumentAktualisierenObjekt beliebiges Objekt Objekttyp, ObjektnameAnwendenFilter Abfrage FilternameAusführenMakro Makro MakronameAusgabeIn alle Objekte mit Ausnahme

von MakrosObjekttyp, Objektname

AuswählenObjekt beliebiges Objekt Objekttyp, ObjektnameGeheZuDatensatz Tabelle, Abfrage, Formular Objekttyp, ObjektnameHinzufügenMenü Makro MenümakronameKopierenObjekt beliebiges Objekt Objekttyp (Herkunft), Ob-

jektname (Herkunft)LöschenObjekt beliebiges Objekt Objekttyp, ObjektnameÖffnenAbfrage Abfrage AbfragenameÖffnenBericht Bericht BerichtsnameÖffnenFormular Formular FormularnameÖffnenModul Modul ModulnameÖffnenTabelle Tabelle TabellennameSchließen beliebiges Objekt Objekttyp, ObjektnameSendenObjekt alle Objekte mit Ausnahme

von MakrosObjekttyp, Objektname

Speichern beliebiges Objekt Objekttyp, ObjektnameUmbenennenObjekt beliebiges Objekt Objekttyp, Alter Name

Makros müssen nicht unbedingt getrennt gespeichert sein. Wir können mehrere Makrosin einem Fenster speichern. Hierzu aktivieren wir die Spalte Makronamen. Sobald ein

Page 532: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-4 D:\Eigene\Doku\DB\DBAcc05.doc – 96141

Name in einer Zelle auftritt, beendet er das laufende Makro. Somit können wir den Eintragals Endebedingung interpretieren (siehe Kapitel 5.2.4).

5.1.4 Makros bearbeiten

Wenn wir einen Ausdruck eingeben, der länger ist als der Standardeingabebereich in ei-nem Eigenschaftenfenster, einem Entwurfsbereich oder einem Aktionsargument, könnenwir den Ausdruck in das Dialogfeld Zoom eingeben. Um das Dialogfeld Zoom zu öffnen,drücken wir die Tastenkombination

� �.

Wenn wir einen Ausdruck in ein Eigenschaftenfenster, einen Entwurfsbereich oder in einAktionsargument eingeben,

− erkennt Microsoft Access länderspezifische Funktionsnamen, Eigenschaftennamenund Listentrennzeichen der internationalen Versionen, was für uns bedeutet, daß wirAufzählungen mit ; trennen müssen, da , für das Dezimalkomma benutzt wird.

− fügt Microsoft Access für uns bestimmte Zeichen ein, wenn sich der Fokus verändert.Je nachdem, an welcher Stelle wir den Ausdruck eingeben, fügt Microsoft Access au-tomatisch die folgenden Elemente ein:

− Klammern [ ] um Formular-, Berichts-, Feld- oder Steuerelementna-men

− Das Zeichen # um Datumsangaben− Anführungszeichen " " um Text

Diese Zeichen deuten auf eine bestimmte Syntax hin.

5.2 Syntax

5.2.1 Bezeichner, Sonderzeichen

Aufgrund der weitgehenden Freiheit bei der Wahl der Bezeichner sind einige Regeln beider Eingabe von Makros einzuhalten:

Eingeben von Objektnamen

Klammern [ ] um ein Feld, Steuerelement oder um eine Eigenschaft in einem Be-zeichner zeigen an, daß das Element der Name einer Tabelle, Abfrage, eines Formulars,Berichts, Felds oder Steuerelements ist. Diese Klammern sind unbedingt nötig, wenn derObjektname ein Leerzeichen oder ein Sonderzeichen enthält, wie z. B. einen Bindestrich.Enthält der Name kein Leerzeichen oder Sonderzeichen, können wir den Namen ohneKlammern eingeben. Access fügt (abgesehen von den zwei unten aufgeführten Ausnah-men) automatisch Klammern ein.

) Hinweis: In der Eigenschaften Gültigkeitsregel oder in einer Zelle Kriterienim Abfrageentwurfsbereich fügt Access nicht automatisch Klammern um ei-nen Namen ein. Vielmehr geht Access meist davon ausgehen, daß Texteingeben wird und fügt Anführungszeichen hinzu.

Page 533: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Makros © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc05.doc – 96141 Seite: 5-5

Eingeben von Datum/Zeit-Werten

Das Zeichen # um ein Element eines Ausdrucks zeigt an, daß es sich bei dem Elementum einen Datum/Zeit-Wert handelt. Access wertet einen von den Zeichen # umgebenenWert automatisch als einen Datum/Zeit-Wert.

Wir dürfen # um einen Datum/Zeit-Wert nicht in einem Feld für Gültigkeitsregel- oderKriterienausdruck setzen, dessen Felddatentyp Datum/Zeit ist. Sie können den Wert ineinem beliebigen Datums- oder Zeitformat eingeben, und Access fügt automatisch dasZeichen # um den Wert ein.

Access zeigt den Wert gemäß der Einstellungen der Registerkarte Datum in den Län-dereinstellungen der Windows Systemsteuerung an. Wir können das Ausgabeformat ei-nes Datums ändern, indem wir die Eigenschaft Format verwenden.

Eingeben von Text

Anführungszeichen " " um ein Element eines Ausdrucks zeigen an, daß es sich beidem Element um Text handelt.

Wenn wir in einen Gültigkeitsregel- oder Kriterienausdruck Text eingeben, setzen wir denText in Anführungszeichen, wenn er ein Leerzeichen oder Satzzeichen enthält. Enthältder Text kein Leerzeichen oder Satzzeichen, können wir den Text ohne die Anführungs-zeichen eingeben, und Microsoft Access fügt sie automatisch hinzu.

5.2.2 Aktionen�

Die Aktionen legen das Verhalten des Makros fest. Um sie einzugeben führen wir folgen-de Schritte aus:

1. Wir klicken im Makrofenster in der Spalte Aktion auf die erste leere Zeile. Wenn wireine Aktion zwischen zwei Aktionszeilen einfügen möchten, klicken wir auf den Markie-rer für die Aktionszeile, unter der wir die neue Aktion einfügen möchten und drückendann � .

2. Wir klicken in der Spalte Aktion auf die Rolloikone, um die Aktionsliste anzuzeigen.3. Wir markieren auf die gewünschte Aktion.4. Wir geben (wahlweise) einen Kommentar für die Aktion ein.5. Wir geben bei Bedarf im unteren Teil des Fensters Argumente für die Aktion an.6. Steht die Aktion falsch, dann klicken wir sie an und ziehen sie mit der Maus an die rich-

tige Stelle.7. Ist die Aktion ganz überflüssig, dann löschen wir sie mit � .

Die Argumentliste ist spezifisch für jede Aktion. Die Argumente enthalten weitere Informa-tionen, die Access zum Ausführen des Makros benötigt.

− Wir können einen Wert in ein Argumentfeld eingeben oder in vielen Fällen auch eineEinstellung aus einer Liste wählen.

− Wir setzen Aktionsargumente möglichst immer in der Reihenfolge, in der diese aufgeli-stet sind, da bestimmte Argumente die Auswahl nachfolgender Argumente beeinflus-sen.

Page 534: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.2 Syntax © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-6 D:\Eigene\Doku\DB\DBAcc05.doc – 96141

− Wenn wir eine Aktion durch Ziehen eines Objekts aus dem Datenbankfenster zu einemMakro hinzufügen, setzt Access automatisch die entsprechenden Argumente für dieseAktion.

− Wenn eine Aktion ein Argument hat, das nach dem Namen eines Datenbankobjektsfragt, können wir dieses Argument und das entsprechende Argument für den Objekttypdurch Ziehen des Objekts aus dem Datenbankfenster in das Argumentfeld einfügen.

− Wir können zum Setzen von Aktionsargumenten einen Ausdruck verwenden, vor demein Gleichheitszeichen angegeben wird.

Neben einigen Argumenten finden wir die Editorikone. Mit ihr können wir den Ausdruck-seditor aktivieren, um Ausdrücke schnell zu erstellen.

5.2.3 Konstanten

Eine Konstante repräsentiert einen nicht veränderlichen numerischen oder Zeichenfol-gen-Wert. Wir verwenden Konstanten zur Verbesserung der Lesbarkeit sowie zur Ver-einfachung der Wartung unseres Makro- oder Visual Basic-Codes verwenden. Zusätzlichstellt die Verwendung von eingebauten Konstanten sicher, daß Code auch dann weiterhinausgeführt wird, wenn die von den Konstanten repräsentierten, zugrundeliegenden Wertein späteren Versionen von Access verändert werden.

Microsoft Access unterstützt drei Arten von Konstanten:

− Symbolische Konstanten in Modulen− Eingebaute Konstanten, die Teil von Access sind− Systemdefinierte Konstanten: Wahr/True, Falsch/False und Null

Für Makros sind die eingebauten Konstanten von besonderer Bedeutung. Diese gibt es ingroßer Vielzahl für eine Reihe von Aktionen und Objekten. Die Hilfe listet diese vollstän-dig auf.

5.2.4 Bedingungen

Um einigermaßen programmieren zu können, muß von der linearen Struktur der Anwei-sungen abgewichen werden. Hierzu stehen uns in den Programmiersprachen die Aus-wahlen und die Wiederholungen zur Verfügung. Access Makros kennen nur die Auswah-len in der eingeschränkten Form der bedingten Auswahl.

Um diese Bedingungen einzugeben, müssen wir zuerst im Makrofenster eine Spalte öff-

nen. Hierzu finden wir eine Ikone . Über die Ikone schalten wir dagegen dieSpalte mit den Makronamen ein.

Wollen wir grundsätzlich diese Spalten sehen, dann schalten wir das überExtras|Optionen|Register Ansicht die Kontrollkästchen Namensspalte undBedingungsspalte ein.

Ist die Spalte sichtbar, so können wir die Bedingung in der passenden Zeile eingeben.Diese muß einen logischen Wert liefern. Beim Ausführen des Makros wertet Access jeden

Page 535: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Makros © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc05.doc – 96141 Seite: 5-7

bedingten Ausdruck aus. Ist die Bedingung wahr, wird die Aktion in der entsprechendenZeile ausgeführt. Soll die Bedingung auf für die nächste Zeile(n) gelten, so geben wir dortAuslassungszeichen ... ein.

Access führt dann weitere im Makro enthaltene Aktionen aus, für die die Spalte Bedin-gung leer ist, bis ein weiterer Ausdruck, ein Makroname oder das Ende des Makros er-reicht ist.

Wenn eine Bedingung falsch (nicht erfüllt) ist, ignoriert Access die Aktion und die nachfol-genden Aktionen, die in der Spalte Bedingung durch ein Auslassungszeichen ... ge-kennzeichnet sind. Anschließend wird die nächste Aktion ausgeführt, die in der Aktions-zeile einen Ausdruck enthält oder für die die Spalte Bedingung leer ist.

Da wir in Makros Zeilen nicht auskommentieren können, setzen wir folgenden Trick ein:

Wenn Access eine Aktion vorübergehend (zum Testen) ignorieren soll, geben wir in derSpalte Bedingung für diese Aktion Falsch ein.

5.3 Fehlersuche�

Um Fehler in einem Makro zu finden, schalten wir die Einzelschrittausführung ein.Hierdurch können wir uns den Ablauf des Makros und die Ergebnisse jeder Aktion anzei-gen lassen und feststellen, welche Aktion einen Fehler hervorruft oder unerwünschte Er-gebnisse erzeugt.

1. Wir öffnen das Makro.

2. Wir klicken auf der Symbolleiste auf .

3. Wir klicken auf der Symbolleiste auf .4. Wir klicken auf Schritt , um die im Dialogfeld Einzelschritt angezeigte Aktion aus-

zuführen.5. Wir klicken auf Halt , wenn wir die Ausführung des Makros beenden und das Dia-

logfeld schließen möchten.6. Wir klicken auf Weiter , wenn wir die Einzelschrittausführung beenden und den ver-

bleibenden Teil des Makros ohne Unterbrechung ausführen möchten. �

Einige Aktionen sind besonders hilfreich:

StopAlleMakros

Hiermit beenden wir alle ineinander verschachtelten Makros, die momentan ausgeführtwerden.

Wir verwenden diese Aktion in der Regel dann, wenn ein Fehler die Beendigung aller Ma-kros erfordert. Hierzu steuern wir über eine Bedingung diese Aktion an.

Page 536: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 5.3 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 5-8 D:\Eigene\Doku\DB\DBAcc05.doc – 96141

StopMakro

Hiermit beenden wir das momentan ausgeführte Makro.

Hat das Makro die Aktionen Echo oder Warnmeldungen verwendet, um das Echooder die Anzeige von Systemmeldungen auszuschalten, so schaltet die Aktion beidesautomatisch wieder ein.

Echo

Mit der Aktion Echo können Sie angeben, ob Echo ein- oder ausgeschaltet ist. Wir ver-wenden diese Aktion, um die Ergebnisse eines Makros während der Ausführung auszu-blenden oder anzuzeigen.

Aktionsargument BeschreibungEcho Ja, schaltet das Echo ein, Nein schaltet das Echo aus. Die

Voreinstellung ist Ja.Statuszeilentext Der in der Statusleiste anzuzeigende Text, wenn Echo ausge-

schaltet ist. Wenn z. B. Echo ausgeschaltet ist, kann die Status-leiste den Text Das Makro wird ausgeführt. anzeigen.

Warnmeldungen

Mit der Aktion schalten wir Systemmeldungen ein- oder aus.

Aktionsargument BeschreibungWarnmeldungen An Gibt an, ob Systemmeldungen angezeigt werden. Ja schaltet

die Systemmeldungen ein, Nein schaltet aus. Die Voreinstel-lung ist Nein.

Page 537: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 12.04.97 13:10/12.04.97 13:10 Seite: 6-I

MS Access – Programmierung

6 Programmieren .............................................................................................................6-1

6.1 Grundlagen ............................................................................................................6-1

6.1.1 Access Basic....................................................................................................6-1

6.1.2 Modulkonzept ..................................................................................................6-1

6.1.3 Codeeditor aufrufen .........................................................................................6-6

6.1.4 Übung ..............................................................................................................6-7

6.2 Variablen und Konstanten ...................................................................................6-8

6.2.1 Objekte.............................................................................................................6-9

6.2.2 Deklaration.......................................................................................................6-9

6.2.2.1 Bezeichner................................................................................................6-9

6.2.2.2 Ausdruckseditor......................................................................................6-12

6.2.2.3 Datentypen .............................................................................................6-13

6.2.2.4 Datentyp Variant.....................................................................................6-17

6.2.2.5 Zeiger .....................................................................................................6-19

6.2.2.6 Tabellenfelder.........................................................................................6-20

6.2.3 Gültigkeitsbereiche von Variablen .................................................................6-21

6.2.4 Lebensdauer von Variablen...........................................................................6-22

6.2.5 Konstanten.....................................................................................................6-23

6.3 Verarbeitungsanweisungen ...............................................................................6-25

6.3.1 Ausdrücke......................................................................................................6-26

6.3.2 Operatoren.....................................................................................................6-27

6.3.2.1 Arithmetische Operatoren ......................................................................6-27

6.3.2.2 Verkettungsoperatoren...........................................................................6-29

6.3.2.3 Vergleichsoperatoren .............................................................................6-30

6.3.2.4 Mustervergleichender Operator .............................................................6-31

6.3.2.5 Logische Operatoren..............................................................................6-31

6.3.2.6 Diverse Operatoren ................................................................................6-32

6.3.3 Funktionen .....................................................................................................6-32

6.3.3.1 Dateieingabe/-ausgabe (E/A) .................................................................6-33

6.3.3.2 Datenfelder .............................................................................................6-33

Page 538: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Inhaltsverzeichnis © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-II D:\Eigene\Doku\DB\DBAcc06.doc – 12.04.97 13:10/12.04.97 13:10

6.3.3.3 Datum/Zeit.............................................................................................. 6-33

6.3.3.4 Domäne.................................................................................................. 6-34

6.3.3.5 Dynamischer Datenaustausch (DDE).................................................... 6-34

6.3.3.6 Fehlerbehandlung.................................................................................. 6-34

6.3.3.7 Finanzmathematische Aufgaben ........................................................... 6-34

6.3.3.8 Grafiken in gedruckten Berichten .......................................................... 6-35

6.3.3.9 Inspektion von Variablen........................................................................ 6-35

6.3.3.10 Konvertierung....................................................................................... 6-35

6.3.3.11 Mathematische Funktionen.................................................................. 6-35

6.3.3.12 Objekte verknüpfen und einbetten (OLE) ............................................ 6-36

6.3.3.13 Objektmanipulation .............................................................................. 6-36

6.3.3.14 Sonstiges ............................................................................................. 6-36

6.3.3.15 SQL ...................................................................................................... 6-37

6.3.3.16 Zeichenfolgen ...................................................................................... 6-37

6.3.4 Objektmethoden............................................................................................ 6-37

6.3.4.1 Application-Objekt.................................................................................. 6-38

6.3.4.2 Steuerelementmethoden ....................................................................... 6-38

6.3.4.3 Database-Objekt, Databases-Auflistung (Datenzugriff) ........................ 6-38

6.3.4.4 DBEngine-Objekt (Datenzugriff) ............................................................ 6-40

6.3.4.5 Document-Objekt, Documents-Auflistung (Datenzugriff) ...................... 6-40

6.3.4.6 Field-Objekt, Fields-Auflistung (Datenzugriff) ........................................ 6-41

6.3.4.7 Methodenverzeichnis für Formulare ...................................................... 6-43

6.3.4.8 Group-Objekt, Groups-Auflistung (Datenzugriff) ................................... 6-43

6.3.4.9 Index-Objekt, Indexes-Auflistung (Datenzugriff).................................... 6-44

6.3.4.10 Parameter-Objekt, Parameters-Auflistung (Datenzugriff).................... 6-45

6.3.4.11 Property-Objekt, Properties-Auflistung (Datenzugriff) ......................... 6-45

6.3.4.12 QueryDef-Objekt, QueryDefs-Auflistung (Datenzugriff)....................... 6-46

6.3.4.13 Recordset-Objekt, Recordsets-Auflistung (Datenzugriff) .................... 6-48

6.3.4.14 Relation-Objekt, Relations-Auflistung (Datenzugriff) ........................... 6-50

6.3.4.15 Berichte (Reports)................................................................................ 6-50

6.3.4.16 Bildschirm-Objekt (Screen-Objekt) ...................................................... 6-51

6.3.4.17 TableDef-Objekt, TableDefs-Auflistung (Datenzugriff) ........................ 6-51

6.3.4.18 User-Objekt, Users-Auflistung (Datenzugriff) ...................................... 6-53

6.3.4.19 Workspace-Objekt, Workspaces-Auflistung (Datenzugriff) ................. 6-54

6.3.5 Makros ausführen.......................................................................................... 6-55

Page 539: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 12.04.97 13:10/12.04.97 13:10 Seite: 6-III

6.4 Steuerstrukturen .................................................................................................6-55

6.4.1 Grundlagen ....................................................................................................6-55

6.4.2 Folge ..............................................................................................................6-56

6.4.3 Alternative ......................................................................................................6-56

6.4.4 Wiederholung.................................................................................................6-60

6.4.5 Rekursion.......................................................................................................6-63

6.4.5.1 Grundlagen.............................................................................................6-63

6.4.5.2 Beispiele und Aufgaben .........................................................................6-64

6.4.5.3 Lösungen................................................................................................6-67

6.5 Programmablauf ..................................................................................................6-71

6.5.1 Öffnen eines Formulars .................................................................................6-71

6.5.2 Schließen eines Formulars............................................................................6-72

6.5.3 Formularwechsel ...........................................................................................6-72

6.5.4 Zeitgeber........................................................................................................6-73

6.5.5 Fehler.............................................................................................................6-73

6.5.6 Arbeiten mit den Daten eines Formulars.......................................................6-73

6.5.6.1 Formulare ohne Unterformulare.............................................................6-73

6.5.6.2 Formulare mit Unterformularen ..............................................................6-74

6.5.7 Reihenfolge der Ereignisse für Steuerelemente in Formularen ....................6-75

6.5.7.1 Bewegen des Fokus zu einem Steuerelement.......................................6-75

6.5.7.2 Bewegen des Fokus von einem Steuerelement weg.............................6-75

6.5.7.3 Ändern und Aktualisieren von Daten in einem Steuerelement ..............6-76

6.5.8 Reihenfolge der Ereignisse für Tastenanschläge und Mausklicks................6-77

6.5.8.1 Tastaturereignisse..................................................................................6-77

6.5.8.2 Mausereignisse ......................................................................................6-78

6.6 Verknüpfte Dateien .............................................................................................6-79

6.6.1 Grundlagen ....................................................................................................6-79

6.6.2 Bearbeitung verknüpfter Tabellen .................................................................6-79

6.7 Tips und Tricks zum Programmieren ................................................................6-81

6.7.1 Variable mit dem Wert eines Tabellenfeldes füllen .......................................6-81

6.7.2 Tabellenfeld mit dem Wert einer Variablen füllen .........................................6-83

6.7.3 Variable mit dem Wert eines Steuerelementes füllen ...................................6-83

6.7.4 Steuerelement mit dem Wert einer Variable füllen........................................6-84

6.7.5 Steuerelement mit dem Wert eines Tabellenfeldes füllen.............................6-84

6.7.6 Suche, Änderung und Neueingabe mit einem Kombinationsfeld realisieren 6-84

6.7.7 Wie kann man eine eigene Tabelle anlegen .................................................6-86

Page 540: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Inhaltsverzeichnis © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-IV D:\Eigene\Doku\DB\DBAcc06.doc – 12.04.97 13:10/12.04.97 13:10

6.7.8 Programmierte m:m Beziehung .................................................................... 6-88

Page 541: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-1

6 Programmieren

6.1 Grundlagen

6.1.1 Access Basic

Für die Programmierung von Access Anwendungen stehen uns Makros und Programmein Access Basic zur Verfügung. Access Basic gehört zur Familie ‘Visual Basic für Anwen-dungen’ (VBA). Zu dieser Familie gehören einerseits die Access Basic Varianten der ver-schiedenen Microsoft Anwendungspakete von Access über Excel bis zu Word u. a. undandererseits Visual Basic (VB) selbst. Der Unterschied liegt dabei hauptsächlich in derSpezialisierung auf die verschiedenen Anwendungsfunktionen.

Visual Basic umfaßt z. B. eine vollständig eigenständige Oberflächengestaltung. Diesewird unter VBA von der jeweiligen Trägeranwendung übernommen. Visual Basic verfügtdagegen nicht über die Spezialbefehle zur Berechnung von Standardabweichung (Excel)oder Textsuche (Word). Wie Sie sehen, sind in dieser Aufzählung keine Access Beispieleaufgeführt, da Visual Basic über die Jet Engine verfügt, die eine direkte Datenbankpro-grammierung erlaubt, ohne daß der Anwender über Access verfügen muß.

6.1.2 Modulkonzept

Access kennt grundsätzlich zwei ver-schiedene Arten Module. Dieses sindzum einen die allgemeinen Module, diewir über das Datenbankfenster anspre-chen (Bild 6.1-1) und zum anderen dieFormularmodule, von denen es für jedesFormular genau eines gibt.

Die Prozeduren aus den allgemeinenModulen können wir überall aufrufen.Die Prozeduren der Formularmodulestehen nur im geladenen Formular zu Verfügung.

Ein Modul besteht seinerseits aus einer Reihe von Einzelbausteinen, den Prozeduren.Diese Prozeduren sind über ein Formular oder innerhalb anderer Prozeduren aufrufbar.Sie besitzen einen Einsprungpunkt (Entry Point). Ein Modul ist somit ein editierbarerContainer für eine Vielzahl von Prozeduren. Access Basic legt für jedes Modul eine Listeder Einsprungpunkte an und findet über diese Liste den eigentlichen Programmcode.

Bild 6.1-1: Datenbankfenster mit Modulverwal-tung

Page 542: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-2 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Zusätzlich kann jeder Modul einen Deklarationsbe-reich enthalten, der Compileranweisungen, Deklara-tionen globaler Variablen und Deklarationen vonDLL-Prozeduren, Definition von Konstanten usw.enthält. Ein Modul stellt sich daher wie abgebildetdar (Bild 6.1-2).

Bei den Prozeduren unterscheiden wir zwischen denUnterprogrammen (Subroutines) und den Funktio-nen (Functions). Ein Unterprogramm liefert im Ge-gensatz zu den Funktionen keinen an den Namender Prozedur gebundenen Wert zurück. Dies heißtmit anderen Worten, daß ein Unterprogramm durch-aus Daten zurückliefern kann. Dies geschieht dannaber über die Argumentliste. Diese Unterscheidungist verglichen mit anderen Programmierung nochetwas anachronistisch, da wir ein Unterprogramm auch als Funktion mit dem Rückgabe-wert „undefiniert“ auffassen können. Funktionen können wir im Gegensatz zu Prozedurenin Ausdrücken verwenden, so daß sie hier Vorteile bringen.

Die Definition eines Unterprogrammes geschieht mit

Sub [Static] [Private] Sub Prozedurname [(Argumentenliste)][Anweisungsblock]

[Exit Sub][Anweisungsblock]

End Sub End Sub

Eine Schachtelung von Prozeduren ist in Access Basic grundsätzlich nicht möglich.

Argument BeschreibungStatic Gibt an, daß die lokalen Variablen der Sub-Prozedur zwischen ein-

zelnen Aufrufen erhalten bleiben. Das Attribut Static wirkt sichnicht auf Variablen aus, die außerhalb der Sub-Prozedur deklariertwerden, selbst wenn diese in der Prozedur verwendet werden.

Private Gibt an, daß auf die Sub-Prozedur nur von anderen Prozeduren imModul zugegriffen werden kann, in dem sie implementiert ist. Pro-zeduren in anderen Modulen haben auf diese Sub-Prozedur kei-nen Zugriff.

Prozedurname Name der Prozedur. Für die Namen von Sub-Prozeduren geltendieselben Regeln wie für die Namen anderer Variablen, nur daßsie keine Typenkennzeichen enthalten können. Da die Namen vonSub-Prozeduren von allen Prozeduren in allen Modulen erkanntwerden, darf Prozedurname nicht mit einem anderen global er-kannten Namen im Programm übereinstimmen. Dazu gehören dieNamen von Prozeduren (in Access Basic oder einer Dynamic LinkLibrary (DLL)) sowie globale Variablen und Konstanten (mit Globaldeklariert). Um einen Namenskonflikt zu vermeiden, können dasreservierte Wort Private verwenden. Dadurch wird der Gültigkeits-

Modul

Deklarationsbereich des Moduls

Prozedur 1

Prozedur 2

Prozedur 3

Bild 6.1-2: Struktur eines VB Mo-duls

Page 543: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-3

Argument Beschreibungbereich der Sub-Prozedur auf das Modul beschränkt, in dem sieerscheint. Allerdings kann dann keine Prozedur eines anderenModuls mehr auf diese Sub-Prozedur zugreifen. Selbst bei Ver-wendung des reservierten Wortes Private darf Prozedurnamenicht mit dem Namen einer anderen Modulvariablen, einer Kon-stanten oder einer Prozedur in demselben Modul übereinstimmen.

Argumentenliste Liste von Variablen, die für die Argumente stehen, die bei Aufrufder Sub-Prozedur an diese übergeben werden. Mehrere Variablenwerden durch Kommas voneinander getrennt. Einzelne Argumentewerden, sofern kein reserviertes Wort ByVal vorhanden ist, alsReferenz übergeben. Wird also der Wert eines Arguments inner-halb der Sub-Prozedur geändert, ändert sich auch sein Wert in deraufrufenden Prozedur.

Anweisungsblock Eine beliebige Gruppe von Anweisungen, die innerhalb desRumpfes der Sub-Prozedur ausgeführt werden.

Exit Sub Bewirkt das sofortige Verlassen einer Sub-Prozedur. Die Pro-grammausführung wird mit der Anweisung fortgesetzt, die auf jeneAnweisung folgt, mit der die Sub-Prozedur aufgerufen wurde. An-weisungen Exit Sub können an beliebig vielen Stellen einerSub-Prozedur erscheinen.

End Sub Markiert das Ende einer Sub-Prozedur.

Das Argument Argumentenliste hat folgende Syntax:

[ByVal] Variable[( )] [As Datentyp] [, [ByVal]Variable[( )] [ AsDatentyp] ] . . .

Argument BeschreibungByVal Gibt an, daß für das Argument ein Wert und keine Referenz übergeben

wird. Das reservierte Wort ByVal kann nicht in Verbindung mit einerVariablen eines benutzerdefinierten Datentyps oder eines Objektdaten-typs verwendet werden.

Variable Name der Variablen, die als Argument übergeben werden soll. Wir ver-wenden bei Variablen eines Datenfeldes die Klammern, aber lassen dieAnzahl der Dimensionen weg.

As Datentyp Deklariert den Datentyp von Variable. Datentyp kann Integer,Long, Single, Double, Currency, String (nur Zeichenfolgenvariabler Länge), Variant, ein benutzerdefinierter Datentyp oder einObjektdatentyp (eine Variable mit einem Objektdatentyp darf nicht alsDatenfeld deklariert werden) sein. Wir verwenden für jedes Argumenteine separate Klausel As Datentyp.

Der Aufruf einer solchen Sub-Prozedur erfolgt über

Page 544: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-4 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Call Call Name [(Argumentenliste)]

oder

Name [Argumentenliste]

Argument BeschreibungName Name der aufzurufenden ProzedurArgumentenliste Variablen, Datenfelder oder Ausdrücke, die an die Prozedur über-

geben werden sollen.

Wenn Sie sich fragen, welche der beiden Aufrufvarianten Sie verwenden sollen, dann istdie etwas umständlichere Variante vorzuziehen, insbesondere dann, wenn Sie Ihre Pro-zeduren mit englischen Namen versehen. Durch das Call erkennen Sie sofort, daß Sieeine selbstdefinierte Prozedur aufrufen. Dies ist für die Pflege der Programme ein we-sentliches Hilfsmittel. Wir sollten dann aber die Klammern um die Argumentliste nicht ver-gessen.

) Vorsicht: Sub-Prozeduren können auch rekursiv sein, d. h. sie können sich selbstaufrufen, um eine vorgegebene Aufgabe auszuführen. Diese Rekursionkann jedoch zu einem Stapelüberlauf führen. Das reservierte Wort Staticwird in Verbindung mit rekursiven Sub-Prozeduren i. a. nicht verwendet.Warum sollten auch der Argumentenstapel aufgehoben werden?

In Sub-Prozeduren verwendete Variablen lassen sich in zwei Kategorien unterteilen: Va-riablen, die innerhalb der Prozedur explizit deklariert werden, und Variablen, die nicht ex-plizit deklariert werden. Variablen, die in einer Prozedur explizit deklariert werden (mit ei-ner Anweisung Dim oder einer ähnlichen Anweisung), sind lokale Variablen (d. h. siegelten nur innerhalb dieser Prozedur). Andere Variablen, die in einer Prozedur verwendet,aber nicht explizit deklariert werden, sind ebenfalls lokale Variablen, es sei denn, sie wer-den auf einer höheren Ebene außerhalb der Prozedur explizit deklariert.

) Tip: Eine Prozedur kann eine Variable, die nicht explizit in der Prozedur dekla-riert wurde, zwar verwenden, es kann jedoch ein Namenskonflikt auftreten,falls ein anderes im Deklarationsbereich definiertes Element denselbenNamen hat. Bezieht sich Ihre Prozedur auf eine nicht deklarierte Variable,die denselben Namen trägt wie eine andere Prozedur, eine globale oder ei-ne auf Modulebene deklarierte Konstante oder Variable, oder ein Objekt,dann geht Access Basic davon aus, daß sich Ihre Prozedur auf das Elementauf der höheren Ebene bezieht. Wir deklarieren daher Variablen explizit, umdiese Art Konflikt zu vermeiden. Wir können eine Anweisung Option Ex-plicit verwenden, um die explizite Deklaration von Variablen erforderlichzu machen.

Explicit Option Explicit

Page 545: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-5

Die Anweisung Option Explicit wird im Deklarationsbereich eines Moduls verwen-det, um eine explizite Deklaration aller Variablen für dieses Modul zu erfordern. Wenn wirdie Anweisung Option Explicit nicht verwenden, erhalten alle nicht deklarierten Va-riablen den Datentyp Variant (es sei denn, der Standarddatentyp wird anderweitigdurch eine Anweisung DefDatentyp festgelegt). Wenn wir die Anweisung OptionExplicit verwenden, müssen alle Variablen explizit deklariert werden, bevor sie ver-wendet werden können. Wenn wir versuchen, einen nicht deklarierten Variablennamen zuverwenden, tritt ein Fehler auf.

) Tip: Wir verwenden grundsätzlich Option Explicit, um falsche Eingabenvon Namen bestehender Variablen oder Verwechslungen im Code, in demder Gültigkeitsbereiche der Variablen unklar ist, zu vermeiden.

Function [Static][Private] Function Funktionsname[(Argumentenliste)] [As Datentyp]

[Anweisungsblock][Funktionsname = Ausdruck]

[Exit Function][Anweisungsblock][Funktionsname = Ausdruck]

End Function End Function

Die Beschreibung stimmt mit der Sub-Prozedur bis auf folgende Punkte überein

Argument BeschreibungFunktionsname Name der Funktion. Für die Namen von Funktionen gelten dieselben

Regeln wie für die Namen anderer Variablen. Ferner können dieseebenfalls ein Typenkennzeichen enthalten. ...Wir beachten, daß der Typ des Namens den von der Funktion aus-gegebenen Datentyp bestimmt. Um den Rückgabedatentyp derFunktion festzulegen, verwenden wir entweder im Anschluß an Ar-gumentenliste eine As-Klausel, oder beziehen in den Namen derFunktion ein Typenkennzeichen ein. Um z. B. eine Funktion zu er-stellen, die eine Zeichenfolge ausgibt, können wir entweder ein Dol-larzeichen $ an den Namen anhängen, eine As String-Klauselverwenden oder ihr einen Namen geben, der mit einer AnweisungDefStr als Name einer Zeichenfolge definiert wurde.

As Datentyp Reserviertes Wort, mit dem wir den Datentyp des von der Funktionausgegebenen Wertes deklarieren können; Datentyp kann Inte-ger, Long, Single, Double, Currency, String oderVariant sein.

Ausdruck Rückgabewert der Funktion. Eine Funktion gibt einen Wert aus, in-dem sie diesen Wert der Funktion Funktionsname zuordnet. Anjeder beliebigen Stelle innerhalb der Prozedur können beliebig vielesolcher Zuordnungen erscheinen. Wird Funktionsname kein Wert zu-geordnet, gibt die Prozedur einen Standardwert aus: eine numerischeFunktion gibt den Wert 0 aus, eine Funktion vom Datentyp Stringeine leere Zeichenfolge "" und eine Funktion vom Datentyp

Page 546: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-6 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Argument BeschreibungVariant den Varianttyp Leer.

Bevor wir nun weiter die Argumente, Variablen usw. und deren Gültigkeit besprechen,wollen wir noch die praktischen Dinge näher beleuchten.

6.1.3 Codeeditor aufrufen

Je nach unseren Absichten und der aktuellen Umgebung haben wir verschiedene Mög-lichkeiten, Module zu erstellen. Ganz hilfreich ist es, sich bei jeder Prozedur zu überlegen,ob sie wiederverwendbar ist. Solche Prozeduren gehören in allgemeine Module. Hiersollten wir jedoch keine Jumbo-Module erstellen, sondern Prozedurklassen bilden.

�Um eine solche allgemeine Prozedur zu definieren, gehen wir in den folgenden Schrittenvor (Mausvariante)

1. Datenbankfenster öffnen2. Register Modul auswählen3. Schaltfläche Neu anklicken

Nach Eingabe der Prozedur wird beim Schließen der Modulname abgefragt. Damit ist dasModul angelegt und kann ab sofort über Entwurf in den Editor geladen und verändertwerden. Logischerweise können wir Prozeduren nur im Zusammenhang mit Formularen,Berichten usw. ausführen. Daher ist die Schaltfläche Ausführen gegraut. �

�Formularspezifische Prozeduren erzeugen wir auf folgenden Wegen

1. ins Formular (Entwurfsmodus) wechseln2. Code-Ikone anklicken

oder

1. ins Formular (Entwurfsmodus) wechseln2. Eigenschaften des Formulars oder eines Steuerelementes mit aktivieren3. Ereigniseigenschaften auswählen4. Cursor in die gewünschte Ereigniseigenschaft positionieren5. Editor-Ikone anklicken (Bild 6.1-3) �

In irgendeiner Form werden Sie in das Editorfenster gelan-gen. Dieses positioniert seine eigene Menü- undIkonenzeile, die für uns wichtige Funktionen enthält (Bild6.1-4)

Links oben sehen wir Kombifelder für die Prozeduren(allgemeiner Modul) bzw. für die Steuerelemente und ihreEreignisse (Formularmodul). Jetzt können wir bei Bedarfnoch einmal in eine andere Prozedur wechseln. Sehen Siesich ruhig einmal alle Steuerelemente Ihres Formulars an. Die Ereignisliste ändert sich jenach Steuerelement.

Bild 6.1-3: Ereigniseigen-schaften

Editorikone

Rolloikone

Ereignisprozedur

Page 547: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-7

Im dargestellten Modul sehen wir bereitszwei Compiler Direktiven. Die erste sorgtdafür, daß Access Basic die Sortierreihen-folge der Datenbank benutzt. Sie wird auto-matisch eingefügt. Die zweite Direktive istvon uns eingegeben und verlangt die stren-ge Typprüfung, d. h. jede Variable muß vorihrer Benutzung deklariert sein.

In der Ikonenleiste finden wir mehrereIkonengruppen

Modulschalter (1) Hiermit legen wir einen neuen Modula an.Prozedurschalter (3) Hiermit blättern wir in den Prozeduren bzw. legen eine neue

Prozedur an.Ausführen (3) Mit den Ikonen ähnlich einem Recorder starten wir das Pro-

gramm, führen es nach Unterbrechung weiter oder setzen eszurück. Vorher sollten wir das Modul syntaktisch prüfen, indemwir es übersetzen. Diese Ikone sollten Sie sich unbedingt mer-ken und natürlich benutzen. Rufen wir eine fehlerhafte Proze-dur in einem Formular auf, dann ist es mühsam, diese abzu-brechen. Da Visual Basic interpretativ ausgeführt wird, er-scheint jedesmal eine Fehlermeldung, wenn die Zeile erneutübersetzt wird.

Debuggen (4) Für die Fehlersuche ist der Einzelschritt, der Prozedurschritt,das Zurücksetzen und das Setzen von Haltepunkten sehr hilf-reich.

Fehlersuche (2) Eng verwandt mit dem Debuggen sind die Fehlersuchikonen.Wir können das Direktfenster öffnen. In diesem können wir mit? variablenname die Werte bestimmter Variablen abfragen.Das gleiche gelingt uns über die Brillenikone. Wir können aberauch aus dem Programm heraus mit Debug.Printvariablenname Werte ausgeben. Die Aufruf-Ikone zeigt unsdie Verschachtelung von Prozeduraufrufen an.

Editor(1) Im Editor können wir noch einen weiteren Editor, genauer denAusdrucks-Editor aufrufen. Dies ist immer dann hilfreich, wennwir die genaue Bezeichnung einer Variablen usw. nicht findenkönnen. Näher Einzelheiten hierzu finden Sie im folgenden Ka-pitel.

Hilfe (2) Fehlerhafte Eingaben können wir rückgängig machen bzw. imZweifelsfall die Hilfefunktion aufrufen.

Objektkatalog(1) Hiermit finden wir die Objekte schneller.

6.1.4 Übung

Zur Übung legen wir ein allgemeines Modul allgemein an, in dem wir wichtige Proze-duren für alle Formulare ablegen wollen.

Bild 6.1-4: Editorfenster

Page 548: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.1 Grundlagen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-8 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Wenn wir in ein Formular ein Schalt-fläche zum Beenden einfügen, dannwird diese standardmäßig bereitsvom Schaltflächen-Assistenten miteinem Programm hinterlegt. Dieseshat den Nachteil, daß es nicht nurdas Formular schließt sondern auchnoch Access selbst. Beim Program-mieren und Testen ist dies recht un-angenehm. Nun können wir das Ver-halten durch eine andere Anweisungso abändern, daß wir wieder in dieProgrammierumgebung zurückkehren. Dies führen wir für alle unsere Prozeduren durch.Irgendwann sind wir fertig und wollen das ursprüngliche Verhalten wiederherstellen. Dasist in einigen zig Formularen sehr mühsam. Wir beschließen daher, eine gemeinsameProzedur zu definieren, die wir aus allen Formularen heraus aufrufen. Ändern wir nundiese Prozedur, dann ändert sich das Verhalten aller Formulare, die diese gemeinsameProzedur aufrufen.

�Geben Sie zu diesem Zweck das dargestellte Programm (Bild 6.1-5) ein. Einzelheiten derAnweisungen folgen in den nächsten Kapiteln. Übersetzen Sie das Programm und korri-gieren Sie mögliche Syntaxfehler. Sind keine vorhanden, dann erzeugen Sie künstlichFehler, indem Sie eine der Anweisungen falsch schreiben, z. B. DCmd statt DoCmd oderähnliches. �

6.2 Variablen und Konstanten

Wenn Sie die erste Prozedur ohne Probleme verstehen, können Sie mit dem Weiterlesenaufhören. Jetzt wird es ein wenig trockener, denn wir müssen einige Grundlagen bespre-chen.

Über kurz oder lang werden wir in unseren Prozeduren auf Variablen und Konstanten zu-rückgreifen. Schließlich wollen wir Daten verarbeiten. Im Grund haben wir ja bereits durchdie Deklaration von Tabellen Variablen in Form von Attributsbezeichnern festgelegt. Wirbenötigen aber noch neben diesen festen Variablen temporäre Variablen für Zwischen-werte usw.

Bild 6.1-5: Allgemeine Beenden-Prozedur

Page 549: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-9

6.2.1 Objekte

Eigentlich gehören auch die Ob-jekte hierher, obwohl wir in Vi-sual Basic vorsichtig sein soll-ten. Es handelt sich nämlich nurnäherungsweise um Objekte imSinne der OOP (Objektorien-tierten Programmierung). Siemögen intern zwar die Verer-bung und die Polymorphie ken-nen. Diese Eigenschaften kön-nen wir aber als Benutzer nurindirekt nutzen.

Bild 6.2-1 zeigt uns die Klassen-hierarchie mit der Vererbung der verschiedenen Klassen. Daneben gibt es einige weitereObjekte, die nicht zu dieser Hierarchie gehören wie das Fehlerobjekt (Err-Objekt), dasAuflistungsobjekt (Collection-Objekt) und das Debug-Objekt.

Die Klassenhierarchie zeigt uns, daß einige Klassen nur eine Instanz ausprägen, wäh-rend andere Auflistungen sind. Diese Auflistungen sind ein wesentlicher Bestandteil vonVisual Basic. Wir können das Diagramm quasi so lesen:

Eine Anwendung ist eine Auflistung mehrerer Formulare. Ein Formular ist die Aufli-stung mehrerer Steuerelemente usw. Mit Hilfe dieser Listenverwaltung ist die Fle-xibilität von Visual Basic und Windows-Programmen allgemein erst möglich.

6.2.2 Deklaration

Unter der Deklaration einer Variablen versteht man die Anweisungen an den Compiler,die diesem den Bezeichner, den Typ, die Lebensdauer und die Sichtbarkeit einer Varia-blen mitteilen. Bei einigen Typen legt daraufhin der Compiler gleich den Speicherplatz imsog. Datensegment fest. Andere Typen (Strings u. a.) werden dynamisch verwaltet, daerst zur Laufzeit die Länge bekannt ist.

6.2.2.1 Bezeichner

Der Bezeichner ist schlichtweg der (eindeutige) Name einer Variablen mit den Eigen-schaften

– beginnt mit einem Buchstaben;− darf danach Buchstaben, Ziffern und den Unterstrich enthalten;− muß in eckigen Klammern [] eingeschlossen sein, wenn er andere Zeichen

(insbesondere die Leerstelle, den Bindestrich o. ä.) enthält;− wird durch seine ersten 40 Zeichen von anderen Bezeichnern unterschieden− darf kein reserviertes Wort sein.

Anwendung

Formulare

Berichte

Steuerelemente

Steuerelemente

Bildschirm

DoCmd

Objekt und Auflistung

Nur Objekt

Bild 6.2-1: Klassenhierarchie von Visual Basic

Page 550: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-10 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Einen Bezeichner können wir uns als Zeiger auf den Inhalt einer Speicherstelle vorstellen,der natürlich eindeutig diese Stelle bezeichnen muß. Hier fangen aber schon die Schwie-rigkeiten an. Was ist, wenn wir in zwei Formularen ein Feld gleich benennen. Wechselnwir nun die Formulare und wollen Daten vom einen zum anderen Formular übergeben,dann muß die Richtung eindeutig festgelegt sein. Der Name allein genügt offensichtlichnicht mehr. Hierzu muß der Name qualifiziert werden. Analog geht es uns mit den Steue-relementen in den Formularen. Diese haben verschiedene Eigenschaften. Das Steuere-lement hat zwar einen Namen, aber wir wollen nur eine einzelne Eigenschaft wie z. B. dieSichtbarkeit ändern. Dann muß die Eigenschaft ebenfalls qualifiziert werden.

Ein vollständiger Bezeichner besteht daher aus (mindestens) drei Teilen, die folgendeBestandteilen beinhalten

dem Namen eines Objekts oder einer Auflistungeinem Eigenschaftennamen oderden Operatoren ! und . (Punkt) für Bezeichner

Die Referenz (Bezug auf eine Variable)

Formulare![Artikel bearbeiten]![Lagerbestand neu]

verweist auf den Inhalt des Feldes Lagerbestand neu im Formular Artikel be-arbeiten. Der erste Teil des Bezeichners gibt seinen Typ an. Innerhalb des Typs müs-sen die Objekte wiederum eindeutig bezeichnet sein. Der zweite Teil legt dieses Objektfest. Im dritten Teil schließlich finden wir das Steuerobjekt. Die Trennzeichen sind Ausru-fezeichen !. Wenn man noch weiß, wie Visual Basic in den früheren Versionen qualifi-zierte, dann hätte man dort

Formulare![Artikel bearbeiten]![Lagerbestand neu].Text

eingeben müssen, d. h. die Eigenschaft Text des Feldes angeben müssen, um an des-sen Inhalt heranzukommen. Der Punkt . trennt also die Eigenschaft vom Objekt. In derneueren Versionen von Visual Basic gibt es eine Standardeigenschaft, die dann einge-setzt wird, wenn keine Eigenschaft angegeben wurde.

Sicher werden Sie nun den Unterschied zwischen den beiden folgenden Referenzen er-klären können

Formulare![Artikel bearbeiten]![Lagerbestand neu].Breite

Formulare![Artikel bearbeiten].Breite

AnmerkungenWenn wir den Operator . vor einem Namen verwenden oder einen Namen ver-wenden, ohne das zugehörige Formular oder den betreffenden Bericht anzugeben,sucht Access zunächst nach einer Eigenschaft, die diesen Namen trägt, dann nacheinem Steuerelement und zuletzt nach einem Feld. Stimmt der Name Ihres Feldesmit dem einer Eigenschaft oder eines Steuerelements überein, gibt Access denWert der Eigenschaft bzw. des Steuerelements aus. Daher sollten wir den Operator. nicht vor dem Namen eines Feldes verwenden.Wenn wir auf ein Feld oder ein Steuerelement im aktiven Formular oder Berichtverweisen, brauchen wir keinen Formular- bzw. Berichtsnamen angeben. In einem

Page 551: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-11

Makro oder einem Aktionsargument brauchen wir nicht den Namen des Formularsoder Berichts angeben, aus dem heraus das Makro ausgeführt wird. Dies erlaubtuns das Schreiben von Makros, die von den Formularen oder Berichten, aus denenheraus sie ausgeführt werden, unabhängig sind.

Objekte und Auflistungen

Access Basic-Auflistungsobjekte sind spezielle Objekte, die auf eine Gruppe von Objek-ten verweisen. Die Auflistungsobjekte Formulare (Forms) und Berichte(Reports) verweisen auf alle geöffneten Formulare oder Berichte und können dazuverwendet werden, einen Verweis auf ein einzelnes Formular oder einen einzelnen Be-richt herzustellen, oder Änderungen an allen geöffneten Formularen oder Berichten ineiner Auflistung vorzunehmen.

Beim Programmieren erkennen wir die Auflistungsobjekte am Plural s, während Ein-zelobjekte im Singular auftreten. In diesem Sinne ist die folgende Tabelle zu lesen:

Objekt BeschreibungApplication das Anwendungsprogramm AccessControl ein Steuerelement in einem Formular oder BerichtDebug das DirektfensterForm ein geöffnetes Formular, einschließlich seiner UnterformulareFormulare (Forms) eine Auflistung geöffneter FormulareModule ein Formular- oder BerichtsmodulReport ein geöffneter Bericht, einschließlich seiner UnterberichteBerichte (Reports) eine Auflistung geöffneter BerichteBildschirm (Screen) die BildschirmanzeigeBereich (Section) ein Bereich eines Formulars oder Berichts oder eine Aufli-

stung von Bereichen

AnmerkungenEinige spezielle Eigenschaften stellen Objekte dar, zu denen Felder, Steuerele-mente und Eigenschaften gehören können. Mit Hilfe der Eigenschaften Me, For-mular, Bericht und Hauptobjekt können wir auf ein Formular oder Unter-formular, einen Bericht oder Unterbericht oder ein Hauptobjekt eines Unterformu-lars oder Unterberichts verweisen.Wir können festlegen, daß Access einen Bezeichner vor dem Auswerten des ver-bleibenden Teils des Ausdrucks auswertet. Dazu geben wir vor und hinter dem Be-zeichner den Operator | (senkrechter Strich) ein. Access fügt den Wert des Be-zeichners in den Ausdruck ein und wertet dann den Ausdruck aus.Senkrechte Striche (| |) werden häufig in Aggregatfunktionen für Domänen ver-wendet, wenn wir möchten, daß die Funktion den Wert, den sie in Filtern ausgibt,automatisch neu berechnet, oder als Alternative zum Operator & beim Verkettenvon Textwerten. Die folgenden Ausdrücke können z. B. alternativ verwendet wer-den:

="|[Nachname]|, |[Vorname]|"=[Nachname] & ", " & [Vorname]

Page 552: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-12 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Wir können einen Objektnamen auch in Klammern und Anführungszeichen (" " )angeben, anstatt den Operator ! zu verwenden. Die folgenden Ausdrücke kön-nen daher alternativ verwendet werden:

Formulare![Bestellungen]![Bestelldatum]Formulare("Bestellungen")("Bestelldatum")

Wir verwenden die Version mit Klammern in Access Basic-Modulen, wenn wir eineVariable in einem Bezeichner verwenden möchten.

) Tip: Wir können zum Verweisen auf ein Formular, einen Bericht oder ein Steue-relement in Access Basic anstelle einer Zeichenfolge auch eine Zahl ver-wenden. Dies erlaubt uns, alle Formulare oder Berichte oder alle Steuere-lemente in einem Formular oder Bericht zu durchlaufen. Wir verwenden dieEigenschaft Anzahl, um die Anzahl der Formulare, Berichte oder Steue-relemente zu bestimmen.

Forms und Reports usw. stellen vordefinierte Objekte bzw. Auflistungen dar, über diewir einzelne Objekte referenzieren können. Jedes Formular und jeder Bericht beruht ent-weder direkt auf einer Tabelle oder einer Abfrage, einer temporären Tabelle. Wir könnenhierauf über das vordefinierte Objekt Dynaset zugreifen. So können wir eine solcheTabelle mit

Set D = Forms!Adressen.Dynaset

„logisch einlesen“. Der Operator . zeigt uns an, daß Dynaset eine Eigenschaft desObjektes Adressen ist. Dieses wiederum gehört zu der Auflistung Forms .

Liest man die Tabelle aufmerksam, dann sehen wir, daß es neben Forms auch nochForm gibt. Dieses vordefinierte Objekt zeigt auf ein Unterformular in einem Hauptformu-lar oder einem Bericht. Mit

Forms![Datenträger bearbeiten]![Pfadliste1].Form![p_nr]

greifen wir auf den Inhalt des Steuerelementes p_nr im Unterformular Pfadliste1des Hauptformulars Datenträger bearbeiten zu. Genauer auf [ p_nr ].Text.

Als Merkregel können wir verwenden, daß der Operator ! auf selbstdefinierte Objektezeigt, während der Operator . bei Access Objekten eingesetzt wird.

6.2.2.2 Ausdruckseditor

Dieses „Verwirrspiel“ ist eine gute Gelegenheit, um auf den Ausdrucks-Editor zurückzu-greifen. Dieser hilft uns, frühzeitig den Syntaxfehlern aus dem Weg zu gehen.

Wie erwähnt, können wir ihn im Editor-Fenster über die Editor-Ikone aufrufen. Detailswerden bei den verschiedenen Gelegenheiten näher erläutert.

Page 553: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-13

6.2.2.3 Datentypen

Die eigentliche Deklaration von Variablen auf Modul- bzw. Prozedurebene erfolgt mit Hilfeder Anweisung

Dim Dim Variable[([Indizes])][ As Datentyp][, Vari a-ble [([Indizes])][ As Datentyp] ] . . .

Argument BeschreibungVariable Name einer Variablen.Indizes Dimensionen einer Datenfeldvariablen. Wir können mehrere Dimensio-

nen deklarieren.As Datentyp Reserviertes Wort, das zur Deklaration des Datentyps einer Variablen

verwendet wird. Datentyp kann Integer, Long , Single , Double ,Currency , String (für Zeichenfolgen variabler Länge), String *Länge (für Zeichenfolgen fester Länge), Variant , ein benutzerdefi-nierter Datentyp oder ein Objektdatentyp (eine Variable mit einemObjektdatentyp darf nicht als Datenfeld deklariert werden) sein. Wir ver-wenden für jede zu definierende Variable eine separate As DatentypKlausel.

Das Argument Indizes in der Anweisung Dim hat folgende Syntax:

[untergrenze To ]obergrenze[,[untergrenze To] obergrenze] . . .

Das reservierte Wort To bietet die Möglichkeit, sowohl die unteren als auch die oberenIndexgrenzen einer Datenfeldvariablen anzugeben. Die folgenden Anweisungen sindidentisch, sofern keine Anweisung Option Base vorliegt:

Dim A(8,3)Dim A(0 To 8, 0 To 3)Dim A(8, 0 To 3)

Datenfeldindizes können auch negativ sein. To kann verwendet werden, um einen be-liebigen Indexbereich aus dem Bereich von -32.768 bis 32.767 festzulegen:

Dim A(-4 To 10)Dim B(-99 To -5, -3 To 0)

Die Anzahl zulässiger Datenfelddimensionen in einer Anweisung Dim ist auf 60 be-grenzt. Wir können den Speicherbedarf eines numerischen Datenfeldes berechnen, in-dem wir die Anzahl der Elemente im Datenfeld mit der Anzahl der Bytes multiplizieren, diefür den Datentyp des Datenfeldes benötigt wird. Ein Datenfeld vom Datentyp Integer,bei dem 2 Bytes pro Element benötigt werden, kann z. B. doppelt so viele Elemente ent-halten wie ein Datenfeld vom Datentyp Long , das 4 Bytes pro Element benötigt. EinDatenfeld vom Datentyp Integer kann viermal so viele Elemente enthalten wie einDatenfeld vom Datentyp Double, das 8 Bytes pro Element benötigt. Datenfelder vomDatentyp String sind auf weniger als 64 KB beschränkt, da für jedes Datenfeld ein zu-sätzlicher Speicherbedarf für die Verwaltung benötigt wird.

Page 554: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-14 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Wenn wir einen Index verwenden, der größer als Obergrenze oder kleiner als Untergren-ze ist, tritt ein Fehler auf und eine Fehlermeldung wird angezeigt. Ferner tritt ein Fehlerauf, wenn die Größe des Datenfeldes (gemessen in Bytes belegter Speicherplatz) dieoben beschriebenen Beschränkungen verletzt.

Wir verwenden Dim im Deklarationsbereich eines Moduls, um Variablen zu deklarieren,die für alle Prozeduren in diesem Modul verfügbar sind.

Wir verwenden Dim in einer Sub-Prozedur oder einer Funktion, um Variablen zu dekla-rieren, deren Gültigkeitsbereich auf die aktuelle Prozedur beschränkt ist (sogenannte lo-kale Variablen). Die Anweisung Dim wird üblicherweise an den Anfang einer Prozedurgestellt.

Wir können die Anweisung Dim auch mit leeren Klammern verwenden, um dynamischeDatenfelder zu deklarieren. Wir verwenden nach der Deklaration eines dynamischen Da-tenfeldes die Anweisung ReDim innerhalb einer Prozedur, um die Anzahl der Dimensio-nen und Elemente im Datenfeld zu definieren. Wenn wir versuchen, eine Dimension füreine Datenfeldvariable, deren Größe bereits deklariert wurde, erneut zu deklarieren, trittein Fehler auf.

Variablen werden zur Kompilierzeit initialisiert. Dabei werden numerische Variablen mitdem Wert 0 und Variablen vom Datentyp Variant mit dem Varianttyp Leer initiali-siert; Zeichenfolgen variabler Länge werden als leere Zeichenfolgen ("") initialisiert, undZeichenfolgen fester Länge werden mit ANSI-Nullen (Chr(0)) gefüllt. Die Felder von Va-riablen eines benutzerdefinierten Datentyps werden initialisiert, als handle es sich um se-parate Variablen.

Die folgende Tabelle zeigt die elementaren Datentypen, die von Access Basic unterstütztwerden, sowie deren Typenkennzeichen, Speichergrößen und Bereiche.

Datentyp Postfix Speichergröße BereichInteger % 2 -32.768 bis 32.767Long & 4 -2.147.483.648 bis 2.147.483.647Single ! 4 -3,402823E38 bis -1,401298E-45 für negative

Werte; 1,401298E-45 bis 3,402823E38 für po-sitive Werte; und 0

Double # 8 -1,79769313486232E308 bis -4,94065645841247E-324 für negative Werte;4,94065645841247E-324 bis1,79769313486232E308 für positive Werte;und 0

Currency @ 8 -922.337.203.685.477,5808 bis922.337.203.685.477,5807

String $ 1 je Zeichen 0 bis 65.535 Bytes (Etwas zusätzlicher Spei-cherbedarf ist erforderlich.)

Variant Keines nach Bedarf Jeder beliebige numerische Wert bis zum Be-reich eines Wertes vom Typ "Double" oder einbeliebiger Zeichentext

Page 555: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-15

Datentyp Postfix Speichergröße BereichBenutzerdefiniert Keines Anzahl, die

von den Ele-menten benö-tigt wird

Der Bereich jedes Elements ist gleich demBereich seines elementaren Datentyps, wieoben angeführt.

Access Basic unterstützt auch Objektdatentypen. Wir können Objekte als Elemente einesbestimmten Objektdatentyps deklarieren, indem wir die Anweisungen Dim, Globaloder Static verwenden. Dies sind die Objektdatentypen:

ObjektdatentypenContainer Field RecordsetControl Group RelationForm Index TableDefReport Parameter UserDatabase Property WorkspaceDocument QueryDef

Wichtig sind diese Objektdatentypen insbesondere bei der Argumentübergabe. Im fol-genden Beispiel soll eine globale Prozedur geschrieben werden, die in mehreren Formu-laren eingesetzt werden kann. Da eine solche Prozedur nicht an ein Formular gebundenist, müssen wir ihr alle Steuerelemente, auf die sie in den Formularen wirkt, in der Argu-mentliste übergeben

Sub tlesen_click (formular_lw As Control, tname As Control, suche_t_name AsControl, suche_t_label As Control)

Ein anderes Anwendungsgebiet ist die Bearbeitung von Tabellen innerhalb von Daten-banken. Wenn unabhängig vom aktuellen Formular auf eine oder mehrere Tabellen zu-greifen wollen, so deklarieren wir

Dim db1 As DatabaseDim diskette As RecordsetDim pfad As RecordsetDim datei As Recordset

An dieser Stelle sollten wir auf jeden Fall noch zwei Objekte verweisen, die sozusageneinmalig für jede Anwendung sind

Objektvariable BeschreibungDebug druckt mit der einzigen Methode Print auf das Direktfenster. Es ist

sehr hilfreich bei der Fehlersuche.Screen zeigt auf das aktuelle Formular (bzw. Bericht oder Steuerelement).

Wir können mit dem Objekt Screen z. B. auf das aktive Formular ver-weisen, ohne zu wissen, welches Formular gerade aktiv ist. Ein Verweisauf das Objekt Screen aktiviert das jeweilige Formular, Steuerelementoder den Bericht nicht. Hierfür verwenden wir die AktionSelectObject.MsgBox "Das Formular " & Screen.ActiveForm.Caption & "ist aktiviert."greift auf den Bezeichner des aktiven Formulars auf dem Bildschirm zu.

Page 556: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-16 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Eigene Datentypen (genauer Verbunde von Basisdatentypen) erstellen wir mit der Anwei-sung

Type Type benutzertyp elementname As datentyp[ elementname As datentyp]. . .

End Type End Type

Argument Beschreibungbenutzertyp Name eines benutzerdefinierten Datentyps. Es gelten die Standardre-

geln für die Variablenbenennung.elementname Name eines Elements des benutzerdefinierten Datentyps. Es gelten die

Standardregeln für die Variablenbenennung.datentyp Einer der folgenden Datentypen: Integer, Long , Single, Do u-

ble, Currency , String (für Zeichenfolgen variabler Länge),String * Länge (für Zeichenfolgen fester Länge), Variant oderein anderer, benutzerdefinierter Datentyp. Für das Argument Datentypdarf jedoch kein Objektdatentyp verwendet werden.

Die Anweisung Type kann nur im Deklarationsbereich eines Moduls verwendet werden.Nachdem wir unter Verwendung der Anweisung Type einen benutzerdefinierten Daten-typ deklariert haben, können wir im Deklarationsbereich oder in jeder Prozedur des Mo-duls eine Variable dieses Datentyps deklarieren. Wir verwenden die Anweisungen Dim,Global oder Static , um eine Variable eines benutzerdefinierten Datentyps zu dekla-rieren.

Zeilennummern und Zeilenmarken (Sprungziele) sind in einem Type... End TypeBlock nicht erlaubt.

Benutzerdefinierte Datentypen werden oft in Verbindung mit Datensätzen (Verbunden)verwendet, da Datensätze häufig aus mehreren zusammengehörigen Elementen ver-schiedener Datentypen bestehen.

Das folgende Beispiel zeigt die Verwendung statischer Datenfelder in einem benutzerde-finierten Datentyp.

Type PLZEintrag PLZ As Integer Ort As String * 30End TypeDim Schweiz(1 To 500) As PLZEintrag

Im obigen Beispiel enthält der Datentyp PLZEintrag zwei Felder. Im Array Schweizhat jeder Satz die gleiche Struktur wie PLZEintrag .

Wenn wir ein statisches Datenarray innerhalb eines benutzerdefinierten Datentyps dekla-rieren, dürfen wir dessen Dimensionen nur mit numerischen Konstanten und nicht mit Va-riablen deklarieren.

Page 557: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-17

Const anzahl = 200Type Punkt

Koordinate(1 To 3) As Integer Farbe As IntegerEnd TypeDim Punkte (1 To anzahl) As Punkt

6.2.2.4 Datentyp Variant

Der Datentyp Variant stellt einen typischen Basic Zwitter dar. In den frühen Versionenvon Visual Basic gab es diesen Typ nicht. Hier mußte der Programmierer jedes Feld, daskeinen Text enthielt, in allen Formularen ständig den Typ mit Hilfe der folgenden Funk-tionen vor und nach der Anzeige wandeln

ZCurrency(ausdruck) CCur(ausdruck)ZDouble(ausdruck) CDbl(ausdruck)ZInteger(ausdruck) CInt(ausdruck)ZLong(ausdruck) CLng(ausdruck)ZSingle(ausdruck) CSng(ausdruck)ZString(ausdruck) CStr(ausdruck)ZVariant(ausdruck) CVar(ausdruck)

Das Argument ausdruck kann ein beliebiger gültiger Zeichenfolgenausdruck oder einnumerischer Ausdruck sein.

Die nachfolgende Tabelle zeigt, welcher Datentyp von den einzelnen Konvertierungsfunk-tionen erzeugt wird:

Funktion von inZCurrency (CCur) einem beliebigen gültigen Ausdruck CurrencyZDouble (CDbl) einem beliebigen gültigen Ausdruck DoubleZInteger (CInt) einem beliebigen gültigen Ausdruck IntegerZLong (CLng) einem beliebigen gültigen Ausdruck LongZSingle (CSng) einem beliebigen gültigen Ausdruck SingleZString (CStr) einem beliebigen gültigen Ausdruck StringZVariant (CVar) einem beliebigen gültigen Ausdruck Variant

Neben diesen „modernen“ Konvertierungsfunktionen gibt es noch die klassischen Funk-tionen

Funktion von inWert (Val) Zeichenfolgeausdruck DoubleStr$ numerischer Ausdruck StringStr numerischer Ausdruck VariantFormat$ numerischer Ausdruck StringFormat numerischer Ausdruck Variant

Anmerkung ZInteger (CInt) unterscheidet sich von den Funktionen Fix undInt, die die Dezimalstellen von Zahlen nicht runden, sondern abschneiden.Wenn die Dezimalstelle genau 0,5 beträgt, rundet ZInteger (CInt)immer auf den nächsten geraden Wert. 0,5 wird z. B. auf 0 abgerundet,

Page 558: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-18 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

1,5 dagegen wird auf 2 aufgerundet. Dieses sog. Gaußsche Runden istnumerisch vorteilhaft.

Hierzu ein typisches Beispiel aus Visual Basic Version 1.0 mit den optisch herausgeho-benen Konvertierungen

Sub Befehl1_Click () FLeiste$ = "Fehlerhinweis" Netto = Val(Text1.Text) If Netto <= 0 Then MsgBox "Eingabe muß größer Null sein!", 48, FLeiste$ Exit Sub End If Sknt = Val(Text2.Text) If Sknt < 0 Or Sknt > 3 Then MsgBox "Skonto liegt zwischen 0 und 3!", 48, FLeiste$ Exit Sub End If Skonto = Netto * Val(Text2.Text) * .01 ' Multipl i.a. schneller ZSumme = Netto - Skonto Mwst = ZSumme * .15 Brutto = ZSumme + Mwst Bezeichnung3.Caption = Format$(Netto, "0.00") Bezeichnung12.Caption = Format$(Skonto, "0.00") Bezeichnung10.Caption = Format$(ZSumme, "0.00") Bezeichnung5.Caption = Format$(Mwst, "0.00") Bezeichnung7.Caption = Format$(Brutto, "0.00") Text1.SetFocusEnd Sub

Um diese aufwendige Technik zu vermeiden, wurde dann der Typ Variant eingeführt,der (fast) alles enthalten kann. Die Konvertierungen erfolgen automatisch. Ob das immergut ist, merken Sie erst, wenn Ihr Programm deutlich langsamer als das der Konkurrenzist, die grundsätzlich mit den richtigen Datentypen arbeitet.

Wenn Sie bisher den Operator + sowohl zur Addition wie auch zur Verkettung benutzthaben, so müssen Sie umdenken. Das folgende Programmfragment

Dim a, ba = 100b = "XX"Text1 = a + b

liefert den Fehler „Falsche Datentypen“. Die Korrektur auf

Text1 = a & b

mit dem Verkettungsoperator & funktioniert. Ändern wir das Programm auf

Dim a, b As Stringa = 100b = "XX"Text1 = a + b

funktioniert es auch wieder.

Alles hat seine Vor- und Nachteile. Wenn wir nicht wissen, was eigentlich in unseren Va-riablen steckt, dann müssen wir wohl oder übel auf die Prüffunktionen

Page 559: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-19

IsDate IsDate(Variant)IsEmpty IsEmpty(Variant)IsNull IsNull(Variant)IsNumeric IsNumeric(Variant)

zurückgreifen.

Jetzt ist es an der Zeit, doch einmal systematisch an diesen Datentyp heranzugehen.

Der Datentyp Variant ist der Standarddatentyp für Access Basic. Diesen Datentyp ha-ben alle Variablen, die nicht explizit (unter Verwendung einer der Anweisungen Dim,Global oder Static) mit einem anderen Datentyp deklariert werden. Für den DatentypVariant gibt es kein Typenkennzeichen.

Variant ist ein eindeutiger Datentyp, der numerische, Zeichenfolgen- oder Datumsda-ten sowie die speziellen Varianttypen Leer und Null enthalten kann. Wir könnenfestlegen, wie die Daten in einer Variablen vom Datentyp Variant interpretiert werdensollen. Dazu verwenden wir die Funktion VarTyp (VarType). Die folgende Tabellezeigt die Rückgabewerte (Varianttyp) der Funktion VarTyp (VarType) und die ent-sprechende Interpretation des Inhalts der Variable vom Datentyp Variant:

Varianttyp Interpretation0 Empty (nicht initialisiert)1 Null (keine gültigen Daten)2 Integer3 Long (lange Ganzzahl)4 Single (Gleitkommazahl mit einfacher Genauigkeit)5 Double (Gleitkommazahl mit doppelter Genauigkeit)6 Currency (Währung, skalierte Ganzzahl)7 Date8 String

Der Varianttyp Leer bezeichnet eine Variable vom Datentyp Variant, die nicht initiali-siert wurde. Eine Variable vom Varianttyp Leer ist gleich 0, wenn sie in einem numeri-schen Kontext verwendet wird, oder eine leere Zeichenfolge (""), wenn sie in einemZeichenfolgenkontext verwendet wird. Wir sollten Leer nicht mit Null verwechseln.Der Varianttyp Null zeigt an, daß die Variable vom Datentyp Variant absichtlich un-gültige Daten enthält.

6.2.2.5 Zeiger

Etwas schamhaft ist Access Basic mit dem Datentyp Zeiger (Pointer), der einer der we-sentlichen Datentypen in Programmiersprachen wie Pascal oder C ist. Schließlich sollVisual Basic nicht so komplex wie diese Programmiersprachen erscheinen. Deklarierenwir eine Variable mit einem Objektdatentyp, dann haben wir damit einen Zeiger auf ein

Page 560: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-20 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Objekt vorbereitet. Diese muß nun noch mit dem Objekt verknüpft werden. Dies geschiehtüber

Set Set Variable = Objektausdruck

Argument BeschreibungVariable Name der Variablen, der die Objektreferenz zugeordnet wird.Objektausdruck Ausdruck, der wahlweise eines der folgenden Elemente enthält:

den Namen eines Objekts; eine andere deklarierte Variabledesselben Objektdatentyps; oder eine Funktion oder Methode,die ein Objekt ausgibt.

Um zulässig zu sein, muß Variable formal mit einem Objektdatentyp deklariert wordensein (unter Verwendung einer Anweisung Dim, Global oder Static), der mit demihm zugewiesenen Objekt übereinstimmt. Zu den zulässigen Objektdatentypen zählen:Control, Database, Form, QueryDef, Recordset und Report.

Das folgende Beispiel veranschaulicht die Verwendung von Dim, um die Variable an-sicht1 formal als Recordset des Dynaset-Typs zu deklarieren. Set ordnet derVariablen ansicht1 dann eine Referenz auf das Recordset des Dynaset-Typs zu,das unter Verwendung der Methode OpenRecordset in der Datenbank Kunden er-stellt wird.

Dim kunden As DatabaseDim ansicht1 As RecordsetSet ansicht1 = kunden.OpenRecordset("AktiveKunden", DB_OPEN_DYNASET)

Wenn wir Set verwenden, um einer Variablen eine Objektreferenz zuzuordnen, wird fürdiese Variable keine Kopie des Objekts, sondern eine Referenz zu diesem Objekt erstellt.Mehrere Objektvariablen können auf ein- und dasselbe Objekt verweisen. Da es sich beidiesen Variablen um Referenzen zu diesem Objekt und nicht um Kopien des Objektshandelt, bewirkt eine Änderung des Objekts gleichzeitig die Änderung sämtlicher Varia-blen, die auf dieses Objekt Bezug nehmen.

6.2.2.6 Tabellenfelder

Natürlich können wir nun auf die Felder eines Formulars, eines Berichtes usw. direkt zu-greifen. Wie ist dies aber mit den Tabellenfeldern, die wir selbst öffnen oder schon geöff-net haben?

Im letzten Beispiel haben wir einen Zeiger auf ein Recordset gesetzt. Die Felder dieserTabelle referenzieren wir durch Übergabe den Namens an Access. Diese Übergabe kön-nen wir in folgenden Varianten durchführen

ansicht("ort") = "Frankfurt"ansicht.[ort] = "Frankfurt"ansicht.ort = "Frankfurt"

setzt das Tabellenfeld ort auf einen neuen Wert, während

Page 561: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-21

Debug.Print ansicht("ort")Debug.Print ansicht.[ort]Debug.Print ansicht.ort

den aktuellen Inhalt auf das Direktfenster ausgibt. Schreiben bzw. Lesen legen wir da-durch fest, daß wir die Referenz links oder rechts einer Zuweisung angeben.

Jeweils die letzte Anweisung funktioniert nur bei Feldnamen ohne Sonderzeichen. Dieerste Technik (" ") erinnert an das klassische Basic, bei dem alle externen Namen alsStrings übergeben wurden.

6.2.3 Gültigkeitsbereiche von Variablen

Die Gültigkeit von Variablen ist gleichzusetzen mit der Sichtbarkeit. Deklarieren wir in ei-nem Modul und anschließend in einer Prozedur eine Variable mit dem gleichen Namen,dann erhebt sich die Frage, welche Variable wir wann, wo ansprechen. Access Basiczeigt uns zwar im Editorfenster immer nur eine Prozedur. Wir müssen aber grundsätzlichvon einem zusammenhängenden Programm ausgehen. Im folgenden Beispiel wird eineVariable variable im allgemeinen Teil eines Moduls deklariert. In einer Prozedur up1wird sie auf den Wert 1 gesetzt. In einer zweiten Prozedur up2 wird eine weitere Va-riable deklariert und mit einem Wert gefüllt. In einer dritten Prozedur up3 wird die Varia-ble nur ausgedruckt.

Dim variable As Integer

Sub up1 () variable = 1 Debug.Print variableEnd Sub 'up1

Sub up2 ()Dim variable As String variable = "Text" Debug.Print variableEnd Sub 'up2

Sub up3 () Debug.Print variableEnd Sub 'up3

Was geschieht nun, wenn die Prozeduren nacheinander aktiviert werden.

Im Gegensatz zu anderen Programmiersprachen haben wir es Access Basic (noch) ein-fach. Es gibt nur eine Ebene der Verschachtelung, nämlich die Prozedur innerhalb desModuls. Die Regel ist recht einfach. Eine neue Deklaration legt eine neue Variable lokalfür die eine Prozedur an. Diese lokale Variable ist nur in der deklarierenden Prozedursichtbar und gültig. Außerhalb der Prozedur ist die allgemeine Variable sichtbar.

Die etwas geschraubte Darstellung „allgemeine Variable“ legt den Verdacht nahe, daß esauch noch „globale Variable“ gibt. In der Tat finden wir auch noch das SchlüsselwortGlobal.

Page 562: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-22 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Global Global Variable[([Indizes])] [As Datentyp] [, Va-riable[([Indizes])] [As Datentyp] ] . . .

Diese Klausel wird auf Modulebene verwendet, um globale Variablen (Variablen, die füralle Prozeduren in allen Modulen verfügbar sind) zu deklarieren und ihnen Speicherplatzzuzuweisen.

Wir können diese Klausel nur in den globalen Prozeduren und nicht in den Formularpro-zeduren verwenden. Somit bilden die globalen Prozeduren noch einmal eine weitereHierarchiestufe. Access Basic verfügt somit tatsächlich über folgende Struktur (Bild 6.2-2).

Die in den globalen Mo-duln als Global dekla-rierten Variablen sind so-wohl für die globalen wieauch für die lokalen Mo-duln sichtbar. Existierenmehrere globale Moduln,so dürfen dort nicht zweiVariablen mit dem glei-chen Namen als Globaldeklariert werden, sonstmeldet der Compiler ei-nen Fehler. Die Vereini-gung alle so deklariertenVariablen aus allen glo-balen Moduln bildet diehöchste Ebene.

Die normal mit Dim deklarierten Variablen in einem globalen Modul sind wiederum nurdort für alle Prozeduren sichtbar. Aus der Abbildung geht dieser Zusammenhang hervor.Es muß aber ergänzt werden, daß die globalen Prozeduren von den lokalen Prozedurenbeliebig nutzbar sind.

6.2.4 Lebensdauer von Variablen

Die Lebensdauer von Variablen, d. h. ihre physische Existenz ist durchaus von der Gül-tigkeit zu trennen. Natürlich wäre es ein Widerspruch, wenn eine nicht existente Variablesichtbar wäre. Der umgekehrte Schluß gilt aber nicht, d. h. eine Variable verschwindetnicht durch Unsichtbarkeit.

Normalerweise werden alle lokalen Variablen einer Prozedur zusammen mit den Argu-menten und einer Rücksprungadresse mit dem Aufruf der Prozedur auf dem sog. Stapel(stack) (auch Keller bzw. Kellerspeicher) angelegt. Dieser unterscheidet sich physikalischvom Freispeicher (heap) und sollte nicht mit diesem verwechselt werden. Mit dem Endeeiner Prozedur wird der Stapel wieder völlig abgebaut, d. h. nichts deutet im Speichermehr darauf hin, daß die Prozedur gerade aufgerufen wurde.

Formularmodul

Deklarationsbereich

Prozedur 1

Prozedur 2

Prozedur 3

Summe aller Deklarationen mit Global in den globalen Moduln

globale Prozedur 1globales Modul 1

globale Prozedur 2

globale Prozedur 1globales Modul 2

Deklarationen mit Dim inder globalen Prozdur

Deklarationen mit Dim inder globalen Prozdur

Bild 6.2-2: Gesamtstruktur

Page 563: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-23

Wir können dies nun verhindern und dafür sorgen, daß alle oder zumindest einige Varia-blen einer Prozedur permanent im Datensegment des Programmes angelegt werden.Hierzu dient die Klausel

Static Static Variable[([Indizes])] [As Datentyp] [,Variable[([Indizes])] [As Datentyp] ] . . .

Wir können auch die ganze Prozedur als Static deklarieren, dann hat dies folgendeAuswirkungen

Anmerkung Die Anweisung Static und das reservierte Wort Static haben eineunterschiedliche Auswirkung auf die Gültigkeitsdauer von Variablen. Wennwir eine Prozedur unter Verwendung des reservierten Wortes Static de-klarieren (wie in Static Sub up1), wird allen lokalen Variablen innerhalbder Prozedur einmal Speicherplatz zugewiesen. Der Wert der Variablenbleibt während der gesamten Ausführung des Programms erhalten. Beinichtstatischen Prozeduren wird den Variablen bei jedem Aufruf der Proze-dur Speicherplatz zugewiesen, der beim Beenden der Prozedur wieder frei-gegeben wird. Die Anweisung Static wird für die Deklaration von Varia-blen in nichtstatischen Prozeduren verwendet, damit diese ihren Wert überdie gesamte Ausführungszeit des Programms bewahren.

Mit statischen Variablen erstellen wir also Prozeduren mit „Gedächtnis“. So können wirz. B. feststellen, ob eine Prozedur schon aufgerufen wurde oder nicht. Beachten müssenwir auf jeden Fall, daß diese Variablen weiterhin nur auf der Prozedurebene sichtbar sind.

6.2.5 Konstanten

Bei den Konstanten können wir uns kurz fassen. Sie werden meist in der uns „gewohnten“Technik als Literale eingesetzt. Anweisungen mit Konstanten wie

I% = 1T$ = "Dies ist eine Textkonstante"

sind kaum erklärungsbedürftig.

Neben diesen Literalen gibt es noch die benannten Konstanten. Diese stellen einen nu-merischen Wert oder einen Zeichenfolgenwert dar, der sich nicht ändert. In gewisser Hin-sicht ist eine Konstante ähnlich einer Variablen oder einem reservierten Wort. Anders alsbei einer Variablen jedoch kann sich der Wert einer Konstanten während der Pro-grammausführung nicht ändern. True, False und Null sind Beispiele für Konstan-ten.

Access unterstützt drei Konstantentypen:

− Access Basic-Konstanten, die wir in Modulen erstellen und verwenden. Die Da-tei CONSTANT.TXT enthält vordefinierte Konstanten, die wir in Module ladenund dort verwenden können.

Page 564: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.2 Variablen und Konstanten © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-24 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

− Eingebaute Konstanten, die ein Bestandteil von Access sind. Diese Konstantenkönnen wir nur in Modulen verwenden.

− Fünf systemdefinierte Konstanten: Ja, Nein, An, Aus und Null.

Access Basic-Konstanten

Häufig verwenden wir dieselben Literale in unserem Code. In anderen Fällen verschlüs-seln wir bestimmte Eigenschaften in numerischen Werten oder mnemotechnisch nichtverständlichen Abkürzungen. In diesen Fällen können wir durch die Benutzung von Kon-stanten dafür sorgen, daß der Code viel einfacher zu lesen und zu warten ist.

Die folgenden Beispiele zeigen einige Möglichkeiten, wie wir die Anweisung Const zumDeklarieren von numerischen und Zeichenfolgenkonstanten verwenden können:

Const PI = 3.14159265 PI ist gleich dieser Zahl.Const PI2 = PI * 2 Eine Konstante dient zum Deklarieren einer anderen.Const VERSION = "1.01a" 1.01a steht an allen Stellen, an denen VERSION ver-

wendet wird.

Const [Global] Const konstante = ausdruck [, konstante =ausdruck] . . .

Argument BeschreibungGlobal Reserviertes Wort, das Const vorangestellt werden kann, um Konstanten

zu deklarieren, auf die von allen Prozeduren in allen Modulen Bezug ge-nommen werden kann.

konstante Name der Konstante.ausdruck Ausdruck, der der Konstanten zugeordnet wird. Er kann aus Literalen (wie

1.0), anderen Konstanten oder beliebigen arithmetischen oder logischenOperatoren mit Ausnahme des Potenzierungsoperators ^ bestehen. Wirkönnen auch ein Zeichenfolgenliteral wie "Fehler bei Eingabe" ver-wenden. Die folgenden Elemente können wir in Ausdrücken, die Konstan-ten zugeordnet werden, jedoch nicht verwenden:

Zeichenfolgenverkettungen, Variablen, benutzerdefinierte Funktionenoder eingebaute Access Basic-Funktionen (wie z. B. Chr[$]()).

Eingebaute Konstanten

Zusätzlich zu den Konstanten, die wir mit der Anweisung Const deklarieren, deklariertAccess automatisch eine Reihe von eingebauten Konstanten, die wir in unserem Codeverwenden können. Diese Konstanten werden beim Starten von Microsoft Access dekla-riert und sind in sämtlichen Modulen verfügbar.

Weil sich eingebaute Konstanten nicht deaktivieren lassen, dürfen die von uns erstelltenKonstanten nicht dieselben Namen wie eingebaute Konstanten haben. Außerdem könnenwir eingebaute Konstanten nicht neu deklarieren oder auf andere Werte setzen.

Page 565: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-25

) Anmerkung Da sich die durch die eingebauten Konstanten dargestellten Werte inspäteren Versionen von Access möglicherweise ändern, sollten wir die Kon-stanten statt ihrer tatsächlichen Werte verwenden. Wir können uns den tat-sächlichen Wert einer Konstanten jedoch ansehen, indem wir im Direktfen-ster ? Konstantenname eingeben.

Eingebaute Konstanten können wir an allen Stellen verwenden, an denen die Verwen-dung von benutzerdeklarierten Konstanten möglich ist, einschließlich in Ausdrücken. Dasfolgende Beispiel zeigt, wie wir die eingebaute Konstante V_ CURRENCY verwenden kön-nen, um zu ermitteln, ob Var1 den Varianttyp 6 (Currency ) des Datentyps Variantaufweist:

Dim V_CURRENCY As CurrencyIf VarType(Var1) = V_CURRENCY Then Debug.Print "Var1 enthält Währungsdaten."Else Debug.Print "Var1 enthält keine Währungsdaten."End If

Es existieren mehrere Kategorien von eingebauten Konstanten. In der Online-Hilfe findenwir folgende Gruppen

DatenzugriffskonstantenEreignisprozedurkonstantenMakroaktionskonstantenDatensicherungskonstantenVariantkonstantenSonstige Konstanten

Systemdefinierte Konstanten

Wir können die systemdefinierten Konstanten Ja, Nein, An und Aus überall in Ac-cess, ausgenommen in Modulen, verwenden. Wir können die Konstante Ja z. B. in demfolgenden Ausdruck für eine Makrobedingung verwenden. Die Bedingung ist erfüllt, wenndie Einstellung für die Eigenschaft Sichtbar für das Formular Personal gleich Jaist:

Formulare![Personal].Sichtbar = Ja

Wir können die Konstante Null überall in Access verwenden. So können wir sie z. B.verwenden, um mit Hilfe des folgenden Ausdrucks die Eigenschaft Standardwert fürein Steuerelement in einem Formular zu setzen:

= Null

6.3 Verarbeitungsanweisungen

Die eigentliche Bearbeitung der Daten erfolgt durch Zuweisungen. Hierdurch werden be-stehende Daten verändert. Zur Veränderung sind einerseits Anweisungen und anderer-seits Ausgangsdaten notwendig. Die wesentliche Form der Verarbeitung besteht in derAnweisung

Page 566: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-26 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

= Empfänger = Ausdruck

Ausdrücke sind ein grundlegender Bestandteil vieler Access Operationen. Ausdrückewerden in Berechnungen, zum Definieren von Kriterien für Abfragen, Filter und Makros,zum Steuern der Ausführung von Makros sowie zum Erstellen von Funktionen und Sub-Prozeduren in Access Basic verwendet.

Die Ausdrücke enthalten Operatoren und/oder Funktionsaufrufe. Genauer gesagt unter-scheidet Access Basic zwischen verschiedenen Operatoren und allgemeinen Funktionenbzw. Objektmethoden. Einen Teil der Funktionen haben wir schon z. B. bei der Konvertie-rung kennengelernt.

Methoden sind an bestimmte Objekte geknüpft und bestimmen deren Verhalten.

Mit dem folgenden Ausdruck berechnen wir z. B. in einem Steuerelement eines Formularsoder Berichts die Summe der Werte in den Feldern Frachtkosten und Preis:

=[Frachtkosten]+[Preis]

Die folgende Tabelle zeigt, wo und wie wir Ausdrücke einsetzen.

Verwendung in ZweckEigenschafteneinstellungen Definieren eines berechneten Steuerelements, Erstellen

einer Gültigkeitsregel oder Festlegen eines Standardwertsfür ein Feld.

Abfragen und Filtern Eingeben eines Ausdrucks für Kriterien, Erstellen eines be-rechneten Feldes oder Aktualisieren von Datensätzen.

Makros und Aktionen Festlegen einer Bedingung zum Ausführen einer Aktionoder einer Folge von Aktionen; Festlegen von Kriterien zumAuffinden eines Datensatzes; Festlegen des Wertes für einFeld, ein Steuerelement oder eine Eigenschaft; Ausführeneines Makros oder Angeben von Argumenten für zahlreicheAktionen.

Access Basic-Prozeduren Angeben von Argumenten für eine Reihe von Funktionen,Anweisungen und Methoden.

SQL-Anweisungen Bearbeiten einer Abfrage im Abfragefenster -- SQL-Ansichtoder Verwenden von SQL in einer Eigenschafteneinstellungoder einem Argument.

6.3.1 Ausdrücke

Ein Ausdruck setzt sich aus einer Kombination von Operatoren, Bezeichnern, Funktionen,Literalen und Konstanten zusammen.

Element Beispiele Beschreibung

Page 567: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-27

Element Beispiele BeschreibungOperator =, <, &, Und, Oder, Wie Gibt an, welche Operation für ein

oder mehrere Elemente durchge-führt werden soll.

Bezeichner Formulare![Bestellungen]![Bestell-Nr]

Berichte![Rechnungen].Sichtbar

Verweist auf den Wert eines Feldes,eines Steuerelements oder einerEigenschaft.

Funktion Datum, Summe, DomWert Gibt einen Wert aus, der auf denErgebnissen einer Berechnung odereiner anderen Operation basiert.Wir können mit Hilfe von AccessBasic auch unsere eigenen Funktio-nen erzeugen.

Literal 100, #05.01.1994#, "Hallo" Stellt einen Wert wie z. B. eine Zahl,eine Zeichenfolge oder ein Datumdar, den Access genau so auswer-tet, wie er geschrieben ist. Dabeiwerden Datumsangaben jeweilszwischen Nummernzeichen # undZeichenfolgen in Anführungszei-chen " gesetzt.

Konstante Wahr, Falsch, Ja, Nein, Null Stellt einen Wert dar, der sich nichtändert.

6.3.2 Operatoren

Das Hauptanwendungsgebiet der Operatoren ist die numerische Berechnung. Danebenfinden wir aber auch Operatoren für die Verarbeitung von Texten usw. In Access Basicwerden auch die Trennzeichen in den Bezeichnern als Operatoren bezeichnet.

Access enthält sechs Kategorien von Operatoren:

− arithmetische Operatoren− Vergleichsoperatoren− Verkettungsoperator− logische Operatoren− mustervergleichender Operator− diverse Operatoren.

6.3.2.1 Arithmetische Operatoren

Die numerischen Operatoren in Access Basic entsprechend weitgehend den mathemati-schen Operatoren, wobei wir natürlich beachten müssen, daß wir diese nur linear nieder-schreiben können, d. h. wir haben keine Möglichkeit, Brüche oder ähnliches in der zwei-ten Dimension zu formulieren. In diesen problematischen Fällen müssen wir die Verar-beitungsreihenfolge durch Klammern geeignet beeinflussen.

Page 568: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-28 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

In der Theorie unterscheiden wir monadische (unäre) und dyadische (binäre) Operatoren,d. h. Operatoren mit einem Operanden und Operatoren mit zwei Operanden. Ersterer isteigentlich nur bei der Negation zu finden, so daß wir vorwiegend mit zwei Operatoren unddem dazwischen stehenden Operator arbeiten (sog. Infix-Notation). Fehlt ein Operator,dann ist der numerische Ausdruck falsch.

= Ergebnis = Operand1 Operator Operand2

Access Basic kennt folgende arithmetische Operatoren

Die Tabelle gibt auch die Prioritäten an, wobei Operatorengleicher Priorität eingerückt sind. Zuerst erfolgen somit ineinem arithmetischen Ausdruck ohne Klammern die Po-tenzierungen, dann die Negationen, die „Punktrechnun-gen“ werden dann von links nach rechts durchgeführt, be-vor die Ganzzahldivision beginnt. Es schließt sich die Mo-dulo-Funktion an. Den Abschluß bilden den „Strichrech-nungen“

Eine wesentliche Zusatzfunktion der arithmetischen Ope-rationen ist die Konvertierung des Ergebnisses in den Datentyp des Empfängers, voraus-gesetzt, dieser ist bekannt.

Wir können zwar auch den Operator + zum Verketten zweier Zeichenfolgen verwenden,sollten zu diesem Zweck jedoch vorzugsweise den Operator & verwenden, um Mehr-deutigkeiten zu verhindern und einen eindeutigen Code sicherzustellen. Wenn wir näm-lich den Operator + verwenden, können wir unter Umständen nicht feststellen, ob eineAddition oder eine Zeichenverkettung erfolgen soll. Hat mindestens ein Operand nichtden Datentyp Variant, gelten die folgenden Regeln:

Datentyp der Operanden OperationBeide Ausdrücke haben einen numerischen Daten-typ (Integer, Long, Single, Double oderCurrency).

Addition

Beide Ausdrücke sind Zeichenfolgen vom DatentypString.

Verkettung

Ein Ausdruck hat einen numerischen Datentyp, derandere den Datentyp Variant (außer Varianttyp1 (Null)).

Addition

Ein Ausdruck ist eine Zeichenfolge vom DatentypString, der andere hat den Datentyp Variant(außer Varianttyp 1 (Null)).

Verkettung

Ein Ausdruck ist eine Zeichenfolge vom DatentypString, der andere hat den Varianttyp 8(String) des Datentyps Variant.

Verkettung

Ein Ausdruck hat den Varianttyp Leer des Da-tentyps Variant.

Der andere Operand wird unverän-dert als Ergebnis ausgegeben.

Operator Bedeutung^ Potenzierung- Negation * Multiplikation / Division\ GanzzahldivisionMod Divisionsrest + Addition - Subtraktion

Page 569: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-29

Datentyp der Operanden OperationEin Ausdruck hat einen numerischen Datentyp, derandere ist eine Zeichenfolge vom DatentypString.

Die folgende Fehlermeldung er-scheint: Typen stimmen nichtüberein.

Dies ist nur ein kleiner Ausschnitt aus den Bemerkungen, die für die Addition gelten. Nä-heres finden Sie im Handbuch oder der Online-Hilfe.

Allen Operationen weitgehend gemeinsam sind folgende Aussagen:

Ergebnis hat im allgemeinen den Datentyp des Operanden mit der größten Genauig-keit. Die Datentypen lassen sich wie folgt nach zunehmender Genauigkeit einordnen:Integer, Long , Single, Double, Currency . Sind die Operanden Ausdrückevom Datentyp Variant , gelten die folgenden Ausnahmen zu dieser Regel:

Umfaßt die Operation einen Operanden des Datentyps Single und einen Ope-randen des Datentyps Long , ergibt sich für Ergebnis der Datentyp Double.Hat Ergebnis einen der Varianttypen 3 (Long ), 4 (Single ) oder 7 (Datum)des Datentyps Variant , und liegt dieser nicht innerhalb des zulässigen Be-reichs, wird er in den Varianttyp 5 (Double ) des Datentyps Variant umgewan-delt.Hat Ergebnis den Varianttyp 2 (Integer ) des Datentyps Variant , und liegtdieser nicht innerhalb des zulässigen Bereichs, wird er in den Varianttyp 3 (Long )des Datentyps Variant umgewandelt.

Ist mindestens einer der beiden Operanden ein Ausdruck mit Wert Null, hat auch E r -gebnis den Wert Null. Hat ein Operand den Datentyp Leer (Varianttyp 0 ), wird erwie der Wert 0 behandelt.

Die Regeln zeigen, wie sich der Typ von Ergebnis einerseits am Typ des Empfängersaber auch an den Typen der Operanden anpaßt. Es lohnt sich bei dieser Vielfalt von Aus-nahmen usw., eine gewisse Sorgfalt in die Planung der Datentypen zu investieren, washeißt, Ergebnis möglichst selbst eindeutig zu deklarieren und den Datentyp Variantzu vermeiden.

6.3.2.2 Verkettungsoperatoren

Für die Verarbeitung von Zeichenketten kann sowohl der Operator + wie auch der Ope-rator & eingesetzt werden. Wobei dringlich zu empfehlen ist, nur den Verkettungsope-rator & zu benutzen.

& Ergebnis = Operand1 & Operand2

Ist ein Operand eine Zahl, wird sein Datentyp in den Varianttyp 8 (String ) des Daten-typs Variant umgewandelt.

Page 570: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-30 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Ergebnis hat den Datentyp String, wenn beide Operanden Ausdrücke des Daten-typs String sind; andernfalls hat Ergebnis den Varianttyp 8 (String ) des Daten-typs Variant . Haben beide Operanden den Datentyp Null (Varianttyp 1 ), ergibt sichfür Ergebnis ebenfalls der Wert Null. Hat aber nur einer der Operanden den WertNull, wird dieser Operand wie eine leere Zeichenfolge bei Verkettung mit einem ande-ren Operanden behandelt. Hat ein Operand den Datentyp Leer (Varianttyp 0 ), wird erauch wie eine leere Zeichenfolge behandelt.

6.3.2.3 Vergleichsoperatoren

Vergleichsoperatoren vergleichen zwei Operanden auf-grund einer vorgegebenen Sortierordnung. Bei numeri-schen Operanden ist dies eindeutig, nicht so bei Zei-chenkettenvergleichen. Dies wird gesteuert durch diefolgende Direktive

Compare Option Compare { Binary | Database | Text}

Die Anweisung Option Compare wird im Deklarationsbereich eines Moduls verwendet,um das Textvergleichsverfahren für dieses Modul festzulegen.

Es gibt drei Vergleichsverfahren: Binary , Database und Text.

Beim Vergleichsverfahren Binary wird die Groß-/Kleinschreibung beachtet, d. h. derGroßbuchstabe M stimmt nicht mit dem Kleinbuchstaben m überein. Um zu bestimmen,ob ein Zeichen kleiner, gleich oder größer als ein anderes Zeichen ist, verwendet dasProgramm die Rangfolge des Zeichens im ANSI-Zeichensatz.

Beim Vergleichsverfahren Text wird die Groß-/Kleinschreibung nicht beachtet, d. h. derGroßbuchstabe M stimmt mit dem Kleinbuchstaben m überein. Darüber hinaus ist dieRangfolge der Zeichen nicht dieselbe wie beim Vergleichsverfahren Binary . Bei Ver-gleichen vom Typ Text wird die Rangordnung der Zeichen von der Auswahl des Lan-des in den Ländereinstellungen der Systemsteuerung des Windows-Betriebssystems bestimmt.

Das Vergleichsverfahren Database basiert auf der relativen Position des Zeichens ge-mäß der Sortierreihenfolge, die bei der Erstellung oder Komprimierung der Datenbankangegeben wurde.

Enthält das Modul keine Anweisung Option Compare, ist das Standardverfahren Bi -nary . Standardmäßig fügt Access die Anweisung Option Compare Database inden Deklarationsbereich jedes neuen Moduls ein.

Operator Bedeutung< Kleiner als<= Kleiner oder gleich> Größer als>= Größer oder gleich= Gleich<> Ungleich

Page 571: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-31

6.3.2.4 Mustervergleichender Operator

Mit diesem Operator können wir Ähnlichkeits-suchen durchführen

Ergebnis = Ausdruck Like Muster

Wir verwenden die obige Anweisung, um in einem Feld nach Werten zu suchen, die mitdem angegebenen Muster übereinstimmen. Für Muster können wir entweder einenvollständigen Wert, z. B. Like "Schmidt" angeben oder einen Wert mit Platzhalter-zeichen, wie sie auch das Betriebssystem bei der Suche nach einer Gruppe von Wertenerkennt, z. B. Like " Schm*" .

Wie ( Like ) kann auch in einem Ausdruck als Einstellung für die Eigenschaft Gültig-keitsregel (ValidationRule ) oder als Makrobedingung verwendet werden. Das folgen-de Beispiel liefert Daten, die mit dem Buchstaben P beginnen, gefolgt von einem belie-bigen Buchstaben zwischen A und F und drei weiteren Ziffern:

Wie "P[A-F]###"( Like "P[A-F]###")

Um sich auf den Wert eines Steuerelementes zu beziehen, schließen wir den Steuerele-mentbezeichner in Anführungszeichen (" " ) und vertikale Balken (| | ) ein. Angenom-men, wir legen die Kriterien für den Bericht Ersatzteilaufträge im Formular E r -satzteilaufträge drucken fest. Durch Eingabe eines Wertes in das FeldAuftrags-Nr können wir entweder eine Gruppe von Aufträgen oder einen ganz be-stimmten Auftrag drucken. In der Abfrage, auf der der Bericht basiert, setzen wir die Krite-rien für das Feld Auftrags-Nr wie folgt:

Wie "|[Forms]![Ersatzteilaufträge drucken]![Auftrags-Nr]|"(Like "|[Forms]![Ersatzteilaufträge drucken]![Auftrags-Nr]|")

Werden die | - Zeichen nicht angegeben, liefert der Operator Wie ( Like ) den Namendes Steuerelements und nicht seinen Wert.

Wenn in Access Basic Ausdruck und Muster übereinstimmen, ist ErgebnisTrue. Bei fehlender Übereinstimmung ist Ergebnis False. Weist entweder Au s-druck oder Muster den Wert Null auf, so ergibt sich auch für Ergebnis der WertNull.

6.3.2.5 Logische Operatoren

Access Basic kennt folgende logischenOperatoren, wobei die Negation der einzigemonadische (unäre) Operator ist. Alle an-deren verknüpfen zwei Operanden, sindalso dyadische (binär). Die Operatoren sindin ihrer Priorität dargestellt, d. h. zuerst wirdin einem Ausdruck der Operator Not aus-gewertet, es folgen die Konjunktion

Operator OperationWie ( Like ) Zeichenfolgenvergleich

Operator BedeutungNicht (Not) NegationUnd ( And) KonjunktionOder ( Or) DisjunktionExOder ( Xor ) AntivalenzÄqv (Eqv) ÄquivalenzImp Implikation (Wenn-Dann)

Page 572: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-32 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

usw.

Anmerkung Alle Vergleichsoperatoren (wie =, <, ...) und Wie ( Like ) haben die-selbe Priorität und werden jeweils in der Reihenfolge ihres Auftretens vonlinks nach rechts ausgewertet.

Das Ergebnis der Operatoren stellen wir am besten in Wahrheitstabellen dar

Operand1 Operand2 Und Oder ExOder Äqv ImpWahr Wahr Wahr Wahr Falsch Wahr WahrWahr Falsch Falsch Wahr Wahr Falsch Falsch

Falsch Wahr Falsch Wahr Wahr Falsch WahrFalsch Falsch Falsch Falsch Falsch Wahr Wahr

Wahr Null Null Wahr Null Null NullFalsch Null Falsch Null Null Null Wahr

Null Wahr Null Wahr Null Null WahrNull Falsch Falsch Null Null Null NullNull Null Null Null Null Null Null

Wir können die Operatoren auch auf numerische Ausdrücke anwenden. In diesem Fallerfolgt die Auswertung bitweise nach folgender Tabelle

Operand1 Operand2 Und Oder ExOder Äqv Imp1 1 1 1 0 1 11 0 0 1 1 0 00 1 0 1 1 0 10 0 0 0 0 1 1

6.3.2.6 Diverse Operatoren

Operator Beschreibung! Wird zum Trennen der Bestandteile in einem Bezeichner benutzt;

gibt explizit an, daß der nachfolgende Objektname sich auf ein be-nutzerdefiniertes Objekts bezieht (ein Element einer Auflistung).

. Wird zum Trennen der Bestandteile in einem Bezeichner benutzt;geht dem Namen des Objekts, der Methode oder der Eigenschaftvoran (Access definiert).

In Stellt fest, ob der Wert eines Ausdrucks gleich einem von mehrerenWerten in einer angegebenen Liste ist.

Ist ( Is ) Wird mit dem reservierten Wort Null verwendet, um festzustellen,ob ein Ausdruck den Wert Null hat.

Zwischen...Und( Between ... And)

Stellt fest, ob der Wert eines Ausdrucks innerhalb eines angegebe-nen Wertebereichs liegt.

6.3.3 Funktionen

Eigentlich gehören alle Anweisungen letztendlich zu den Funktionen, denn diese werdenintern in Funktionsaufrufe umgewandelt. Die Grundstruktur eines Funktionsaufrufes ist

Ergebnis = Funktion(Argumentliste)

Page 573: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-33

Bei den Funktionen unterscheiden wir eine Vielzahl verschiedener Gruppen.

Dateieingabe/-ausgabe (E/A) Inspektion von VariablenDatenfelder KonvertierungDatum/Zeit Mathematische AufgabenDomäne Objekte verknüpfen und einbetten (OLE)Dynamischer Datenaustausch (DDE) ObjektmanipulationFehlerbehandlung SonstigesFinanzmathematische Aufgaben SQLGrafiken in gedruckten Berichten Zeichenfolgen

Die verschiedenen Funktionen sind in den folgenden Kapiteln nur aufgezählt. Näher Ein-zelheiten finden Sie in den Handbüchern.

6.3.3.1 Dateieingabe/-ausgabe (E/A)

Beschreibung Funktion oder AnweisungÖffnen oder Erstellen einer Datei Open

Schließen einer Datei Close, Reset

Schreiben in eine Datei Print #, Put, Write #

Steuern der Darstellung der Ausgabe Spc, Tab, Width #

Lesen aus einer Datei Get, Eingabe (Input), Input #, LineInput #

Abrufen von Informationen über eineDatei

Dateiende (EOF), DateiAttr(FileAttr), FreieDatei (FreeFile),AktPos (Loc), Dateigröße (LOF),DateiPosition (Seek)

Festlegen oder Bestimmen der Lese-/Schreibposition in einer Datei

DateiPosition (Seek)

Verwalten von Laufwerken oder Ver-zeichnissen

ChDir, ChDrive, AktVerz (CurDir),MkDir, RmDir

Verwalten von Dateien Verz (Dir), Kill, Lock, Unlock, Name

6.3.3.2 Datenfelder

Beschreibung Funktion oder AnweisungÄndern der standardmäßigen unteren Grenze fürDatenfelder

Option Base

Deklarieren und Initialisieren von Datenfeldvariablen Dim, Global, ReDim, Static

Neu Initialisieren von Datenfeldvariablen Erase, ReDim

Suchen der Grenzen eines Datenfeldes LBound, UBound

6.3.3.3 Datum/Zeit

Beschreibung Funktion oder AnweisungAbrufen des aktuellen Datums oder der ak- Datum (Date), Jetzt (Now), Zeit

Page 574: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-34 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Beschreibung Funktion oder Anweisungtuellen Uhrzeit (Time)

Einstellen des Datums und der Uhrzeit Datum (Date), Zeit (Time)

Steuern des zeitlichen Ablaufs eines Pro-zesses

Zeitgeber (Timer)

Durchführen von Datumsberechnungen DatAdd (DateAdd), DatDiff(DateDiff), DatTeil (DatePart)

6.3.3.4 Domäne

Beschreibung Funktion oder AnweisungAusführen von Aggre-gatoperationen für Do-mänen

DomMittelwert (DAvg), DomAnzahl (DCount),DomErsterWert (DFirst), DomLetzterWert (DLast),DomMin (DMin), DomMax (DMax), DomStdAbw(DStDev), DomStdAbwG (DStDevP), DomSumme(DSum), DomVarianz (DVar), DomVarianzG (DVarP)

Abrufen eines Feldwertseiner Domäne

DomWert (DLookup)

6.3.3.5 Dynamischer Datenaustausch (DDE)

Beschreibung Funktion oder AnweisungVerwenden von Access Basic als DDE-Client

DDEExecute, DDEInit (DDEInitiate)

Verwenden von Access Basic zum Sendenvon Daten an einen DDE-Server

DDEPoke, DDESend

Verwenden von Access Basic zum Abru-fen von Daten von einem DDE-Server

DDE, DDEAnfrage (DDERequest)

Beenden eines DDE-Dialogs DDETerminate, DDETerminateAll

6.3.3.6 Fehlerbehandlung

Beschreibung Funktion oder AnweisungAuffangen von Fehlern beim Ausführen eines Pro-gramms

On Error, Resume

Abrufen der Fehlerstatusdaten FCode (Err), FZeile (Erl)

Abrufen von Fehlermeldungen FMeldung-Funktion (Error)

Simulieren von Laufzeitfehlern Error-Anweisung

6.3.3.7 Finanzmathematische Aufgaben

Beschreibung Funktion oder AnweisungAusführen von finanzma-thematischen Berechnun-gen

GDA (DDB), ZW (FV), ZINSZ (IPmt), IRR, MIRR,ZZR (NPer), NPV, RMZ (Pmt), KAPZ (PPmt), BW(PV), ZINS (Rate), LIA (SLN), DIA (SYD)

Page 575: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-35

6.3.3.8 Grafiken in gedruckten Berichten

Beschreibung Funktion oder AnweisungArbeiten mit Farben Farbe (QBColor), RGB

6.3.3.9 Inspektion von Variablen

Beschreibung Funktion oder AnweisungFeststellen, ob eine Variable ein Datum ist IstDatum (IsDate)

Feststellen, ob eine Variable leer ist IstLeer (IsEmpty)

Feststellen, ob eine Variable ein Nullwert ist IstNull (IsNull)

Feststellen, ob eine Variable numerisch ist IstNumerisch (IsNumeric)

Feststellen des zugrundeliegenden Datentyps einerVariant-Variablen

VarTyp (VarType)

6.3.3.10 Konvertierung

Beschreibung Funktion oder AnweisungANSI-Wert in Zeichenfolge Zchn (Chr)

Zeichenfolge in ANSI-Wert Asc

Zahl in Zeichenfolge Format, Str

Zeichenfolge in Zahl Wert (Val)

Einen numerischen Daten-typ in einen anderen

ZCurrency (CCur), ZDouble (CDbl), ZInteger(CInt), ZLong (CLng), ZSingle (CSng),ZString (CStr), ZVariant (CVar), ZVarDat(CvDate)

Dezimalzahl in andereBasis-Zeichenfolge

Hex, Oktal (Oct)

Datum in serielle Zahl DatSeriell (DateSerial), DatWert (DateValue)

Serielle Zahl in Datum Tag (Day), Monat (Month), Wochentag(Weekday), Jahr (Year)

Zeitangabe in serielle Zahl ZeitSeriell (TimeSerial), ZeitSeriellStr(TimeValue)

Serielle Zahl in Zeitangabe Stunde (Hour), Minute, Jetzt (Now), Sekunde(Second)

6.3.3.11 Mathematische Funktionen

Beschreibung FunktionBetrag Abs

Arkus Tangens ArcTan (Atn)

Kosinus Cos

e-Funktion Exponential (Exp)

Page 576: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-36 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Beschreibung FunktionGanzahlfunktionBei einem negativen Argument liefert Fix die erste negativeganze Zahl ausgibt, die größer oder gleich der eingegebenenZahl ist. Fix rechnet -8,4 in -8 um. Dies entspricht einemAbschneiden in Richtung der Zahl 0.

Fix

GanzzahlBei einem negativen Argument liefert Int die erste negativeganze Zahl ausgibt, die kleiner oder gleich der eingegebenenZahl ist. Int rechnet -8,4 also in -9 um. Dies entsprichteinem echten Abrunden in Richtung - ∞.

Int

Logarithmus Log

Quadratwurzel QWurzel (Sqr)

Sinus Sin

Tangens Tan

Vorzeichen (Signum) Vorzchn (Sgn)

Pseudozufallszahl im Bereich [0..1) ZZG (Rnd)

6.3.3.12 Objekte verknüpfen und einbetten (OLE)

Beschreibung Funktion oder AnweisungErstellen eines OLE-Objekts CreateObject

Abrufen eines OLE-Objekts GetObject

6.3.3.13 Objektmanipulation

Beschreibung Funktion oder AnweisungErstellen oder Löschen eines Steuere-lements

CreateControl, CreateReportControl,DeleteControl, DeleteR eportControl

Erstellen eines Formulars oder Berichts CreateForm, CreateReport

6.3.3.14 Sonstiges

Beschreibung Funktion oder AnweisungStarten einer anderen Anwendung AppActivate, Ausführen (Shell)

Anzeigen eines Dialogfeldes Eingabefeld (InputBox), Meldung(MsgBox)

Erstellen einer Gruppenebene in einem Be-richt

CreateGroupLevel

Unterbrechen der normalen Verarbeitung, umandere Ereignisse zu verarbeiten

DoEvents

Generieren von Tastenanschlägen Tastaturbefehle (SendKeys)

Abrufen der Befehlszeilenargumente Befehl (Command)

Abrufen von Umgebungsvariablen Umgebung (Environ)

Abrufen des Namens des aktuellen Benutzers CurrentUser

Abrufen eines Feldwertes in einer bestimmten DomWert (DLookup)

Page 577: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-37

Beschreibung Funktion oder AnweisungGruppe von DatensätzenAusgeben eines Signaltons Signalton (Beep)

Auswerten eines Ausdrucks Auswerten (Eval)

Bestimmen der Position einer Zahl in einemBereich

Bereich (Partition)

Angeben von Kommentaren in Access Basic Rem, '

Ausführen einer Access-Aktion DoCmd

Ausführen sonstiger Datenbankfunktionen SysCmd

6.3.3.15 SQL

Beschreibung Funktion oder AnweisungAusführen einerSQL-Aggregat-operation

Mittelwert (Avg), Anzahl (Count), ErsterWert (First),LetzterWert (Last), Min, Max, StdAbw (StDev), StdAbwG(StDevP), Summe (Sum), Varianz, VarianzG (VarP)

6.3.3.16 Zeichenfolgen

Beschreibung Funktion oder AnweisungFormatieren einer Zeichenfolge Format

Erstellen einer Zeichenfolge aus sich wie-derholenden Zeichen

LeerZchn (Space), String

Arbeiten mit ANSI-Werten Asc, Zchn (Chr)

Manipulieren einer Zeichenfolge InStr, Links (Left), LGlätten(LTrim), TeilStr (Mid), Rechts(Right), RGlätten (RTrim),Glätten (Trim)

Konvertieren in Klein- oder Großbuchsta-ben

Kleinbst (LCase), Großbst (UCase)

Ausrichten (links- oder rechtsbündig) einerZeichenfolge

LSet, RSet

Abfragen der Länge einer Zeichenfolge Länge (Len)

Vergleichen von zwei Zeichenfolgen StrVgl (StrComp)

Deklarieren der für den Textvergleich zuverwendenden Methode

Option Compare

6.3.4 Objektmethoden

Fast noch umfangreicher als die Anweisungen und Funktionen präsentieren sich die Ob-jektmethoden. Jedes Access Basic Objekt verfügt über mehr oder weniger spezielle Me-thoden. Allen Methoden ist die Syntax gemeinsam

Objekt .Methode [(Argumentenliste)]

Page 578: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-38 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Die Methode wird durch das Objekt qualifiziert. Hierdurch weiß Access Basic bei gleich-namigen Methoden, welche Methode anzuwenden ist. Jedes Objekt hat seine eindeutigfestgelegten Methoden. Analog gibt es zu jedem Objekt spezielle Methoden

Application Parameter, ParametersControl Property, PropertiesDatabase, Databases QueryDef, QueryDefsDbEngine Recordset, RecordsetsDebug Relation, RelationsDocument, Documents ReportField, Fields Bilschirm (Screen)Form TableDef, TableDefsGroup, Groups User, UsersIndex, Indexes Workspace, Workspaces

6.3.4.1 Application-Objekt

Methode BeschreibungEcho Gibt an, ob Access die Bildschirmanzeige des Computers aktualisieren

soll.GetOption Gibt den aktuellen Wert einer Option im Dialogfeld Optionen zurück.SetOption Legt den aktuellen Wert einer Option im Dialogfeld Optionen fest.Quit Beendet Access nach verschiedenen, wählbaren Verfahren.

6.3.4.2 Steuerelementmethoden

Methode Welche? BeschreibungItemData Kombinationsfeld, Listenfeld Gibt die Daten zurück, die sich in der gebun-

denen Spalte für die angegebene Zeile ineinem Kombinationsfeld oder Listenfeld be-finden.

Requery FormulareKombinationsfeld, Listenfeld,Unterformular/Unterberichte).

Aktualisiert die Daten in einem angegebenenFormular oder in einem Steuerelement, dassich im aktiven Objekt befindet, durch er-neutes Abfragen der Datenherkunft des For-mulars bzw. Steuerelements.

SetFocus Formularegebundenes Objektfeld,Kontrollkästchen, Kombinati-onsfeld, Befehlsschaltfläche,Diagramm, Listenfeld, Opti-onsfeld, Optionsgruppenfeld,Unterformular, Textfeld, Um-schaltfläche

Setzt den Fokus auf das festgelegte Formu-lar bzw. das festgelegte Feld oder Steuere-lement im geöffneten Formular,Formulardatenblatt, Tabellendatenblatt oderAbfrage-Dynaset.

6.3.4.3 Database-Objekt, Databases-Auflistung (Datenzugriff)

Database-Objekt

Page 579: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-39

Das Database-Objekt umfaßt die folgenden Auflistungen, Methoden und Eigenschaf-ten:

Auflistung BeschreibungContainers Eine Containers-Auflistung enthält alle Container-Objekte, die die

Datenbank beschreiben.QueryDefs Eine QueryDefs-Auflistung enthält alle QueryDef-Objekte des

Database-Objekts.Recordsets Die Recordsets-Auflistung enthält alle im Database-Objekt geöffne-

ten Recordset-Objekte.Relations Eine Relations-Auflistung enthält gespeicherte Relation-Objekte

des Database-Objekts.TableDefs Eine TableDefs-Auflistung enthält alle gespeicherten TableDef-Ob-

jekte der Datenbank.

Methode BeschreibungClose Schließt die geöffnete Datenbank.CreateProperty Erstellt ein neues benutzerdefiniertes Property-Objekt.CreateQueryDef Erstellt in einer angegebenen Datenbank ein neues QueryDef-

Objekt.CreateRelation Erstellt ein neues Relation-Objekt.CreateTableDef Erstellt ein neues TableDef-Objekt.Execute Führt eine Aktionsabfrage oder eine SQL-Anweisung in einem an-

gegebenen Database-Objekt aus.OpenRecordset Erstellt ein neues Recordset-Objekt und fügt es an die Record-

sets-Auflistung an. Es gibt drei Typen von Recordset-Objekten:Dynaset veränderbares Abfrageergebnis aus einer oder mehrerer

Tabellen.Snapshot unveränderbares Abfrageergebnis aus einer oder meh-

reren Tabellen.Tabelle enthält die Daten der Basistabelle.

Eigenschaft BeschreibungCollatingOrder Gibt die Reihenfolge der Zeichenanordnung an, die in Texten für

Zeichenfolgenvergleiche oder Sortiervorgänge gilt.Connect Liefert Informationen zur Herkunft einer geöffneten Datenbank oder

einer Datenbank, die in einer SQL Pass-Through-Abfrage verwendetwird.

Name Enthält den benutzerdefinierten Namen der Datenbank.QueryTimeout Gibt die Anzahl von Sekunden an, die Access abwartet, bevor ein

Wartezeitfehler eintritt, wenn eine Abfrage einer ODBC (Open Data-base Connectivity) Datenbank durchgeführt wird.

Transactions Gibt an, ob ein Objekt das Aufzeichnen einer Reihe von Änderungenunterstützt, die später zurückgesetzt (rückgängig gemacht) oderübernommen (gespeichert) werden können.

Updatable Gibt an, ob in der Datenbank geändert werden.Version Gibt die Version des Datenformats der geöffneten Datenbank an.

Page 580: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-40 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

6.3.4.4 DBEngine-Objekt (Datenzugriff)

Das DBEngine-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften:

Auflistung BeschreibungWorkspaces Die Workspaces-Auflistung enthält alle aktiven Workspace-Objekte

der Datenbank-Engine.

Methoden BeschreibungCompactDatabase Kopiert und komprimiert eine geschlossene Datenbank und gibt

uns die Möglichkeit, deren Sortierreihenfolge und Verschlüsse-lung zu ändern.

CreateWorkspace Erstellt ein neues Workspace-Objekt.Idle Unterbricht die Datenverarbeitung und ermöglicht somit der Da-

tenbank-Engine, ausstehende Vorgänge wie Maßnahmen zurSpeicherverwaltung oder Seiten-Wartezeiten abzuschließen.

RegisterDatabase Schreibt Verbindungsinformationen für eine ODBC (Open Data-base Connectivity) Datenquelle in die Datei ODBC.INI. DerODBC-Treiber benötigt diese Verbindungsinformationen, wenndie Datenbank-Engine die Datenquelle während einer Sitzungöffnet.

RepairDatabase Repariert eine beschädigte Access-Datenbank.

Eigenschaften BeschreibungLoginTimeout Gibt bei einem Anmeldeversuch an eine ODBC (Open Database Con-

nectivity) Datenbank die Zeit in Sekunden an, bevor ein Fehler auftritt.Version Gibt die Produktversion der gerade ausgeführten Jet Datenbank-Engine

an.

6.3.4.5 Document-Objekt, Documents-Auflistung (Datenzugriff)

Das Document-Objekt enthält keine Auflistungen oder Methoden. Es enthält die folgen-den Eigenschaften:

Eigenschaften BeschreibungContainer Gibt den Namen des Container-Objekts an, zu dem ein Document-

Objekt gehört.DateCreated Gibt Datum und Uhrzeit der Erstellung der Basistabelle an, die einem

Objekt zugrunde liegt.LastUpdated Gibt Datum und Uhrzeit der letzten Änderung am Entwurf einer Basista-

belle an, die einem Objekt zugrunde liegt.Name Gibt einen benutzerdefinierten Namen für das Objekt an.Owner Gibt den Eigentümer des Objekts an.Permissions Vergibt die Berechtigungen an den Benutzer oder die Gruppe, der bzw.

die in der Eigenschaft UserName des Container- oder Document-Objekts angegeben ist.

UserName Benutzer oder Gruppe von Benutzern bei der Bearbeitung der Zugriffs-

Page 581: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-41

Eigenschaften Beschreibungberechtigungen eines einzelnen Document-Objekts.

Die Documents-Auflistung enthält die folgende Methode und Eigenschaft:

Methode BeschreibungRefresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.6 Field-Objekt, Fields-Auflistung (Datenzugriff)

Field-Objekt

Ein Field-Objekt enthält die folgenden Methoden und Eigenschaften:

Methoden BeschreibungAppendChunk Fügt einem Field-Objekt vom Datentyp Memo oder OLE-Objekt

aus der Auflistung Fields eines Recordset-Objekts die Dateneines Zeichenfolgenausdrucks an.

CreateProperty Erstellt ein neues benutzerdefiniertes Property-Objekt.FieldSize Gibt die Anzahl von Bytes eines Field-Objekts vom Datentyp

Memo oder OLE-Objekt aus der Auflistung Fields eines Re-cordset-Objekts aus.

GetChunk Gibt den Inhalt eines Field-Objekts vom Datentyp Memo oderOLE-Objekt aus der Auflistung Fields eines Recordset-Ob-jekts ganz oder teilweise aus.

Eigenschaften BeschreibungAllowZeroLength Gibt an, ob eine leere Zeichenfolge () als Wert der Eigenschaft

Value eines Field-Objekts mit dem Datentyp Text oder Me-mo zulässig ist.

Attributes Gibt ein oder mehrere Merkmale für ein Field-Objekt an.CollatingOrder Gibt die Reihenfolge der Zeichenanordnung an, die in Texten für

Zeichenfolgenvergleiche oder Sortiervorgänge gilt.DataUpdatable Gibt an, ob die Daten des Feldes, das durch ein Field-Objekt

repräsentiert wird, aktualisiert werden können.DefaultValue Gibt den Standardwert eines Field-Objekts an.ForeignName Gibt in einer Beziehung den Namen des Feldes einer Fremdtabelle

(verweisende Tabelle) an, das einem Feld der Mastertabelle (ver-wiesene Tabelle) entspricht.

Name Gibt einen benutzerdefinierten Namen für das Objekt an.OrdinalPosition Gibt die numerische Reihenfolge an, in der die von Field-Objek-

ten repräsentierten Felder angezeigt werden sollen, wenn wir mitihnen arbeiten.

Page 582: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-42 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Eigenschaften BeschreibungRequired Gibt an, ob ein Field-Objekt oder ein Index-Objekt die Einga-

be eines Wertes erwartet, also ob ein Null-Wert zulässig ist.Size Gibt in Bytes die maximale Größe eines Field-Objekts mit Text

oder die konstante Größe eines Field-Objekts mit feststehen-dem Text bzw. numerischen Werten an.

SourceField Gibt den Namen des Feldes an, das die ursprüngliche Datenher-kunft für ein Field-Objekt repräsentiert.

SourceTable Gibt den Namen der Tabelle an, die die ursprüngliche Datenher-kunft für ein Field-Objekt repräsentiert.

Type Gibt den Datentyp des jeweiligen Objekts an.ValidateOnSet Gibt an, ob der Wert eines Field-Objekts unmittelbar nach dem

Einstellen der Eigenschaft Value des Objekts überprüft wird odernicht.

ValidationRule Gibt einen Ausdruck an, der True liefern muß, damit:die Methode Update erfolgreich ausgeführt wird;die Einstellung eines Feldwerts korrekt erfolgt, wenn die Eigen-schaft ValidateOnSet auf True eingestellt ist.

ValidationText Gibt den Text der Meldung an, die Access anzeigt, wenn der Werteines Field-Objekts nicht der Gültigkeitsregel entspricht, die mitder Einstellung der Eigenschaft ValidationRule angegebenwurde.

Value Liefert den Wert eines Objekts oder legt ihn fest.

Ein Field-Objekt in einer Fields-Auflistung eines QueryDef- oder TableDef-Objekts kann außerdem auch die folgenden, von Access definierten Eigenschaften ent-halten.

Von Access definierte Eigenschaften BeschreibungBeschriftung (Caption) Bestimmt den Text für Bezeichnungsfelder, die

Steuerelementen zugeordnet sind, die durch Zie-hen eines Feldes aus der Feldliste erzeugt wordensind, und dient als Spaltenüberschrift für das Feld,wenn die Tabelle oder Abfrage in Datenblattan-sicht angezeigt wird.

SpalteAusgeblendet(ColumnHidden)

Blendet die angegebene Spalte in der Datenblat-tansicht ein bzw. aus.

Spaltenreihenfolge(ColumnOrder)

Bestimmt die Reihenfolge der Felder in der Daten-blattansicht.

Spaltenbreite (ColumnWidth) Bestimmt die Breite einer Spalte in der Datenblat-tansicht.

Dezimalstellen(DecimalPlaces)

Bestimmt die Anzahl der Dezimalstellen, die Ac-cess zum Anzeigen von Zahlen verwendet.

Beschreibung (Description) Definiert den Text, der eine Tabelle oder Abfrageund deren Felder beschreibt.

Format Definiert das Format zum Anzeigen und Druckenvon Zahlen, Datums- und Zeitangaben und Tex-ten.

Eingabeformat (InputMask) Legt ein Eingabeformat für ein Feld fest.

Page 583: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-43

Fields-Auflistung

Eine Fields-Auflistung enthält die folgenden Methoden und Eigenschaften:

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.7 Methodenverzeichnis für Formulare

Die folgenden Methoden sind in Formularen verfügbar:

Methode BeschreibungGoToPage Setzt den Fokus auf das erste Feld einer bestimmten Seite des aktiven

Formulars.Recalc Aktualisiert sofort alle berechneten Steuerelemente in einem Formular.Refresh Führt zur unmittelbaren Aktualisierung der Datensätze in einem angegebe-

nen Formular oder Datenblatt. Dadurch werden die Änderungen an denDaten angezeigt, die von uns oder anderen Benutzern in einer Mehrbenut-zerumgebung vorgenommen wurden.

Repaint Führt alle anstehenden Bildschirmaktualisierungen, wie z. B. noch anste-hende Neuberechnungen der Steuerelemente, für ein bestimmtes Formularaus.

Requery Aktualisiert die Daten in einem angegebenen Formular oder in einem Steue-relement, das sich im aktiven Objekt befindet, durch erneutes Abfragen derDatenherkunft des Formulars bzw. Steuerelements.

SetFocus Setzt den Fokus auf das festgelegte Formular bzw. das festgelegte Feldoder Steuerelement im geöffneten Formular, Formulardatenblatt, Tabellen-datenblatt oder Abfrage-Dynaset.

6.3.4.8 Group-Objekt, Groups-Auflistung (Datenzugriff)

Group-Objekt

Das Group-Objekt enthält folgende Auflistungen, Methoden und Eigenschaften:

Auflistung BeschreibungUsers Eine Users-Auflistung enthält alle gespeicherten User-Objekte eines

Workspace-Objekts oder eines Gruppenkontos.

Page 584: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-44 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Methode BeschreibungCreateUser Erstellt ein neues User-Objekt.

Eigenschaften BeschreibungName Gibt einen benutzerdefinierten Namen für das Objekt an.PID Gibt entweder für eine Gruppe oder ein Benutzerkonto die persönliche

Identifikationskennung (PID) an.

Groups-Auflistung

Die Groups-Auflistung enthält folgende Methoden und Eigenschaften:

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.9 Index-Objekt, Indexes-Auflistung (Datenzugriff)

Index-Objekt

Das Index-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften:

Auflistung BeschreibungFields Eine Fields-Auflistung enthält alle gespeicherten Field-Objekte einer

Abfrage, Datensatzgruppe, Beziehung, Tabelle oder eines Indizes.

Methoden BeschreibungCreateField Erstellt ein neues Field-Objekt.Create Property Erstellt ein neues benutzerdefiniertes Property-Objekt.

Eigenschaften BeschreibungClustered Gibt an, ob ein Index-Objekt ein gruppenbildender Index (cluster-

ing index) einer Tabelle ist.Foreign Legt fest, ob ein Index-Objekt einen Fremdschlüssel in einer Tabelle

repräsentiert.IgnoreNulls Gibt an, ob es Indexeinträge für Datensätze gibt, die in ihren Indexfel-

dern Nullwerte aufweisen (bei denen also kein Wert im Feld vorhandenist).

Name Gibt einen benutzerdefinierten Namen für das Objekt an.Primary Legt fest, ob ein Index-Objekt einen Primärindex einer Tabelle reprä-

sentiert.

Page 585: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-45

Unique Legt fest, ob ein Index-Objekt einen eindeutigen Index für eine Ta-belle repräsentiert.

Required Gibt an, ob ein Index-Objekt die Eingabe eines Wertes erwartet, alsoob ein Null-Wert zulässig ist.

Indexes-Auflistung

Die Indexes-Auflistung enthält die folgenden Methoden und Eigenschaften.

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.10 Parameter-Objekt, Parameters-Auflistung (Datenzugriff)

Parameter-Objekt

Ein Parameter-Objekt enthält keine Auflistungen oder Methoden. Es enthält die folgendenEigenschaften:

Eigenschaften BeschreibungName Gibt einen benutzerdefinierten Namen für das Objekt an.Value Liefert den Wert eines Objekts oder legt ihn fest.Type Gibt den Datentyp des jeweiligen Objekts an.

Parameters-Auflistung

Eine Parameters-Auflistung enthält die folgende Methode und Eigenschaft:

Methoden BeschreibungRefresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.11 Property-Objekt, Properties-Auflistung (Datenzugriff)

Property-Objekt

Das Property-Objekt enthält keine Auflistungen oder Methoden. Es enthält die folgendenEigenschaften:

Page 586: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-46 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Eigenschaften BeschreibungInherited Zeigt an, ob ein Property-Objekt von einem zugrundeliegenden Ob-

jekt übernommen wurde.Name Gibt einen benutzerdefinierten Namen für das Objekt an.Type Liefert den Wert eines Objekts oder legt ihn fest.Value Gibt den Datentyp des jeweiligen Objekts an.

Properties-Auflistung

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.12 QueryDef-Objekt, QueryDefs-Auflistung (Datenzugriff)

QueryDef-Objekt

Das QueryDef-Objekt umfaßt die folgenden Auflistungen, Methoden und Eigenschaf-ten:

Auflistungen BeschreibungFields Eine Fields-Auflistung enthält alle gespeicherten Field-Objekte ei-

ner Abfrage, Datensatzgruppe, Beziehung, Tabelle oder eines Indizes.Parameters Eine Parameters-Auflistung enthält alle Parameter-Objekte eines

QueryDef-Objekts.

Methoden BeschreibungClose Schließt ein geöffnetes Datenzugriffsobjekt.CreateProperty Erstellt ein neues benutzerdefiniertes Property-Objekt.Execute Führt eine Aktionsabfrage oder eine SQL-Anweisung in einem an-

gegebenen Database-Objekt aus.OpenRecordset Erstellt ein neues Recordset-Objekt und fügt es an die Record-

sets-Auflistung an. Es gibt drei Typen von Recordset-Objekten:Dynaset, Snapshot, Tabelle

Eigenschaften BeschreibungConnect Liefert Informationen zur Herkunft einer geöffneten Datenbank, einer

Datenbank, die in einer SQL Pass-Through-Abfrage verwendet wird,oder zur Herkunft einer eingebundenen Tabelle.

DateCreated Gibt Datum und Uhrzeit der Erstellung der Basistabelle an, die ei-nem Objekt zugrunde liegt.

Page 587: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-47

Eigenschaften BeschreibungLastUpdated Gibt Datum und Uhrzeit der letzten Änderung am Entwurf einer Ba-

sistabelle an, die einem Objekt zugrunde liegt.Name Gibt einen benutzerdefinierten Namen für das Objekt an.ODBCTimeout Gibt an, wie viele Sekunden Access wartet, bevor ein Zeitüber-

schreitungsfehler auftritt, wenn eine Abfrage für eine ODBC (OpenDatabase Connectivity) Datenbank ausgeführt wird.

ReturnsRecords Bestimmt, ob eine SQL Pass-Through-Abfrage, die in einer externenDatenbank durchgeführt wird, Datensätze liefert.

SQL Gibt die SQL- Anweisung an, die die Abfrage definiert, die von ei-nem QueryDef- Objekt durchgeführt wird.

Type Gibt den Datentyp des jeweiligen Objekts an.Updatable Gibt an, ob die Abfragedefinition eines QueryDef- Objekts geän-

dert werden kann.

Ein QueryDef- Objekt kann auch die folgenden von Access definierten Eigenschaftenenthalten.

Von Access definierte Eigenschaften BeschreibungDatenblattSchriftgröße(DatasheetFontHeight)

Legt die zum Anzeigen der Feldnamen undder Daten verwendete Schriftgröße fest.

DatenblattSchriftKursiv(DatasheetFontItalic)

Legt fest, ob die Feldnamen und Daten in derDatenblattansicht kursiv dargestellt werden.

DatenblattSchriftart(DatasheetFontName)

Legt die zum Anzeigen der Feldnamen undder Daten verwendete Schriftart fest.

DatenblattSchriftUnterstrichen(DatasheetFontUnderline)

Legt fest, ob die Feldnamen und Daten in derDatenblattansicht unterstrichen dargestelltwerden.

DatenblattSchriftbreite(DatasheetFontWeight)

Bestimmt die Linienbreite, die Windows in derDatenblattansicht zum Anzeigen und Druckender Zeichen von Feldnamen und Daten ver-wendet.

Beschreibung(Description)

Definiert den Text, der eine Tabelle oder Ab-frage und deren Felder beschreibt.

FixierteSpalten(FrozenColumns)

Gibt an, wie viele Spalten in einem Datenblattfixiert sind. Fixierte Spalten werden auf derlinken Seite des Datenblatts angezeigt undverschieben sich nicht, wenn wir einen hori-zontalen Bildlauf durch das Datenblatt durch-führen.

MeldungenProtokollieren(LogMessages)

Gibt an, ob Meldungen, die von einer SQL-Datenbank geliefert werden, nachdem eineSQL-Pass-Through-Abfrage dorthin gesendetwurde, in einer Meldungstabelle der aktuellenAccess-Datenbank gespeichert werden odernicht.

DatensätzeSperren(RecordLocks)

Bestimmt, ob Datensätze in einer Abfrage(normalerweise Aktionsabfragen in einer Mehr-benutzerdatenbank) gesperrt werden, wenndie Abfrage ausgeführt wird.

Page 588: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-48 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Von Access definierte Eigenschaften BeschreibungZeilenhöhe(RowHeight)

Legt die Höhe aller Zeilen in der Datenblattan-sicht fest.

RasterEinblenden(ShowGrid)

Gibt an, ob das Raster sichtbar ist, wenn eineTabelle, eine Abfrage oder ein Formular in derDatenblattansicht angezeigt wird.

QueryDefs-Auflistung

Die QueryDefs- Auflistung umfaßt die folgenden Methoden und Eigenschaften:

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.13 Recordset-Objekt, Recordsets-Auflistung (Datenzugriff)

Recordset-Objekt

Das Recordset- Objekt enthält folgende Auflistung.

Auflistung BeschreibungFields Eine Fields- Auflistung enthält alle gespeicherten Field- Objekte einer

Abfrage, Datensatzgruppe, Beziehung, Tabelle oder eines Indizes.

Wir können die folgenden Methoden zusammen mit den gekennzeichneten Typen vonRecor dset- Objekten verwenden.

Methode Dynaset Snapshot Tabelle ( Table )AddNew X XClone X X* XClose X X XDelete X XEdit X XFillCache XFindFirst X X*FindLast X X*FindNext X X*FindPrevious X X*Move X X* XMoveFirst X X* XMoveLast X X XMoveNext X X XMovePrevious X X* XOpenRecordset X X* X

Page 589: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-49

Methode Dynaset Snapshot Tabelle ( Table )Requery X XSeek XUpdate X X

*) Recordset- Objekte vom Typ Snapshot , die durch Verwendung derMethode OpenRecordset mit dem Argument Option DB_FORWARDONLYerstellt wurden, unterstützen die markierten Methoden und Eigenschaftennicht. Außerdem funktioniert die Methode Move nur bei Vorwärtsbewegun-gen, die kein Bookmark- Offset verwenden.

Die folgende Tabelle gibt an, welche Eigenschaften für jede Art von Recordset- Objektzur Verfügung stehen, und ob die Eigenschafteneinstellung Lese- und Schreibzugriff zu-läßt, schreibgeschützt ist oder immer den Wert False hat.

Eigenschaft Dynaset Snapshot Tabelle ( Table )BOF Schreibgeschützt Schreibgeschützt SchreibgeschütztBookmark Lesen/schreiben Lesen/schreiben* Lesen/schreibenBookmarkable Schreibgeschützt Schreibgeschützt* SchreibgeschütztCacheSize Lesen/schreibenCacheStart Lesen/schreibenDateCreated SchreibgeschütztEOF Schreibgeschützt Schreibgeschützt SchreibgeschütztFilter Lesen/schreiben Lesen/schreibenIndex Lesen/schreibenLastModified Schreibgeschützt SchreibgeschütztLastUpdated SchreibgeschütztLockEdits Lesen/schreiben Lesen/schreibenName Schreibgeschützt Schreibgeschützt SchreibgeschütztNoMatch Schreibgeschützt Schreibgeschützt SchreibgeschütztPercentPosition Lesen/schreiben Lesen/schreiben* Lesen/schreibenRecordCount Schreibgeschützt Schreibgeschützt SchreibgeschütztRestartable Schreibgeschützt Schreibgeschützt FalseSort Lesen/schreiben Lesen/schreibenTransactions Schreibgeschützt False SchreibgeschütztType Schreibgeschützt Schreibgeschützt SchreibgeschütztUpdatable Schreibgeschützt False SchreibgeschütztValidationRule Schreibgeschützt Schreibgeschützt SchreibgeschütztValidationText Schreibgeschützt Schreibgeschützt Schreibgeschützt

Recordsets-Auflistung

Die Recordsets- Auflistung enthält die folgende Methode und Eigenschaft.

Methoden BeschreibungRefresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

Page 590: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-50 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

6.3.4.14 Relation-Objekt, Relations-Auflistung (Datenzugriff)

Relation-Objekt

Das Relation-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Auflistung BeschreibungFields Eine Fields-Auflistung enthält alle gespeicherten Field-Objekte einer

Abfrage, Datensatzgruppe, Beziehung, Tabelle oder eines Indizes.

Methode BeschreibungCreateField Erstellt ein neues Field-Objekt.

Eigenschaften BeschreibungAttributes Gibt ein oder mehrere Merkmale für ein Relation-Objekt an.ForeignTable Gibt den Namen der Tabelle an, die in einer Beziehung die Fremdta-

belle (verweisende Tabelle) ist.Name Gibt einen benutzerdefinierten Namen für das Objekt an.Table Gibt die Einstellung der Eigenschaft Name des primären TableDef-

oder QueryDef-Objekts, auf das verwiesen wird, in einem Relati-on-Objekt an.

Relations-Auflistung

Die Relations-Auflistung enthält die folgenden Methoden und Eigenschaften.

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.15 Berichte (Reports)

Mit den folgenden Methoden können wir Berichte verändern

Methode BeschreibungCircle Zeichnet einen Kreis, eine Ellipse oder einen Bogen.Line Zeichnet Linien und Rechtecke.Print Druckt einen Text unter Verwendung der aktuellen Farbe und Schriftart.PSet Legt für einen Punkt eine bestimmte Farbe fest.Scale Definiert das Koordinatensystem für ein Report-Objekt.TextHeight Gibt die Höhe einer Textzeichenfolge aus, als ob diese in der aktuellen

Page 591: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-51

Schriftart gedruckt werden würde.TextWidth Gibt die Breite einer Textzeichenfolge aus, wie diese in der aktuellen

Schriftart gedruckt werden würde.

6.3.4.16 Bildschirm-Objekt (Screen-Objekt)

Das Objekt Bildschirm (Screen) unterstützt keine Methoden; es besitzt die folgen-den Eigenschaften.

Eigenschaften BeschreibungAktiverBericht(ActiveReport)

Verweist auf den Bericht, der den Fokus besitzt.

AktivesFormular(ActiveForm)

Verweist auf das Formular, das den Fokus besitzt.

AktivesSteuerelement(ActiveControl)

Verweist auf das Steuerelement, das den Fokus besitzt.

VorherigesSteuerelement(PreviousControl)

Gibt das Steuerelement an, das zuletzt den Fokus erhielt.

6.3.4.17 TableDef-Objekt, TableDefs-Auflistung (Datenzugriff)

TableDef-Objekt

Ein TableDef-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaften.

Auflistung BeschreibungFields Eine Fields-Auflistung enthält alle gespeicherten Field-Objekte einer

Abfrage, Datensatzgruppe, Beziehung, Tabelle oder eines Indizes.Indexes Eine Indexes-Auflistung enthält gespeicherte Index-Objekte eines Ta-

bleDef-Objekts.

Methoden BeschreibungCreateField Erstellt ein neues Field-Objekt.CreateIndex Erstellt ein neues Index-Objekt.CreateProperty Erstellt ein neues benutzerdefiniertes Property-Objekt.OpenRecordset Erstellt ein neues Recordset-Objekt und fügt es an die Record-

sets-Auflistung an. Es gibt drei Typen von Recordset-Objekten:Dynaset, Snapshot, Tabelle

RefreshLink Aktualisiert die Verbindungsinformationen einer eingebundenen Ta-belle.

Eigenschaften BeschreibungAttributes Gibt ein oder mehrere Merkmale für ein TableDef-Objekt an.Connect Liefert Informationen zur Herkunft der eingebundenen Tabelle.DateCreated Gibt Datum und Uhrzeit der Erstellung der Basistabelle an, die ei-

nem Objekt zugrunde liegt.LastUpdated Gibt Datum und Uhrzeit der letzten Änderung am Entwurf einer

Page 592: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-52 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Eigenschaften BeschreibungBasistabelle an, die einem Objekt zugrunde liegt.

Name Gibt einen benutzerdefinierten Namen für das Objekt an.RecordCount Gibt die Anzahl an Datensätzen an, auf die innerhalb eines T a-

bleDef- Objekts zugegriffen wurde.SourceTableName Gibt den Namen einer eingebundenen Tabelle an, wie er in der

ursprünglichen Datenherkunft vorliegt.Updatable Gibt an, ob die Abfragedefinition eines QueryDef- Objekts geän-

dert werden kann.ValidationRule Gibt einen Ausdruck an, der True liefern muß, damit:

die Methode Update erfolgreich ausgeführt wird.die Einstellung eines Feldwerts korrekt erfolgt, wenn die Eigen-schaft Valid ateOnSet auf True eingestellt ist.

ValidationText Gibt den Text der Meldung an, die Access anzeigt, wenn der Werteines Field- Objekts nicht der Gültigkeitsregel entspricht, die mitder Einstellung der Eigenschaft ValidationRule angegebenwurde.

Ein TableDef- Objekt kann außerdem auch die folgenden, von Access definierten Ei-genschaften enthalten.

Von Access definierte Eigenschaften BeschreibungDatenblattSchriftgröße(DatasheetFontHeight)

Legt die zum Anzeigen der Feldnamen undder Daten verwendete Schriftgröße fest.

DatenblattSchriftKursiv(DatasheetFontItalic)

Legt fest, ob die Feldnamen und Daten in derDatenblattansicht kursiv dargestellt werden.

DatenblattSchriftart(DatasheetFontName)

Legt die zum Anzeigen der Feldnamen undder Daten verwendete Schriftart fest.

DatenblattSchriftUnterstrichen(DatasheetFontUnderline)

Legt fest, ob die Feldnamen und Daten in derDatenblattansicht unterstrichen dargestelltwerden.

DatenblattSchriftbreite(DatasheetFontWeight)

Bestimmt die Linienbreite, die Windows in derDatenblattansicht zum Anzeigen und Druckender Zeichen von Feldnamen und Daten ver-wendet.

Beschreibung(Description)

Definiert den Text, der eine Tabelle oder Ab-frage und deren Felder beschreibt.

FixierteSpalten(FrozenColumns)

Gibt an, wie viele Spalten in einem Datenblattfixiert sind. Fixierte Spalten werden auf derlinken Seite des Datenblatts angezeigt undverschieben sich nicht, wenn wir einen hori-zontalen Bildlauf durch das Datenblatt durch-führen.

Zeilenhöhe(RowHeight)

Legt die Höhe aller Zeilen in der Datenblattan-sicht fest.

RasterEinblenden(ShowGrid)

Gibt an, ob das Raster sichtbar ist, wenn eineTabelle, eine Abfrage oder ein Formular in derDatenblattansicht angezeigt wird.

Page 593: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-53

TableDefs-Auflistung

Eine TableDefs-Auflistung enthält die folgenden Methoden und Eigenschaften.

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.4.18 User-Objekt, Users-Auflistung (Datenzugriff)

User-Objekt

Das User-Objekt enthält folgende Auflistungen, Methoden und Eigenschaften:

Auflistung BeschreibungGroups Eine Groups-Auflistung enthält alle gespeicherten Group-Objekte eines

Workspace-Objekts oder eines Benutzerkontos.

Methoden BeschreibungCreateGroup Erstellt ein neues Group-Objekt.NewPassword Ändert das Kennwort eines bestehenden Benutzerkontos.

Eigenschaften BeschreibungName Gibt einen benutzerdefinierten Namen für das Objekt an.Password Gibt das Kennwort für entweder ein Benutzerkonto oder eine Sitzung der

Datenbank-Engine an.PID Gibt entweder für eine Gruppe oder ein Benutzerkonto die persönliche

Identifikationskennung (PID) an.

Users-Auflistung

Die Users-Auflistung enthält folgende Methoden und Eigenschaften:

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Delete Löscht ein gespeichertes Objekt aus einer Auflistung.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

Page 594: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.3 Verarbeitungsanweisungen © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-54 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

6.3.4.19 Workspace-Objekt, Workspaces-Auflistung (Datenzugriff)

Workspace-Objekt

Das Workspace-Objekt enthält die folgenden Auflistungen, Methoden und Eigenschaf-ten:

Auflistungen BeschreibungDatabases Eine Databases-Auflistung enthält alle in einer Sitzung der Datenbank-

Engine geöffneten Database-Objekte.Groups Eine Groups-Auflistung enthält alle gespeicherten Group-Objekte eines

Workspace-Objekts oder eines Benutzerkontos.Users Eine Users-Auflistung enthält alle gespeicherten User-Objekte eines

Workspace-Objekts oder eines Gruppenkontos.

Methoden BeschreibungBeginTrans Startet eine neue Transaktion.Close Schließt ein geöffnetes Datenzugriffsobjekt.CommitTrans Beendet die aktuelle Transaktion und speichert die Änderungen.CreateDatabase Erstellt ein neues Database-Objekt und speichert die Datenbank

auf der Festplatte.CreateGroup Erstellt ein neues Group-Objekt.CreateUser Erstellt ein neues User-Objekt.OpenDatabase Öffnet in einer Sitzung eine angegebene Datenbank und gibt einen

Verweis auf das Database-Objekt aus, durch das diese repräsen-tiert wird. Die geöffnete Datenbank wird automatisch der AuflistungDatabases hinzugefügt.

Rollback Beendet die aktuelle Transaktion und stellt für die Datenbanken desWorkspace-Objekts den Zustand wieder her, den sie bei Beginnder aktuellen Transaktion aufwiesen.

Eigenschaften BeschreibungName Gibt einen benutzerdefinierten Namen für das Objekt an.Password Gibt das Kennwort für entweder ein Benutzerkonto oder eine Sitzung der

Datenbank-Engine an.UserName Gibt Eigentümer eines Workspace-Objekts an

Workspaces-Auflistung

Die Workspaces-Auflistung enthält die folgenden Methoden und Eigenschaften:

Methoden BeschreibungAppend Fügt einer Auflistung ein neues Datenzugriffsobjekt hinzu.Refresh Aktualisiert die Position von Objekten in einer Auflistung entsprechend aller

Änderungen, die an den Elementen dieser Auflistung vorgenommen wurden.

Page 595: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-55

Eigenschaft BeschreibungCount Gibt an, wie viele Objekte eine Auflistung enthält.

6.3.5 Makros ausführen

Es gibt eine Reihe von fertiger Makros, die nur relativ mühsam nachzuprogrammierensind. Auch lassen sich einige Funktionen einfacher in benutzerdefinierten Makros definie-ren. Es ist daher durchaus sinnvoll, Makros aus Programmen heraus aufzurufen. Diesgeschieht mit der Anweisung

DoCmd DoCmd aktionsname [aktionsargumente]

Argument Beschreibungaktionsname Name der Access-Aktion, die wir ausführen möchten.aktionsargumente Ausdruck des Datentyps Variant , der alle für die Aktion erfor-

derlichen Argumente enthält. Wir trennen die einzelnen Argu-mente durch Kommas voneinander.

Mit Ausnahme der folgenden Aktionen können wir alle Aktionen aus Access Basic herausausführen:

Makroaktion ErsatzAusführenAnwendung ShellAusführenCode Aufruf einer ProzedurHinzufügenMenü -Meldung MsgBoxSetzenWert ZuweisungStopAlleMakros -StopMakro -Tastaturbefehle SendKeys

6.4 Steuerstrukturen

6.4.1 Grundlagen

Steuerstrukturen (fälschlicherweise häufig als Konstrollstrukturen vom engl. Wort control= steuern übersetzt) sind die eigentliche Intelligenzleistung des Programmierers. Hierweicht der Programmfluß von der sequentiellen Verarbeitung ab. Dies geschieht zwarauch beim Aufruf von Prozeduren. Diese kehren aber (außer im Fehlerfall) nach ihrer Be-endigung wieder an die Aufrufstelle zurück.

Bereits in den sechziger Jahren hat Dijkstra erkannt, daß jedes algorithmierbare Problem,d. h. jedes programmierbare Problem auf drei Grundkonstrukte zurückzuführen ist

FolgeAlternativeWiederholung

Page 596: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-56 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Dies drei Grundkonstrukte finden wir daher in verschiedenen Varianten in allen Program-miersprachen, somit auch in Access Basic.

6.4.2 Folge

Über die Folge von Anweisungen müssen wir kein Wort mehrverlieren, wir können daher gleich zu den Auswahlen überge-hen. In der Struktogrammdarstellung wird die Folge aus unter-einander gezeichneten Blöcken dargestellt (Bild 6.4-1). DieStruktogramme (Nassi-Shneiderman Diagramme) stellen wirnach DIN 66261 dar.

6.4.3 Alternative

Bei den Alternativen unterscheiden wir drei Varianten.

Die bedingte Verarbeitung (monadic selective) entspricht einer0/1 Auswahl aus 1 Möglichkeit, d. h. es wird keine oder eine Ak-tion aus einer einzigen Möglichkeit ausgewählt (Bild 6.4-2). Infast allen Sprachen handelt es sich hier um das Konstrukt

If G = B Then V

Wenn der gemeinsame Bedingungsteil G gleich der BedingungB ist, dann wird die Verarbeitung V durchgeführt. Ist dies nichtder Fall, dann erfolgt keine Verarbeitung. In beiden Fällen wird die Verarbeitung mit dernachfolgenden Anweisung fortgeführt.

Die einfache Alternative (dyadic selective) ist eine 1 Auswahlaus 2 Möglichkeiten (Bild 6.4-3). Es wird auf jeden Fall eine derbeiden möglichen Alternativen ausgewählt.

If G = B1 Then V1 Else V2

Wie die Anweisung schon andeutet, handelt es sich bei der Be-dingung eine zweiwertige Aussage. Eine dritte Möglichkeit gibtes nicht.

Bei der dritten Variante handelt es sich um eine 1 Aus-wahl aus n Möglichkeiten (Bild 6.4-4). Häufig wird eine derFälle als sog. Else-Fall herausgehoben. Er tritt immerdann auf, wenn keine der anderen Bedingungen zutrifft.

Den allgemeinsten Fall, nämlich m Auswahlen aus nMöglichkeiten finden wir nur sehr selten in unseren Pro-grammiersprachen. Es handelt sich hierbei um Entschei-dungstabellen, die entsprechend programmiert werdenmüssen.

Tue dies!

Tue das!

Tue sonst och was!

Bild 6.4-1: Folge

GB

V

Bild 6.4-2: BedingteVerarbeitung

GB1

V1 V2

B2

Bild 6.4-3: EinfacheAlternative

GB1

V1 Vn-1

Bn-1

Vn

Bn

Bild 6.4-4: Mehrfache Alter-native

Page 597: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-57

In Access Basic müssen wir beachten, daß neben diesem theoretischen Teil noch prakti-sche Probleme auftreten. Die Verarbeitung muß in irgendeiner Form abgegrenzt werden.Daher lautet die exakte Syntax

If .. Then If Bedingung Then Then-Teil [ Else Else-Teil]

In dieser Form beendet die Zeilenschaltung die Alternative. Reicht der Platz nicht aus,dann müssen wir folgende Syntax einsetzen.

If ... Then If Bedingung1 Then[Anweisungsblock1]

[ ElseIf Bedingung2 Then[Anweisungsblock2] ]

. . .[ Else

[Anweisungsblockn] ]End If End If

Syntax 1Die einzeilige Form der Anweisung eignet sich besonders für kurze, einfache Bedin-gungsüberprüfungen. Sie setzt sich aus folgenden drei Teilen zusammen:

Teil BeschreibungBedingung Einer von zwei Ausdrucksarten:

Ein numerischer Ausdruck oder ein Zeichenfolgenausdruck, derTrue (Wahr, 1 ) oder False (Falsch, 0 oder Wert Null )ausgibt.Ein einzelner Ausdruck der Form If TypeOf Objekt IsObjekttyp. Das Objekt ist eine Steuerelementvariable und Ob-jekttyp kann einer der folgenden Typen sein: BoundObjectFrame(Gebundenes Objektfeld), CheckBox(Kontrollkästchen), ComboBox (Kombinationsfeld),CommandButton (Befehlsschaltfläche), Label(Bezeichnungsfeld), Line (Linie), ListBox(Listenfeld), ObjectFrame (Objektfeld füreingebettete und verknüpfte Objektfelder undDiagramme), OptionButton (Optionsfeld),OptionGroup (Optionsgruppe), PageBreak(Seitenumbruch), Rectangle (Rechteck), SubForm(Unterformular), SubReport (Unterbericht), TextBox(Textfeld) oder ToggleButton (Umschaltfläche).

Then-Teil ,Else-Teil

Anweisungen oder Verzweigungen, die ausgeführt werden, wenn Bedin-gung Wahr (Then-Teil ) oder Falsch (Else-Teil ) ist.

Der Then-Teil und Else-Teil haben beide die folgende Syntax:

{Anweisungen | [GoTo] Zeilennummer | GoTo Zeilenmarke}

Page 598: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-58 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Die Syntax für beide Teile setzt sich aus drei Bestandteilen zusammen:

Teil BeschreibungAnweisungen Eine oder mehrere Access Basic-Anweisungen, die durch Doppel-

punkte : getrennt sind.Zeilennummer Eine gültige Zeilennummer des Programms.Zeilenmarke Eine gültige Zeilenmarke des Programms.

Wenn wir eine Zeilennummer verwenden, müssen wir GoTo nicht angeben. Bei einerZeilenmarke dagegen ist GoTo erforderlich.

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Syntax 2Die Blockform von If...Then...Else ist strukturierter und flexibler als die einzeiligeForm. Sie ist im allgemeinen leichter zu lesen und zu warten, und die Fehlersuche isteinfacher. Sie setzt sich aus folgenden drei Teilen zusammen:

Teil BeschreibungBedingung1, Bedingung2 Die Bedingungen werden wie in der einzeiligen Form

verwendet.Anweisungsblock1 bis n Eine oder mehrere Access Basic-Anweisungen in einer

oder mehreren Zeilen.

Die Alternativen können ineinander verschachtelt werden.

Beim Ausführen eines If-Blocks überprüft Access Basic Bedingung1 (bzw. den er-sten numerischen oder TypeOf-Ausdruck). Wenn der Ausdruck Wahr ist werden dienach der Anweisung Then folgenden Anweisungen ausgeführt. Wenn der erste Aus-druck Falsch ist beginnt Access Basic als nächstes, alle ElseIf-Bedingungen nach-einander auszuwerten. Sobald Access Basic eine wahre Bedingung findet werden die derentsprechenden Anweisung Then folgenden Anweisungen ausgeführt. Wenn keine derElseIf-Bedingungen Wahr ist werden die nach der Anweisung Else folgenden An-weisungen ausgeführt. Nach dem Ausführen der Anweisungen, die nach Then oderElse folgen, wird das Programm mit der Anweisung fortgesetzt, die nach End If folgt.

Die Else- und ElseIf-Blöcke sind nicht unbedingt erforderlich. Wir können beliebigviele ElseIf-Klauseln in einem If-Block verwenden. Diese dürfen jedoch nicht nacheiner Else-Klausel stehen. Jeder Anweisungsblock kann wiederum verschachtelte If-Blöcke enthalten.

Access Basic prüft, was nach dem reservierten Wort Then steht, um zu bestimmen, obeine einzeilige Anweisung If oder ein If-Block folgt. Steht nach Then etwas ande-res als ein Kommentar, wird die Anweisung als einzeilige Anweisung If interpretiert.

Eine Anweisung If in Blockform muß die erste Anweisung in der Zeile sein. Vor denTeilen Else, ElseIf und End If der Anweisung darf nur eine Zeilennummer odereine Zeilenmarke stehen. Der Block muß mit einer Anweisung End If abgeschlossenwerden.

Page 599: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-59

Normale numerische Ausdrücke sowie Zeichenfolgenausdrücke können nicht mit dem-selben Bedingungsausdruck ausgewertet werden wie Ausdrücke der Form If TypeOfObjekt Is Objekttyp. Wir müssen für Objekte einen separaten ElseIf-Block ver-wenden.

If a > 1 And a <= 100 Then...

ElseIf TypeOf SteuerVar Is ListBox Then...

End If

) Wichtig Die Anweisung Option Compare beeinflußt Zeichenfolgenvergleiche.

Select Select Case Testausdruck[Case Ausdrucksliste1

[Anweisungsblock1] ][Case Ausdrucksliste2

[Anweisungsblock2] ]. . .[Case Else

[Anweisungsblockn] ]End Select End Select

Argument BeschreibungTestausdruck Jeder beliebige numerische Ausdruck oder Zeichenfolgenaus-

druck.Anweisungsblock Die Elemente Anweisungsblock1 bis Anweisungsblockn

bestehen aus einer beliebigen Anzahl von Anweisungen in eineroder mehreren Zeilen.

Ausdrucksliste Diese Elemente können in einer dieser drei Formen auftreten:Ausdruck [, Ausdruck]Ausdruck To AusdruckIs Vergleichsoperator-Ausdruck

Das Argument Ausdrucksliste besteht aus folgenden Teilen:

Teil BeschreibungAusdruck Ein beliebiger numerischer Ausdruck oder Zeichenfolgenaus-

druck. Der Datentyp des Ausdrucks muß mit dem Datentyp vonTestausdruck kompatibel sein. (Der Datentyp des Aus-drucks wird in den Datentyp von Testausdruck umgewandelt.Wenn Testausdruck z. B. ein Wert vom Datentyp Inte-ger ist, kann Ausdrucksliste einen Wert vom DatentypDouble enthalten.)

Vergleichsoperator Ein beliebiger zulässiger Vergleichsoperator, ausgenommenWie (Like).

Page 600: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-60 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Wenn Testausdruck der einer Case- Klausel zugeordneten Ausdrucksliste entspricht,wird der Anweisungsblock, der dieser Case- Klausel folgt, bis zur nächsten Case- Klau-sel ausgeführt. Bei der letzten Case- Klausel wird der folgende Anweisungsblock bis zurAnweisung End Select ausgeführt. Anschließend springt die Programmsteuerung zuder Anweisung, die der Anweisung End Select folgt.

Wenn wir das reservierte Wort To zum Anzeigen eines Wertebereichs verwenden, mußder kleinere Wert vor To stehen. Vergleichsoperatoren können wir nur in Verbindungmit dem reservierten Wort Is verwenden.

Wenn wir Case Else verwenden, werden die zugehörigen Anweisungen nur dann aus-geführt, wenn Testausdruck mit keiner der anderen Case- Auswahlen übereinstimmt.Obwohl nicht unbedingt erforderlich, empfiehlt es sich doch, eine Anweisung Case Elsein einem Select Case- Block zu verwenden, um unvorhergesehene Werte von Test-ausdruck abzufangen. Wenn keine Anweisung Case Else vorhanden ist, und keinerder in den Case- Klauseln aufgelisteten Ausdrücke dem Testausdruck entspricht,wird die Programmausführung mit der Anweisung fortgesetzt, die auf End Select folgt.

Wir können in jeder Case- Klausel mehrere Ausdrücke oder Bereiche verwenden. Z. B.:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxZahl

Wir können auch Bereiche und mehrere Ausdrücke für Zeichenfolgen definieren. Im fol-genden Beispiel vergleicht Case Zeichenfolgen, die genau der Zeichenfolge allesentsprechen, Zeichenfolgen, die – in alphabetischer Reihenfolge – zwischen Nüsse undSuppe liegen und Werte, die dem aktuellen Wert von TestWort$ entsprechen:

Case "alles", "Nüsse" To "Suppe", TestWort$

Entspricht Testausdruck mehr als einer Case- Klausel, werden nur die Anweisungenausgeführt, die dem ersten Treffer folgen.

Anweisungen Select Case können verschachtelt werden. Jede Anweisung SelectCase muß eine zugehörige Anweisung End Select haben.

6.4.4 Wiederholung

Ähnlich den Alternativen gibt es eine Reihe von Wiederholungen.

Bei den Wiederholungen mit vorausgehender Bedingung (itera-tive loop) oder kurz abweisenden Wiederholungen liegt die Be-dingungsabfrage vor dem eigentlichen Schleifenrumpf (Bild 6.4-5).

Eine solche Wiederholung setzt voraus, daß die Bedingung inallen Teilen (Variablen) vor Eintritt in die Wiederholung definiertist;

Ist die Bedingung dann schon nicht erfüllt, so wird der Schleifen-rumpf V übersprungen. Die Schleife wird nie ausgeführt.

B

V

Bild 6.4-5: Wiederho-lung mit vorausgehen-der Bedingungsprüfung

Page 601: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-61

Ein Sonderfall der abweisenden Wiederholung ist die Zählschleife. Bei ihr wird eine Steu-ervariable von einem Anfangswert bis zu einem Endwert in vorgegebenen Schritten in-krementiert oder dekrementiert.

Anders verhält sich hier die Wiederholung mit nachfolgenderBedingungsabfrage (repetitive loop) (Bild 6.4-6). Es handelt sichum eine nichtabweisende Schleife, die auf jeden Fall einmaldurchlaufen wird.

Diese Schleifen treten typischerweise beim Einlesen auf, daman zuerst den Eingabewert einlesen muß, um ihn auf Gültigkeitprüfen zu können. Da er erst dann zur Verfügung steht, kann ernur am Ende der Schleife getestet werden.

Als letztes finden wir die Wiederholung ohne Bedingungsprüfung(continuous loop) (Bild 6.4-7). Diese fürchten die Programmierer auf aller Welt, da einsolches Programm nicht terminiert. Wir können diese Wiederholung daher nur mit einerAbbruchanweisung (termination) einsetzen. Da die Norm als Beschriftung N der Ab-bruchanweisung den „Bezeichner des zu verlassenden Sinnbildes“ vorsieht, muß die Be-dingung zusätzlich als Alternative eingezeichnet werden. Weiterhin ist es möglich, auchmehrere Hierarchieebenen gleichzeitig zu verlassen, z. B. die gesamte Prozedur.

Überhaupt müssen in allen Wiederholungen die sog. Steuerva-riablen in irgendeiner Form verändert werden. Steuervariablensind alle Variablen, die in der Bedingungsprüfung verwendetwerden. Werden sie nicht wie erwähnt verändert, so wird dieWiederholung zur Dauerschleife.

In Access Basic finden wir folgende Syntax für die verschiede-nen Wiederholungsvarianten.

While While Bedingung[Anweisungsblock]

Wend Wend

Dieses Konstrukt führt eine Folge von Anweisungen in einerSchleife aus, solange eine gegebene Bedingung wahr ist.

Das Argument Bedingung ist ein numerischer Ausdruck oder ein Zeichenfolgenaus-druck, der True (Wahr, 1) oder False (Falsch, 0 oder Wert Null) sein kann.

Wenn Bedingung Wahr ist, werden alle Anweisungen im Anweisungsblock ausgeführt,bis die Anweisung Wend erreicht wird. Die Programmsteuerung kehrt zur AnweisungWhile zurück und überprüft Bedingung erneut. Ist Bedingung weiterhin Wahr, wird derVorgang wiederholt. Ist sie nicht mehr Wahr, wird die Ausführung mit der Anweisungfortgesetzt, die nach der Anweisung Wend folgt.

B

V

Bild 6.4-6: Wiederho-lung mit nachfolgenderBedingungsprüfung

V1

V2

N

GB

Bild 6.4-7: Wiederho-lung ohne Bedingungs-prüfung, aber mit Ab-bruchanweisung

Page 602: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-62 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

While...Wend-Schleifen können in beliebig viele Ebenen verschachtelt werden. JedeAnweisung Wend gehört zur zuletzt aufgetretenen Anweisung While.

) Vorsicht Wir sollten keinesfalls in den Anweisungsteil einer While...Wend-Schleife von außen hineinspringen, ohne eine Anweisung While auszu-führen. Dies kann Laufzeitfehler oder Programmprobleme, die nur schwerzu finden sind, verursachen.

Die zusätzlich unter Visual Basic hinzugekommenen Anweisungen

Syntax 1

Do Do [{While | Until} Bedingung][Anweisungsblock]

[Exit Do][Anweisungsblock]

Loop Loop

Syntax 2

Do Do[Anweisungsblock]

[Exit Do][Anweisungsblock]

Loop Loop [{While | Until} Bedingung]

erlauben es, beide Varianten in einheitlicher Form zu definieren.

Anweisungen Do und Loop werden wiederholt, solange (While) oder bis (Until) dieBedingung wahr ist.

Eine Anweisung Exit Do, die nur innerhalb einer Do...Loop verwendet werdenkann, bietet eine weitere Möglichkeit, eine Do...Loop-Kontrollstruktur zu verlassen. Wirkönnen beliebig viele Anweisungen Exit Do an jeder beliebigen Stelle innerhalb vonDo...Loop einfügen. Exit Do wird oft zusammen mit der Auswertung einer Bedin-gung (z. B. If...Then) verwendet und übergibt die Steuerung an die erste Anweisung,die nach der Anweisung Loop folgt. Wenn Anweisungen Do...Loop verschachteltsind, wird die Steuerung an die Anweisung Do...Loop übergeben, die sich in derVerschachtelungsebene über der Schleife befindet, in der Exit Do verwendet wurde.

Es ist auch möglich mit Exit Sub bzw. Exit Function die Schleife und auch dieProzedur zu verlassen.

Eine Dauerschleife programmieren wir einfach mit Do While True ... Loop.

Bei der Zählschleife müssen wir uns normalerweise innerhalb des Schleifenrumpfes nichtmehr um die Steuervariable kümmern. Sie wiederholt eine Folge von Befehlen mehrmals.Die Anzahl der Wiederholungen ist dabei vor Eintritt in die Schleife festgelegt.

Page 603: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-63

For For Zähler = Startwert To Endwert [ Step Schrittgröße ][Anweisungsblock]

[ Exit For][Anweisungsblock]

Next Next [Zähler [, Zähler]]

Argument BeschreibungZähler Numerische Variable, die als Schleifenzähler verwendet wird. Diese

Variable darf weder ein Datenfeldelement noch ein Datensatzelementsein.

Startwert Anfangswert des Zählers.Endwert Endwert des Zählers.Schrittgröße Betrag, um den der Zähler bei jedem Schleifendurchlauf geändert

wird. Wenn wir keinen Wert für Step angeben, erhält Schrittgrößeden Standardwert 1.

Anweisungsblock Eine beliebige Anzahl von Anweisungen oder Methoden, die oft wieangegeben ausgeführt werden.

Der Wert von Step steuert die Schleifenausführung wie folgt:

Wert von Step Schleife wird ausgeführt, wennPositiv oder 0 Zähler <= EndwertNegativ Zähler >= Endwert

Nach dem Starten der Schleife und dem Ausführen aller Anweisungen in der Schleife wirdder Wert von Step zum Zähler addiert. Dann werden entweder die Anweisungen in derSchleife erneut ausgeführt (auf der Basis derselben Überprüfungen, die beim ersten Maldie Ausführung der Schleife bewirkten), oder die Schleife wird verlassen, und die Ausfüh-rung wird bei der Anweisung fortgesetzt, die der Anweisung Next folgt.

) Hinweis Das Ändern von Zähler während der Ausführung der Schleife erschwertdas Lesen von und die Fehlersuche in Programmen. Wir können aber ande-rerseits damit die Schleife vorzeitig abbrechen, wenn wir Zähler überEndwert hinaus setzen (natürlich in der richtigen Richtung). Besser istaber die Verwendung von Exit For . Das Verändern von Endwert hatdagegen keine Wirkung, da dieser vor Eintritt zwischengespeichert wird.

6.4.5 Rekursion

6.4.5.1 Grundlagen

In diesem Zusammenhang müssen wir auch die Rekursion betrachten, denn sie stelltebenfalls eine Wiederholung durch Selbstaufruf dar. In Access Basic ist ein solcherSelbstaufruf durchaus erlaubt, solange er den Programmstapel nicht zum Überlauf bringt.

Page 604: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-64 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Jeder Prozeduraufruf legt die Argumentliste, die Rücksprungadresse und die nichtstati-schen, lokalen Variablen auf dem Stapel ab. Wird eine Rekursion nicht rechtzeitig been-det, dann läuft dieser Stapel logischerweise über, da mit jedem Aufruf die genannten Da-ten auf den Stapel kommen.

In seiner klassischen Abhandlung „Algorithmen und Datenstrukturen“ (Teubner, Stuttgart)weist Nikolaus Wirth (der Erfinder von Pascal) darauf hin, daß wir auf rekursive Algorith-men verzichten können, wenn der rekursive Aufruf als erste oder als letzte Anweisung imProgramm auftritt. In den folgenden Beispielen werden wir dies näher untersuchen.

6.4.5.2 Beispiele und Aufgaben

Als Beispiel hierzu entwerfen wir eine Tabelle pfad, die die Verzeichnisnamen mehrererDatenträger enthält. Einen Pfad

\VERZ1\VERZ12

können wir als ein Wiederholungsfeld auffassen. Schließlich hat es alle Anzeichen dafür.Der Rückstrich \ ist das Trennzeichen zwischen den einzelnen Elementen. Die Ver-zeichnisse haben noch die Besonderheit, daß sie eine baumartige Hierarchie bilden.

Nehmen wir als Beispiel zweiDatenträgern mit den einge-zeichneten Pfaden.

Eingetragen in eine entspre-chende Tabelle ergibt sich z. B.folgendes Ergebnis

Grundsätzlich müssen wir noch entscheiden, ob der Standard-wert im Feld ppnr, das auf den Vorgänger zeigt 0 oder Nullsein soll. Rein wegen der besseren Erkennung der leeren Zellenist hier Null gewählt worden.

Für diese Tabelle wollen wir nun ein Formular entwickeln, das durch Positionierung aufdie P-Nr. in einem weiteren Feld den vollständigen Pfad mit dem durch P-Nr. ge-wählte Verzeichnis anzeigt.

Hierzu entwerfen wir ein einspaltiges Formular, das nur die aktuelle Pfadnummer anzeigt.In diesem Formular plazieren wir ein ungebundenes Feld zur Darstellung des Pfades (Bild6.4-8).

VERZ1

VERZ12VERZ11

VERZ2

VERZ22VERZ21

DIR1111 DIR1112

DIR111 DIR112 DIR113

DIR11 DIR12 DIR13

DIR1 DIR2 DIR3

P-Nr. Verzeichnis in Verz12 VERZ1 13 VERZ11 24 VERZ12 25 VERZ2 16 VERZ21 57 VERZ22 589 DIR1 8

10 DIR2 811 DIR3 812 DIR11 913 DIR12 914 DIR13 915 DIR111 1216 DIR112 1217 DIR1111 1518 DIR1112 15

Page 605: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-65

Um beim Anzeigen dieses Formulars und bei jedemSatzwechsel den vollständigen Pfad zu sehen, pro-grammieren wir die EreignisprozedurForm_Current , die bei jedem Datensatzwechselaufgerufen wird. In ihr öffnen wir die Tabelle mit ei-nem eigenen Datensatzzeiger, den wir nun schritt-weise durch die Tabelle laufen lassen, bis wir aufdas Wurzelverzeichnis treffen. Dieses realisieren wirrekursiv.

Die Ereignisprozedur ist noch konventionell

Sub Form_Current () Dim pf As String Dim db As Database Dim pfad As Recordset Dim ppnr As Long If Not IsNull(pnr) Then 'für Neueingabe Set db = dbengine.workspaces(0).databases(0) Set pfad = db.OpenRecordset("pfad", DB_OPEN_TABLE) pfad.Index = "PrimaryKey"' rekursive Suche pfad.Seek "=", pnr pf = pfad("pname") & "\" If Not IsNull(pfad.ppnr) Then ppnr = pfad("ppnr") Call pfadsuchen(pf, ppnr, pfad) End If formular_pfad1 = pf Else formular_pfad1 = Null End IfEnd Sub 'Form_Current

Wir fangen zuerst den Sonderfall ab, daß wir über das Tabellenende hinaus rutschen. Indiesem Fall ist das Feld für die Pfadanzeige leer. Andernfalls öffnen wir die Tabelle mitdem Primärschlüssel als laufenden Index. Dann suchen das aktuellen Verzeichnis. Jetztkönnen wir entscheiden, ob der Pfad dieses Verzeichnis enthalten soll oder nicht. Jenachdem füllen wir die Variable pf mit dem Verzeichnisnamen und einem nachlaufen-den Rückstrich. Wir könnten pf aber auch nur löschen. Da wir kein Tabellenfeld überdie Argumentenliste in die Suchprozedur übergeben können, erfolgt eine Zwischenspei-cherung. Nun rufen wir die eigentliche rekursive Suchfunktion pfadsuchen auf, der wirden bereits zusammengestellten Teilpfad, die Nummer des Vorgängerverzeichnisses unddie aktuelle Tabelle übergeben.

Die Prozedur pfadsuchen realisiert nun die eigentliche Rekursion.

Sub pfadsuchen (pf As String, pnr As Long, pfad As Recordset) Dim ppnr As Long pfad.Seek "=", pnr pf = pfad("pname") & "\" & pf If Not IsNull(pfad.ppnr) Then ppnr = pfad.ppnr Call pfadsuchen(pf, ppnr, pfad) End IfEnd Sub 'pfadsuchen

Bild 6.4-8: Formular Pfa dsuche

Page 606: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-66 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Wir suchen das Vorgängerverzeichnis, setzen es vorden Teilpfad und rufen die Prozedur erneut auf,wenn wir die Wurzel noch nicht erreicht haben.

Die Rekursion terminiert, wenn die Wurzel erreichtist.

Beim Durchblättern durch die Verzeichnisse erhaltenwir mit diesen beiden Prozeduren immer den richti-gen Pfad (Bild 6.4-9).

Nun kommen wir auf die Idee, die Rekursion durch eine Iteration zu ersetzen, denn deriterative Aufruf ist der letzte in der Prozedur pfadsuchen . Ergo müßte die Iterationleicht zur realisieren sein. Dies ist auch tatsächlich der Fall.

Sub Form_Current () Dim pf As String Dim db As Database Dim pfad As Recordset Dim ppnr As Long If Not IsNull(pnr) Then 'für Neueingabe Set db = dbengine.workspaces(0).databases(0) Set pfad = db.OpenRecordset("pfad", DB_OPEN_TABLE) pfad.Index = "PrimaryKey"' rekursive Suche pfad.Seek "=", pnr pf = pfad("pname") & "\" If Not IsNull(pfad.ppnr) Then ppnr = pfad("ppnr") Call pfadsuchen(pf, ppnr, pfad) End If formular_pfad1 = pf' iterative Suche pfad.Seek "=", pnr pf = "\" Do Until IsNull(pfad.ppnr) pf = "\" & pfad("pname") & pf pfad.Seek "=", pfad.ppnr Loop formular_pfad2 = pf pfad.Close Else formular_pfad1 = Null formular_pfad2 = Null End IfEnd Sub 'Form_Current

Die iterative Lösung hat neben der höheren Schnelligkeit den bestechenden Vorteil, daßsie nicht zu einem Stack-Überlauf führen kann. Diese Gefahr besteht zwar bei den auf 64Zeichen (+ 1 Rückstrich) begrenzten Pfadnamen nicht, könnte aber bei Einsatz der Pro-zedur in einer bereits tief verschachtelten Struktur zu Problemen führen. Wir werden da-her, so schön die Rekursion auch ist, i. a. auf sie verzichten.

�Aufgabe 6.4-1: Verzicht auf das Wurzelverzeichnis

Variieren Sie den obigen Entwurf so, daß auf das Speichern des leeren Wurzelverzeich-nisses verzichtet werden kann. Überlegen Sie ob dieses sinnvoll ist. Denken Sie dabei an

Bild 6.4-9: Pfad in rekursiver Dar-stellung

Page 607: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-67

die Dateien, die im Wurzelverzeichnis stehen können. Diese sind in einer weiteren Ta-belle gespeichert und müssen in irgendeiner Form mit dem Datenträger verknüpft wer-den. �

�Aufgabe 6.4-2: Programmieraufwand

Versuchen Sie nun einmal abzuschätzen (oder pro-bieren es sogar), welchen Aufwand Sie betreibenmüssen, wenn nun ein Anwender auf die Ideekommt, den Pfad in Bild 6.4-9 direkt in das Feld neueingeben bzw. zu ändern zu wollen. UntersuchenSie dabei den Fall, daß er ein Vorgängerverzeichnisändert. Was können wir dem Benutzer an dieserStelle eigentlich erlauben und was nicht? BeachtenSie, daß es sich um einen Hierarchiebaum handelt,d. h. an dem Vorgängerverzeichnis noch andereVerzeichnisse hängen können. Wie können Sie das Formular abändern, daß nur das ak-tuelle Verzeichnis änderbar ist (Bild 6.4-10)? �

�Aufgabe 6.4-3: Neues Verzeichnis

Sie werden bemerken, daß die standardmäßige Neueingabe eigentlich nur für die Wurzelrichtig ist. Hier darf gar kein Name eingegeben werden. Wie können Sie es erreichen, daßdie Wurzel mit Sicherheit leer ist, die weiteren Verzeichnisse aber mit Sicherheit einenNamen enthalten. Wie realisieren Sie die Aufgabe, ein neues Verzeichnis an eine beliebi-ge Stelle des Baumes einzufügen? Beziehen Sie sich dabei auf den sichtbaren Pfad (Bild6.4-10). �

�Aufgabe 6.4-4: Baum durchlaufen

Ergänzen Sie nun das Programm so,daß Sie den Baum zumindest rück-wärts durchlaufen können (Bild 6.4-10). Vorwärts ist dies nicht eindeutig.Zu einer schönen grafischen Dar-stellung des Baumes ist ein erhebli-cher Programmieraufwand nötig. �

�Aufgabe 6.4-5: Tabellenform

Irgendwann wollen wir die Pfade als Liste eines Datenträgers anzeigen und ggf. verän-dern lassen. Rufen Sie Bild 6.4-10 doch einmal in Datenblattform auf. Was fällt Ihnen auf?Wie können wir dafür sorgen, daß sich in jeder Zeile der richtige Pfad ergibt? �

6.4.5.3 Lösungen

Lösung zur Ø Aufgabe 6.4-1: Verzicht auf das Wurzelverzeichnis

Theoretisch können wir auf die Abspeicherung des Wurzelverzeichnisses verzichten. Diesbedeutet aber gleichzeitig, daß alle Referenzen auf das Wurzelverzeichnis ein Sonderfalldarstellen.

Bild 6.4-10: Korrektur des Ver-zeichnisses

Bild 6.4-11: Baum durchlaufen

Page 608: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-68 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Bei der Realisation einer allge-meinen Datenträgerverwaltung fürDisketten, CD-ROMs usw. hättenalle Dateien in den Wurzelpfadenkeine Referenzen zu den Pfaden,was ganz erhebliche Problemenach sich ziehen würde. Schonaus diesem Grund muß ein leeresVerzeichnis in die Datei gespei-chert werden, denn schließlichhandelt es sich um ein vollwerti-ges Verzeichnis, auch wenn eszufällig keinen Namen hat (Bild6.4-12).

Wir müßten in der Dateitabelleunterscheiden, ob der Verbindungsschlüssel auf die Pfad- oder die Datenträgertabellezeigt. Alle automatischen Verarbeitungsfunktionen von Access würden streiken usw.

Lösung zur Bild 6.4-10: Korrektur des Verzeichnisses

�Aufgabe 6.4-2: Programmieraufwand

Sicher sehen Sie sofort, daß durch mühsamen Zeichenkettenvergleich festgestellt werdenmuß, welches Verzeichnis bzw. welche Verzeichnisse denn verändert wurde. Diese müs-sen gesucht und geändert werden. Dabei wird es auch für alle anderen Verzeichnisse imTeilbaum mit geändert. Ob der Benutzer dieses wollte ist eine andere Frage. Es könnte jaauch sein, daß der Benutzer ein Verzeichnis in einen anderen Baum umgehängt hat. Wiesoll er das dem Programm beibringen?

Wir sollten daher dem Benutzer folgende Funktionen erlauben

− Änderung eines Verzeichnisnamens in jeder Hierarchiestufe (in jedem Knoten) mit zu-gehöriger Änderung des Pfades für alle Nachkommen;

− Einhängen eines oder mehrerer Verzeichnisse am Knoten parallel zu den bestehendenVerzeichnissen;

− Kontrolle, ob es auf dieser Ebene nicht zu doppelten Namen kommt;− Verbot der Eingabe eines Wurzelverzeichnisses. Dieses muß automatisch mit jedem

neuen Datenträger angelegt werden. Es kann dann nicht mehr verändert oder gelöschtwerden, es sei denn, der Datenträger wird gelöscht;

− Verbot, einen inneren Knoten zu löschen. Abweichend davon könnte man das Löscheneines ganzen Teilbaumes erlauben.

Bild 6.4-12: Entwurf einer Datenträgerverwaltung

Page 609: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-69

Vielleicht fällt Ihnen noch der eine oder andere Punkt hierzu ein.

Die ersten Forderungen können wir durch ein zusätzliches Eingabefeld befriedigen. Wirdin dieses eine Name eingegeben, dann wird er als Verzeichnis an den laufenden Knotenangehängt. Das Layout (mit der Schaltfläche der nächsten Aufgabe) ist in Bild 6.4-11 dar-gestellt. Zusätzlich programmieren wir folgendes. In den allgemeinen Teil nehmen wireine Variable sowie zwei Konstanten auf

Dim pnr_akt As Long

Const weiss = 16777215Const grau = 12632256

Sobald wir in das Eingabefeld anspringen, wollen wir es optisch herausheben

Sub formular_neuerpfad_GotFocus () Me![formular_neuerpfad].BackColor = weiss Me![formular_pname].BackColor = grauEnd Sub 'formular_neuerpfad_GotFocus

und bei der ersten Eingabe das Trägerverzeichnis abblenden

Sub formular_neuerpfad_Change () Me![formular_pname].Enabled = FalseEnd Sub 'formular_neuerpfad_Change

Nach der Verarbeitung müssen wir dieses wieder rückgängig machen

Sub formular_neuerpfad_LostFocus () Me![formular_neuerpfad].BackColor = grau Me![formular_pname].BackColor = weissEnd Sub

Auch an den Abbruch der Eingabe müssen wir denken

Sub formular_neuerpfad_Exit (Cancel As Integer) If formular_neuerpfad = "" Then formular_neuerpfad.BackColor = grau formular_pname.Enabled = True formular_pname.BackColor = weiss formular_pname.SetFocus End IfEnd Sub 'formular_neuerpfad_Exit

Die eigentliche Verarbeitung erfolgt nach der Bestätigung durch den Benutzer

Sub formular_neuerpfad_AfterUpdate ()'eingeben eines neuen Pfades Dim pfad As Recordset Dim ppnr As Long On Error GoTo formular_neuerpfad_AfterUpdate_fehler: Set pfad = Forms![Pfadneueingabe].RecordsetClone pfad.AddNew pfad("pname") = formular_neuerpfad pfad("ppnr") = pnr_akt pfad.Update DoCmd GoToRecord , , A_LAST 'und anzeigen formular_pname.Enabled = True formular_pname.SetFocus

Page 610: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.4 Steuerstrukturen © Prof. Dr.-Ing. H.-J Scheibl

Seite: 6-70 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

formular_pname.BackColor = weiss formular_neuerpfad = ""formular_neuerpfad_AfterUpdate_ende: Exit Subformular_neuerpfad_AfterUpdate_fehler: Select Case Err Case 3022 MsgBox "Doppeltes Verzeichnis " & formular_pfad & form ular_pname + "\" & formular_neuerpfad, 48, "Fehler" formular_neuerpfad.BackColor = grau formular_neuerpfad = "" formular_pname.Enabled = True formular_pname.BackColor = weiss Resume formular_neuerpfad_AfterUpdate_ende Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Fehler" Resume formular_neuerpfad_AfterUpdate_ende End SelectEnd Sub 'formular_neuerpfad_AfterUpdate

Hier sollten wir auf folgende Anweisungen eingehen

Set pfad = Forms![Pfadneueingabe].RecordsetClone

Mit dieser Anweisung legen wir eine Recordsetkopie des aktuellen Formulars an. Wirkönnen dies ganz gut mit einem zweiten Tabellencursor vergleichen, der unabhängig vomaktuellen Cursor operiert. In die Tabelle tragen wir nun den neuen Datensatz ein und po-sitionieren unser Formular mit

DoCmd GoToRecord , , A_LAST

auf ihn. Hieran erkennen wir, daß es sich um eine einzige Tabelle handelt, die wir bear-beiten. Alle Änderungen werden nämlich sofort aktiv.

Eine ganze Reihe von Anweisungen benötigen wir für die optimale Bildschirmsteuerung.Schließlich sollen nur die Felder bearbeitbar sein, bei denen dies ohne Fehler möglich ist.

Lösung zur Bild 6.4-10: Korrektur des Verzeichnisses

�Aufgabe 6.4-2: Programmieraufwand

Dies ist eine nette Aufgabe. Zuerst ergänzen wir eine Schaltfläche, die wir mit folgendemProgramm hinterlegen

Sub sfpfadzurueck_Click ()'eine Stufe im Pfad zurück If formular_ppnr <> 0 And formular_pname <> "" Then formular_pnr.Enabled = True formular_pnr.SetFocus

Page 611: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-71

DoCmd FindRecord formular_ppnr formular_pname.SetFocus formular_pnr.Enabled = False End IfEnd Sub 'sfpfadzurueck_Click

Lösung zur Ø Aufgabe 6.4-3: Neues Verzeichnis

Rufen wir das Formular in Tabellenform auf, dann sehen wir,daß das berechnete Pfadfeld sich immer in allen Zeilen än-dert, wenn wir den Datensatzzeiger verschieben.

Die Anzeige in der Spalte Pfad ist also nicht nur verwirrendsondern auch falsch. Wie können wir nun dafür sorgen, daß inTabellenform die richtige Information erscheint?

6.5 Programmablauf

Für das Programmieren ist es natürlich wichtig zu wissen, was Access eigentlich selbsttut. Genau genommen handelt es sich um Ereignisse, die auf Wunsch nach außen sicht-bar werden. Bei den Steuerelementen ist dies weitgehend offensichtlich. Problematisch istdagegen das Formular selbst.

Access kennt bestimmte Ereignisse, die die Ausführung eines Makros oder einer Ereig-nisprozedur veranlassen können. Solche Ereignisse sind z. B. das Öffnen eines Formu-lars. Um ein Makro oder eine Ereignisprozedur beim Eintreten eines Ereignisses auszu-führen, stellen wir die Eigenschaft, die mit diesem Ereignis verknüpft ist, auf den Makro-namen oder auf [Ereignisprozedur] ein.

6.5.1 Öffnen eines Formulars

Wenn wir den Aufruf eines Formulars beim ersten Mal verfolgen, dann ergeben sich fol-gende Schritte

Ereignis Ereigniseigenschaft FORM AnmerkungÖffnen BeimÖffnen _OPEN Wenn wir das Formular öffnen, je-

doch bevor der erste Datensatz an-gezeigt wird.

Laden BeiLaden _LOAD Wenn wir das Formular öffnen unddessen Datensätze angezeigt wer-den.

Größenänderung BeiGrößenänderung _RESIZE Wenn das Formular erstmals ange-zeigt wird. Dieses Ereignis tritt auchdann ein, wenn die Größe des For-mulars geändert wurde.

Aktivierung BeiAktivierung _ACTIVATE Wenn das Formular zum aktivenFenster wird.

P-Nr.: Pfad: Verzeichnis:1 \DIR1\2 \DIR1\ VERZ13 \DIR1\ VERZ115 \DIR1\ VERZ26 \DIR1\ VERZ217 \DIR1\ VERZ228 \DIR1\9 \DIR1\ DIR110 \DIR1\ DIR211 \DIR1\ DIR312 \DIR1\ DIR1113 \DIR1\ DIR1214 \DIR1\ DIR13

Page 612: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.5 Programmablauf Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-72 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Ereignis Ereigniseigenschaft FORM AnmerkungFokuserhalt _GOTFOCUSWenn alle Steuerelemente eines

Formulars entweder deaktiviert oderausgeblendet sind, erhält das For-mular den Fokus, sonst nicht.

Anzeigen BeimAnzeigen _CURRENT Wenn wir erstmals das Formular öff-nen und seine Datensätze angezeigtwerden, jedoch bevor der erste Da-tensatz zum aktuellen Datensatzwird. Dieses Ereignis tritt auch dannein, wenn der Fokus einen Datensatzverläßt und sich zu einem anderenbewegt.

Fokusverlust BeiFokusverlust _LOSTFOCUS Wenn das erste Steuerelement imFormular aktiviert wird.

6.5.2 Schließen eines Formulars

Wenn wir ein Formular schließen, so geschieht folgendes

Ereignis Ereigniseigenschaft FORM AnmerkungEntladen BeiEntladen _UNLOAD Wenn das Formular geschlossen

ist und seine Datensätze entladensind, jedoch bevor das Formularvom Bildschirm gelöscht wird.

Fokusverlust _LOSTFOCUS Wenn das Formular keine sichtba-ren und aktivierten Steuerele-mente enthält.

Deaktivierung BeiDeaktivierung _DEACTIVATE Wenn das Formular geschlossenwird. Dieses Ereignis tritt auchein, wenn wir einem anderenWindows oder Access Fensterwechseln.

Schließen BeimSchließen _CLOSE Wenn das Formular geschlossenund vom Bildschirm gelöscht wird.

6.5.3 Formularwechsel

Wenn wir von einem geöffneten Formular zu einem anderen wechseln, tritt das EreignisDeaktivierung für das erste Formular und das Ereignis Aktivierung für das zweiteFormular ein. Enthalten die Formulare keine sichtbaren und aktivierten Steuerelemente,tritt jeweils vorher für das erste Formular das Ereignis Fokusverlust und für daszweite Formular das Ereignis Fokuserhalt ein.

Das Ereignis Deaktivierung tritt für ein Formular auch ein, wenn wir von dem For-mular zu einem anderen Fenster in Access wechseln. Dieses Ereignis tritt jedoch nichtein, wenn wir zu einem Dialogfeld, einem Formular, dessen Eigenschaft PopUp auf Jaeingestellt ist, oder zu einem Fenster in einer anderen Anwendung wechseln.

Page 613: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-73

6.5.4 Zeitgeber

Das Ereignis Zeitgeber tritt für ein Formular in regelmäßigen Abständen ein. Die Län-ge der Abstände können wir in der Einstellung der Eigenschaft Zeitgeberintervalldes Formulars angeben.

6.5.5 Fehler

Das Ereignis Fehler tritt ein Formular ein, wenn ein Laufzeitfehler in Access oder in derJet Datenbank-Engine auftritt, während das Formular den Fokus besitzt. Dieses Ereignistritt nicht ein, wenn in Access Basic ein Laufzeitfehler auftritt.

6.5.6 Arbeiten mit den Daten eines Formulars

Ereignisse für Steuerelemente und Datensätze treten auf, wenn wir uns im Formular voneinem zum anderen Steuerelement bewegen und Daten ändern.

6.5.6.1 Formulare ohne Unterformulare

Wenn wir z. B. ein Formular erstmals öffnen, treten die folgenden Ereignisse in der dar-gestellten Reihenfolge ein:

1. Öffnen für das Formular2. Laden für das Formular3. Größenänderung für das Formular4. Aktivierung für das Formular5. Anzeigen für den ersten Datensatz im Formular6. Hingehen für das erste Steuerelement im Formular7. Fokuserhalt für das erste Steuerelement im Formular

Entsprechend treten, wenn wir ein Formular schließen, die folgenden Ereignisse ein:

1. Verlassen für das Steuerelement, das den Fokus besitzt2. Fokusverlust für das Steuerelement, das den Fokus besitzt3. Entladen für das Formular4. Deaktivierung für das Formular5. Schließen für das Formular

Wenn wir Daten in einem Steuerelement geändert haben, treten die EreignisseVorAktualisierung und NachAktualisierung sowohl für das Steuerelement alsauch für den Datensatz ein, bevor die Ereignisse Verlassen und Fokusverlust fürdas Steuerelement sowie Entladen, Deaktivierung und Schließen für dasFormular eintreten.

Page 614: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.5 Programmablauf Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-74 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

6.5.6.2 Formulare mit Unterformularen

Beim Öffnen eines Formulars, das ein Unterformular enthält, wird zunächst das Unterfor-mular mit seinen Datensätzen geladen und danach erst das Hauptformular. Infolgedessentreten die Ereignisse für das Unterformular und seine Datensätze (wie z. B. Öffnen,Anzeigen, Hingehen und Fokuserhalt ) vor den Ereignissen des Formulars ein.Das Ereignis Aktivierung tritt jedoch nicht für Unterformulare ein, so daß das Öffneneines Formulars, das ein Unterformular enthält, kein Ereignis Aktivierung für dasUnterformular auslöst (sondern nur ein Ereignis Aktivierung für das Formular).

Dementsprechend werden beim Schließen eines Formulars, das ein Unterformular ent-hält, das Unterformular und seine Datensätze nach dem Formular entladen. Für Unter-formulare tritt auch kein Ereignis Deaktivierung ein, so daß das Schließen einesFormulars, das ein Unterformular enthält, kein Ereignis Deaktivierung für das Unter-formular auslöst (sondern nur ein Ereignis Deaktivierung für das Formular). Die Er-eignisse für die Steuerelemente, das Formular und das Unterformular treten in der fol-genden Reihenfolge ein:

1. Ereignisse für die Steuerelemente des Unterformulars (wie z. B. Verlassenund Fokusverlust )

2. Ereignisse für die Steuerelemente des Formulars (einschließlich des Unterfor-mular-Steuerelements)

3. Ereignisse für das Formular (wie z. B. Deaktivierung und Schließen )4. Ereignisse für das Unterformular

Anmerkungen

− Wenn unser Makro oder unsere Ereignisprozedur eine der AktionenGeheZuSteuerelement oder GeheZuDatensatz als Reaktion auf das EreignisÖffnen ausführt, tritt das Ereignis Anzeigen ein.

− Das Ereignis Anzeigen tritt ebenfalls ein, wenn wir für die zugrundeliegende Tabelleoder Abfrage eines Formulars entweder die Anzeige aktualisieren oder die Daten ak-tualisieren, wenn wir z. B. aus dem Menü Datensätze den Befehl Alle Date n-sätze anzeigen wählen oder die Aktion AktualisierenDaten in einem Makrobzw. die Methode Requery in Access Basic-Code verwenden.

− Das Ereignis Öffnen tritt nicht ein, wenn wir ein Formular öffnen, das bereits geöffnetist. Dies kann geschehen, wenn wir beispielsweise zu dem Formular von einem ande-ren Access-Fenster aus wechseln oder wenn wir die Aktion ÖffnenFormular in ei-nem Makro verwenden, um das geöffnete Formular im Vordergrund anzuzeigen.

− Beim Öffnen eines Formulars führt Access zunächst die zugrundeliegende Abfrage für

das Formular aus und erst dann das Makro oder die Ereignisprozedur für das EreignisÖffnen.

Bei der Fehlersuche müssen wir beachten, daß so einige Ereignisse ungewollt auftretenoder nicht auftreten. So tritt z. B. das Ereignis Aktivierung auch auf, wenn wir vomDebugfenster in das Formular wechseln. Haben wir einen Haltepunkt in der zugehörigenEreignisprozedur Form_Activate , dann hält das Programm sofort wieder an. Wir be-finden uns in einer Dauerschleife, die wir nur durch Löschen des Haltepunktes verlassenkönnen.

Page 615: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-75

6.5.7 Reihenfolge der Ereignisse für Steuerelemente in Formularen

Ereignisse treten für Steuerelemente in Formularen ein, wenn der Benutzer den Fokus zueinem Steuerelement bewegen, und wenn der Benutzer in einem Steuerelement Datenändern und aktualisieren.

6.5.7.1 Bewegen des Fokus zu einem Steuerelement

Wenn der Benutzer den Fokus zu einem Steuerelement in einem Formular bewegt, indemer z. B. ein Formular öffnet, das ein oder mehrere aktive Steuerelement enthält, oder in-dem er zu einem anderen Steuerelement auf diesem Formular geht, treten folgende Er-eignisse in der angegebenen Reihenfolge ein:

HingehenFokuserhalt

Das Hingehen ist ein zusätzliches Ereignis für Steuerelemente. Es tritt nicht auf, wennein Formular den Fokus erhält.

Wenn der Benutzer ein Formular öffnet, treten diese Ereignisse nach den Ereignissenauf, die dem Öffnen des Formulars zugeordnet sind, also:

Formular ÖffnenAktivierungAnzeigen

Steuerelement HingehenFokuserhalt

6.5.7.2 Bewegen des Fokus von einem Steuerelement weg

Wenn der Fokus ein Steuerelement in einem Formular verläßt (durch Schließen des For-mulars oder durch Wechsel auf ein anderes Formular bzw. auf ein anderes Steuer-element auf demselben Formular), treten folgende Ereignisse ein:

VerlassenFokusverlust

Wenn der Benutzer ein Formular schließt, treten die Ereignisse Verlassen und Fokusver-lust vor den Ereignissen ein, die dem Schließen des Formulars zugeordnet sind, also:

Steuerelement VerlassenFokusverlust

Formular EntladenDeaktivierungSchließen

Page 616: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.5 Programmablauf Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-76 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

6.5.7.3 Ändern und Aktualisieren von Daten in einem Steuerelement

Wenn der Benutzer in einem Steuerelement auf einem Formular Daten eingibt oder än-dert und den Fokus dann zu einem anderen Steuerelement bewegen, treten die folgen-den Ereignisse ein:

VorAktualisierungNachAktualisierungVerlassenFokusverlust

Wenn der Benutzer den Text in einem Textfeld oder im Textfeldteil eines Kombinations-feldes ändert, tritt das Ereignis Änderung ein. Es tritt immer dann ein, wenn sich derInhalt des Steuerelements ändert, und zwar jeweils bevor der Benutzer zu einem anderenSteuerelement oder Datensatz gehen (und somit bevor die EreignisseVorAktualisierung und NachAktualisierung eintreten). Die folgende Sequenzvon Ereignissen tritt für jede Taste ein, die der Benutzer in einem Textfeld oder im Text-feldteil eines Kombinationsfeldes drückt:

TasteAbTasteÄnderungTasteAuf

Das Ereignis NichtInListe tritt ein, wenn der Benutzer in ein Kombinationsfeld einenWert eingibt, der nicht in der Kombinationsfeldliste steht, und danach versuchen, zu ei-nem anderen Steuerelement oder Datensatz zu gehen. Es tritt nach den Tastaturereig-nissen und dem Ereignis Änderung für das Kombinationsfeld ein, jedoch vor sonstigenSteuerelement- oder Formularereignissen. Ist die Eigenschaft Nur Listeneinträgedes Kombinationsfelds auf Ja eingestellt, tritt unmittelbar nach dem EreignisNichtInListe das Ereignis Fehler für das Formular ein:

TasteAbTasteÄnderungTasteAufNichtInListeFehler

Bewegungen des Fokus zwischen Haupt- und Unterformular

Wenn der Benutzer mit der Maus den Fokus von einem Steuerelement des Hauptformu-lars auf ein Steuerelement eines Unterformulars setzt, treten die folgenden Ereignisseein:

Hauptformular-Steuerelement Verlassen (Exit)Fokusverlust ( LostFocus )

Unterformular-Steuerelement Hingehen ( Enter )Verlassen (Exit)BearbeitungFokusverlust ( LostFocus )

Page 617: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-77

neues Uf-Steuerelement Hingehen (Enter)Fokuserhalt (GotFocus)

Wenn der Fokus auf dem Unterformular bereits auf das Steuerelement gesetzt war, zudem der Benutzer sich bewegen, treten die Ereignisse Hingehen (Enter) und Fo-kuserhalt (GotFocus) nicht ein, wohl aber das Ereignis Hingehen (Enter) fürdas Steuerelement im Unterformular.

Wenn der Benutzer den Fokus von einem Steuerelement in einem Unterformular auf einSteuerelement im Hauptformular bewegen, treten die Ereignisse Verlassen (Exit)und Fokusverlust (LostFocus) für das Steuerelement im Unterformular nicht ein. Estreten nur das Ereignis Verlassen (Exit) für das Steuerelement im Unterformularund die Ereignisse Hingehen (Enter) und Fokuserhalt (GotFocus) für dasSteuerelement im Hauptformular ein.

Ein Wechsel des Fokus ist immer noch die Tasten- bzw. Mausereignissen gepaart.

6.5.8 Reihenfolge der Ereignisse für Tastenanschläge und Mausklicks

Tastaturereignisse treten für Formulare und Steuerelemente ein, wenn wir Tasten drük-ken oder Tastenanschläge senden, solange das Formular oder Steuerelement den Fokushat. Mausereignisse treten für Formulare, Formularbereiche und Steuerelemente aufFormularen ein, wenn wir die Maustasten drücken, solange sich der Mauszeiger auf ei-nem Formular, Bereich oder Steuerelement befindet, oder wenn Sie den Mauszeiger überein Formular, einen Bereich oder ein Steuerelement bewegen.

6.5.8.1 Tastaturereignisse

Wenn wir eine Taste drücken und wieder loslassen, solange der Fokus auf einem Steue-relement des Formulars liegt (oder Sie zum Senden eines Tastenanschlags die AktionTastaturbefehle oder die Anweisung SendKeys verwenden), tritt die folgende Se-quenz von Ereignissen ein:

TasteAbTasteTasteAuf

Wenn Sie eine Taste drücken oder einen Tastenanschlag aus dem ANSI-Zeichensatzsenden, treten alle drei Ereignisse auf. Gehört die Taste nicht zum ANSI-Zeichensatz, sofehlt das Ereignis Taste. Dies gilt z. B. für alle Steuertasten.

Wenn das Drücken einer Taste ein anderes Ereignis für ein Steuerelement auslöst, trittdieses andere Ereignis nach dem Ereignis Taste, jedoch vor dem Ereignis TasteAufein. Ändert ein Tastenanschlag z. B. den Text in einem Textfeld, wodurch das EreignisÄnderung ausgelöst wird, tritt die folgende Sequenz von Ereignissen ein:

TasteAbTaste

Page 618: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.5 Programmablauf Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-78 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

ÄnderungTasteAuf

Bewirkt ein Tastenanschlag (z. B. mit � ) eine Verschiebung des Fokus von einemSteuerelement zu einem anderen, tritt für das erste Steuerelement das EreignisTasteAb ein, für das zweite Steuerelement treten die Ereignisse Taste undTasteAuf ein. Wenn wir z. B. in einem Steuerelement Daten ändern und danach �drücken, um zum nächsten Steuerelement zu gehen, tritt die folgende Sequenz von Er-eignissen ein:

Erstes Steuerelement TasteAbVorAktualisierungNachAktualisierungVerlassenFokusverlust

Zweites Steuerelement HingehenFokuserhaltTasteTasteAuf

6.5.8.2 Mausereignisse

Wenn wir eine Maustaste drücken und wieder loslassen, solange sich der Mauszeiger aufdem Steuerelement eines Formulars befindet, tritt für das Steuerelement die folgendeSequenz von Ereignissen ein:

MaustasteAbMaustasteAufKlicken

Liegt der Fokus auf einem Steuerelement und klicken wir auf ein anderes Steuerelement,um den Fokus auf dieses zweite Steuerelement zu setzen, tritt die folgende Sequenz vonEreignissen ein:

Erstes Steuerelement VerlassenFokusverlust

Zweites Steuerelement HingehenFokuserhaltMaustasteAbMaustasteAufKlicken

Wenn wir zu einem anderen Datensatz gehen und dann auf ein Steuerelement klicken,tritt vor dem Ereignis Hingehen für das Steuerelement das Ereignis Anzeigen für dasFormular ein.

Durch das Doppelklicken auf ein Steuerelement treten die beiden Ereignisse Doppel-klicken und Klicken ein. Wenn wir z. B. auf ein Steuerelement doppelklicken, bei

Page 619: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-79

dem es sich nicht um eine Befehlsschaltfläche handelt, tritt für dieses Steuerelement diefolgende Sequenz von Ereignissen ein:

MaustasteAbMaustasteAufKlickenDoppelklickenMaustasteAuf

Wenn wir auf eine Befehlsschaltfläche doppelklicken, tritt nach dem zweiten EreignisMaustasteAuf ein zweites Ereignis Klicken ein.

Das Ereignis Mausbewegung für ein Formular, einen Bereich oder ein Steuerelementtritt ein, wenn Sie den Mauszeiger über das Formular, den Bereich oder das Steuerele-ment bewegen. Dieses Ereignis ist unabhängig von den anderen Mausereignissen.

6.6 Verknüpfte Dateien

6.6.1 Grundlagen

Haben wir unsere Anwendung fertig, dann wollen wir sie u. U. weiterreichen. Dies sollaber ohne Testdaten usw. erfolgen. Also trennen wir Daten und Funktionen, wie bereitsbeschrieben.

Bei dieser Trennung können wir folgende Probleme feststellen. Diese Aufzählung ist si-cher nicht vollständig, da sie nur experimentell aufgestellt wurde.

6.6.2 Bearbeitung verknüpfter Tabellen

Das Öffnen einer Tabelle führen wir standardmäßig mit

Set datvw = DBEngine.Workspaces(0).Databases(0) Set intern = datvw.OpenRecordset("extern", DB_OPEN_TABLE)

durch. Dies führt bei verknüpften Tabellen zur Fehlermeldung Illegal Operation.Diese Fehlermeldung beseitigen wir, indem wir die Tabelle mit DB_OPEN_DYNASET alsDynaset eröffnen.

Nun treten aber andere Fehlermeldungen auf, so können wir in einer solchen Tabellenicht mehr suchen. Ein Blick in die Dokumentation lehrt uns, daß nicht mehr alle Metho-den zur Verfügung stehen

Methode Dynaset Snapshot Tabelle (Table)AddNew X XClone X X* XClose X X XDelete X XEdit X XFillCache XFindFirst X X*

Page 620: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.6 Verknüpfte Dateien © Prof. Dr.-Ing. H.-J-Scheibl

Seite: 6-80 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

FindLast X X*FindNext X X*FindPrevious X X*Move X X* XMoveFirst X X* XMoveLast X X XMoveNext X X XMovePrevious X X* XOpenRecordset X X* XRequery X XSeek XUpdate X X

Ähnliches gilt für die Eigenschaften

Eigenschaft Dynaset Snapshot Tabelle (Table)BOF Schreibgeschützt Schreibgeschützt Schreibgeschützt

Bookmark Lesen/schreiben Lesen/schreiben* Lesen/schreiben

Bookmarkable Schreibgeschützt Schreibgeschützt* Schreibgeschützt

CacheSize Lesen/schreiben

CacheStart Lesen/schreiben

DateCreated Schreibgeschützt

EOF Schreibgeschützt Schreibgeschützt Schreibgeschützt

Filter Lesen/schreiben Lesen/schreiben

Index Lesen/schreiben

LastModified Schreibgeschützt Schreibgeschützt

LastUpdated Schreibgeschützt

LockEdits Lesen/schreiben Lesen/schreiben

Name Schreibgeschützt Schreibgeschützt Schreibgeschützt

NoMatch Schreibgeschützt Schreibgeschützt Schreibgeschützt

PercentPosition Lesen/schreiben Lesen/schreiben* Lesen/schreiben

RecordCount Schreibgeschützt Schreibgeschützt Schreibgeschützt

Restartable Schreibgeschützt Schreibgeschützt False

Sort Lesen/schreiben Lesen/schreiben

Transactions Schreibgeschützt False Schreibgeschützt

Type Schreibgeschützt Schreibgeschützt Schreibgeschützt

Updatable Schreibgeschützt False Schreibgeschützt

ValidationRule Schreibgeschützt Schreibgeschützt Schreibgeschützt

ValidationText Schreibgeschützt Schreibgeschützt Schreibgeschützt

*) Recordset-Objekte vom Typ Snapshot, die durch Verwendung der Methode Ope n-Recordset mit dem Argument Option DB_FORWARDONLY erstellt wurden, unterstüt-zen die durch ein Sternchen (*) gekennzeichneten Methoden und Eigenschaften nicht.Außerdem funktioniert die Methode Move nur bei Vorwärtsbewegungen, die keinBookmark-Offset verwenden.

Wir können also keinen Index setzen und in diesem schnell suchen.

In der Erläuterung für die Methode Seek finden wir

Page 621: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-81

Sie können die Methode Seek nicht auf eine eingebundene Tabelle an-wenden, da derartige Tabellen als Recordset-Objekte vom Typ Dynasetgeöffnet werden müssen und solche Objekte die Methode Seek nicht un-terstützen. Wenn Sie allerdings mit der Methode OpenDatabase eine in-stallierbare ISAM-Datenbank direkt öffnen, können Sie die Methode Seekauf Tabellen in dieser Datenbank anwenden.

Offensichtlich können wir zwar auf die direkt gekoppelte Datenbank zugreifen. Verbunde-ne Tabellen müssen wir aber gesondert eröffnen. Hierzu müssen wir zuerst einen neuenArbeitsbereich anlegen. Dazu benötigen wir einige Variablen

Dim ab1 As WorkSpace 'für neuen ArbeitsbereichDim db1 As Database 'für die DateiDim stw As Recordset 'für die 1. TabelleDim thesaurus As Recordset 'für die 2. TabelleDim benname As String 'für die automatische Benutzererkennung

benname = DBEngine.Workspaces(0).UserName 'Benutzernamen abfragen Set ab1 = DBEngine.CreateWorkspace("Zwischen", benname, "") 'neuer

Arbeitsb. DBEngine.Workspaces.Append ab1 'anlegen und einhängen Set db1 = ab1.OpenDatabase(DBBANK) 'Datenbank und Tabellen

öffnen Set thesaurus = db1.OpenRecordset("thesaurus", DB_OPEN_TABLE) Set stw = db1.OpenRecordset(stwdatei, DB_OPEN_TABLE)

Jetzt können wir die Tabellen wie gewohnt benutzen. Am Ende des Prozedur geben wirdie Bereiche wieder frei mit

stw.Close thesaurus.Close db1.Close ab1.Close

6.7 Tips und Tricks zum Programmieren

In diesem Kapitel sollen einige Tips und Tricks zur schnellen Referenz zusammengefaßtwerden. Hierbei handelt es sich um beispielhafte Programmfragmente, die aus dem zu-rückliegenden Text stammen.

6.7.1 Variable mit dem Wert eines Tabellenfeldes füllen

In folgendem Programmfragment wollen wir den Inhalt eines bestimmten Tabellenfeldesin eine Variable einlesen:

Sub Form_Current () 'irgendeine EreignisprozedurDim pf As String 'die Variable deklarierenDim db As DATABASE 'Zeiger auf die Datenbank deklarierenDim pfad As Recordset 'Zeiger auf die Tabelle Tabelle deklarieren Set db = DBEngine.Workspaces(0).Databases(0) 'Zeiger instantiieren Set pfad = db.OpenRecordset("pfad", DB_OPEN_TABLE)'Zeiger auf Tabelle inst. pfad.Index = "PrimaryKey" 'Index für die Tabelle festlegen pfad.Seek "=", pnr 'Datensatz suchen On Error Goto Form_Current_Fehler 'hier eigentlich überflüssig, nur zur Demo pf = pfad("pname") & "\" 'Feld einlesen

Page 622: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-82 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

... Goto EndeForm_Current_Fehler: pf = "" ... 'weitere Rettungsaktionen Resume NextEnde: ...End Sub 'Form_Current

Im vorliegenden Beispiel ist der Zeiger db auf die Datenbank über eine vollständig qua-lifizierte Anweisung instantiiert worden, d. h. über das DBEngine- Objekt, das als obersteEbene der Datenzugriffsobjekte das Microsoft Jet-Datenbankmodul repräsentiert. Diesesist vordefiniert. Wir können kein weiteres Objekt anlegen. Es bearbeitet aber möglicher-weise eine Reihe von Datenbanken, Gruppen oder Benutzer, die in der Auflistung Work-spaces (Plural) verwaltet werden. Über den Index (0) greifen wir auf die erste Work-space (Singular) zu. In der Workspace wiederum suchen wir in der Auflistung Dat a-bases (Plural) über den Index (0) die erste Database (Singular). Da Access immermit mindestens einer Datenbank geöffnet wird, existiert dieser Zugriff stets. Über dieFunktion CurrentDb geht es etwas einfacher. Das nächste Beispiel zeigt diese Mög-lichkeit sowie das Öffnen einer zweiten Datenbank

Dim dbdskvw As Database, dbfh As DatabaseSet dbdskvw = CurrentDb 'die gerade im Datenbankfenster geöffnete DBSet dbfh = DBEngine.Workspaces(0).OpenDatabase("FH.MDB")

Für die zweite Datenbank wird kein Datenbankfenster angelegt. Sie existiert nur in unse-rem Programm. Diese Technik wird für Access unter Windows 95 stattDBEngine.Workspaces (0). Databases (0) oder DBEngine (0)(0) empfohlen,weil CurrentDb eine weitere Instanz der aktuellen Datenbank anlegt, während sich dieSyntax DBEngine (0)(0) auf die offene Kopie der aktuellen Datenbank bezieht. DurchVerwenden der Funktion CurrentDb können wir mehr als eine Variable des Typs Da-tabase , die sich auf die aktuelle Datenbank bezieht, erstellen. Hierdurch werden mögli-che Konflikte in einer Mehrbenutzerdatenbank vermieden.

Ist die Datenbank festgelegt, so können wir eine Tabelle selektieren. Hierzu instantiierenwir den Zeiger pfad mit einem neuen Objekt von Typ RecordSet . Hierbei haben wirdie Möglichkeit mit einem Parameter festzulegen, wie die Tabelle zu öffnen ist.

Danach können wir auf die Tabelle zugreifen, indem wir zuerst den Suchindex setzen.Hierbei kann es sich um das Schlüsselwort PrimaryKey oder den Namen eines vor-handenen Indexes handeln. Die darauf folgende Methode .Seek bezieht sich auf die-sen Index.

Bei einer Zuweisung des Wertes Null (undefiniert) zu einer Variablen kommt es zu ei-ner Fehlermeldung, die wir abfangen können. Dies wird im Beispiel ebenfalls demon-striert. Im vorliegenden Programm ist dies aber überflüssig, da der Primärschlüssel nichtundefiniert sein kann. Wird dieser Fall aber bei der Anlage der Tabelle erlaubt, so mußeine entsprechende Fehlerbehandlung vorgesehen werden.

Page 623: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-83

6.7.2 Tabellenfeld mit dem Wert einer Variablen füllen

Der umgekehrte Vorgang, d. h. einen Variablenwert in ein Tabellenfeld zu schreiben, er-fordert etwas mehr Aufwand:

Private Sub Form_AfterDelConfirm(status As Integer)'Verzeichnis wurde gelöscht also Verzeichniszahl reduzierenDim dskvw As DATABASEDim traeger As Recordset Set dskvw = CurrentDb Set traeger = dskvw.OpenRecordset("traeger", DB_OPEN_TABLE) traeger.Edit traeger.t_verzzahl = traeger.t_verzzahl - 1 traeger.UPDATE traeger.CloseEnd Sub 'Form_AfterDelConfirm

Die Datenbank und Tabelle wird, wie bereits beschrieben, geöffnet. Ggf. muß der Daten-satz wie im letzten Beispiel gesucht werden. Mit der Methode . Edit wird eine temporä-re Kopie des Datensatzes im Kopierpuffer angelegt und der (die) beteiligten Datensatz(sätze) gesperrt. Je nach Einstellung von . LockEdits wird der Datensatz gesperrt(pessimistische Verarbeitung) oder später beim Zurückschreiben überprüft (optimistischeVerarbeitung). Wenn sich der Datensatz seit dem Aufruf der Methode . Edit veränderthat, kann die Operation . Update nicht durchgeführt werden, und ein auffangbarerFehler (3197 ) wird ausgelöst. Diesen können wir dazu benutzen, den Anwender entspre-chend zu informieren:

Private Sub Form_AfterDelConfirm(status As Integer)'Verzeichnis wurde gelöscht also Verzeichniszahl reduzierenDim dskvw As DATABASEDim traeger As Recordset Set dskvw = CurrentDb Set traeger = dskvw.OpenRecordset("traeger", DB_OPEN_TABLE) traeger.LockEdits = False 'optimistische Sperrung On Error Goto Form_AfterDelConfirm_Fehler traeger.Edit traeger.t_verzzahl = traeger.t_verzzahl - 1 traeger.UPDATE traeger.Close Exit SubForm_AfterDelConfirm_Fehler: If Err.Number = 3197 Then MsgBox "Daten von anderem Benutzer geändert." Resume Next Else MsgBox "Fehler " + Str$(Err.Number) Exit Sub End IfEnd Sub 'Form_AfterDelConfirm

Nach der Änderung wird der Datensatz sofort wieder mit der Methode .UPDATE zurück-geschrieben und freigegeben.

6.7.3 Variable mit dem Wert eines Steuerelementes füllen

Den Wert eines Steuerelementes in eine Variable zu kopieren ist recht einfach:

Page 624: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-84 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Private Sub Form_Timer()Dim Heute As Variant Heute = Now Me![Datum].Caption = Format(Heute, "dd. mmm yyyy") Me![Zeit].Caption = TimeEnd Sub 'Form_Timer

Steuerelemente unterscheiden sich zuerst einmal äußerlich nicht von Variablen, es seidenn, wir stellen den reservierten Qualifizierer Me davor. Ggf. muß bei der Verwendungvon Sonderzeichen (Leerstellen) im Namen dieser in eckige Klammern [] eingeschlos-sen werden. Besondere Beachtung müssen wir wieder dem Fall Null (undefiniert) wid-men. Diesen können wir entweder über eine Fehlerbehandlung oder über die FunktionIsNull () abfangen.

Schwieriger wird es, wenn wir auf Steuerelemente eines gerade nicht aktiven Fensterszugreifen wollen. Hier müssen wir vollständig mit Hilfe des Operatoren ! und . qualifi-zieren. Der Operator ! zeigt an, daß das folgende Element ein benutzerdefiniertes Ele-ment ist (ein Element einer Auflistung):

Bezeichner Verweist aufFormulare![Bestellungen] das geöffnete Formular BestellungenBerichte![Rechnung] den geöffneten Bericht RechnungFormulare![Bestellungen]![ Bestell-Nr ]

das Steuerelement Bestell-Nr im geöffnetenFormular Bestellungen

Der Operator . zeigt normalerweise an, daß das folgende Element ein von MicrosoftAccess definiertes Element ist.

6.7.4 Steuerelement mit dem Wert einer Variable füllen

Die Umkehrung der Zuweisungsfunktion ist trivial:

6.7.5 Steuerelement mit dem Wert eines Tabellenfeldes füllen

Die einfachste Methode ist sicher die, das Steuerelement an das Tabellenfeld zu binden.Dies geschieht zur Zuweisung des Tabellenfeldes in die Eigenschaft Steuerel e-mentinhalt. Soll diese Verknüpfung nicht permanent bestehen, so geschieht die Zu-weisung wie bei einer Variablen.

6.7.6 Suche, Änderung und Neueingabe mit einem Kombinationsfeld realisieren

In einem Formular möchten wir am liebsten nach (fast) allen Feldern suchen können.Gleichzeitig ist es aber wünschenswert, falsche Einträge zu ändern und neue Werte ein-zutragen.

Page 625: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-85

Hin und wieder hat man den Eindruck, daß Kombinationsfelder ohne nachzudenken anjeder Stelle eines Formulars eingesetzt werden. In einer „normalen“ Datenbank ist es we-nig sinnvoll, für die Postleitzahlen, die Hausnummern usw. eigene Kombinationsfeldereinzusetzen. Klappt der Anwender dieses Feld auf, so sieht er nur eine geordnete Listevon Postleitzahlen oder Hausnummern. Daher ist ein Kombinationsfeld nur wohlüberlegteinzusetzen. Hierbei können wir aber ausnutzen, daß in der Liste des Kombinationsfeldesmehr Informationen anzeigbar sind als die zugrundeliegende Tabelle liefert.

Aufgrund der Suchfunktion des Kombinationsfeldes gibt es Schwierigkeiten, wenn ein un-bekannter Wert eingetragen wird. Unbekannt bedeutet in diesem Fall auch ein nur mini-mal geänderter Wert. Hier kann das Kombinationsfeld nicht entscheiden, ob es sich umeine Änderung oder eine erneute Suche handelt.

Wenn wir in ein gebundenes Kombinationsfeld Text eingeben oder einen Wert aus seinerListe auswählen, wird dieser eingegebene oder ausgewählte Wert in das Feld eingefügt,an den das Kombinationsfeld gebunden ist.

Dieses Verhalten unterbinden wir durch eingeben von Ja in die Eigenschaft Nur L i -steneinträge. Wollen wir in diesem Fall trotzdem Neueinträge zulassen, so gelingtuns dies über die Ereignisprozedur _ NotInList . Das folgende Beispiel zeigt, wie einneues Stichwort während der Suche nach diesen in den Thesaurus eingefügt werdenkann:

Private Sub neu_d_thes_NotInList(neuerwert As String, antwort As Integer)'neues Stichwort auf Formular "Stichworteingabe d"'fügt ein neues Stichwort nach Eingabe in das Kombinationsfeld ein Call neues_stichwort(hatstichwörter, nichtstichwörter, neu_d_thes,

"dhat_stw", "dh_dnr", "dh_thesnr", neuerwert, dnr, antwort)End Sub 'neu_d_thes_NotInList

Sub neues_stichwort(hatstichwörter As Control, nichtstichwörter As Control,neu_such As Control, stwdatei As String, stwnr As String, stwzeiger AsString, neuerwert As String, satznr As Control, antwort As Integer)

'fügt ein neues Stichwort nach Eingabe in das Kombinationsfeld einDim neuesstichwort As Integer, kurzstichwort As Integer, titel As String,

msgdialog As IntegerDim ab1 As WorkspaceDim dskvw As DATABASEDim stw As RecordsetDim thesaurus As RecordsetDim benname As String On Error GoTo neues_stichwort_fehler 'Meldungsfenster zur Rückfrage beim Benutzer neuerwert = UCase(neuerwert) titel = "Stichwort nicht in der Liste" msgdialog = MB_YESNO + MB_ICONQUESTIONMARK + MB_DEFBUTTON1 neuesstichwort = MsgBox("Möchten Sie ein neues Stichwort hinzufügen?",

msgdialog, titel) If neuesstichwort = IDYES Then 'löscht den neuen Namen aus dem Kombinationsfeld, so daß dieses

aktualisiert ' werden kann, wenn der Benutzer zum Formular zurückkehrt. DoCmd.DoMenuItem A_FORMBAR, A_EDIT, A_UNDOFIELD, , A_MENU_VER20 If Len(neuerwert) > 20 Then titel = "Stichwort zu lang" msgdialog = MB_OK + MB_ICONEXCLAMATION kurzstichwort = MsgBox("Stichwörter dürfen nicht länger als 20 Zeichen

sein. Der eingegebene Name wird daher abgeschnitten.", msgdialog, titel) neuerwert = Left$(neuerwert, 20)

Page 626: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-86 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

End If 'öffnet das Eingabeformular benname = DBEngine.Workspaces(0).UserName Set ab1 = DBEngine.CreateWorkspace("Zwischen", benname, "") DBEngine.Workspaces.Append ab1 Set dskvw = ab1.OpenDatabase(DBPFAD + DBBANK) Set thesaurus = dskvw.OpenRecordset("thesaurus", DB_OPEN_TABLE) Set stw = dskvw.OpenRecordset(stwdatei, DB_OPEN_TABLE) thesaurus.AddNew thesaurus("thes_wort") = neuerwert thesaurus.UPDATE thesaurus.Move 0, thesaurus.LastModified stw.AddNew stw(stwnr) = satznr stw(stwzeiger) = thesaurus("thes_nr") stw.UPDATE stw.Close thesaurus.Close dskvw.Close ab1.Close hatstichwörter.Requery nichtstichwörter.Requery hatstichwörter.Enabled = True 'If nichtstichwörter.ListCount > 0 Then 'Focus umsetzen ' nichtstichwörter.SetFocus 'End If neu_such.Requery 'fortfahren, ohne eine Fehlermeldung anzuzeigen. antwort = DATA_ERRCONTINUE End Ifneues_stichwort_ende: Endneues_stichwort_fehler: Select Case Err Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Hinweis" Resume neues_stichwort_ende: End SelectEnd Sub 'neues_stichwort

Eine Alternative zur Eingabe über . AddNew usw. bestände in einer SQL-Anweisung derForm:

Dim msql As String msql = "INSERT INTO thesaurus(thes_wort) VALUES(""" & neuerwert & """);" DoCmd.RunSQL msql

womit wir gleichzeitig ein Beispiel für den Einsatz einer SQL-Anweisung sehen.

6.7.7 Wie kann man eine eigene Tabelle anlegen

Im nächsten Beispiel wollen wir eine lokale Tabelle der Laufwerke des Rechners erstel-len. Hierzu wird eine externe DLL aufgerufen, die den Typ des Laufwerkes liefert:

Sub lw_suchen()'erkennt die LaufwerkeDim i, typ As Integer'Dim ab1 As WorkspaceDim dskvw As DATABASEDim laufwerk As RecordsetDim tabelle As TableDef

Page 627: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-87

Dim feld1 As FieldDim feld2 As FieldDim idx As Index On Error GoTo Err_lw_suchen Set dskvw = CurrentDblw_suchen_lw:10 Set laufwerk = dskvw.OpenRecordset("laufwerk", DB_OPEN_TABLE)20 laufwerk.MoveLast If laufwerk.BOF Then 'auf einem Rechner ändert sich nichts, ggf. löschen 'Do Until laufwerk.EOF 'laufwerk.Delete 'laufwerk.MoveNext 'Loop For i = 0 To 2550 typ = gibdisktyp(i) If typ > 0 Then laufwerk.AddNew laufwerk.lw_name = Chr(65 + i) + ":" laufwerk.lw_typ = DLookup("[tt_bezeichnung]", "traegertyp", "[tt_nr] =

" + Str(typ)) laufwerk.UPDATE End If Next i End If laufwerk.Close kblw = "A:" 'Standard-EinleselaufwerkExit_lw_suchen: Exit SubErr_lw_suchen: Select Case Err Case 48 'Fehler beim Laden der DLL MsgBox "Fehler beim Laden der DLL", 48, "Fehlerabbruch" Exit Sub Case 3011 'Objekt nicht gefunden Set tabelle = dskvw.CreateTableDef("laufwerk") Set feld1 = tabelle.CreateField("lw_name", dbText, 2) tabelle.Fields.Append feld1 Set feld2 = tabelle.CreateField("lw_typ", dbByte) tabelle.Fields.Append feld2 dskvw.TableDefs.Append tabelle Set idx = tabelle.CREATEINDEX("lw_name") Set feld1 = idx.CreateField("lw_name") idx.PRIMARY = True idx.Required = True idx.Fields.Append feld1 tabelle.Indexes.Append idx Resume lw_suchen_lw Case 3021 'Kein aktueller Datensatz Select Case Erl Case 40 MsgBox ".DLL fehlt", 48, "Fehlerabbruch" Resume Exit_lw_suchen End Select Case Else MsgBox Error$ End Select Resume NextEnd Sub 'lw_suchen

Sollte die Tabelle laufwerk nicht existieren, so erzeugt das Öffnen den Fehler 3011.Diesen nutzen wir, um eine neue Tabelle mit Laufwerksnamen (2 Zeichen) und Laufwerk-styp (Byte) anzulegen und zu füllen. Anschließend legen wir lw_name als Primärindexan.

Page 628: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-88 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Ist die fehlende Tabelle vorhanden, so werden alle Laufwerksbuchstaben abgefragt, umihren Typ zu bestimmen. Vorhandene Laufwerke werden mit ihrem Typ in die lokale Da-tenbank geschrieben.

Das Beispiel zeigt den Einsatz von Zeilennummern bzw. Sprungmarken als Sprungziele.Die Zeilennummern werden mit Hilfe der Variablen Erl ausgewertet.

6.7.8 Programmierte m:m Beziehung

Als Beispiel der programmierten m:m Beziehung wollenwir die Stichwortzuordnung zu einer unserer Datenta-bellen benutzen. Einem Datenträger können wir je nachseinem Inhalt eine Vielzahl unterschiedlicher Stichwör-ter zuordnen. Umgekehrt kann ein Stichwort für eineVielzahl von Datenträgern zutreffen. Diese Teilbezie-hung ist noch einmal in Bild 6.7-1 dargestellt.

Das Formular sollzwei Listen enthal-ten. Auf der einenSeite sollen alleStichwörter zu finden sein, die dem Träger noch nichtzugeordnet sind, auf der anderen Seite alle schon zu-gewiesenen Stichwörter (Bild 6.7-2).

Einen Teil der Pro-grammierarbeitkönnen wir durchgeeignete Abfragenabfangen. Zuerstbenötigen wir eine

Abfrage, die uns alle noch nicht zugeordneten Stich-wörter liefert (Bild 6.7-3), also den verbleibenden Restanzeigt. Diese Abfrage ist ein schönes Beispiel einesOuter Joins, bei dem wir alle Stichwörter suchen, diekeinen Eintrag in der Verbindungstabelle besitzen(verschiedene Varianten hatten wir bei den Abfragenbesprochen):

SELECT DISTINCTROW thesaurus.thes_wort, thesaurus.thes_nrFROM thesaurus LEFT JOIN [that mit thes_wort] ON thesaurus.thes_nr = [that mit

thes_wort].th_thesnrGROUP BY thesaurus.thes_wort, thesaurus.thes_nr, [that mit

thes_wort].th_thesnrHAVING ((([that mit thes_wort].th_thesnr) Is Null))ORDER BY thesaurus.thes_wort;

Bild 6.7-1: m:m Beziehung

Bild 6.7-2: Stichwortzuordnung

Bild 6.7-3: Abfrage zur Restbil-dung

Page 629: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-89

Sie greift dabei auf die Ergebnisse der zweiten Liste zu.Dies ist notwendig, damit nicht nur die Stichwörter erschei-nen, die überhaupt keine Zuordnung haben, sondern auchdie, die nicht die richtige Zuordnung besitzen. Die Abfragefür die zweite Liste mit den bereits zugeordneten Stichwör-tern ist dagegen klassisch einfach (Bild 6.7-4):

SELECT DISTINCTROW that_stw.th_tnr,that_stw.th_thesnr, thesaurus.thes_wort

FROM thesaurus INNER JOIN that_stw ONthesaurus.thes_nr = that_stw.th_thesnr

WHERE (((that_stw.th_tnr)=[tnr]))ORDER BY thesaurus.thes_wort;

Das Kombinationsfeld am unteren Rand des Formulars dient zur Neueingabe. Änderun-gen können jedoch nicht durchgeführt werden. Seine Programmierung ist bereits im Ka-pitel 6.7.6 beschrieben worden.

Das Formular reagiert auf Änderungen des Tabellenzeigers mit der Ereignisprozedur:

Private Sub Form_Current() hatstichwörter.Requery nichtstichwörter.Requery If nichtstichwörter.ListCount > 0 Then nichtstichwörter.SetFocus Else neu_t_thes.SetFocus nichtstichwörter.Enabled = False End If If hatstichwörter.ListCount <= 0 Then hatstichwörter.Enabled = False End IfEnd Sub 'Form_Current

indem es die Listen neu aufbaut und je nach Inhalt der Listen den Fokus auf eine der Li-sten setzt. Sobald der Anwender in einer der Listen einen Eintrag selektiert, werden diePfeile geschaltet:

Private Sub nichtstichwörter_Enter() sfrechts.Enabled = True sflinks.Enabled = FalseEnd Sub 'nichtstichwörter_Enter

Private Sub hatstichwörter_Enter() sfrechts.Enabled = False sflinks.Enabled = TrueEnd Sub 'hatstichwörter_Enter

Ein Doppelklick auf einen Eintrag bzw. ein Klick auf einen Pfeil löst die eigentliche Zuord-nung bzw. deren Auflösung aus:

Private Sub nichtstichwörter_DblClick(Cancel As Integer) Call sfrechts_ClickEnd Sub 'nichtstichwörter_DblClick

Private Sub sfrechts_Click()'Zuordnung eines neuen Stichwortes Call hinzu_click(hatstichwörter, nichtstichwörter, "that_stw", "th_tnr",

"th_thesnr", tnr)

Bild 6.7-4: Zuordnung

Page 630: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-90 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

End Sub 'sfrechts_Click

Private Sub hatstichwörter_DblClick(Cancel As Integer) Call sflinks_ClickEnd Sub 'hatstichwörter_DblClick

Private Sub sflinks_Click()'Entfernen eines Stichwortes Call weg_Click(hatstichwörter, nichtstichwörter, "that_stw", "th_tnr",

"th_thesnr", tnr)End Sub 'sflinks_Click

Um die beiden Unterprogramme universell einsetzen zu können, werden die beiden be-teiligten Listen sowie die Namen der Schlüssel übergeben. Wichtig ist natürlich eine ge-eignete Strategie zur Verarbeitung. Es stehen zwei Alternativen zur Disposition:

1. Temporäre Verarbeitung der Zuordnungen bis zu einer vollständigen Bestätigung. Pro-bleme ergeben sich im Mehrbenutzerbetrieb.

2. Sofortige Verarbeitung mit teilweise umfangreichen Löschungen.

Beim Entwurf des Algorithmus gehen wir davon aus, daß das Formular einen Datensatzaus einer der beiden Tabellen aktuell anzeigt. Die Verbindungstabelle muß daher explizitgeöffnet werden, um eine neue Verknüpfung aufzubauen bzw. eine bestehende Ver-knüpfung zu löschen.

Wenn dann alles wunderbar funktioniert, dann stellt sich u. U. ein heimtückischer Fehlerein, sobald wir Tabellen aus der bestehenden Datenbank auslagern, um sie zentral zuverarbeiten. Verknüpfte Recordset-Objekte zeigen nämlich einige Eigenheiten, die dasLeben schwer machen.

Keine Probleme ergeben sich bei folgendem Ansatz:

Const DBFAD ="…"Const DBBANK ="…"

Sub hinzu_click(ist As Control, istnicht As Control, verbindungsdatei AsString, vfeld1 As String, vfeld2 As String, satznr As Control)

Dim ab1 As WorkspaceDim db1 As DATABASEDim vdatei As RecordsetDim benname As String On Error GoTo hinzu_click_fehler If istnicht.ItemData(istnicht.ListIndex) Then benname = DBEngine.Workspaces(0).UserName Set ab1 = DBEngine.CreateWorkspace("Zwischen", benname, "") DBEngine.Workspaces.Append ab1 Set vdatei = ab1.OpenDatabase(DBPFAD + DBBANK) Set vdatei = db1.OpenRecordset(verbindungsdatei, dbOpenTable) vdatei.AddNew

solange wir die Datenbanken nicht verschieben. In diesem Fall müssen wir die Konstan-ten anpassen, was bei einem kommerziellen Programm kaum tragbar ist. Wir kommendaher auf die Idee, die Datenbank mit den vorhandenen Informationen anzusprechen:

Sub hinzu_click(ist As Control, istnicht As Control, verbindungsdatei AsString, vfeld1 As String, vfeld2 As String, satznr As Control)

Page 631: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-91

'Einfügen einer neuen ZuordnungDim db1 As DATABASEDim vdatei As Recordset On Error GoTo hinzu_click_fehler If istnicht.ItemData(istnicht.ListIndex) Then Set db1 = CurrentDb Set vdatei = db1.OpenRecordset(verbindungsdatei, dbOpenDynaset) vdatei.AddNew vdatei(vfeld1) = satznr vdatei(vfeld2) = istnicht.ItemData(istnicht.ListIndex) vdatei.UPDATE vdatei.Close ist.Requery istnicht.Requery ist.Enabled = True If istnicht.ListCount > 0 Then istnicht.Enabled = True istnicht.SetFocus Else ist.SetFocus istnicht.Enabled = False End If db1.Close End If Exit Subhinzu_click_fehler: Select Case Err Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Hinweis" Exit Sub End SelectEnd Sub 'hinzu_click

Wollen wir eine verknüpfte Datei mit dem Attribut dbOpenTable öffnen, dann erhaltenwir einen Fehler, da sich nur in der Datenbank vorhandene Tabellen so öffnen lassen.Legen wir also unser Programm zuerst als Einzelplatzanwendung an, so kann es hierschon zu Fehlern kommen, wenn wir einen Teil der Tabellen auslagern.

Schlimmer noch wird es beim Löschen:

Sub weg_click(ist As Control, istnicht As Control, verbindungsdatei As String,vfeld1 As String, vfeld2 As String, satznr As Control)

'Entfernen eines ZuordnungDim db1 As DATABASEDim vdatei As Recordset On Error Resume Next If ist.ItemData(ist.ListIndex) Then Set db1 = CurrentDb 'Originaldatenbank Set vdatei = db1.OpenRecordset(verbindungsdatei, dbOpenTable) Select Case Err Case 0 vdatei.Index = "PrimaryKey" vdatei.Seek "=", satznr, ist.ItemData(ist.ListIndex) Case 3219 Set vdatei = db1.OpenRecordset(verbindungsdatei, dbOpenDynaset) vdatei.FindFirst "[" & vfeld1 & "]=" & satznr & " AND [" & vfeld2 &

"]=" & ist.ItemData(ist.ListIndex) On Error GoTo weg_click_fehler Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Hinweis" Exit Sub End Select vdatei.Delete

Page 632: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-92 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

vdatei.Close ist.Requery istnicht.Requery istnicht.Enabled = True If ist.ListCount > 0 Then ist.Enabled = True ist.SetFocus Else istnicht.SetFocus ist.Enabled = False End If db1.Close End If Exit Subweg_click_fehler: Select Case Err Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Hinweis" Exit Sub End SelectEnd Sub 'weg_click

Mit der Wahl des Typs ändern sich die verfügbaren Funktionen. So können wir in Record-sets vom Typ Table keine Indizes setzen, was wiederum von SEEK vorausgesetztwird.

Wir können nun das Programm wie gezeigt über einen Fehler entsprechend umsteuern.Eine Alternative besteht darin, die Informationen aus den Tabellenbeschreibungen aus-zuwerten. Dazu müssen wir eine Variable vom Typ TableDef anlegen, in die wir dieAuflistung einlesen und z. B. ausgeben:

Dim tbdef As TableDef, i%

For i = 0 To db1.TableDefs.Count - 1 If (db1.TableDefs(i).Attributes And dbSystemObject) = 0 Then Debug.Print "Name: "; db1.TableDefs(i).Name Debug.Print "Attribute: "; db1.TableDefs(i).Attributes If (db1.TableDefs(i).Attributes And dbAttachedTable) Then Debug.Print "verknüpft" If (db1.TableDefs(i).Attributes And dbAttachedODBC) Then Debug.Print "ODBC" Debug.Print "Connect: "; db1.TableDefs(i).Connect Debug.Print "kreiert am: "; db1.TableDefs(i).DateCreated Debug.Print "gändert am: "; db1.TableDefs(i).LastUpdated Debug.Print "Anzahl Sätze: "; db1.TableDefs(i).RecordCount Debug.Print "Name der Quelldatei: "; db1.TableDefs(i).SourceTableName Debug.Print "Änderbar?: "; db1.TableDefs(i).Updatable Debug.Print "Plausibiliät: "; db1.TableDefs(i).ValidationRule Debug.Print "Fehlermeldung: "; db1.TableDefs(i).ValidationText End IfNext i

Dieses Programmstück hilft uns, die Struktur der Datenbank zu erkennen. Wir suchennun unsere Tabelle und werten zum einen die Attribute aus. Ist es eine verknüpfte (oderODBC) Tabelle, so liefert uns die Eigenschaft . Connect den Pfad:

Name: dhat_stwAttribute: 1073741824 verknüpftConnect: ;DATABASE=D:\Eigene\access\dskvw95\DskVwDat.mdbkreiert am: 24.11.96 11:52:01gändert am: 24.11.96 11:52:01

Page 633: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-93

Anzahl Sätze: -1Name der Quelldatei: dhat_stwÄnderbar?: FalschPlausibiliät:Fehlermeldung:

Mit Hilfe des vollständigen Pfadnamens können wir nun auch die Verbindungsdatei wieeine interne Datei behandeln. Damit ergibt sich folgende, vorausschauende Prozedur:

Sub weg_click(ist As Control, istnicht As Control, verbindungsdatei As String,vfeld1 As String, vfeld2 As String, satznr As Control)

'entfernt eines ZuordnungDim db1 As DATABASEDim tbdef As TableDefDim vdatei As RecordsetDim i% On Error Resume Next If ist.ItemData(ist.ListIndex) Then Set db1 = CurrentDb 'Originaldatenbank For i = 0 To db1.TableDefs.Count - 1 If (db1.TableDefs(i).Attributes And dbSystemObject) = 0 Then If db1.TableDefs(i).Name = verbindungsdatei Then Exit For End If Next i On Error GoTo weg_click_fehler If (db1.TableDefs(i).Attributes And dbAttachedTable) Then Dim ab2 As Workspace Dim db2 As DATABASE Dim benname$, dbname$ benname = DBEngine.Workspaces(0).UserName Set ab2 = DBEngine.CreateWorkspace("Zwischen", benname, "") DBEngine.Workspaces.Append ab2 dbname = Mid(db1.TableDefs(i).Connect, InStr(db1.TableDefs(i).Connect,

"DATABASE=") + 9) dbname = Left(dbname, IIf(InStr(dbname, ";") = 0, Len(dbname),

InStr(dbname, ";"))) Set db2 = ab2.OpenDatabase(dbname) Set vdatei = db2.OpenRecordset(verbindungsdatei, dbOpenTable) Else Set vdatei = db1.OpenRecordset(verbindungsdatei, dbOpenTable)

'Originaltabelle End If vdatei.Index = "PrimaryKey" vdatei.Seek "=", satznr, ist.ItemData(ist.ListIndex) vdatei.Delete vdatei.Close If (db1.TableDefs(i).Attributes And dbAttachedTable) Then db2.Close ab2.Close End If ist.Requery istnicht.Requery istnicht.Enabled = True If ist.ListCount > 0 Then ist.Enabled = True ist.SetFocus Else istnicht.SetFocus ist.Enabled = False End If db1.Close End If Exit Subweg_click_fehler: Select Case Err

Page 634: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 6.7 Tips und Tricks zum Programmieren Prof. Dr.-Ing. H.-J. Scheibl

Seite: 6-94 D:\Eigene\Doku\DB\DBAcc06.doc – 96329

Case Else MsgBox Error$(Err) + " " + Str$(Err), 48, "Hinweis" Exit Sub End SelectEnd Sub 'weg_click

Diese Technik läßt sich nun auf alle m:m Beziehungen ausweiten. Da die Prozedurenkeine globalen Variablen benutzen, lassen sie sich von beliebigen Formulare benutzen,die jeweils nur über die dargestellten Steuerelemente verfügen müssen. Deren Namenwerden als Parameter übergeben.

Page 635: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Programmierung © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc06.doc – 96329 Seite: 6-95

Page 636: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 12.04.97 13:18/12.04.97 13:18 Seite: 7-I

MS Access – Netzwerkanwendungen

7 MS Access – Netzwerkanwendungen ........................................................................7-1

7.1 Grundlagen ............................................................................................................7-1

7.1.1 Konkurrierender Zugriff....................................................................................7-1

7.1.2 Datensatzsperrung ..........................................................................................7-3

7.1.3 Verklemmungs-Situationen (Deadlock)...........................................................7-7

7.1.4 Sperrung bei lesendem Zugriff ........................................................................7-8

7.2 Access im Netzwerk .............................................................................................7-9

7.2.1 Gemeinsamer Zugriff auf eine Datenbank ......................................................7-9

7.2.2 Zentrale Datenbank anlegen .........................................................................7-13

7.2.3 Tabellen aus einer zentralen Datenbank einbinden......................................7-14

7.2.3.1 Access-Datenbank einbinden.................................................................7-14

7.2.3.2 Fremde Datenbanken einbinden............................................................7-16

7.2.4 Sperrung von Datensätzen............................................................................7-16

7.2.4.1 Automatisches Sperren von Datenbanksätzen......................................7-17

7.2.4.2 Programmiertes Sperren ........................................................................7-20

7.2.5 Transaktions-Konzept....................................................................................7-22

7.2.6 Arbeitsgruppen ..............................................................................................7-25

7.3 ODBC....................................................................................................................7-26

7.3.1 Grundlagen ....................................................................................................7-26

7.3.2 ODBC-Treiber................................................................................................7-27

7.3.3 SQL Pass-Through-Abfrage ..........................................................................7-29

7.4 Programmierung von Datenbankzugriffen .......................................................7-30

7.4.1 Datenbankzugriffe unter Visual Basic............................................................7-30

7.4.2 Datenbankzugriffe unter Visual C++..............................................................7-31

7.5 Zeitüberwachung ................................................................................................7-32

Page 637: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-1

7 MS Access – Netzwerkanwendungen

7.1 Grundlagen

7.1.1 Konkurrierender Zugriff

Setzen wir irgendeine Datenbank in einem Netzwerk ein, dann ist dies sinnvoll, wennmehrere Benutzer auf diese Datenbank zugreifen sollen. Ansonsten ist eine lokale Da-tenbank in der Arbeitsgeschwindigkeit überlegen. Die lokale Speicherung ist aber nurdann empfehlenswert, wenn es sich wirklich um persönliche Daten handelt. Sobald meh-rere Benutzer ähnliche Datenmengen verwalten, kommt es neben Redundanzen (Mehr-fachspeicherung) sehr schnell zu Inkonsistenzen (Widersprüchen) in den Daten. WelcheAdresse ist den die richtige, welche ist neuer? Aber auch bei einer Einzelplatzanwendungkann es notwendig sein, parallel auf einen Datenbestand mit mehreren Tasks zuzugrei-fen. In diesem Fall sollten wir die Anwendung ebenfalls für den konkurrierenden Zugriffvorbereiten.

Das Betriebssystem sowie das DBMS müssen sicherstellen, daß mehrere Benutzer aufdie gleichen Daten zugreifen können. Dies ist z. B. unter DOS erst seit der Version 3.3möglich. Moderne Betriebssysteme wie Windows 95 haben den notwendigen Sperrme-chanismus selbstverständlich implementiert.

Die Aufgabe des DBMS besteht darin, die Zugriffe auf Datensätze innerhalb der gemein-sam geöffneten Datenbank zu organisieren. Hierbei unterscheiden sich die verschiede-nen Produkte durchaus. Ein typischer Fall waren dBase und Clipper. Diese Tatsachekonnte man an der maximalen Anzahl der Datensätze ablesen, die deutlich differierte(und kräftig als Werbeargument ausgeschlachtet wurde), obwohl kaum ein Anwender diemaximale Zahl je erreichte. Zur Satzsperre wurde eine Tabelle für jeden (möglichen) Da-tensatz angelegt, in der die Sperrungen vermerkt wurden. Da diese Tabelle nicht dyna-misch erweiterbar war, beschränkte ihre Größe die Anzahl der Datensätze nach oben.

In Access werden die Sperren in der Datei .LDB für jeden Benutzer einer Datenbankabgespeichert (Bild 7.1-1). Es handelt sich dabei jedoch nicht um Satzsperren. Vielmehrkann ein PC nur ganze Seiten (pages) von der Festplatte lesen bzw. auf die Festplattespeichern. I. a. werden daher mehrere benachbarte Sätze gleichzeitig gesperrt. Es mußdaher das Ziel des DBMS bzw. unserer Programme sein, die Seiten möglichst schnellwieder zurückzuschreiben und damit frei zu geben. Um die Darstellung aber nicht weiterzu komplizieren, bleiben wir bei der Vorstellung von der Bearbeitung einzelner Datensät-ze.

lokaler Rechner

Front-Endz. B. AccessVisual BasicVisual C++

Jet-Engine

SYSTEM.MDW(oder auf Server)

Netwerk-Dateiserver

Server-Programm xxxx.LDB

Schreib-/Lese- undSperrfunktionen desBetriebssystems Datenbank

Bild 7.1-1: Mehrbenutzer-Modell von Microsoft Client/Server-Anwendungen

Page 638: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.1 Grundlagen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-2 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Weiterhin existiert noch eine Arbeitgruppen-Informationsdatei SYSTEM.MDW (entwederauf den lokalen Rechnern oder auf dem Dateiserver), die Informationen über die Zugriffs-rechte von Benutzern und Benutzergruppen enthält. Neben den Informationen zu denBenutzern, den Gruppen inklusive der Paßwörter enthält sie weitere Optionen, die vomBenutzer konfiguriert werden können. Sie verwaltet die Zugriffsrechte aller Benutzer.

Damit sind wir eigentlich schon beim Thema. Ein DBMS

− erlaubt den gleichzeitigen Zugriff auf dieselben Dateien (Tabellen);− steuert den gleichzeitigen Zugriff auf dieselben Datensätze.

Die kleinste verarbeitbare Einheit ist also der Datensatz. Auf einen Datensatz können wirlesenden oder schreibenden Zugriff haben. Logischerweise kann immer nur eine Anwen-dung auf einen Datensatz schreiben. Nun, so werden Sie denken, ist dies kein Problem.Wir arbeiten (meist) mit einem Prozessor und einer Platte, also müssen zwei Schreibvor-gänge immer hintereinander ausgeführt werden. Also gibt es hier keine grundsätzlichenProbleme.

Wir müssen uns aber in die Lage der Benutzer versetzen. Diese sehen auf ihrem Bild-schirm ein Formular mit aktuellen Zahlen, ändern diese und schreiben sie zurück, in derstillen Hoffnung, daß diese geänderten Daten persistent (dauerhaft) sind, d. h. bei einemAbsturz usw. erhalten bleiben. Ein sofortiger Lesezugriff sollte die aktualisierten Datenwieder anzeigen.

Würden wir nun erlauben, daß ein zweiter Benutzer gleichzeitig den Datensatz bearbeitet,so würde dieser zuerst einmal die gleichen Daten sehen. Seine Änderungen wären aberwahrscheinlich anders als die Änderungen des ersten Benutzers. Schreibt er nun seineDaten kurze Zeit später auf die Platte, so würde er die Daten des 1. Benutzers über-schreiben.

Stellen Sie sich dies einmal für ein Versandhaus vor, bei dem das gleiche Produkt mehr-fach verkauft wird, weil beide Benutzer zuerst einmal die Information erhalten, daß dasProdukt verfügbar sei und es ausbucht.

Aber auch die Vorstellung der Datensatzsperrung ist schon wieder eine Vereinfachung.Nur in seltenen Fällen arbeiten wir mit einem einzelnen Datensatz. Meist zeigen unsereFormulare eine Kombination aus den Daten mehrerer Tabellen. Hier müssen alle betei-ligten Datensätze parallel gesperrt werden. Geht dies überhaupt? Was passiert wenn sichdabei zwei Programme verklemmen usw.?

7.1.2 Dateiserver bzw. Client/Server Technik

Beim Mehrbenutzerbetrieb einer Datenbankanwendung können wir grundsätzlich zweiTechniken unterscheiden:

DateiserverDies ist die primitivere Alternative, bei der der zentrale Rechner einzig die Daten zur Ver-fügung stellt, ohne selbst durch einen „intelligenten“ Prozeß Verwaltungsaufgaben zuübernehmen. Die Anwendung muß also sämtliche Funktionen zur Anforderung, Verar-

Page 639: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-3

beitung und Sperrung übernehmen. Da gerade zur Auswahl der Daten diese einzeln un-tersucht werden müssen, erhöht sich bei dieser Technik das zu übertragende Datenvolu-men beträchtlich.

Client/ServerIm Gegensatz zur ersten Alternative kann eine Client/Server Anwendung selbst Funktio-nen über die Verwaltung der Dateien hinaus zur Verfügung stellen. Mit einfachen Wortengesagt, ist sie in der Lage, SQL-Anweisungen zu verarbeiten und die Ergebnisse zurVerfügung zu stellen. Der Client sendet eine abstrakte Abfrage an den Server, die dieserausführt und als Ergebnis zurückliefert. Dadurch wird das zu übertragende Datenvolumenauf dem Netz deutlich verkleinert.

In einer Client/Server Anwendung greifen wir also nicht direkt auf die Datenbank zu, son-dern kommunizieren mit einem gesonderten Server-Programm, das die Datenbank voruns „versteckt“. Hierzu ist eine einheitliche Schnittstelle notwendig, die z. B. ODBC heißt.

7.1.3 Datensatzsperrung

Der entscheidende Schritt zum Mehrbenutzerbetrieb ist die Satzsperrung. Hier wollen wirzuerst einmal den einfachen Fall betrachten, daß nur eine Tabelle bearbeitet wird. Nor-malerweise erfolgt ein Schreibvorgang mehr oder weniger schnell nach einem Lesevor-gang. Dieser Lesevorgang ist notwendig, um die aktuellen Daten anzuzeigen. Problemeergeben sich bei der Konstellation nach Bild 7.1-2.

Durch eine Sperrung des Datensatzes beimLesen können wir verhindern, daß Benutzer2den Datensatz auch lesen kann, oder genauerlesen kann, um anschließend zu schreiben.Ein rein lesender Zugriff ist durchaus nichtschädlich. Hier stellt sich nämlich nur die Fra-ge, wann Benutzer2 die Änderungen angezeigtbekommt, die wir später betrachten werden.

Kritisch ist der Fall, wenn Benutzer2 mit derAbsicht liest, um den Datensatz zu verändern.Bei einer Sperrung muß der Benutzer2 solan-ge warten, bis der Datensatz wieder frei ist(Bild 7.1-3). Er muß also warten. Über denWartezustand sollte er eine Meldung erhalten,um zu entscheiden, ob er weiter warten willoder einen anderen Datensatz bearbeitenmöchte.

Jetzt befindet er sich in einer ähnlichen Lagewie ein Benutzer, der zwar Lesen durfte, aberu. U. nach einiger Zeit nicht mehr die aktuellen Daten auf dem Bildschirm sieht.

Eine Aktualisierung des Bildschirminhaltes (bzw. der Wartemeldung) erfolgt nur dann,wenn der Benutzer2 erneut den Datensatz liest. Hier können wir uns zwei Techniken vor-stellen:

Benutzer1 liest

Benutzer2 liest

Benutzer1 schreibt

Benutzer2 schreibt

Zeit t

Bild 7.1-2: Mehrfachzugriffsprobleme

Benutzer1 liest

Benutzer2 liest

Benutzer1 schreibt

Benutzer2 liest

Zeit t

DS gesperrt

Lesen abgelehnt

DS frei

Lesen erlaubt

Bild 7.1-3: Synchronisation durchSperren

Page 640: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.1 Grundlagen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-4 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

1. Benutzer2 wird vom Schreibvorgang informiert und liest daraufhin (Triggerung);2. Benutzer2 liest regelmäßig den Datensatz (Polling).

Bei diesen Überlegungen drängt sich natürlich die Frage auf

Was geschieht eigentlich, wenn Benutzer1 während der Sperrung eine größerePause einlegt (Kaffee trinkt usw.)?

Nun, das DBMS könnte Benutzer1 melden, daß ein weitere Benutzer Zugriff wünscht(anklopfen). Es könnte aber auch dem Benutzer1 nach einer gewissen Zeit die Zugriffs-rechte wegnehmen, damit dieser nicht die Datenbank (genauer den Datensatz) beliebigblockiert.

Eine dritte Möglichkeit bestände darin, den säumigen Benutzer1 zu „bestrafen“. Statt derkonservativen (pessimistische) Sperrung eines Datensatzes kommen wir auf die progres-sive (d. h. mehr optimistische) Idee, den Datensatz nicht schon beim 1. Einlesen zu sper-ren sondern erst unmittelbar vor dem Schreiben. Hierzu wird der eingelesene Datensatzzwischengespeichert. Vor dem Schreiben lesen wir den gespeicherten Datensatz nocheinmal ein, sperren ihn und vergleichen ihn mit dem zwischengespeicherten Datensatz.Sind beide gleich, dann schreiben wir den geänderten Datensatz. Sind beide ungleich, soentsperren wir ihn und informieren wir den Benutzer über den neuen Inhalt. Dieser mußdann aufgrund der jetzt vorhandenen Daten ggf. seine Änderungen verwerfen oder neueingeben.

Bei der optimistischen Verarbeitung kommt es zu (fast) keinen gegenseitigen Sperrungenoder gar Verklemmungen. Umgekehrt ist der Aufwand für den Benutzer u. U. durch dieNeueingaben höher.

Die dargelegten Gedanken zeigen uns, daß es mehrere Möglichkeiten gibt, die vonDBMS zu DBMS variieren können. Es hängt also von der Philosophie der Datenbankent-wickler ab, welchen Weg sie eingeschlagen haben. Leider beschreiben die Datenban-kentwickler diese Eigenschaften nicht explizit. Wir müssen daher aus den Eigenschaftenkriminalistisch ableiten, welche Philosophie verwendet wird.

Wie später noch einmal genauer beschrieben wird, existieren unter Access folgende Op-tionen zum Verwalten des Mehrbenutzerzugriffs:

Option BedeutungDatensätzeSperren=Keine Sperrung

Die Beschreibung dieser Option läßt uns erkennen, daß Access beigleichzeitigem Zugriff auf einen Datensatz ohne Sperrung dem Be-nutzer, der den Speichervorgang später beginnt, eine entsprechen-de Meldung anzeigt, d. h. Access führt automatisch ein Lesen undVergleichen durch, wenn diese Option gesetzt ist (progressiv, opti-mistische Methode)

Anzeige-aktualisierungs-intervall (s)

Die Anwendung fragt in diesen Abständen die Datenbank nach neu-en Werten ab. Es wird also automatisch gepollt.

Page 641: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-5

Option BedeutungDaten-aktualisierungs-intervall (ms)Anzahl der Daten-aktualisierungs-versuche

Diese beiden Optionen weisen darauf hin, daß Access mehrfachversucht, einen geänderten Datensatz zu speichern, wenn diesergerade von einem anderen Benutzer gesperrt ist.

Untersuchen wir die Sperren etwas genauer, so stellen wir fest, daß die Jet-Engine vonAccess interne Sperren verwaltet. Der Benutzer dagegen über die Optionen bzw. die Pro-grammanweisungen weitere Sperren setzen kann. Jede erweiterte Dateibereichssperre(mit Ausnahme der Benutzersperren) belegt eine Seite der .MDB-Datei. Die Daten dieserDatei werden aber nicht physikalisch gesperrt.

Sperren der Jet-Engine:

MehrbenutzersperreEine Mehrbenutzersperre belegt genau ein Byte (pro Benutzer) und kollidiert nie mit einerweiteren Mehrbenutzersperre. Diese Sperren zeigen an, daß mehrere Benutzer aus einerDatei lesen dürfen.

Exklusives SperrenExklusive Sperren besitzen eine Größe von 256 bis 512 Byte und kollidieren aufgrundihrer Eigenschaften immer mit anderen exklusiven und Mehrbenutzersperren. Es werdenimmer mindestens die 256 Byte einer erweiterten Dateibereichssperre belegt, um einer-seits Mehrbenutzersperren zu verhindern und andererseits vorhandene Mehrbenutzer-sperren zu erkennen.

Beispiel:Versucht ein Benutzer eine Datei so zu öffnen, daß andere Benutzer keine Leserechtehaben, so wir der Versuch einer exklusiven Sperre gestartet. Dies schlägt fehl, wenn be-reits eine andere Mehrbenutzersperre vorliegt. Ist der Versuch erfolgreich, dann kann da-nach kein anderer Benutzer eine Mehrbenutzersperre setzen.

Die Jet-Engine verwendet folgende Arten von Sperren:

− Benutzersperren− Schreibsperren− Lesesperren− Schreibsperren auf Tabellen− Lesesperren auf Tabellen− Tabellensperren mit Schreibrechtsverweigerung

Diese Sperrarten werden mit Hilfe der erweiterten Dateibereichssperren in virtuellen Re-gionen der .LDB-Datei organisiert. Es handelt sich hierbei um 5 Regionen im Adreßbe-reich 1000 00001h bis 6FF8 00FFh. Wir können uns die Technik etwa so vorstellen,daß jeder Datensatz (genauer jede Datenseite) dort einen Eintrag hat, der zur Verwaltungder Sperren gesetzt bzw. abgefragt wird.

Die Sperrarten sind folgendermaßen beschrieben:

Page 642: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.1 Grundlagen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-6 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

BenutzersperrenSobald ein Benutzer eine Datenbank öffnet, wird eine Sperre für ihn mit einem Byte imBereich 1000 00001h bis 1000 00FFh angelegt. Damit ist andererseits die Anzahlder Benutzer einer Datenbank auf 255 beschränkt. Erst mit dem Schließen der Daten-bank wird diese Sperre wieder aufgehoben.

SchreibsperrenMit einer Schreibsperre schützt ein Benutzer einen Datenbereich gegen Änderung durchDritte. Diese Schreibsperren existieren für Data Pages, Index Pages und Long ValuePages. Wie die Namen schon vermuten lassen, sind dies Seiten in den Daten, den Indi-zes und den Langwertseiten (für OLE-/Memo-Objekte) einer Tabelle. Die Sperre wirdnormalerweise für die Dauer einer Transaktion aufrecht erhalten. Alle SQL-DML Anwei-sungen zur Datenmanipulation stellen solche Transaktionen dar.

Schreibsperren sind im Bereich 2000 A601h bis 2000 A701h angelegt. Sie umfas-sen jeweils 256 bis 512 Byte und sind daher stets exklusiver Natur.

LesesperrenMit Lesesperren wird hauptsächlich das Lesen von Langwertseiten für Dritte erlaubt bzw.gesperrt. Lesesperren werden jetzt im Gegensatz zur Version 2.x nur noch dann auf In-dexseiten gesetzt, wenn eine referentielle Integrität durchgesetzt werden muß. Die Lese-sperre wird durch Wechsel des Datensatzes durch den Benutzer aufgehoben.

Lesesperren werden in der gleichen virtuellen Region wie Schreibsperren angelegt. Siebelegen aber als Mehrbenutzersperre nur 1 Byte.

Lesesperren für TabellenDiese Sperre sorgt für einen exklusiven Zugriff auf eine ganze Tabelle. Sie wird in derTabellenkopfseite (Table Header Page) vermerkt. Diese Seite enthält weiterhin statischeInformationen über die Tabelle, z. B. die Anzahl der Datensätze (Kardinalität), den näch-sten AutoWert, Feld- und Indexbeschreibungen. Hier sehen wir, warum der AutoWertbeim Mehrbenutzerbetrieb Lücken enthalten kann.

Lesesperren werden als exklusive oder Mehrbenutzersperren im Bereich 4000 0000hbis 4FF8 00FFh angelegt. Sobald ein Benutzer eine Tabelle öffnet, wird eine Tabellen-lesesperre in Form einer Mehrbenutzersperre angelegt. Damit wird jede exklusive Tabel-lenlesesperre über die Option dbDenyRead beim Anlegen eines Recordset-Objektsblockiert. Da auch Formulare ihre gebundenen Datensätze sperren, hängt die Sperre vonder Option Datensätze sperren ab. Hier stellen wir z. B. Alle Datensätze ein,um die gesamte Tabelle zu sperren. Ggf. wir die globale Einstellung Standard beiDatenssatzsperrung unter Extras| Optionen …|Registerkarte Weiter aktiv.

Die Lesesperre bleibt erhalten bis die Tabelle (bzw. das Recordset-Objekt) geschlossenwird.

Schreibsperren für TabellenDiese Sperren werden im Zusammenhang mit der Tabellensperre für Schreibrechtsver-weigerung benutzt. Sie werden im Bereich 5000 0000h bis 5FF8 00FFh angelegt.

Page 643: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-7

Tabellensperren für SchreibrechtsverweigerungDiese Sperre, die das Leserecht nicht beeinträchtigt, wird dazu verwendet, exklusiveSchreibrechte auf eine Tabelle zu setzen. Sie werden im Bereich 6000 0000h bis6FF8 00FFh angelegt. Über den Versuch, diese Sperre zu setzen, kann festgestelltwerden, welche weiteren Benutzer auf die Tabelle schreiben.

Die folgende Tabelle stellt die wichtigsten Sperren noch einmal zusammen:

Name; Aktion Sperrt was? Verhindert was? Dauer, ArtBenutzer; Benutzer öffnetDatenbank

nichts Benutzer schließt Datenbank

Scheiben; Einfügen, Aktua-lisieren, Löschen

alle verfügba-ren Seiten

Aktualisieren/Löschenvon Daten, z. T. Einfü-gen in Tabellen

je nach benutzerdefiniertemSperrmodus oder Transaktions-dauer; exklusiv

Lesen; Lesen von be-stimmten Langwertseitenoder Indexseiten bei aktiverreferentieller Integrität

Langwert-,Index- oderInhaltsver-zeichnisseiten

Aktualisieren/Löschen inLangwert- und Index-seiten

bis Lesevorgang/Transaktion be-endet ist oder Benutzer Datensatzwechselt; exklusiv

Tabellensperre mit Schrei-brechtsverweigerung (nurdurch DAO möglich)

Tabellenkopfseite

Schreiben in die Tabelle bis Tabelle geschlossen wird;exklusiv und Mehrbenutzer

Tabellenlesesperre; Tabellenkopfseite

Setzen einer exklusivenLesesperre

bis Tabelle geschlossen wird;abhängig von den Optionen

Tabellenschreibsperre Tabellenkopfseite

setzen einer exklusivenSchreibsperre

bis Tabelle geschlossen wird;abhängig von den Optionen

Folgende Schritte laufen bei einem Mehrbenutzerzugriff ab:

1. Zuerst wird die Database Header Page geprüft, ob die Datenbank beschädigt ist odersich in einem Zustand befindet, der Schreiboperation unmöglich macht. In diesem Fallmuß sie repariert werden.

2. Dann wird die .LDB-Datei angelegt oder geöffnet (wenn sie bereits existiert).3. Nun wird ab 1000 0001h versucht, eine Sperre zu setzen. In Abhängigkeit vom er-

sten möglichen Wert wird der Name des Arbeitsplatzrechners und der Benutzernamein einen 64 Byte langen Bereich der .LDB-Datei geschrieben.

4. Nun steht die Datenbank zur Verarbeitung offen.

7.1.4 Verklemmungs-Situationen (Deadlock)

Unter einer Verklemmung (Deadlock) verstehen wir Situationen, bei denen sich ein odermehrere nebenläufige (parallele) Tasks gegenseitig so behindern, daß ohne zusätzlicheMaßnahme von außen keine von beiden Tasks weiter läuft. Wir können dies mit einer un-beschilderten Straßenkreuzung vergleichen, bei der gleichzeitig vier Autos ankommen.

Bei den Betrachtungen im vorherigen Kapitel sind wir eigentlich wieder in die rudimentäreDatenbankverwaltung zurückgefallen. Eigentlich arbeiten wir doch unter SQL nicht mitDatensätzen sondern mit Datensatzmengen, genauer mit Kombinationen aus Datensatz-mengen, die sich aus Abfragen ergeben.

Was geschieht eigentlich, wenn nur ein Teil der Felder gesperrt ist? Was geschieht, wennwir selbst einen Datensatz sperren wollen, der Felder aus mehreren Tabellen enthält? In

Page 644: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.1 Grundlagen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-8 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

welcher Reihenfolge wird gesperrt? Kann es vorkommen, daß sich zwei Sperralgorithmengegenseitig beeinflussen, bis hin zur Konsequenz, daß beide Anwendungen stehen blei-ben?

Bearbeiten wir in einem Formular eine Abfrage aus mehreren Tabellen und sperren die-se, dann müssen sämtliche Datensätze der beteiligten Tabellen gesperrt werden. Diesgeschieht in irgendeiner Form sequentiell.

Arbeitet ein zweiter Benutzer mit einer anderen Abfrage, die ebenfalls diese Tabellensperrt, so kann es im ungünstigsten Fall dazu kommen, daß seine Abfrage

1. die Datensätze der Tabellen in einer anderen Reihenfolge sperrt;2. einen Datensatz in einer Tabelle sperrt, den die erste Anwendung gerade anfordert,

und umgekehrt einen Datensatz anfordert, den die erste Anwendung gerade gesperrthat.

Jede der beiden Anwendungen wartet nun auf die Freigabe durch die andere Anwen-dung. Daß der Benutzer ungeduldig wird und einen Warmstart auslöst, kann nicht derrichtige Weg sein. Schließlich muß nun das Netzwerk erkennen, daß ein Benutzer aufge-geben hat. Die DBMS muß erkennen, daß ein Benutzer weggefallen ist. Es muß alle ge-sperrten Datensätze dieses Benutzers automatisch freigeben usw.

Eleganter sind sicher andere Lösungen. Diese laufen alle darauf hinaus, daß nach Ablaufeines Zeitgebers (oder nach entsprechend häufigen Fehlversuchen) der Benutzer eineMeldung erhält, um über das weitere Vorgehen zu entscheiden.

Weniger spektakulär ist es, alle Ressourcen (Datensätze) automatisch frei zu geben, umden anderen Anwendungen die Chance zu geben, voranzukommen. So schalten sichnacheinander die wartenden Anwendungen ab, bis eine weiter arbeiten kann (kooperati-ves Arbeiten).

Diese Lösung ist nicht ganz trivial. Schließlich können nicht alle Tabellen einfach freige-geben werden. Dabei gehen sämtliche Abfragen, alle Positionierungen usw. verloren.Was geschieht, wenn schon einige Daten in Tabellen geändert wurden, die eigentlichnicht zur Verklemmung beitragen. Sollen diese auch geschlossen werden?

7.1.5 Sperrung bei lesendem Zugriff

Es scheint auf den ersten Blick verwunderlich, Datensätze (genauer alle Datensätze)sperren zu müssen, wenn wir sie nur lesen wollen. Aber es gibt Fälle, wo dies notwendigist.

Stellen wir uns eine Mitarbeitertabelle vor, von der wir einen Bericht erstellen wollen. Indiesem Bericht sollen die Namen aufsteigend alphabetisch erscheinen, eine Spalte (z. B.das Gehalt) soll aufsummieren werden. Stellen wir uns weiter vor, daß eine Mitarbeiteringeheiratet hat und ihren Namen dabei (freiwillig) ändern möchte. Eine Namensänderungführt zu einer Umsortierung im Schlüssel name. Dabei soll ihr Name von A nach Zwandern.

Page 645: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-9

Wie es der Zufall will, sind wir beim Buchstaben E während ein Benutzer die Namens-änderung vornimmt. Dann erscheint unsere Mitarbeiterin zweimal in der Liste, einmal un-ter A einmal unter Z. Die Summe ist ebenfalls falsch.

Diese Probleme können nur dadurch vermieden werden, daß wir auch bei lesendem Zu-griff alle Datensätze sperren.

7.2 Access im Netzwerk

7.2.1 Gemeinsamer Zugriff auf eine Datenbank

Bereits in einer Einzelplatzanwendung kann es notwendig sein, eine Datenbank für ge-meinsamen Zugriff vorzubereiten. Hierdurch ist es möglich, zwei unterschiedliche Anwen-dungen auf die gleichen Daten zugreifen zu lassen. Eine der beiden Anwendungen mußsich aber logischerweise die Daten aus einer gemeinsamen Datenbank oder aus der an-deren Access Anwendung holen. Dies erreichen wir durch eine Verknüpfung. In diesemFall besteht die Anwendung nur aus den Abfragen, Formularen, Berichten, Makros undModuln, die Daten sind ausgelagert. Ggf. können zusätzliche Tabellen „lokal“ vorhandensein. Wie die Tabellen ausgelagert werden, sehen wir im nächsten Kapitel. Bei den weite-ren Erörterungen gehen wir davon aus, daß eine solche Trennung bereits vorgenommenwurde.

Über die Multitasking-Fähigkeit von Windows ist es so möglich, einen Multiuser-Umge-bung auf einem Einzelplatzrechner zu simulieren.

�So öffnen wir eine Datenbank für gemeinsamen Zugriff

1. Wir stellen eine Verbindung zum Netzwerk-Fileserver her, der die Datenbank enthält.2. Wir klicken im Access-Startfenster oder dem Access-Fenster auf die Schaltfläche für

Datenbank öffnen, oder wählen die Menüoption Datei|Datenbank öf f nen.3. Wir wählen im Dialogfeld Datenbank öffnen das Netzwerklaufwerk aus, auf dem

die Datenbankdatei gespeichert ist.4. Wir wählen die zu öffnende Datei aus.5. Wir deaktivieren das Kontrollkästchen Exklusiv.6. Wir bestätigen mit OK. �

Zusätzlich zu dieser Vorgehensweise beachten wir

− Das Umstellen des Kontrollkästchens in Punkt 5 können wir uns ersparen, wenn unse-re Datenbanken immer für gemeinsamen Zugriff geöffnet werden sollen. Hierzu lösenwir die Menüoption Extras|Optionen aus und setzen auf dem Registerblatt Wei -tere die Option Standard-Öffnungsmodus auf Gemeinsame Nu t zung .

− Neben der gemeinsamen Nutzung einer ganzen Datenbank können wir auch nur ein-zelne Tabellen einbinden.

− Beim Öffnen einer Datenbank legen wir neben der Exklusivität auch fest, ob einschreibgeschützter Zugriff erwünscht ist oder nicht. Die Kombination der OptionenSchreibgeschützt und Exklusiv beeinflußt sowohl den Zugriff auf die Daten-bank als auch deren Leistungsfähigkeit. Die folgende Tabelle zeigt die Ergebnisse der

Page 646: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-10 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

verschiedenen Kombinationen nach Leistungsfähigkeit, beginnend mit der Kombinati-on, die die größte Leistungsfähigkeit ergibt.

Schreibgeschützt Exklusiv ErgebnisNein Ja Wir können Daten und Objekte sowohl anzeigen als auch

ändern. Andere Benutzer können die Datenbank nicht öff-nen. Diese standardmäßig eingestellte Kombination bietetalle Leistungsvorteile einer Einzelbenutzerumgebung.

Ja Ja Wir können Daten und Objekte zwar anzeigen, aber nichtbearbeiten. Andere Benutzer können die Datenbank nur fürschreibgeschützten und exklusiven Zugriff öffnen, d. h. siekönnen die Daten und Objekte ebenfalls nur anzeigen undnicht bearbeiten.

Ja Nein Wir können Daten und Objekte zwar anzeigen, aber nichtbearbeiten. Andere Benutzer können die Datenbank öffnenund ihre Daten und Objekte sowohl anzeigen als auch be-arbeiten.

Nein Nein Wir können Daten und Objekte sowohl anzeigen als auchbearbeiten. Andere Benutzer können die Datenbank öffnenund ihre Daten und Objekte ebenfalls anzeigen und bear-beiten.

Diese Eigenschaften schlagen sich in denglobalen Optionen der Datenbank zurMehrbenutzerumgebung nieder. Diesestellen wir über Extras| Optionen …|Registerblatt Weitere ein (Bild 7.2-1).

Die einzelnen Werte werden in dennachfolgenden Kapiteln näher erläutert.

Option Werte ErgebnisStandard bei D a-tensat zsperrung

Keine SperrungenAlle DatensätzeBearbeiteter Date nsatz

Sperrt keinen Datensatz oder alle Daten-sätze, die geöffneten Objekten zugrundeliegen, oder den aktuellen, bearbeitetenDatensatz in Tabellen, Abfragen oderneuen Formularen.

Öffnungsmodus fürDatenba nken

Exklusive NutzungGemeinsame Nu t zung

Öffnet eine vorhandene Datenbank auto-matisch für exklusive oder gemeinsameNutzung.

Bild 7.2-1: Optionen: Mehrbenutzerumge-bung/ODBC

Page 647: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-11

Option Werte ErgebnisAnzeige-aktualisierungs-intervall (s)

1 … 32.766 Setzt das Intervall, nach dem Access Da-tensätze im aktuellen Formular oder Da-tenblatt automatisch aktualisiert.

Daten-aktualisierungs-intervall (ms)

0 … 1.000 Setzt das Zeitintervall, nach dem Accessautomatisch versucht, einen geändertenDatensatz zu speichern, der von einemanderen Benutzer gesperrt worden ist.

Anzahl der D aten-aktualisierungs-versuche

0 … 10 Gibt an, wie oft Access automatisch versu-chen soll, einen geänderten Datensatz zuspeichern, der von einem anderen Benut-zer gesperrt worden ist.

ODBC-Anzeige-aktualisierungs-intervall (s)

1 … 3.600 Setzt das Zeitintervall, in dem Access Da-tensätze automatisch aktualisiert, auf diewir unter Verwendung von ODBC zuge-griffen haben.

Die Sperrinformationen von Access-Tabellen in einer Mehrbenutzerumgebung (Seiten-sperrung) werden in der .LDB- Datei gespeichert. Jeder Benutzer, der eine Datenbanköffnet, besitzt einen Eintrag in dieser Datei. Access verwendet die Information, um zu er-kennen, welche Datensätze in einer Datenbank von wem gesperrt sind, um möglicheFehler durch gleichzeitigen Dateizugriff und eine Datenbankbeschädigung durch mehrereBenutzer zu verhindern.

Die Datei wird automatisch beim Öffnen einer Microsoft Access-Datenbankdatei (.MDB-Datei) erstellt. Die .LDB- Datei einer Datenbank kann nur gelöscht werden, wenn dieDatenbankdatei von keinem Benutzer geöffnet ist.

Beim Verschieben einer Datenbank ist es nicht erforderlich, die .LDB-Datei auch zu ver-schieben. Access versucht, die .LDB- Datei neu zu erstellen, wenn diese nicht zur Ver-fügung steht.

Durch Setzen der Eigenschaft

LockEdits recordsetobjekt. LockEdits = lwert

für Recordset-Objekte vom Typ Dynaset oder Tabelle legen wir die Art der Sper-rung fest, die während der Bearbeitung wirksam ist. Es sind folgende Werte möglich:

Page 648: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-12 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Wert BeschreibungTrue (Standardeinstellung) Vollständiges (pessimistisches) Sperren ist wirksam. So-

bald wir die Methode Edit verwenden, wird die Seite, die den zu bearbeiten-den Datensatz enthält, gesperrt. Edit kopiert den aktuellen Datensatz aus demRecordset-Objekt zur Bearbeitung in den Zwischenspeicher.Durch Anwenden der Methode Update oder Close oder eine der Move-oder Find-Methoden wird die Sperrung der Seite aufgehoben.Update schreibt den Zwischenspeicher wieder in das Recordset-Objekt zu-rück. Close löst das Objekt auf. Move bzw. Find verschieben den internenDatensatz-Cursor an eine andere Stelle. Wurde vorher die Seite verändert, sowird sie dabei auf die Festplatte zurückgeschrieben. Ansonsten gehen die Ände-rungen verloren.

False Eingeschränktes (optimistisches) Sperren ist wirksam. Lediglich während derAktualisierung eines Datensatzes mit Update ist die Seite, die den Datensatzenthält, gesperrt.

Wenn eine Seite gesperrt ist, d. h. wenn LockEdits auf True gesetzt ist, können kei-ne weiteren Datensätze auf dieser Seite von einem anderen Benutzer bearbeitet werden.Wenn wir LockEdits auf True einstellen, während ein anderer Benutzer die Seitebereits gesperrt hat, kommt es zu einem Fehler, wenn wir die Methode Edit verwen-den.

Wenn wir LockEdits auf False einstellen und später, wenn die Seite von einem an-deren Benutzer gesperrt ist, die Methode Update verwenden, tritt ebenfalls ein Fehlerauf.

�Beispiel:In diesem Beispiel wird ein Recordset-Objekt vom Typ Dynaset geöffnet und seine Ei-genschaft LockEdits auf False eingestellt, um sicherzustellen, daß während derAktualisierung der Datensätze kein anderer Benutzer die Daten ändern kann.

Dim db1 As Database, datensätze1 As RecordsetSet db1 = DBEngine.Workspaces(0).Databases(0)Set datensätze1 = db1.OpenRecordset("Zu aktualisierende Tabelle")datensätze1.LockEdits = False.... ' Zeitaufwendiger Vorgang.datensätze1.Close �

Die Methode

Idle DBEngine.Idle [DB_FREELOCKS]

unterbricht die Datenverarbeitung und ermöglicht somit der Datenbank-Engine, ausste-hende Vorgänge wie Maßnahmen zur Speicherverwaltung oder Seiten-Wartezeiten abzu-schließen. Die Datenbank ist in Seiten (pages) gegliedert, die stufenweise bearbeitetwerden.

Page 649: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-13

Bemerkungen

Wir verwenden Idle, um der Datenbank-Engine die Möglichkeit zu geben, Hintergrund-aufgaben durchzuführen, die wegen hohen Datenverarbeitungsaufkommens u. U. nichtabgeschlossen sind. Dieser Fall tritt häufig bei Mehrbenutzer-Multitaskingumgebungenein, bei denen nicht genügend Hintergrundverarbeitungszeit zur Verfügung steht, um alleDatensätze einer Datensatzgruppe auf dem aktuellsten Stand zu halten.

Im allgemeinen werden Lesesperren nur dann aufgehoben und Daten in lokalen Re-cordset-Objekten vom Typ Dynaset werden nur dann aktualisiert, wenn keine ande-ren Aktionen (einschließlich Mausbewegungen) stattfinden. Die Verwendung der MethodeIdle von Zeit zu Zeit stellt der Datenbank-Engine genügend Zeit zur Verfügung, umHintergrundverarbeitungs-Aufgaben nachzuholen, indem nicht benötigte Lesesperrenaufgehoben werden. Wenn wir die Konstante DB_FREELOCKS als Argument angeben,wird die Verarbeitung solange verzögert, bis alle Lesesperren aufgehoben sind.

In Einzelbenutzerumgebungen wird diese Methode nicht benötigt, es sei denn, es werdenmehrere Instanzen eines Anwendungsprogramms ausgeführt. Die Methode Idle kanndie Leistungsfähigkeit in einer Mehrbenutzerumgebung steigern, da sie dafür sorgt, daßdie Datenbank-Engine Daten aus dem Arbeitsspeicher auf die Festplatte schreibt, wo-durch Speichersperren aufgehoben werden.

Genaugenommen liest das Programm ganze Blöcke (Cluster) von der Festplatte undpuffert sie. Diese Pufferung erfolgt im Server und im lokalen Rechner. Greifen nun mehre-re Benutzer auf nahe beieinander liegende Datensätze zu, so besteht offensichtlich dasProblem, diese Zugriffe zu koordinieren. Access versucht normalerweise die geändertenDatensätze so schnell wie möglich wieder auf die Festplatte zu schreiben, um die Ände-rungen damit auch anderen Anwendungen zur Verfügung zu stellen. Solange die Blöckeaber nicht zurückgeschrieben sind, sperren sie ganze Speicherbereiche.

7.2.2 Zentrale Datenbank anlegen

Grundsätzlich werden zuerst einmal von Access sowohl die Daten wie auch alle Abfra-gen, Formulare, Berichte und Modulen in einer einzigen .MDB-Datei gespeichert. Selbstbei einer Einzelplatzanwendung ist es sinnvoll, diese zu trennen. Nur die geänderten Da-ten müssen kurzzeitig gespeichert werden. So haben wir mindestens zwei Datenbankenmit den Anwendungen und den Daten entweder auf einem PC oder auf dem Fileserver.Dazu kommen weitere Datenbanken mit lokalen Anwendungen und lokalen Datenprofilenauf den Arbeitsstationen.

Während der Entwicklung und zum Testen ist jedoch eine einzige Datenbank einfacher zuhandhaben. Daher stellt sich am Ende der Entwicklung die Aufgabe, die Tabellen von denübrigen Elementen zu trennen.

�Wir gehen in folgenden Schritten vor:

1. Wir legen eine neue Datenbank für die Tabellen auf dem Fileserver an. Hierzu benut-zen wir die Vorlage Leere Datenbank. Den Namen wählen wir sinnvoll, z. B. auseinem allgemeinen Präfix für alle weiteren Datenbanken und der Ergänzung DAT.

Page 650: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-14 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Diese Datenbank legen wir in ein Verzeichnis, auf das die Benutzer schreibenden undlesenden Zugriff haben.

2. Nun importieren wir über Datei|E xterne Daten|I mportieren … die Dateien ausder Entwicklungsdatenbank.

3. Sinnvollerweise bauen wir die Verknüpfungen zwischen den importierten Tabellen ent-sprechend der Entwicklungsdatenbank auf.

4. Ggf. kopieren wir die Entwicklungsdatenbank um, wenn wir sie weiter für die Pflegeverwenden wollen.

5. Aus der Entwicklungsdatenbank löschen wir alle Tabellen. Dabei ignorieren wir dieMeldungen über die bestehenden Verknüpfungen.

6. Anschließend verknüpfen wir die Datenbank mit den Tabellen der neuen Datenbank.�

In der Version 2.0 scheiterte dieses Verfahren noch an der strikten Weigerung, Tabellenaus einer Verknüpfung zu löschen. Access 7.0 erlaubt uns nun dieses Vorgehen, wobeiaber empfehlenswert ist, sofort alle externen Verknüpfungen herzustellen.

Auch wenn wir in vielen „populären“ Büchern sehen, daß die Autoren auf das zentraleUnternehmensdatenmodell verzichten, sollten wir das bestehende Modell nicht bei dieserAktion zerstören.

7.2.3 Tabellen aus einer zentralen Datenbank einbinden

7.2.3.1 Access-Datenbank einbinden�

Um auf die Daten einer zentralen Datenbank zuzugreifen, müssen die Tabellen in daslokale Programm eingebunden werden. Hierzu gehen wir in folgenden Schritten vor:

1. Zuerst aktivieren wir das Datenbankfenster z. B. durch Klick auf die Ikone .2. Dann lösen wir Datei|E xterne

Daten � |Tabe l le verknü p-

fen… den Tabelleneinbindungs-Manager aus. Er meldet sich miteinem Fenster zur Auswahl derDatenbank (Bild 7.2-2).

3. Im Feld Dateityp wählen wirden passenden Typ aus. Norma-lerweise Microsoft A ccess.

4. Es wird eine Liste mit den pas-senden Dateien aufgebaut. In ihrsuchen wir die gewünschte Da-tenbank auf dem Fileserver undbestätigen mit Verknüpfen .

Bild 7.2-2: Einbinden

Page 651: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-15

5. Sofort erscheinen alle Tabellen dergewählten Datenbank (Bild 7.2-3),aus der wir die Tabelle(n) auswählenund durch Klick auf OK in unsere

Anwendung einbinden.6. Danach erscheinen die Tabellen im

Datenbankfenster. Sie sind mit einemschwarzen Pfeil als verknüpfte Ta-bellen markiert. �

Nachdem wir die Tabellen eingebunden haben, sollten wir die Datenbank nicht mehr ver-schieben, da die Referenz nicht aktualisiert wird. Ein Zugriff auf eine Tabelle führt dann zueinem Fehler. Sollte trotzdem eine solche Verschiebung notwendig sein, so können wirüber Extras|Add- I ns| Tabellenverknüpfungs-Manager … diesen starten (Bild7.2-4).

Er zeigt uns alle eingebundenenTabellen an. Bei allen verschobe-nen Tabellen markieren wir dasKontrollkästchen und klicken OK

an. Sollte nun die Tabelle nichtmehr an der Referenz gefundenwerden, so startet ein Dateidialog,mit dem wir eine neue Datenbankbzw. einen neuen Pfad festlegenkönnen, um die fehlenden Tabel-len zu verknüpfen.

Wollen wir wissen, woher die ver-knüpften Tabellen stammen, sokönnen wir dies einmal allgemein über den Manager erledigen. Es besteht aber auch dieMöglichkeit, die Tabelle zu markieren und im Entwurfsmodus zu öffnen. Ein Klick auf dieEigenschaftsikone bzw. auf den Menüpunkt Ansicht| igen schaften öffnet ein weite-res Fenster, in dem wir unter dem Punkt Beschreibung die Herkunft der Tabelle inForm eines Eintrages DATABASE=C:\Eigene Dateien\ACCESS\FH\fh10dat.mdb;TABLE=student sehen, aufgeteilt nach Datenbank und Tabelle . In der nächsten ZeileGültigkeitsregel finden wir die formular-globalen Regeln. Über diesen Zeiger findetAccess die passende Tabelle.

Wir können beliebige Kombinationen eingebundener und lokaler Tabellen erstellen. So istz. B. die Ausstattung eines bestimmten Rechners mit Laufwerken durch dessen Hardwarebestimmt, so daß diese Tabelle für jeden angeschlossenen Rechner individuell gespei-chert werden.

Die Struktur der eingebundenen Tabellen können wir nur in der Trägerdatenbank(hierunter wollen wir die Datenbank verstehen, die die Tabelle physikalisch enthält) än-dern. Einige Feldeigenschaften lassen sich aber für alle verbundenen Anwendungen indi-viduell einstellen. Hierbei handelt es sich um die Eigenschaften

Format

Bild 7.2-3: Tabellen verknüpfen

Bild 7.2-4: Tabellenverknüpfungs-Manager

verknüpfte Tabelle

Page 652: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-16 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

DezimalstellenEingabeformatBeschriftungBeschreibung

Hierzu rufen wir die Entwurfsansicht der eingebundenen Tabelle auf. Nach einer War-nung, daß nicht alle Eigenschaften geändert werden können. In der Entwurfsansicht kön-nen wir nun die einzelnen Eigenschaften durcharbeiten. Access zeigt uns immer, ob dieEigenschaft änderbar ist oder nicht. Es handelt sich um alle Eigenschaften zur Präsenta-tion. Alle Eigenschaften, die die innere Struktur betreffen, sind unveränderbar.

Wir können zwar die Eigenschaften Gültigkeitsregel, Gültigkeitsmeldungund Standardwert nicht für die Tabelle einstellen, können aber diese Eigenschaften ineinem Formular, das an die eingebundene Tabelle gebunden ist, einstellen. Dies müssenwir dann aber für alle Formulare durchführen, die Felder der eingebundenen Tabelle be-arbeiten kann.

− Falls wir eine Tabelle aus Paradox, Btrieve oder einer SQL-Datenbank einbinden,müssen wir möglicherweise das in der anderen Anwendung festgelegte Paßwort ange-ben, damit unsere Anwendung Zugriff auf diese Daten erhält. Ganz hilfreich ist es,spezielle Paßwörter für diese externen Zugriffe in den jeweiligen Trägerdatenbankenvorzusehen.

− Wenn wir eine Tabelle einbinden und ein Paßwort festlegen, speichert Access dasPaßwort in der Datenbank, damit wir die externe Tabelle auch später öffnen können.Um das Paßwort zu sichern, können wir eine Datenbank verschlüsseln, die eingebun-dene Tabellen mit Paßwörtern enthält.

− Wenn wir zwei Tabellen aus derselben Access-Datenbank einbinden, werden alle Be-ziehungen übernommen, die in der Trägerdatenbank zwischen diesen Tabellen be-steht.

7.2.3.2 Fremde Datenbanken einbinden

Wie wir sehen, kann Access verschiedene Datenbanktypen direkt einbinden (Typenlistein Bild 7.2-2). Dies hat den Vorteil, daß eine Reihe von internen Eigenschaften der Da-tenbanken zusätzlich genutzt werden können.

Daneben finden wir eine allgemeinere Art in Form der SQL-Datenbanken, die über dieODBC-Schnittstelle gesteuert werden. Näheres finden Sie im entsprechenden Kapitel.

7.2.4 Sperrung von Datensätzen

Wir hatten gesehen, daß das Sperren von Datensätzen beim Einlesen eine konservativeTechnik ist, um Inkonsistenzen in einer Mehrbenutzerumgebung zu vermeiden. Bei deroptimistischen Technik wird dagegen beim Zurückschreiben kontrolliert, ob zwischenzeit-liche Änderungen erfolgt sind.

Wir unterscheiden automatisches Sperren durch Access in Abfragen, Formularen undBerichten und programmiertes Sperren von Access Basic-Dateien in Unterprogrammen.

Page 653: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-17

7.2.4.1 Automatisches Sperren von Datenbanksätzen

Sperrungen von Datensätzen ist nur in Objekten (und damit verknüpften Unterprogram-men) notwendig, die eine Änderung von Daten zulassen (Abfragen, Formulare ggf. Be-richte). Berichte stellen einen gewissen Sonderfall dar. Hier sperren wir entweder keineoder alle Datensätze. Wenn wir alle Datensätze sperren, dann verhindern wir bestimmteProbleme, wie sie in der Einführung erwähnt wurden.

Insgesamt gibt es drei Eigenschaften, von denen aber nur die EigenschaftDatensätzeSperren (RecordLocks ) sowohl in Formularen, Berichten und Abfragen(alle außer Datendefinitionsabfragen und SQL Pass-Through-Abfragen) zu finden ist. Be-trachten wir daher zuerst diese Eigenschaft. Sie hat folgende Wirkung

Objekt BeschreibungFormulare bestimmt, wie Datensätze in der zugrundeliegenden Tabelle oder Abfrage

gesperrt werden, wenn Daten in einer Mehrbenutzerdatenbank aktualisiertwerden.

Berichte bestimmt, ob Datensätze in der zugrundeliegenden Tabelle oder Abfragegesperrt werden, wenn ein Bericht in Seitenansicht angezeigt oder gedrucktwird.

Abfragen bestimmt, ob Datensätze in einer Abfrage (normalerweise Aktionsabfragen ineiner Mehrbenutzerdatenbank) gesperrt werden, wenn die Abfrage ausge-führt wird.

Wir können sie auf folgende Werte einstellen

Einstellung BeschreibungKeineSperrungen

(Standardeinstellung) In Formularen können zwei oder mehrere Benut-zer einen Datensatz gleichzeitig bearbeiten. Wenn jedoch zwei Benut-zer versuchen, Änderungen in demselben Datensatz zu speichern, zeigtAccess dem Benutzer, der den Speichervorgang später beginnt, eineentsprechende Meldung an. Dieser Benutzer kann daraufhin die Ände-rungen am Datensatz verwerfen, den Datensatz in die Zwischenablagekopieren oder die Änderungen, die durch den ersten Benutzer ausge-führt wurden, ersetzen. Diese Einstellung wird in schreibgeschütztenFormularen oder in Einbenutzerdatenbanken verwendet. Sie wird au-ßerdem in Mehrbenutzerdatenbanken verwendet, um mehreren Benut-zern gleichzeitig das Ändern eines Datensatzes zu ermöglichen.In Berichten werden Datensätze nicht gesperrt, wenn der Bericht inSeitenansicht angezeigt oder gedruckt wird.In Abfragen werden Datensätze nicht gesperrt, wenn die Abfrage aus-geführt wird.

Page 654: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-18 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Einstellung BeschreibungAlleDatensätze

Alle Datensätze in der zugrundeliegenden Tabelle oder Abfrage werdengesperrt, während das Formular in der Formularansicht oder Daten-blattansicht geöffnet ist bzw. wenn der Bericht in Seitenansicht ange-zeigt oder gedruckt wird oder wenn die Abfrage ausgeführt wird. AndereBenutzer können die Datensätze zwar anzeigen, sie können jedoch erstnach dem Schließen des Formulars, bzw. nach Beenden des Druckvor-gangs oder nach Ausführen der Abfrage neue Datensätze hinzufügen,löschen oder bearbeiten.

BearbeiteterDate nsatz

(Nur für Formulare und Abfragen) Eine Seite von Datensätzen wird ge-sperrt, sobald ein Benutzer beginnt, eines der Felder in dem Datensatzzu bearbeiten. Diese Seite bleibt solange gesperrt, bis der Datensatzgespeichert wird. Ein Datensatz kann zu einem Zeitpunkt immer nur voneinem Benutzer bearbeitet werden.

Wir verwenden Keine Sperrungen in Formularen, wenn nur ein Benutzer die zugrun-deliegenden Tabellen oder Abfragen verwendet oder alle Änderungen an den Daten vor-nimmt.

Wir verwenden Alle Datensätze, um sicherzustellen, daß keine Änderungen mehran den Daten vorgenommen werden, wenn wir einen Bericht in Seitenansicht anzeigenoder ausdrucken oder wenn wir die eine Anfügeabfrage, Löschabfrage, Tabellenerstel-lungsabfrage oder Aktualisierungsabfrage ausführen.

Wir verwenden Bearbeiteter Datensatz für Formulare in einer Mehrbenutzerda-tenbank, wenn zwei oder mehrere Benutzer gleichzeitig Daten bearbeiten könnten(Konjunktiv beachten!).

In der Formularansicht oder der Datenblattansicht ist jeder gesperrte Datensatz im Da-tensatzmarkierer mit einem Sperrsymbol versehen. Bei geänderten Datensätzen fin-den wir dagegen einen Schreibstift. Durch die Tastenkombination

� � oder durch Klick

auf den Datensatzmarkierer kann der Benutzer den Datensatz schnell zurückschreiben,um ihn für andere Benutzer verfügbar zu machen. � verwirft dagegen die Änderungen.

Wenn die Daten in einem Formular, einem Bericht oder einer Abfrage aus einer ODBC-Datenbank stammen, stehen zwar alle Einstellungen zur Verfügung, aber nur die Einstel-lung Keine Sperrungen ist gültig, d. h. Datensätzen einer ODBC-Datenbank lassensich nicht „fern“-sperren.

) Hinweis: Die Eigenschaft DatensätzeSperren (RecordLocks ) für Formularekönnen wird standardmäßig über die Menüoption Ansicht|Optionenumstellen. Im Listenfeld Kategorie wählen wir Mehrbenutzerumg e-bung/ODBC" aus. In der Liste Optionen können wir dann die Eigen-schaft Standard bei Datensatzsperrung unseren Wünschen anpas-sen.

Ein Formular ist immer mit einer Abfrage verknüpft (Eigenschaft Datenherkunft ). Überdie Eigenschaften BearbeitenZulassen und Standardbearbeitung des Formu-lars können wir den Verarbeitungsmechnismus festlegen

Page 655: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-19

Eigenschaft BeschreibungBearbeitenZulassen(AllowEditing)

mit dieser Eigenschaft legen wir fest, ob die MenüoptionDatensätze|Bearbeiten zulassen aktiviert ist, wenn wirein Formular in der Formularansicht oder Datenblattansichtöffnen. Die Einstellungen sindVerfügbar (True) (Standardeinstellung) Der Befehl B e-

arbeiten zulassen ist aktiviert.Nicht verfügbar Der Befehl Bearbeiten zulassen

ist nicht aktiviert.Standardbearbeitung(DefaultEditing)

mit dieser Eigenschaft legen wir fest, wie ein Formular geöffnetwird. Eine Beschreibung der Möglichkeiten folgt

− Die Menüoption Bearbeiten zulassen steht nicht für ein Formular oder das zuge-hörige Datenblatt zur Verfügung, wenn die Eigenschaft BearbeitenZulassen desFormulars auf die Einstellung Nicht verfügbar eingestellt ist.

− Sie steht außerdem nicht in Formularen, Tabellen oder Abfragen zur Verfügung, dieüber die Menüoption Zugriffsrechte|Berechtigungen im Datenbankfenster mitSchreibschutz versehen sind.

− Wenn die Datenbank mit Schreibschutz geöffnet wurde, ist die Menüoption ebenfallsnicht verfügbar.

Einstellung BeschreibungBearbeiten zulassen(1)

(Standardeinstellung) Wir können Datensätze in der Ta-belle oder der Abfrage des Formulars bearbeiten, hinzu-fügen oder löschen.

Nur lesen(2)

Wir können Datensätze nur dann bearbeiten, hinzufügenoder löschen, wenn Sie vorher den Befehl Bearbeitenzulassen wählen.

Dateneingabe(3)

Wir können neue Datensätze hinzufügen. VorhandeneDatensätze stehen nicht zur Verfügung (siehe die folgen-de Anmerkung).

Keine neuen Datensätze(4)

Wir können vorhandene Datensätze bearbeiten oder lö-schen, aber keine neuen Datensätze hinzufügen.

Durch Kombinieren dieser Eigenschaften können wir die folgenden Bedingungen definie-ren:

Standardbearbeitung BearbeitenZulassen BeschreibungBearbeiten zulassen Verfügbar oder

nicht ve r fügbarAlle Datensätze stehen zur Verfügung.Wir können Datensätze bearbeiten, hin-zufügen oder löschen.

Nur lesen Verfügbar Alle Datensätze stehen zur Verfügung.Vor dem Bearbeiten, Hinzufügen oderLöschen von Datensätzen müssen wiraber den Befehl Bearbeiten zula s-sen wählen.

Page 656: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-20 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Standardbearbeitung BearbeitenZulassen BeschreibungNur lesen Nicht verfügbar Alle Datensätze sind verfügbar, wir kön-

nen jedoch keinen neuen Datensätzehinzufügen, und vorhandene Datensät-ze können nicht bearbeitet oder ge-löscht werden.

Dateneingabe Verfügbar Vorhandene Datensätze stehen nichtzur Verfügung. wir können jedoch neueDatensätze hinzufügen.

Dateneingabe Nicht verfügbar Vorhandene Datensätze stehen nichtzur Verfügung. Datensätze können nichtbearbeitet, hinzugefügt oder gelöschtwerden. (unbrauchbare Kombination)

Keine neuen Datensä t ze Verfügbar odernicht ve r fügbar

Alle vorhandenen Datensätze sind ver-fügbar, und können bearbeitet oder ge-löscht werden. Wir können aber keineneuen Datensätze hinzufügen.

7.2.4.2 Programmiertes Sperren

In Access Basic-Programmen sperren bzw. entsperren wir Datensätze bzw. Datensatzbe-reiche mit Hilfe der Anweisungen

Lock Lock [#]dateinummer [,{datensatz | [anfang] To e nde}]Unlock Unlock [#]dateinummer [,{datensatz | [anfang] To ende}]

Argument Beschreibungdateinummer Nummer, die in der Anweisung Open zum Öffnen der Datei verwendet

wurde. Wir können einen beliebigen numerischen Ausdruck verwenden,sofern dieser der Nummer einer geöffneten Datei entspricht.

datensatz Nummer des zu sperrenden Datensatzes oder Bytes. Es kann eine be-liebige Zahl aus dem Bereich von 1 bis 2.147.483.647 (231-1) ver-wendet werden. Ein Datensatz kann bis zu 65.535 Byte lang sein.

anfang Nummer des ersten zu sperrenden Datensatzes oder Bytes.ende Nummer des letzten zu sperrenden Datensatzes oder Bytes.

Bei Dateien im Binärmodus (Binary ) beinhalten datensatz , anfang und ende dieNummer eines Bytes, bezogen auf den Anfang einer Datei. Das erste Byte einer Datei hatdie Nummer 1.

Bei Dateien für wahlfreien Zugriff (Random) beinhalten datensatz , anfang und e n-de die Nummer eines Datensatzes, bezogen auf den Anfang einer Datei. Der erste Da-tensatz hat die Nummer 1.

Wurde die Datei für eine sequentielle Ein- oder Ausgabe geöffnet, beziehen sich Lockund Unlock – unabhängig von dem durch anfang und ende festgelegten Bereich –auf die gesamte Datei.

Page 657: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-21

Die Anweisungen Lock und Unlock werden grundsätzlich paarweise verwendet. Da-bei müssen die für Lock und Unlock verwendeten Argumente genau übereinstimmen.

Wenn wir nur einen Datensatz angeben, wird nur dieser Datensatz gesperrt bzw. freige-geben. Wenn wir einen Datensatzbereich angeben und den Anfangsdatensatz (anfang )weglassen, werden alle Datensätze vom ersten Datensatz bis zum Ende des Bereichs(ende ) gesperrt bzw. freigegeben. Wenn wir Lock ohne Datensatz verwenden, wird diegesamte Datei gesperrt. Verwenden wir Unlock ohne Datensatz, wird die gesamte Da-tei freigegeben.

) Hinweis: Es ist wichtig, daß vor dem Schließen einer Datei oder dem Abbrechen desProgramms sämtliche Sperrungen mit der Anweisung Unlock aufgehobenwurden. Nicht entfernte Sperrungen können zu unvorhersehbaren Ergebnis-sen führen. Die Argumente von Lock und Unlock müssen genau über-einstimmen.

�Beispiel:Im folgenden Beispiel werden in einer wahlfreien Datei alle Sätze bearbeitet und dabeijeweils gesperrt

Open "TESTDAT" For Random Shared As #1 Len = Len(BenSatz)For SatzNr = 1 To LOF(1) / Len(BenSatz) Lock #1, SatzNr ' Aktuellen Datensatz sperren. Get #1, SatzNr, BenSatz ' Einen Benutzer-Datensatz lesen. ... ' Anweisung zur Änderung der Daten vorsehen. Put #1, SatzNr, BenSatz ' Datensatz aktualisieren. Unlock #1, SatzNr ' Datensatzsperre aufheben.Next SatzNr ' Schleife bis Ausführungsende.Close #1 ' Datei schließen. �

In erster Näherung unterscheidet sich die Verarbeitung einer Datenbank in einer Mehrbe-nutzerumgebung nicht von der an einem Einzelarbeitsplatz, d. h. wir können Datenban-kobjekte in einer Mehrbenutzerumgebung genauso entwerfen oder ändern, wie wenn Sieeine Datenbank exklusiv verwenden. Weiterhin können wir alle Objekte außer Tabellen inder Entwurfsansicht öffnen, während diese von anderen Benutzern verwendet werden.

�Wir bearbeiten ein Datenbankobjekt in einer Mehrbenutzerumgebung, indem wir

1. das Datenbankobjekt in der Entwurfsansicht öffnen;2. die gewünschten Änderungen vornehmen und dann das Datenbankobjekt wieder spei-

chern. �

Hat ein anderer Benutzer ebenfalls Änderungen an dem Datenbankobjekt vorgenommen,seit sie es geöffnet haben, zeigt Microsoft Access eine entsprechende Meldung an. Wirkönnen die Änderungen des anderen Benutzers entweder überschreiben oder unsereVersion des Objekts unter einem anderen Namen speichern.

Folgende Besonderheiten sind zu beachten

− Wir können eine Datenbank zwar entwerfen, während sie von anderen Benutzern ver-wendet wird. Dies ist aber i. a. wenig sinnvoll. Eine Datenbank „on the fly“ zu entwik-

Page 658: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.2 Access im Netzwerk Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-22 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

keln, entspricht nicht einem systematischen; ingenieurmäßigen Vorgehen. Sollte estrotzdem einmal notwendig sein, umfangreiche Änderungen des Entwurfs vorzuneh-men, sollten wir die Datenbank mit der Option Exklusiv öffnen. .Dies setzt voraus,daß kein anderer Benutzer auf irgendeinen Teil der Datenbank zugreift.

− Der Versuch, eine Datenbank exklusiv zu öffnen, die bereits von einem anderen Be-nutzer geöffnet ist, führt zu einer Fehlermeldung.

− Sobald wir eine Tabelle in der Entwurfsansicht geöffnet haben, kann kein anderer Be-nutzer Daten aus dieser Tabelle lesen oder gar bearbeiten. Somit sind auch alle Abfra-gen, Berichte, Formulare usw. gesperrt.

− Bei einer wechselseitigen Abhängigkeit von Objekten aktualisieren wir am besten allebeteiligten Objekte, damit andere Benutzer keine inkonsistenten Versionen der Objekteöffnen. Wenn wir einem Formular z. B. Felder hinzufügen möchten, müssen wir dieFelder zunächst der zugrundeliegenden Abfrage hinzufügen, bevor wir das Formularaktualisieren.

− Hat ein anderer Benutzer ein Datenbankobjekt (Abfrage, Formular oder Bericht) geöff-net, dann werden unsere Änderungen erst dann aktiv, wenn der Benutzer das Objektschließt und wieder öffnet, d. h. er arbeitet mit einer temporären Kopie des Objektes.Bei Access Basic-Moduln muß der Benutzer sogar die ganze Datenbank schließen, ummit den aktualisierten Unterprogrammen arbeiten zu können.

− Änderungen an Makros werden dagegen sofort aktiv, so daß dies zu Fehlern bei einemanderen Benutzer führen kann. Makros sollten wir daher immer im exklusiven Zugriffändern. �

7.3 Aktualisieren von Datensätzen

Selbst wenn wir die Daten nur lesen wollen, sollten sie aktuell sein. Ändern nun mehrereBenutzer die Daten, so könnte es zu Abweichungen zwischen der Anzeige und dem Da-tenbestand kommen.

Daher ist ein Mechanismus nötig, der die Anzeigen regelmäßig aktualisiert. In diesemZusammenhang haben wir bereits die Option Anzeigeaktualisierungsintervallkennengelernt. Sie steht standardmäßig auf 60 s, so daß die Anzeige im Minutenab-stand aufgefrischt wird. Wir können sie bei Bedarf auf unseren Bedarf umstellen. Will derBenutzer im Intervall ein Auffrischen erzwingen, so löst er die MenüoptionDaten sätze|Anzeige a ktualisieren aus.

Diese Aktualisierung ist aber nicht ganz korrekt, da keine neue Selektion oder Sortierungerfolgt. Somit werden Datensätze mit Änderung am Sortierschlüssel und neue Datensätzenicht berücksichtigt. Ein zwischenzeitlich gelöschter Datensatz wird mit #Gelöschtmarkiert. Datensätze, die das Filterkriterium nicht mehr oder schon wieder erfüllen, wer-den nicht entfernt bzw. Ergänzt. Der Hintergrund dieses Verhaltens ist damit zu erklären,daß die sichtbaren Datensätze neu gelesen werden. Es erfolgt aber keine neue Abfrage.Eine solche neue Abfrage erzwingen wir mit der Tastenkombination

� �.

7.3.1 Transaktionskonzept

Unter einer Transaktion versteht man eine Reihe von Datenbankzugriffen (Änderungen),die eine Datenbank aus einem konsistenten Zustand in einen weiteren konsistenten Zu-

Page 659: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-23

stand überführen. Eine Unterbrechung der Transaktion führt u. U. zu inkonsistenten Zu-ständen, die bei der weiteren Verarbeitung zu Fehlern führen.

�Beispiel:Eine Banküberweisung besteht aus folgenden Datenbankzugriffen

Suchen des AbsendersPrüfen des KontostandesAbbuchen des ÜberweisungsbetragesSuchen des EmpfängersAufbuchen des Überweisungsbetrages

Nur wenn alle Zugriffe erfolgreich sind, sollen die Daten geändert werden, d. h. der Betragab- bzw. aufgebucht werden. �

Transactions lwert = datenbankobjekt.Transactionlwert = recordsetobjekt.Transaction

Diese Funktion liefert einen Wert, der angibt, ob ein Objekt das Aufzeichnen einer Reihevon Änderungen unterstützt, die später zurückgesetzt (rückgängig gemacht) oder über-nommen (gespeichert) werden können.

Wert BeschreibungTrue Das Objekt unterstützt Transaktionen.False Das Objekt unterstützt keine Transaktionen. Dies ist bei Recordset-Objekten

vom Typ Snapshot der einzig mögliche Rückgabewert.

Basiert ein Dynaset oder eine Tabelle vollständig auf Access-Tabellen, ist die EigenschaftTransactions auf True eingestellt und wir können Transaktionen verwenden.

Dynasets und Tabellen, die auf Tabellen basieren, die mit anderen Datenbankproduktenangelegt wurden, unterstützen eventuell keine Transaktionen. Wir können z. B. in einemDynaset, das auf einer Paradox-Tabelle basiert, keine Transaktionen verwenden.

Bevor wir bei einem Workspace-Objekt eines Recordset-Objekts die MethodenBeginTrans, CommitTrans bzw. Rollback einsetzen, sollten wir prüfen, ob Trans-aktionen unterstützt werden. Die Anwendung ist zwar unschädlich, führt aber zu einervermeintlichen Sicherheit beim Programmierung.

BeginTrans arbeitsbereich.BeginTransCommitTrans arbeitsbereich.CommitTransRollback arbeitsbereich.Rollback

Diese Methoden steuern die Verarbeitung einer Transaktion während einer durch einWorkspace-Objekt definierten Sitzung auf die folgende Weise:

− BeginTrans startet eine neue Transaktion.

Page 660: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.3 Aktualisieren von Datensätzen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-24 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

− CommitTrans beendet die aktuelle Transaktion und speichert die Änderungen.− Rollback beendet die aktuelle Transaktion und stellt für die Datenbanken desWorkspace-Objekts den Zustand wieder her, den sie bei Beginn der aktuellen Trans-aktion aufwiesen.

Das Argument arbeitsbereich ist eine Variable eines Objektdatentyps, die wir aufein Workspace-Objekt gesetzt haben.

) Vorsicht: Innerhalb eines Workspace-Objekts sind Transaktionen grundsätzlichglobal, d. h. nicht auf eine einzelne Datenbank oder Datensatzgruppe be-schränkt. Wenn wir in einer Transaktion innerhalb eines Workspace-Objekts an mehr als einer Datenbank oder mehr als einem Datensatz Ope-rationen durchführen, setzt die Methode Rollback alle an diesen Daten-banken und Datensatzgruppen durchgeführten Operationen wieder zurück.

Haben wir eine Transaktion mit CommitTrans bestätigt, so können wir während dieserTransaktion vorgenommene Änderungen nicht mehr rückgängig machen, es sei denn, dieTransaktion ist selbst Teil einer umfassenderen Transaktion, die zurückgesetzt wird.

Wir können in einem einzigen Workspace-Objekt gleichzeitig bis zu fünf Transaktions-ebenen öffnen, indem wir mehrere, verschachtelte Kombinationen von BeginTransund CommitTrans oder Rollback verwenden. Diese Transaktionen müssen wir z. B.die Schleifen vollständig ineinander liegen.

Wollen wir gleichzeitig ablaufende Transaktionen mit sich überschneidenden, nicht ver-schachtelten Geltungsbereichen einrichten, müssen wir zusätzliche Workspace-Objekteerstellen, die die nebeneinander bestehenden Transaktionen enthalten.

Wenn wir ein Workspace-Objekt schließen, ohne noch ausstehende Transaktionen zuspeichern oder zurückzusetzen, werden diese automatisch zurückgesetzt.

Wenn wir die Methode Rollback verwenden, müssen wir auf jedes Form-Objekt, dasauf Daten verweist, die seit Beginn der Transaktion u. U. geändert wurden, die MethodeRefresh anwenden. So wird der Benutzer nicht mit inkonsistenten Daten versorgt.

) Hinweis: Bei Verwendung von SQL-Datenbanken können Transaktionen nichtverschachtelt werden.

) Tip: Das Durchführen von Transaktionen ist nicht nur zur Erhaltung der Daten-integrität zu empfehlen, sondern auch zur Steigerung der Leistung Ihrer An-wendung. Durch Zusammenstellen von Vorgängen, die wiederholt auf denDatenträger zugreifen müssen, in Transaktionsblöcken werden diese ge-puffert, können dadurch die Zahl der Datenträgerzugriffe reduzieren und sodie Geschwindigkeit Ihrer Anwendung erhöhen.

Page 661: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-25

7.3.2 Arbeitsgruppen

Wir können Benutzern unterschiedlicher Access-Arbeitsgruppen Zugriff zu einer Daten-bank und deren Objekten erteilen, und zwar durch Erstellen des gleichen Gruppenkontosmit demselben Namen und derselben persönlichen Identifikationskennung (PID) in jederArbeitsgruppe. Wir Fügen dann diesem Gruppenkonto die entsprechenden Benutzer dereinzelnen Arbeitsgruppen hinzu.

�So erstellen wir ein Gruppenkonto mit demselben Namen und derselben PID in unter-schiedlichen Arbeitsgruppen:

1. Wir starten Access mit der ersten Arbeitsgruppe, in der wir das Konto verwendenmöchten.

2. Wir öffnen eine Datenbank.3. Wir erstellen in der Arbeitsgruppe ein Gruppenkonto.4. Wir verlassen Access.5. Nun wechseln wir zur zweiten Microsoft Access-Arbeitsgruppe.6. Dort starten wir Access.7. Wir erstellen in der zweiten Arbeitsgruppe ein Gruppenkonto, indem wir – auch bezüg-

lich der Groß-/Kleinschreibung – exakt denselben Gruppennamen und die PID ver-wenden wie für das Gruppenkonto, das wir in der ersten Arbeitsgruppe erstellt haben.�

) Wichtig Aus Sicherheitsgründen vermeiden wir die Weitergabe von Kopien derSystemdatenbank (normalerweise der Datei SYSTEM.MDW), welche die Ar-beitsgruppe definiert, die wir zur Erstellung unserer Datenbank und von de-ren Objekten verwendet haben. Benutzer, die sich in Microsoft Access alsMitglied der Gruppe Administratoren der Arbeitsgruppe anmeldenkönnen, können alle Berechtigungen für die in der Arbeitsgruppe erstelltenDatenbanken und Objekte erhalten.

Anmerkung Eine weitere Möglichkeit, Informationen mit anderen Systemen gemeinsamzu nutzen, ist das Erstellen eines Benutzerkontos mit demselben Namenund derselben PID in jeder Arbeitsgruppe. In den meisten Fällen ist es je-doch einfacher, ein Gruppenkonto zu verwenden.

Sicherstellen der Eindeutigkeit Ihrer Microsoft Access-Arbeitsgruppe

Beim Installieren von Microsoft Access erstellt das Setup-Programm automatisch eineArbeitsgruppe, die mit dem von Ihnen angegebenen Namen und den Firmeninformatio-nen bezeichnet wird. Da diese Informationen oftmals sehr leicht zu bestimmen sind, ist esnicht berechtigten Benutzern möglich, eine weitere Version dieser Arbeitsgruppe zu er-stellen und somit die unwiderruflichen Berechtigungen eines Administratorkontos (einesMitglieds der Gruppe Administratoren) der Arbeitsgruppe zu erlangen.

Ein wichtiger Bestandteil des Absicherns unserer Datenbank besteht nun darin, die Da-tenbank in einer eindeutigen Arbeitsgruppe zuzuordnen. Wahrscheinlich möchten wirauch die Microsoft Access-Arbeitsgruppen, die auf mehreren Computern mit den gleichenNamen und gleichen Firmeninformationen vorinstalliert wurden, eindeutig kennzeichnen.

Page 662: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.3 Aktualisieren von Datensätzen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-26 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

�So erstellen wir eine eindeutige Microsoft Access-Arbeitsgruppe:

1. Wir überprüfen, daß das Administrator-Dienstprogramm für Access-Arbeitsgruppen aufdem Computer installiert ist.Dieses Programm wird automatisch in der Programmgruppe installiert, in der wir auchMicrosoft Access installieren, wenn wir die Option Vollständ i ge/Benutzerdefi -nierte Installation wählen und Tools in die Setup-Optionen einschließen. Istdas Programm nicht installiert haben, so starten wir erneut das Setup-Programm undwählen die erwähnten Optionen.

2. Wir klicken doppelt auf MS Access Arbeitsgruppen-Administrator .Access zeigt das Dialogfeld Arbeitsgruppen-Administrator an.

3. Wir klicken auf die Schaltfläche Erstellen .

Access zeigt das Dialogfeld Eigentümer der Arbeitsgruppe an, in dem wir dieInformationen eingeben, die Access zum Bezeichnen des Eigentümers der Systemda-tenbank (normalerweise der Datei SYSTEM.MDW) verwendet, welche die neue Arbeits-gruppe definiert.

4. Wir geben unseren Namen und die Firma in das Dialogfeld ein.5. Dann geben wir einen eindeutigen Arbeitsgruppen-Code ein und klicken auf OK.

Der Code kann aus einer beliebige Kombination von bis zu 20 Zahlen und Zeichen be-stehen. Wenn wir keinen Arbeitsgruppen-Code angeben, kann jeder beliebige Benut-zer durch Verwenden des gleichen Namens und der gleichen Firma die Arbeitsgruppeneu erstellen.Microsoft Access zeigt das Dialogfeld Arbeitsgruppen-Systemdatenbank an.Wichtig: Wir müssen unbedingt unseren Namen, die Firma und den Arbeitsgruppen-Code, einschließlich der Groß/Kleinschreibung der Buchstaben gesichert aufbewahren.Falls wir nämlich irgendwann einmal die Systemdatenbank neu erstellen müssen, be-nötigen wir exakt diese Werte, sonst können die Systemdatenbank nicht wiederher-stellen.

6. Im Dialogfeld Arbeitsgruppen-Systemdatenbank geben wir den Pfad und denNamen der Systemdatenbank ein, die die neue Arbeitsgruppe definiert, und klicken aufOK.

7.4 ODBC

7.4.1 Grundlagen

Der Einsatz von Datenbanken im Netzwerk zeichnet sich häufig dadurch aus, daß Daten-banken verschiedener Hersteller eingesetzt werden. Dies hängt oft vom Einsatzschwer-punkt dieser Datenbanken ab. Einige sind auf besonders große Datenbestände, andereauf verteilte Datenbanken usw. optimiert.

Das Zauberwort heißt hier ODBC (Open Database Connectivity), was soviel wie OffeneDatenbank Verbindung heißt. Diese ist ein Standard, den Microsoft entwickelt hat. DerKonkurrenzstandard von Borland heißt ??.

ODBC stellt Verbindungen zwischen SQL-Datenbanken her. Wie immer in der DV gibt esunterschiedliche Auffassungen auf der Welt, was SQL ist, d. h. jeder Hersteller implemen-tiert Teile des Standards, um selbst neue Eigenschaften zu erfinden usw.

Page 663: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-27

ODBC versucht nun, diese Unterschiede wenigstens zum Teil auszugleichen. Daher un-terscheidet die ODBC SQL Grammatik drei Mengen von SQL Datentypen, die jeweils ihreVorgängertypen als Teilmenge enthalten

1. Minimum SQL Datentypen umfaßt sozusagen die (fast) allen Datenbanken gemeinsa-me Menge an Datentypen, um eine Grundverbindung herzustellen.

2. Kern SQL Datentypen sind alle Datentypen, die in der X/Open and SQL Access GroupSQL CAE specification (1992) enthalten sind. Diese Datentypen werden von den mei-sten SQL Datenbanken unterstützt.

3. Erweiterte SQL Datentypen sind Datentypen, die der eine oder andere Anbieter zu-sätzlich anbietet.

7.4.2 ODBC-Treiber

Um die ODBC zwischen Datenbanken herzustellen, werden Treiber (.DLL Programmeunter Windows) benutzt, die die ggf. notwendigen Umsetzungen (insbesondere der Di-plomarbeitsdatentypen) durchführen. Access unterscheidet dabei verschiedeneTreibertypen:

Eingebaute Treiber (Bild 7.4-1)

Über eingebaute Treiber können folgende Datentypen direkt importiert, exportiert odereingebunden werden:

Andere Microsoft Access-DatenbankenDatenbankdateien von Microsoft FoxPro, Versionen 2.0 und 2.5Tabellen von Paradox, Version 3.x und 4.xDateien von dBase III und IVTabellen von BtrieveTabellen von Microsoft Excel und Lotus 1-2-3Textdateien mit festgelegtem Format und Textdateien mit TrennzeichenSeriendruck-Steuerdateien von Microsoft Word für Windows (nur Export)

Die eingebauten Treiber installieren wirmit dem Setup-Programm von Accessunter dem Stichwort ISAM-Treiber.

Über Optionen ändern… können wirnoch gezielt zwischen verschiedenenTreibern wählen (Bild 7.4-2).

Bild 7.4-1: Wartungsinstallation von Treibern

Page 664: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.4 ODBC Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-28 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Tabellen, die wir mit einem internen Treiber ansprechen können, verhalten sich weitge-hend wie Access Tabellen, so daß wir für sie keinen besonderen Aufwand betreiben müs-sen.

Solche Tabellen binden wir wie externe Access-Tabellen ein, indem wir sie überDatei|E xterne Daten| Tabellen verknüpfen… genau wie eine Access Tabelleansprechen.

So ist es ohne Probleme möglich, z. B.eine Paradox-Tabelle zu verknüpfen.Sie erscheint im Datenbankfenster miteiner eigenen Ikone (Bild 7.4-3).

ODBC-Treiber

Die ODBC-Treiber bieten eine verallgemeinerte Schnittstelle zu anderen Datenbanksy-stemen an. Bei der ODBC-Unterstützung finden wir folgende Varianten:

SQL-Server ODBC-Treiber erlaubt die Herstellung einer Verbindung zu SQL-Server-Datenbanken über ODBC

Microsoft Access 2.0 ODBC-Treiber ermöglicht Microsoft Office Anwendungen den Zu-griff auf Access 2.0 Datenbanken

Die folgenden ODBC-Treiber sind auf ihre Verwendung mit Microsoft Access getestet undempfohlen worden:

SQL Server (Microsoft und Sybase)ORACLE6 Server (zusätzlich erwerbbar)

Netzwerkkonfigurationen und ODBC-Treiber

Beim Einsatz im Netz, müssen wir spezifische Netzwerkprotokolle und Netzwerkkonfigu-rationen verwenden, um eine Verbindung zwischen einer Access-Datenbank und einerSQL-Datenbank über einen ODBC-Treiber herstellen. Die folgenden Protokolle und Kon-figurationen sind auf ihre Verwendung mit Microsoft Access und ODBC-Treibern getestetworden.

Bild 7.4-2: Installation von ISAM-Treibern

Bild 7.4-3: Verknüpfte Paradox-Tabelle

Page 665: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-29

ORACLE-Server

Microsoft Access ist auf den folgenden Plattformen mit dem Microsoft ORACLE-Server-Treiber getestet worden:

Serverplattform NetzwerkprotokollORACLE6/7 (Sun OS) Microsoft LAN Manager TCP/IP, Version 1.0ORACLE6 (OS/2) Microsoft Named Pipes

SQL Server

Microsoft Access ist auf den folgenden Plattformen mit dem Microsoft SQL Server-Treibergetestet worden:

Serverplattform NetzwerkprotokollSybase SQL Server, Version 4.9.1 (Sun OS) Microsoft LAN Manager TCP/IP, Version

1.0Microsoft SQL Server, Version 4.2a (OS/2) Microsoft Named Pipes

Installation der Treiber

Wir können den SQL Server-Treiber mit dem Setup-Programm von Microsoft Access in-stallieren (wie bereits angedeutet). Es ist aber auch möglich, mit der Option ODBC derSystemsteuerung zu einem späteren Zeitpunkt ODBC-Treiber und Datenquellen hinzu-zufügen, zu bearbeiten und zu löschen.

7.4.3 SQL Pass-Through-Abfrage

Wir verwenden SQL Pass-Through-Abfragen, um Befehle direkt an einen ODBC-Datenbank-Server (wie z. B. den Microsoft SQL Server) zu senden. Hierzu müssen wirnatürlich genau die Syntax der SQL-Anweisungen für den jeweiligen Server kennen. MitHilfe von SQL Pass-Through-Abfragen arbeiten wir direkt mit den Tabellen des Serverszusammen, statt die Abfrage einzubinden. Ferner lassen sich über SQL Pass-Through-Abfragen gespeicherte Prozeduren auf einem ODBC-Server ausführen.

) Vorsicht: SQL Pass-Through-Abfragen dürfen wir keinesfalls in einen anderenAbfragetyp konvertieren (z. B. in eine Auswahlabfrage). Dies führt zum Ver-lust der mühsam entwickelten SQL-Anweisung.

Page 666: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.4 ODBC Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-30 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

�Wir erstellen und führen eine SQL Pass-Through-Abfrage folgendermaßen aus

1. Wir klicken im Datenbankfenster zuerst auf dieAbfrageschaltfläche und dann Neu .

2. Wir wählen im Dialogfeld Neue Abfrage alsTyp Entwurfsansicht aus und bestätigenmit OK. Access zeigt ein leeres Abfragefenster

für Auswahlabfragen in der Entwurfsansicht unddas Dialogfeld Tabelle/Abfrage hinzuf ü-gen an.

3. Statt eine Tabellen oder Abfragen hinzuzufügen,klicken wir im Dialogfeld Tabelle/Abfragehinzufügen auf Schließen .

4. Wir lösen statt dessen die MenüoptionAbf r age| SQL-spezifisch| Pass-Throughaus. Access zeigt das leere Fenster SQLPass-Through-Abfrage an.

5. Zu diesem Fenster öffnen wir das Eigenschaftenfenster und geben den richtigen Wertfür der Eigenschaft ODBC Verbindung ein. Einfacher ist es, den Editor für ODBC-Verbindungszeichenfolgen aufzurufen (Bild 7.4-4), um die Eigenschaft einzustellen.Damit legen wir Informationen über die Datenbank ab, zu der wir eine Verbindung her-stellen möchten.

6. In das Editierfenster geben wir unsere SQL Pass-Through-Abfrage ein, bzw. wähleneine Verbindung über den erwähnten Editor.

7. Wir setzen im Eigenschaftenfenster der Abfrage die EigenschaftLiefertDatensätze auf Ja, falls die Abfrage Datensätze liefern soll, bzw. aufNein, falls sie keine Datensätze liefern soll.

8. Wir klicken zum Ausführen der Abfrage in der Symbolleiste auf die Schaltfläche fürAusführen, oder wählen den Menüpunkt Abfrage|Ausführen aus.. (Liefert eineSQL Pass-Through-Abfrage Datensätze, können wir auf die Schaltfläche für Date n-blattansicht klicken oder den Menüpunkt Ansicht|Datenblatt wählen aus-wählen).

7.5 Programmierung von Datenbankzugriffen

In vielen der Microsoft Programmiersprachen und Anwendungen lassen sich Access Da-tenbanken direkt oder indirekt programmieren. So steht die Funktionalität dieser Daten-banken in Visual Basic und Visual C++ in (fast) vollem Umfang zur Verfügung. Aber auchin WinWord haben wir eine Access ähnliche Verwaltung für Adressen usw. zur Serien-briefgestaltung

7.5.1 Datenbankzugriffe unter Visual Basic

Seit Version 2.0 kann Visual Basic über die Jet Engine auf Access Datenbanken zugrei-fen. Je nach Versionsstand hinkt die Funktionalität hinter Access her bzw. eilt dieser vor-aus.

Datenbank

Bild 7.4-4: Abfrageeigenschaften

Page 667: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-31

Durch das Einfügen eines Datenbankzugriffsfeldes aus der Toolbox erzeugen wireine Dateilaufleiste, die wie die Navigationsschaltflächen unter Access aussehen.

Über die Eigenschaften dieses Steuerelementes können die Verknüpfungen zu Daten-banken, Tabellen und Attributen hergestellt werden.

7.5.2 Datenbankzugriffe unter Visual C++

Falls Ihnen Visual C++ zur Verfügung steht, dann stellt diese Programmiersprache eineeigene ODBC-API (Application Programmers Interface) zur Verfügung. In dieser Schnitt-stelle finden wir eine Vielzahl von Funktionen, um auf Access Daten zuzugreifen.

Um nun festzustellen, welche Datentypen unterstützt werden, können wir den Treiberüber die Funktion SQLGetInfo abfragen, wobei wir den Parameter fInfo_Type mitdem Wert SQL_ODBC_SQL_CONFORMANCE beschicken. Als Antwort erhalten wir dannentweder 0, 1 oder 2 als Typ. Eine direkte Anfrage führen wir überSQLGetTypeInfo mit dem gesetzten fSqlType Argument aus.

7.5.3 Programmieren unter Access Basic

Einige der wichtigen Funktionen sind schon erwähnt worden, andere wollen wir noch be-sprechen.

Die Standardeinstellungen, die wir auf der Oberfläche über Extras| Optionen… errei-chen, sprechen wir unter Access Basic über

GetOption Die Methode gibt den aktuellen Wert einer Option des DialogfeldsExtras| Optionen… zurück.

SetOption Die Methode legt den aktuellen Wert einer Option des DialogfeldsExtras| Optionen… fest.

Application.GetOption(optionsname)Application.SetOption optionsname, einstellung

Argument Beschreibungoptionsname Der Name der Option.einstellung Ein Wert des Datentyps Variant , der der Optionseinstellung ent-

spricht. Der Wert für Einstellung ist abhängig von den für die Optionmöglichen Einstellungen.

�Beispiele:

Application.SetOption "Statuszeile anzeigen", True

Dim varX As VariantvarX = Application.GetOption("Linker Rand")

Page 668: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 7.5 Programmierung von Datenbankzugriffen Prof. Dr.-Ing. H.-J-Scheibl

Seite: 7-32 D:\Eigene\Doku\DB\DBAcc07.doc – 9772

Application.SetOption "Formularvorlage", "Bestellvorlage"

Application.SetOption "Standard bei Datensatzsperrung", 0 �

Die globale Sperrmethode wird wirksam, wenn wir keine formularspezifische Sperrungfestlegen:

recordsetobjekt.Properties.RecordLocks = nwert

Mit der Eigenschaft DatensätzeSperren ( RecordLocks ) können wir angeben, wieDatensätze gesperrt werden und was passiert, wenn zwei Benutzer versuchen, gleichzei-tig den gleichen Datensatz zu bearbeiten. Die Einstellungen sind:

nwert Wirkung0 Keine Sperrung1 Alle Datensätze2 Bearbeitetet Datensätze

Beispiel:

Forms![student].Properties.RecordLock = 2

7.6 Programmbeispiele

7.6.1 Zeitüberwachung

Um nun den Problemen der Dauerblockade aus dem Weg zu gehen, wollen wir unsüberlegen, wie wir ein Formular behandeln können, daß eine längere Zeit nicht bearbeitetwurde.

Hier fällt unser Blick auf das Ereignis

ZeitgeberTimer

das nur für Formulare gilt und das ausgelöst wird, wenn der Wert der EigenschaftOnTimer ( BeiZeitgeber ) abgelaufen ist.

Wir müssen also nur einen Wert (z. B. 10000 für 10 s ) festlegen und eine einfacheEreignisprozedur schreiben. Diese wird über eine globale Variable gesteuert:

Global zeitueberschreitungan As Integer

Sub Form_Load ()'aktiviert die Zeitüberschreitung zeitueberschreitungan = TrueEnd Sub 'Form_Load

Page 669: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS Access – Netzwerkanwendungen Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc07.doc – 9772 Seite: 7-33

Sub zeitueberschreitung_pruefen ()'schließt Formular automatisch If zeitueberschreitungan = True Then DoCmd Close End If zeitueberschreitungan = TrueEnd Sub 'zeitueberschreitung_pruefen

Damit die Zeitüberwachung zurückgesetzt wird, müssen wir die Benutzerereignisse über-wachen. Hierzu rufen wir einfach die Funktion

Function zeitueberschreitungaus ()'schaltet die Zeitüberschreitung bei Tasten- bzw. Mausbetätigung aus'Problem: Wann reagiert was?' Formular überall nur, wenn kein Feld darin' mit Feld nur auf Laufleisten bzw. Datensatzmarkierer zeitueberschreitungan = FalseEnd Function 'zeitueberschreitungaus

auf. Das einzige Problem dabei ist, wann? Solange das Formular keine Felder enthält,können wir die Eigenschaften Bei Mausbewegung und Bei Taste verwenden. So-bald wir ein Feld einfügen, reicht die Form das Ereignis sofort an das Steuerelementweiter, ohne selbst zu reagieren. Nur einige wenige Flächen sind noch empfindlich, so derFormularfuß oder der Datensatzmarkierer. In diesem Fall müssen alle Felder dieZeitüberwachung zurücksetzen.

Nun gibt es natürlich auch Formulare mit Unterformularen. Diese haben nur die beidenEigenschaften Beim Hineingehen und Beim Verlassen. Somit können wir imTrägerformular nicht erkennen, ob eine Änderung vorgenommen wurde.

Wechseln wir aber in die Formularansicht des Unterformulars und ergänzen bei jedemFeld das Rücksetzen der Ablaufzeit, dann werden auch Operationen im Unterformularrichtig erkannt.

Page 670: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 12.04.97 13:21/12.04.97 13:21 Seite: 8-I

MS-Access – Fehlersuche

8 Fehlersuche ..................................................................................................................8-1

8.1 Fehlermeldungen in Access Basic ......................................................................8-1

8.2 Einsatz des Debuggers ......................................................................................8-17

Page 671: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-1

8 Fehlersuche

8.1 Fehlermeldungen in Access Basic

MS Access liefert während des Programmierens eine Vielzahl von Fehlermeldungen. Ei-nige sind reserviert. Der Rest ist aber kaum zu überblicken. Das Handbuch liefert keinevollständige Liste. Vielmehr verweist es auf ein Programm, mit dem wir die internen Feh-lermeldungen in eine Tabelle können. Diese Vorlage wurde folgendermaßen angepaßt:

Sub Fehlertabelle ()Dim Datenbank1 As Database, FTabelle As TableDef, Feld1 As FieldDim FDatensGruppe As Recordset, Fehlercode As Long ' Fehlertabelle erstellen mit Feldern für Fehlercodes und -zeichenfolgen. Set Datenbank1 = DBEngine.Workspaces(0).Databases(0) Set FTabelle = Datenbank1.CreateTableDef("Fehlertabelle") Set Feld1 = FTabelle.CreateField("Fehlercode", DB_LONG) FTabelle.Fields.Append Feld1 Set Feld1 = FTabelle.CreateField("Fehlerzeichenfolge", DB_TEXT) FTabelle.Fields.Append Feld1 Datenbank1.TableDefs.Append FTabelle ' Datensatzgruppe auf Fehlertabellen-Datensatzgruppe setzen. Set FDatensGruppe = Datenbank1.OpenRecordset("Fehlertabelle")

' Schleife durch Microsoft Access Fehlercodes, ' Fehlercodes überspringen, die die Meldung ' "Benutzerdefinierter Fehler" erzeugen. For Fehlercode = 1 To 32767 DoCmd Hourglass True If Error(Fehlercode) <> "Benutzerdefinierter Fehler" Then ' Alle Fehlercodes und -zeichenfolgen der ' Fehlertabelle hinzufügen. FDatensGruppe.AddNew FDatensGruppe("Fehlercode") = Fehlercode FDatensGruppe("Fehlerzeichenfolge") = Left$(Error(Fehlercode), 255) FDatensGruppe.Update End If Next Fehlercode ' Datensatzgruppe schließen. FDatensGruppe.Close DoCmd Hourglass False MsgBox "Die Fehlertabelle ist erstellt."End Sub

Es wird eine Tabelle Fehlercode angelegt. In einer Schleife werden die Fehlercodesvon Access Basic abgefragt und in diese Tabelle geschrieben. Das Ergebnis ist beein-druckend. Es beginnt mit den statischen Fehlern beim Codieren

Code Fehlerzeichenfolge3 'Return' ohne 'GoSub'5 Unzulässiger Funktionsaufruf.6 Überlauf7 Kein Speicherplatz mehr vorhanden.9 Index außerhalb des definierten Bereichs.10 Doppelte Definition11 Division durch Null13 Typ nicht passend.14 Speicher für Zeichenfolge nicht ausreichend.16 Zeichenformel zu komplex.17 Es kann nicht fortgefahren werden.19 'Resume' fehlt.20 'Resume' ohne Fehler.28 Kein Platz mehr im Stapelspeicher.35 'Sub' oder 'Function' nicht definiert.48 Fehler beim Laden von DLL.49 Falsche DLL-Aufrufkonvention51 Interner Fehler

Page 672: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-2 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge52 Dateiname oder -nummer falsch.53 Datei nicht gefunden.54 Falscher Dateimodus55 Datei bereits geöffnet.57 Geräteein-/-ausgabefehler58 Datei existiert bereits.59 Falsche Datensatzlänge61 Datenträger voll.62 Eingabe nach Dateiende63 Falsche Datensatznummer64 Falscher Dateiname67 Zu viele Dateien.68 Gerät nicht verfügbar.70 Zugriff verweigert.71 Diskette nicht bereit74 Umbenennen mit neuem Laufwerk nicht möglich.75 Pfad-/Dateizugriffsfehler.76 Pfad nicht gefunden.90 Kompilierfehler91 Objektvariable nicht gesetzt92 For-Schleife nicht initialisiert93 Unzulässiges Zeichenfolgenmuster94 Unzulässige Verwendung von Null95 Aktives Formular kann nicht geschlossen werden.280 DDE-Kanal nicht vollständig geschlossen; Antwort von anderer Anwendung wird erwartet.281 Es sind keine DDE-Kanäle mehr verfügbar.282 DDE-Kanal konnte nicht geöffnet werden; die angegebene Anwendung und das Thema wurden von

Microsoft Access nicht gefunden.283 DDE-Kanal kann nicht geöffnet werden; mehr als eine Anwendung antworteten.284 Der DDE-Kanal is gesperrt.285 Die andere Anwendung wird die angestrebte DDE-Methode oder -Operation nicht ausführen.286 Timeout beim Warten auf DDE-Antwort.287 Operation abgebrochen, weil ESC-Taste vor Beendigung gedrückt wurde.288 Die andere Anwendung ist belegt.289 In DDE-Operation angefragte Daten wurden nicht zur Verfügung gestellt.290 In einem DDE-Datenaustausch zur Verfügung gestellte Daten sind im falschen Format.291 Die andere Anwendung wurde beendet.292 DDE-Datenaustausch wurde beendet oder geändert.293 DDE-Methode wurde ohne geöffneten Kanal gestartet.294 Ungültiges Verknüpfungsformat. Die Verknüpfung zur anderen Anwendung kann nicht hergestellt

werden.295 Meldungswarteschlange voll; DDE-Meldung ging verloren.296 PasteLink already performed on this control.297 Can't set LinkMode; invalid LinkTopic.298 Die DDE-Transaktion schlug fehl. Stellen Sie sicher, daß Sie die korrekte Version von

DDEML.DLL besitzen.2000 Nicht genügend Speicher verfügbar, um Ratgeber zu starten.2001 Operation abgebrochen.2002 Noch nicht implementiert.2003 | ist noch nicht implementiert.2004 Kein Speicher mehr verfügbar.2005 Nicht genügend Speicher verfügbar, um Microsoft Access zu starten.2006 Kein gültiger Dokumentname: '|'.2007 Sie haben bereits ein geöffnetes Dokument mit Namen '|'; Sie müssen es erst schließen, bevor

Sie ein anderes Dokument unter diesem Namen speichern oder umbenennen können.2008 Dokument '|' ist geöffnet; Sie müssen es vor dem Löschen schließen.2009 Dokument '|' ist geöffnet; Sie müssen es vor dem Umbenennen schließen.2010 Dokument '|' ist geöffnet; Sie müssen es vor dem Ausschneiden schließen.2011 Ungültiges Kennwort.2012 Diese Version von Microsoft Access ist abgelaufen. Fragen Sie die nächstgelegene Microsoft-

Niederlassung nach einer neuen Version.2013 Diese Version von Microsoft Access wurde nicht vorschriftsmäßig personalisiert. Installieren

Sie Microsoft Access bitte unter Verwendung des beiliegenden Setup-Programms erneut.2040 Keine kompatible Version von 'WIN87EM.DLL'; Microsoft Access kann nicht ausgeführt werden.2042 Microsoft Access kann nicht gestartet werden. Versuchen Sie es bitte erneut.2043 Datei kann nicht gefunden werden: '|'. Bitte vergewissern Sie sich, ob der angegebene Pfad und

Dateiname richtig sind.2044 Microsoft Access kann im Moment nicht verlassen werden.2045 Ein Argument der Befehlszeile zum Starten von Microsoft Access war nicht gültig und wurde

ignoriert.2046 Befehl nicht verfügbar: |.2047 Keine kompatible Version von 'MSABC200.DLL'; Microsoft Access kann nicht ausgeführt werden.2048 Nicht genug Speicher vorhanden zum Öffnen von '|'.2049 Name '|' enthält ungültige Zeichen oder ist zu lang.2050 OLE/DDE Timeout-Wert muß sich im Bereich von 0 bis 300 Sekunden befinden.2051 Der neue Name, '|', ist zu lang. Microsoft Access-Objektnamen können nicht mehr als 64 Zeichen

aufweisen.2052 Nicht genügend Systemressourcen zur Aktualisierung der Anzeige verfügbar.2053 Platzhalterzeichen sind im Dateinamen nicht erlaubt.2054 Zu diesem Verzeichnis kann nicht gewechselt werden; Pfad zu lang.2055 Ausdruck nicht gültig: '|'.2056 Kontextsensitive Hilfe kann nicht unterstützt werden.2057 Nicht genügend Stapelspeicher vorhanden.

Page 673: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-3

Code Fehlerzeichenfolge2058 Keine kompatible Version von '|'; Microsoft Access kann nicht ausgeführt werden.2059 Der ausgewählte Name ist für Microsoft Access zu lang.2060 Es kann keine Feldliste erstellt werden auf Basis einer Aktionsabfrage: '|'.2061 Negative Zahlen sind nicht erlaubt.2062 msacc20.ini fehlt oder ist nicht die richtige Version. Import/Export ist nicht verfügbar.2063 Indexdatei '|' kann nicht erstellt, geöffnet oder beschrieben werden.2064 Kein gültiger Menüzeilenwert: '|'.2065 Ungültiger Name für ein Menü, einen Befehl oder einen Unterbefehl: '|'.2066 Eine Auflösung des Anzeigetreibers von mindestens 400 x 340 Pixels wird zur Ausführung von

Microsoft Access benötigt.2067 Die Aktion 'HinzufügenMenü' kann nur in einem Makro verwendet werden, das durch die

Einstellung der Eigenschaft 'Menüleiste' angegeben wurde.2068 Hilfe ist für dieses Element nicht verfügbar.2069 Die Tastenkombination '|1' in '|2' ist nicht gültig und wird ignoriert.2070 Die Tastenkombination '|1' in '|2' ist bereits einem anderen Makro zugewiesen. Nur die erste

Zuweisung wird verwendet.2071 Der Ratgeber konnte nicht gestartet werden, weil die Installation nicht abgeschlossen wurde.2072 Veraltete '|'-Datei. Bitte installieren Sie Microsoft Access erneut.2073 Eine Spezifikation existiert nicht in dieser Datenbank, oder sie hat keine definierten

Spalten.2074 Ratgeber kann nicht angesprochen werden.2075 Die andere Anwendung konnte in keinem der Verzeichnisse Ihres Pfades gefunden werden. Bitte

prüfen Sie Ihre Datei AUTOEXEC.BAT.2076 Die andere Anwendung konnte nicht gestartet werden, weil die .EXE-Datei ungültig ist.2077 Diese Datenbank hat keine Import-/Exportspezifikationen.2078 Hilfe ist nicht verfügbar, weil nicht genügend Speicherkapazität zur Verfügung steht, oder

wegen fehlerhafter Installation von Windows oder Microsoft Access.2079 Eintrag erforderlich!2080 Microsoft Access ist beschädigt. Führen Sie eine Installation von den Originaldisketten erneut

durch.2081 Spezifikation hat zu viele Spalten für diese Tabelle.2082 Die Spalte '|' der Spezifikation entspricht keiner Spalte der Tabelle.2083 Datenbank ist schreibgeschützt -- Spezifikationstabelle kann nicht erstellt werden.2084 Start und Breite müssen größer als 0 sein.2085 ODBC-Anzeigeaktualisierungsintervall muß im Bereich von 1 bis 3600 Sekunden liegen.2086 Manche benutzerdefinierten Menüeinträge konnten nicht geladen werden, da zu viele angegeben

wurden.2087 Benutzerdefinierter Menüausdruck '|' ist zu lang und wird ignoriert.2088 Benutzerdefinierter Menüausdruck ist leer und wird ignoriert.2089 Das Untermenü kann nicht zweimal in der gleichen Menühierarchie angezeigt werden.2090 Eine Aktion in der Makrogruppe des aktuellen globalen Menüs kann die globale Menüleiste nicht

ändern.2091 Ungültiger Name '|'.2092 Ungültiger Varianttyp für diese Optionseinstellung.2093 Ungültige Optionseinstellung; gültige Einstellungen liegen zwischen 0 und |.2094 Unbekannte Symbolleiste '|'2095 Zu | kann nicht gewechselt werden.2096 'MSTOOLBR.DLL' kann nicht geladen werden.2097 Import/Export-Spezifikationen können nicht erstellt werden für eine Microsoft Access-Datenbank

in einem alten Format.2100 Element kann an dieser Stelle nicht plaziert werden.2101 Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft ungültig.2102 Es gibt kein Formular mit dem Namen '|'.2103 Es gibt keinen Bericht mit dem Namen '|'.2104 Es gibt bereits den Namen '|'.2105 Sie können nicht zum angegebenen Datensatz gehen.2106 Während des Ladens trat(en) | Fehler auf.2107 Der von Ihnen eingegebene Wert ist auf Grund der für dieses Feld eingestellten

Gültigkeitsregel nicht erlaubt.2108 Die Aktion 'GeheZuSteuerelement' kann nicht ausgeführt werden, solange das zu bearbeitende

Feld nicht gespeichert ist.2109 Es gibt kein Steuerelement mit dem Namen '|'.2110 Sie können nicht zum Steuerelement | gehen.2111 Ihre Änderungen konnten nicht gespeichert werden. Klicken Sie 'OK', um es erneut zu versuchen,

oder klicken Sie 'Abbrechen', um Ihre Änderungen rückgängig zu machen.2112 Element kann nicht eingefügt werden.2113 Der von Ihnen eingegebene Wert ist für dieses Feld ungültig.2114 Ungültiges Dateiformat; Laden des Bitmap von Datei | nicht möglich.2115 Feld oder Datensatz kann während der Gültigkeitsüberprüfung nicht gespeichert werden.2116 Der vorige Feldwert kann nicht wiederhergestellt werden; wählen Sie 'Rückgängig: Aktueller

Datensatz' oder 'Rückgängig: Aktuelles Feld' aus dem Menü 'Bearbeiten'.2117 Text ist zu lang.2118 Die Aktion 'AktualisierenDaten' kann nicht ausgeführt werden, solange das Feld nicht

gespeichert ist.2119 Die Aktion 'AktualisierenDaten' kann nicht für das Steuerelement | verwendet werden.2120 Sie müssen zur Verwendung des Formular- oder Berichtsassistenten eine vorhandene Tabelle oder

Abfrage auswählen.2121 Formular | kann nicht geöffnet werden.2122 Ein Formular kann nicht als Endlosformular angezeigt werden, wenn es ein Unterformular oder

ein ungebundenes OLE-Objekt enthält.2123 Ungültiger Steuerelementname.2124 Ungültiger Formularname.2125 Die Einstellung für 'Schriftgröße' muß zwischen 1 und 127 (einschließlich) liegen.

Page 674: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-4 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge2126 Die Einstellung für 'Spaltenanzahl' muß zwischen 1 und 255 (einschließlich) liegen.2127 Die Einstellung für 'Gebundene Spalte' kann nicht größer sein als die Anzahl der Spalten, die

mit 'Spaltenanzahl' eingestellt wurden.2128 Die Einstellung für 'Herkunftstyp' muß Tabelle/Abfrage, Werteliste, Feldliste oder der Name

einer gültigen Access Basic-Füllbereichsfunktion sein.2129 Die Einstellung für 'Standardbearbeitung' muß 'Bearbeiten zulassen', 'Nur lesen',

'Dateneingabe' oder 'Keine neuen Datensätze' sein.2130 Die Einstellung für 'Raster X' oder 'Raster Y' muß zwischen 1 und 64 (einschließlich) liegen.2131 Ein Ausdruck kann nicht länger sein als 2.048 Zeichen.2132 Die Einstellung für 'Dezimalstellen' muß zwischen 0 und 15 (einschließlich) liegen. Sie können

auch 'Automatisch' (-1) als Standard eingeben.2133 Ein Formular/Bericht kann nicht ein Unterformular/-bericht in sich selbst sein.2134 Die Einstellung für 'Breite' muß zwischen 0 und einschließlich 55,88 cm (0 bis 22 Zoll)

liegen.2135 Sie können diese Eigenschaft nicht einstellen; sie ist schreibgeschützt.2136 Diese Eigenschaft kann nur in der Entwurfsansicht eingestellt werden; ansonsten ist sie

schreibgeschützt.2137 'Suchen' oder 'Ersetzen' können aus einem der folgenden Gründe nicht verwendet werden: Es gibt

keine Felder zum Durchsuchen; Felder enthalten keine Daten; nach Daten in Feldern kann nichtgesucht werden.

2138 Feld kann nicht durchsucht werden, weil beim Einlesen des Wertes ein Fehler aufgetreten war.2139 Aktueller Wert des Feldes kann nicht ersetzt werden.2140 Feld konnte nicht gespeichert werden. Bitte machen Sie die Änderung rückgängig, und wählen Sie

dann 'Suchen' oder 'Ersetzen'.2141 Keine Übereinstimmung zum Ersetzen im aktuellen Feld.2142 Die Aktion 'Suchen Datensatz' erfordert ein Argument 'Suchen nach'.2143 Kein Suchkriterium angegeben; verwenden Sie die Aktion 'SuchenDatensatz' oder den Befehl

'Suchen'.2144 Die Einstellung für 'Zeilenanzahl' muß zwischen 1 und 255 (einschließlich) liegen.2145 'Spaltenbreiten' muß ein oder mehrere Wert(e) von 0 bis 55,88 cm (0 bis 22 Zoll) sein,

getrennt durch ';' oder das Listentrennzeichen.2146 Feld konnte nicht gespeichert werden. Bitte machen Sie die Änderung rückgängig, und wählen Sie

dann den Befehl 'Bearbeiten zulassen'.2147 Steuerelemente können nur in der Entwurfsansicht erstellt werden.2148 Die Bereichsnummer ist ungültig.2149 Der Typ ist ungültig.2150 Dieses Steuerelement kann keine anderen Steuerelemente enthalten.2151 Dieses Steuerelement kann nicht diesen Typ von Steuerelement enthalten.2152 Gruppenebenen können nur in Berichten erstellt werden.2153 Maximale Anzahl von Gruppenebenen überschritten.2154 Diese Funktion kann nicht mit geöffnetem Fenster 'Sortieren und Gruppieren' ausgeführt we r den.2155 Access Basic-Kompilierungsfehler.2156 Access Basic-Kompilierungsfehler. Möchten Sie den Fehler im Zusammenhang sehen?2157 Die Summe von oberem und unterem Rand und der Höhe von Seitenkopf und -fuß ist größer als die

Seitenlänge.2158 Druck- und Grafikmethoden und ihre zugehörigen Eigenschaften können nur beim Drucken eines

Berichts oder in seiner Seitenansicht verwendet werden.2159 Nicht genügend Speicher zum Initialisieren von Druck- und Grafikmethoden.2160 Ein Fehler ist beim Initialisieren von Druck- und Grafikmethoden aufgetreten.2161 Das Argument 'Suchen nach' enthält einen ungültigen Ausdruck.2162 Unter Verwendung der aktuellen 'SuchenDatensatz'-Aktionsargumente kann nicht nach Daten

gesucht werden.2163 Die Seitennummer als Argument für die Aktion 'GeheZuSeite' liegt außerhalb des Bereichs.2164 Das Steuerelement mit Fokus kann nicht deaktiviert werden.2165 Das Steuerelement mit Fokus kann nicht ausgeblendet werden.2166 Das Steuerelement mit Fokus kann nicht gesperrt werden.2167 Die Einstellung für diese Eigenschaft ist schreibgeschützt und kann nicht festgelegt werden.2168 Die Einstellung für diese Eigenschaft kann nur mit dem Befehl 'Objekt/Verbindung ändern' aus

dem Menü 'Bearbeiten' geändert werden.2169 Der bearbeitete Datensatz kann nicht gespeichert werden. Wenn Sie das Formular schließen,

gehen Ihre Änderungen an dem Datensatz verloren. Trotzdem schließen?2170 Daten können für das Listenfeld nicht abgerufen werden.2171 Unterformulare können nicht über mehr als 3 Ebenen verschachtelt werden.2172 Eine Kreuztabellenabfrage, die einem Unterformular oder Unterbericht zugrundeliegt, muß

fixierte Spaltenüberschriften haben.2173 Im aktuellen Feld '|' kann nicht gesucht werden.2174 Ansicht kann von diesem Formularereignis aus nicht beendet werden.2175 Nicht genügend Speicher für Suche verfügbar.2176 Die Einstellung für diese Eigenschaft ist zu lang.2177 Berichte können nur in andere Berichte eingebettet sein, nicht in Formulare.2178 Der Bereich kann nicht hinzugefügt werden, da sonst die maximale kombinierte Bereichsgröße

überschritten würde. Sie müssen zuerst einen der vorhandenen Bereiche verkleinern.2179 Die Palette konnte nicht geöffnet werden.2180 Die Toolbox konnte nicht geöffnet werden.2181 Eine schnelle Sortierung kann an einem berechneten Feld nicht durchgeführt werden.2182 Eine schnelle Sortierung kann nicht in diesem Feld oder in einem Unterformular durchgeführt

werden.2183 Ungültige Einstellung für Eigenschaft 'Zeitnehmer-Intervall'; gültige Werte sind zwischen 0

und 65.535 Millisekunden.2184 Ungültige Einstellung für Eigenschaft 'TabulatorIndex'; gültige Werte sind zwischen 0 und |.2185 Diese Eigenschaft ist nur verfügbar, wenn das Steuerelement den Fokus hat.2186 Diese Eigenschaft ist nicht in der Entwurfsansicht verfügbar.2187 Diese Eigenschaft ist nur in der Entwurfsansicht verfügbar.

Page 675: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-5

Code Fehlerzeichenfolge2188 Die Bereichsbreite ist größer als die Seitenbreite, und auf dem zusätzlichen Raum befinden

sich keine Elemente. Einige Seiten können vielleicht leer sein.2189 Syntax-Fehler oder fehlender Steuerelement-Assistent.2190 Diese Eigenschaft wurde durch eine neue Eigenschaft ersetzt; verwenden Sie die neue

Eigenschaft.2191 Die Eigenschaft '|' kann nach Druckbeginn nicht mehr gesetzt werden.2192 Es muß sich um ein geräteunabhängiges Bitmap (DIB) handeln.2193 Linker und rechter Rand sind breiter als die Seite.2194 Die Eigenschaft 'PictureData' kann in der Datenblattansicht nicht eingestellt werden.2195 Ungültiger Bereichsname.2196 Die Einstellung für diese Eigenschaft kann nicht angenommen werden. Die Eigenschaft könnte in

dieser Ansicht nicht verfügbar sein, oder ein Fehler könnte aufgetreten sein.2197 Die Eigenschaft 'Herkunftsobjekt' des Steuerelements des Unterformulars kann nicht auf NULL

eingestellt werden, während das Hauptformular in der Formularansicht angezeigt wird.2200 Keine gültige Zahl.2201 Ein Fehler ist beim Versuch aufgetreten, Druckerinformationen abzurufen für |1 an |2.2202 Kein Standarddrucker vorhanden. Wählen Sie einen aus, oder installieren Sie einen solchen mit

Hilfe der Windows-Systemsteuerung.2203 COMMDLG.DLL fehlgeschlagen: Fehler-Code '0x|'.2204 Der 'device=|'-Eintrag in der Datei WIN.INI ist ungültig.2205 Der Standarddruckertreiber '|.DRV' konnte nicht gefunden werden. Wiederholen Sie die

Installation mit Hilfe der Windows-Systemsteuerung.2206 Ungültige Seitenzahl.2207 Makros können nicht gedruckt werden.2208 Die Summe der linken und rechten Ränder ist größer als die Breite der ausgewählten

Papiergröße.2209 Die Summe der oberen und unteren Ränder ist größer als die Höhe der ausgewählten Papiergröße.2210 Drucken oder Seitenansicht nicht möglich; Seitengröße mehr als 58 cm (22,75 Zoll).2220 Die Datei '|' kann nicht geöffnet werden.2221 Text wird zu lang; Änderung wurde abgebrochen.2222 Dieses Steuerelement ist schreibgeschützt und kann nicht geändert werden.2223 Der Dateiname '|' ist zu lang.2224 Name '|' enthält ungültige Zeichen oder ist zu lang.2225 Die Zwischenablage kann nicht geöffnet werden.2226 Einfügen nicht möglich.2227 Datenformatfehler; Einfügen nicht möglich.2228 Das Objekt kann nicht geöffnet oder gespeichert werden.2229 Die Anwendung des Objekts kann nicht gestartet werden.2231 Es sind Fehler während einer OLE-Operation aufgetreten. Die Problem-Nr. ist '|'.2234 Das OLE-Objekt kann nicht eingefügt werden.2237 Der Text, den Sie eingeben, muß einem Eintrag in der Liste entsprechen.2239 '|' ist beschädigt oder ist keine Microsoft Access-Datenbankdatei. Öffnen Sie zum Reparieren

mit deaktivierter Option 'Schreibgeschützt', oder benutzen Sie den Befehl 'Datenbankreparieren'.

2240 Unerwarteter Fehler beim Datenaustausch.2241 Das Objekt | ist beschädigt und wird vielleicht fehlerhaft dargestellt.2243 OLE-Objekt kann nicht eingefügt werden.2244 Ein nicht behebbarer Fehler ist während des Lesens der Datei '|' aufgetreten.2245 Angegebenes Symbol ist beschädigt.2246 Abfrage kann nicht ausgeführt werden; Parameterwerte sind zu groß.2260 Ein Fehler ist beim Senden von Daten an die Anwendung des Objekts aufgetreten.2262 Dieser Wert muß eine Zahl sein.2263 Die Zahl ist zu groß.2264 Keine bekannte Maßeinheit.2265 Maßeinheit muß angegeben werden.2266 '|' ist keine gültige Einstellung für die Eigenschaft 'Herkunftstyp'.2267 Nicht genügend Platz auf der Festplatte zum Drucken.2268 Nicht genügend Speicher zum Laden einiger Bibliotheks-Datenbanken.2269 Einige Bibliotheks-Datenbanken konnten nicht geladen werden, weil zu viele angegeben wurden.2270 Modul konnte nicht in der Dienst- oder Bibliotheks-Datenbank kompiliert werden.2271 Der [Libraries]-Abschnitt fehlt in msacc20.ini; Formular- und Berichtsassistenten sind nicht

verfügbar.2272 Die Einstellung für 'Datenaktualisierungsintervall' muß zwischen 0 und 1.000 Millisekunden

(einschließlich) liegen.2273 Die Einstellung für 'Anzahl der Datenaktualisierungsversuche' muß zwischen 0 und 10

(einschließlich) liegen.2274 Die Datenbank '|' ist bereits als Bibliotheks-Datenbank geöffnet.2275 Die Zeichenfolge, die vom 'Editor' ausgegeben wurde, ist zu lang. Text wurde abgeschnitten.2276 Das aktuelle Fenster ist nicht das Fenster, das den 'Editor' aufgerufen hat. 'Editor'

fehlgeschlagen.2277 Fehler in Schriftartinitialisierung.2278 Änderungen an diesem Objekt können nicht gespeichert werden, weil Sie keine Berechtigung

haben, diesen Datensatz zu ändern. Kopieren Sie das Objekt in die Zwischenablage, wenn Sie esspe i chern wollen, und wählen Sie dann 'Rückgängig: Feld'.

2279 Der eingegebene Wert paßt nicht zum Eingabeformat '|', das für dieses Feld angegeben wurde.Drücken Sie die ESC-Taste, um Ihre Änderungen abzubrechen.

2280 Zu viele Ausgabeformate. Einige werden nicht verfügbar sein.2281 Keine Ausgabeformate installiert.2282 Ausgabeformat nicht verfügbar.2283 Ungültige Formatangabe für '|'.2284 In die Datei kann nicht geschrieben werden.2285 Die Datei kann nicht erstellt werden.2286 Die Datei kann nicht geschlossen werden.

Page 676: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-6 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge2287 E-Mail-Anwendung kann nicht geöffnet werden.2288 Das '|'-Format konnte nicht geladen werden.2289 Das Modul konnte nicht im gewünschten Format ausgegeben werden.2290 Zu viele Meldungs-Empfänger. Meldung nicht verschickt.2291 Zu viele Meldungs-Anhänge. Meldung nicht verschickt.2292 Meldungstext ist zu lang. Meldung nicht verschickt.2293 Meldung kann nicht verschickt werden.2294 Objekt kann nicht angebunden werden. Meldung nicht verschickt.2295 Unbekannte(r) Meldungsempfänger. Meldung nicht verschickt.2296 Anmeldung gescheitert. Meldung nicht verschickt.2297 Mail-Sitzung konnte nicht geöffnet werden.2298 Assistent, Editor oder Add-In kann nicht gestartet werden.2299 Zoom-Feld kann nicht geöffnet werden. Die Datei UTILITY.MDA fehlt oder ist bearbeitet worden.2300 Zu viele Steuerelementarten.2301 Nicht genügend Systemressourcen verfügbar.2302 Die Datei kann nicht zum Schreiben geöffnet werden. Prüfen Sie, ob die Datei gerade benutzt

wird, oder ob Sie genügend Speicherplatz auf dem Ziellaufwerk zur Verfügung haben.2303 Daten können nicht ausgegeben werden.2304 Es kann nicht in die Datei geschrieben werden. Stellen Sie sicher, daß Sie genügend

Speicherplatz auf dem Ziellaufwerk zur Verfügung haben.2305 Zu viele Spalten in der Ausgabe.2306 Zu viele Zeilen in der Ausgabe.2307 Keine Daten zur Ausgabe.2308 |1Diese Datei ist bereits vorhanden. |2Vorhandene Datei ersetzen?2309 Ungültiger Add-In-Eintrag für '|'.2310 Zu viele 'Editor'-Einträge in den '|'-Bereich.2311 Nicht genügend Arbeitsspeicher vorhanden zur Ausführung der Ereignisprozedur 'NichtInListe'.2320 Das Feld mit der Option 'Bedingung' in der Zeile 'Funktion' kann nicht angezeigt werden.

Schalten Sie die Option 'Anzeigen' für dieses Feld aus.2321 Kriterien können nicht bestimmt werden, solange Sie nicht ein Feld angegeben haben.2322 Es kann nicht nach Feldern sortiert werden, die dem QBE-Entwurfsbereich mit dem Sternchen

hinzugefügt wurden.2323 Für Felder, die dem QBE-Entwurfsbereich mit dem Sternchen hinzugefügt wurden, kann keine

Kriterienklausel angewendet werden.2324 Abfragefunktionen können nicht für Felder angezeigt werden, die dem QBE-Entwurfsbereich mit

dem Sternchen hinzugefügt wurden.2325 Ein Feldname in der Eigenschaft 'Verknüpfen nach' ist zu lang.2326 Die Gruppierungsfunktion 'Gruppierung' kann für ein als Tabelleneintrag verwendetes Feld nicht

angegeben werden. Geben Sie eine Aggregatfunktion ein.2327 Beim Feld für die Spaltenüberschrift muß 'Gruppierung' als Abfragefunktion angegeben werden.2328 Aktualisierungsabfragen können nicht ausgeführt werden für Felder, die mit dem Sternchen zum

QBE-Entwurfsbereich hinzugefügt wurden.2329 Geben Sie eine oder mehrere Zeilenüberschriften, eine Spaltenüberschrift und einen

Tabelleneintrag an.2330 Die Verknüpfung kann in der Entwurfsansicht nicht dargestellt werden: '|'.2331 Mindestens eine Zeilenüberschrift muß mit 'Gruppierung' angegeben werden.2332 Felder, die mit dem Sternchen zu einer Spalte oder einem Ausdruck im QBE-Entwurfsbereich

hinzugefügt wurden, können nicht angefügt werden.2333 Eine Zieltabelle muß für die Abfrage angegeben werden.2334 '|' ist eine Aktionsabfrage und kann nicht ausgedruckt werden.2335 Die Einstellungen der Eigenschaften 'Verknüpfen von' und 'Verknüpfen nach' müssen die gleiche

Anzahl von Feldern besitzen.2337 Für ein Tabelleneintragsfeld kann kein Kriterium angegeben werden.2338 Der Ausdruck ist zu lang für den QBE-Entwurfsbereich und wurde daher abgeschnitten: '|'.2339 Eine temporäre Abfrage kann nicht erstellt werden.2340 Der Ausdruck ist zu lang für den QBE-Entwurfsbereich.2342 Die Aktion 'AusführenSQL' kann nur SQL-Anweisungen von Aktionsabfragen ausführen.2343 Der neue Alias-Name ist zu lang. Alias-Namen dürfen nicht länger als 64 Zeichen sein.2344 Ungültiger Ausdruck 'Spitzenwert'. Geben Sie bitte eine Ganzzahl oder einen Prozentsatz ein.2345 Ungültiger Ausdruck 'Spitzenwert'. Geben Sie bitte einen Prozentsatz zwischen 1% und 100% ein.2346 Ungültiger Ausdruck 'Spitzenwert'. Geben Sie bitte eine Zahl größer als Null ein.2347 Ungültiger Datenbankname.2348 Alias-Einstellung darf kein Nullwert sein.2349 Ungültiger Ausdruck 'Spitzenwert'. Geben Sie bitte eine kleinere Zahl ein.2350 Wegen der Abfrageart ist es nicht möglich, die Abfrage als SQL-Anweisung zu speichern, oder

die Abfrage enthält einen Syntax-Fehler. Bitte speichern Sie die Abfrage mit dem Befehl'Speichern unter'.

2351 Implizite VALUES-Klausel kann nicht im QBE-Entwurfsbereich dargestellt werden.2360 Feldname fehlt.2361 Tabelle hat keine Felder; es kann nicht gespeichert werden.2362 Doppelter Feldname: '|'.2363 Nur ein Zählerfeld ist zugelassen pro Tabelle.2364 Tabelle kann nicht in Datenblattansicht geöffnet werden.2366 Beim Speichern sind Fehler aufgetreten. Alle Änderungen wurden gespeichert außer der

Feldreihenfolge, die nicht erfolgreich gespeichert wurde.2370 Entfernen oder Ändern des Index für dieses Feld erfordert Entfernen des Primärschlüssels.2371 Primärschlüssel kann nicht erstellt werden. Änderungen wurden nicht gespeichert.2372 Kein gültiger Feldname.2373 Die Einstellung für 'Feldgröße' muß zwischen 0 und 255 (einschließlich) liegen.2374 Ein Index oder Primärschlüssel kann nicht erstellt werden für mehr als 10 Felder.2375 Einfügen über das Ende der Tabelle hinaus nicht möglich.2376 Primärschlüssel kann nicht erstellt werden; zu viele Felder.2377 Datentyp kann in einer Tabelle mit Daten nicht in 'Zähler' geändert werden.

Page 677: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-7

Code Fehlerzeichenfolge2378 Diese Tabelle ist schreibgeschützt. Verwenden Sie einen anderen Namen im Dialogfeld 'Speichern

unter', um Ihre Änderungen zu speichern.2379 Primärschlüssel kann nicht erstellt werden für ein Feld diesen Datentyps.2380 Primärschlüssel kann nicht erstellt werden; keine Felder markiert.2381 Primärschlüssel kann nicht erstellt werden; Feld hat keinen Namen.2382 Wechsel zur Datenblattansicht und Rückkehr zur Entwurfsansicht unmöglich.2383 Datentyp konnte nicht geändert werden, weil entweder nicht genug Speicher auf der Festplatte

oder genug Arbeitsspeicher zur Verfügung steht.2384 Ein Feld des Datentyps 'Zähler' kann nicht geändert werden, wenn gleichzeitig ein Feld des

gleichen Datentyps hinzugefügt wird.2385 Beim Speichern wurden Fehler entdeckt. |2386 Beim Speichern wurden Fehler entdeckt. Die neue Tabelle wurde nicht erstellt.2387 Die Tabelle '|' kann nicht gelöscht werden. Sie ist Teil einer Beziehung oder mehrerer

Beziehungen.2388 Der Primärschlüssel kann nicht geändert werden. Diese Tabelle ist die Primärtabelle in einer

Beziehung oder mehreren Beziehungen.2389 Das Feld '|' kann nicht gelöscht werden. Es gehört zu einer Beziehung oder mehreren

Beziehungen.2390 Der Datentyp oder die Feldgröße dieses Feldes können nicht geändert werden. Sie gehören zu

einer Beziehung oder mehreren Beziehungen.2391 Es konnte nicht angefügt werden. Das Feld '|1' existiert nicht in der Zieltabelle '|2'.2392 Die Eigenschaft 'Eindeutig' eines Primärschlüssels kann nicht auf 'Nein' eingestellt werden.2393 Die Eigenschaft 'Nullwerte ignorieren' eines Primärschlüssels kann nicht auf 'Ja' eingestellt

werden.2394 Ungültiger Indexname.2395 Indizes ohne Namen nicht erlaubt.2396 Index- oder Primärschlüssel können nicht erstellt werden, weil ein Feldname oder mehrere

Feldnamen fehlt/fehlen.2397 Doppelter Indexname: '|'.2398 Es wurden Änderungen am Primärschlüssel vorgenommen. Diese Tabelle ist die Primärtabelle in

einer Beziehung oder mehreren Beziehungen. Primärschlüsseländerungen werden nicht gespe i chert.2400 Kein Platz zum Einfügen vorhanden.2420 Syntaxfehler in Zahl.2421 Syntaxfehler in Datum.2422 Syntaxfehler in Zeichenfolge.2423 Unzulässige Verwendung von '.', '!' oder '()'.2424 Unbekannter Name.2425 Unbekannter Funktionsname.2426 Die Funktion ist in Ausdrücken nicht verfügbar.2427 Das Objekt hat keinen Wert.2428 Unzulässige Argumente bei Domänenfunktion.2429 In-Operator erfordert Klammern: ()2430 Zwischen-Operator ohne Und2431 Syntaxfehler2432 Syntaxfehler2433 Syntaxfehler2434 Syntaxfehler2435 Überflüssige rechte Klammer: )2436 Fehlend: ')', ']', oder '|'.2437 Unzulässige Verwendung von senkrechten Strichen.2438 Syntaxfehler2439 Falsche Anzahl von Argumenten bei Funktion.2440 Wenn-Funktion erfordert Klammern: ()2442 Unzulässige Verwendung von Klammern.2443 Unzulässige Verwendung des Ist-Operators.2445 Ausdruck zu komplex.2446 Kein Speicher mehr vorhanden während der Berechnung.2447 Unzulässige Verwendung von '.', '!' oder '()'.2448 Wert kann nicht gesetzt werden.2449 Unzulässige Methode im Ausdruck.2450 Unzulässige Bezugnahme auf Formular: '|'.2451 Unzulässige Bezugnahme auf Bericht: '|'.2452 Unzulässige Bezugnahme auf die Eigenschaft 'Hauptobjekt' (Parent).2453 Unzulässige Bezugnahme auf Steuerelement: '|'.2454 Unzulässige Bezugnahme: '!|'.2455 Unzulässige Bezugnahme auf Eigenschaft: '|'.2456 Unzulässige Formularnummer.2457 Unzulässige Berichtsnummer.2458 Unzulässige Steuerelementnummer.2459 Bezug auf Eigenschaft 'Hauptobjekt' (Parent) ist in Entwurfsansicht nicht möglich.2460 Bezug auf die Eigenschaft 'DatensatzgruppeDuplizieren' ist in Entwurfsansicht nicht möglich.2461 Unzulässige Bezugnahme auf Bereich.2462 Unzulässige Bereichsnummer.2463 Unzulässige Bezugnahme auf Gruppenebene.2464 Unzulässige Gruppenebenennummer.2465 Unzulässige Bezugnahme auf Feld: '|'.2466 Unzulässige Bezugnahme auf die Eigenschaft 'Dynaset'.2467 Das Objekt im Ausdruck ist nicht mehr vorhanden.2468 Unzulässiges Argument bei DatTeil-, DatAdd- oder DatDiff-Funktion.2469 |1 in Gültigkeitsregel: '|2'.2470 | in Gültigkeitsregel.2471 | in Abfrage.2472 | in verknüpftem Masterfeld.

Page 678: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-8 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge2473 |1 in Ausdruck von '|2'.2474 Kein Steuerelement ist aktiv.2475 Kein Formular ist aktiv.2476 Kein Bericht ist aktiv.2477 Ungültige Unterklasse '|' im Bezug der Funktion 'TypeOf'.2478 Diese Methode kann nicht in der aktuellen Ansicht verwendet werden.2479 Ereignisprozedur '|' kann keine Funktion sein.2480 Numerischer Bezug auf Eigenschaften-Objekt ist außerhalb des Bereichs.2481 In der Seitenansicht kann der Wert nicht eingegeben werden.2482 Unzulässige Bezugnahme auf '|'.2483 Kann nicht zum vorigen Steuerelement bewegt werden, wenn kein anderes Steuerelement den Fokus

hatte.2485 Makro '|' konnte nicht gefunden werden.2486 Aktion kann im aktuellen Codekontext nicht ausgeführt werden.2487 Ungültiger Objekttyp.2488 Die Aktion ist nicht verfügbar, da aktuelles Fenster kein Formular- oder Berichtsfenster ist.2489 Objekt '|' ist nicht geöffnet.2490 Optionsargument der Aktion 'Beenden' ist ungültig.2491 Die Aktion ist ungültig, weil das Formular oder der Bericht nicht an eine Tabelle oder Abfrage

gebunden ist.2492 Makroname '|2' kann nicht in Makrogruppe '|1' gefunden werden.2493 Die Aktion erfordert einen Objektnamen als Argument.2494 Die Aktion erfordert einen Formularnamen als Argument.2495 Die Aktion erfordert einen Tabellennamen als Argument.2496 Die Aktion erfordert einen Abfragenamen als Argument.2497 Die Aktion erfordert einen Berichtsnamen als Argument.2498 Die Argumenttypen stimmen nicht überein.2499 Die Aktion 'GeheZuDatensatz' kann nicht mit einem Objekt in der Entwurfsansicht verwendet

werden.2500 Das Argument 'Wiederholungen' der Aktion 'AusführenMakro' kann nicht kleiner als 0 sein.2501 Die Aktion | wurde abgebrochen.2502 Die Aktion erfordert einen Makronamen als Argument.2503 Dieser Befehl kann nicht mit 'DoCmd' verwendet werden.2504 Die Aktion erfordert mindestens | Argument(e).2505 Ungültiger Wert für das Argument '|'.2506 Ungültiger Wert für das Argument 'Transfertyp'.2507 '|' ist kein unterstützter Datenbanktyp.2508 Ungültiger Wert für das Argument 'Dateiformat'.2509 Das Argument 'Bereich' kann nicht länger als 255 Zeichen sein.2510 Das Argument 'Spezifikationsname' kann nicht länger als 64 Zeichen sein.2511 Ein Spezifikationsname ist beim Im- oder Exportieren von Text mit festgelegtem Format

erforderlich.2512 Der Ausdruck kann nicht eingelesen werden: '|'.2513 Das Argument 'Makroname' kann nicht länger als 64 Zeichen sein.2514 Die Aktion erfordert ein Argument mit Steuerelementnamen.2515 Makro | kann nicht geöffnet werden. Dieses Makro ist mit einer anderen Version von Microsoft

Access gespeichert worden.2516 Modul '|' nicht gefunden.2517 Prozedur '|' nicht gefunden.2518 Die Aktion erfordert ein Argument 'Makroname'.2519 Die Aktion 'Objekt auswählen' erfordert eine geöffnete Datenbank.2520 Die Aktion erfordert ein Argument für Modul- oder Prozedurnamen.2521 Die Prozedur '|' konnte nicht im angegebenen Modul gefunden werden.2522 Die Aktion erfordert ein Argument für den Dateinamen.2523 Ungültiges Argument 'Einblenden'.2540 Datei '|' wird verwendet und kann daher nicht gelöscht werden.2541 Der Inhalt der Zwischenablage wurde gelöscht und kann daher nicht eingefügt werden.2542 Das Makro kann ohne die Angabe einer Datenbank von der Befehlszeile aus nicht ausgeführt

werden.2543 Ein Objekt kann nicht in sich selbst eingefügt werden. Geben Sie einen anderen Namen an.2544 | ist nicht vorhanden.2545 Sie müssen eine Zieldatenbank oder einen neuen Namen angeben, um zu kopieren.2546 Die Aktion '|' kann nicht ausgeführt werden, weil nichts markiert ist.2547 Datei '|' kann nicht gelöscht werden.2548 '|' kann nicht zu sich selbst kopiert werden.2549 '|1' konnte nach dem Komprimieren nicht gelöscht werden. Komprimierte Datenbank heißt '|2'.2550 '|1' konnte nach dem Verschlüsseln nicht gelöscht werden. Verschlüsselte Datenbank heißt '|2'.2551 '|1' konnte nach dem Entschlüsseln nicht gelöscht werden. Entschlüsselte Datenbank heißt '|2'.2552 Verschlüsseln nicht möglich. Eine Datenbank kann nur von ihrem Eigentümer verschlüsselt

werden.2553 Entschlüsseln nicht möglich. Eine Datenbank kann nur von ihrem Eigentümer entschlüsselt

werden.2554 Die Anwendung kann nicht ausgeführt werden, Argumente fehlen in der Befehlszeile.2555 Eine Datenbank kann nicht konvertiert werden, wenn Herkunfts- und Zieldatenbank denselben Pfad

und Namen aufweisen.2556 Eine verschlüsselte Datenbank kann nicht zur Verfügung gestellt werden.2557 Diese Datenbank weist bereits das aktuelle Datenbankformat auf.2558 Diese Datenbank konnte nicht konvertiert werden. Sie müssen die Berechtigung 'Entwurf ändern'

für alle Tabellen haben.2559 | eingebundene Tabellen konnten nicht aktualisiert werden während der Konvertierung.2580 Dieser Bericht basiert auf einer Tabelle oder Abfrage, die nicht vorhanden ist: '|'.2581 Sie müssen zum Sortieren ein Feld oder einen Ausdruck angeben.2582 'Intervall' kann nur dann auf den Wert '0' gesetzt werden, wenn 'Gruppieren nach' die

Page 679: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-9

Code FehlerzeichenfolgeEinstellung 'Jedem Wert' aufweist.

2583 Die Aktion 'AnwendenFilter' kann nur von einem Makro aufgerufen werden, das mit derEigenschaft 'Beim Öffnen' aufgerufen wird.

2584 Aggregatfunktionen können nicht in einem Seitenkopf oder -fuß verwendet werden.2585 Diese Aktion kann nicht während der Verarbeitung eines Formular- oder Berichtsereignisses

ausgeführt werden.2586 Die Laufzeiteigenschaften 'BewegenLayout' und 'NächsterDatensatz' können nicht beide auf

FALSCH gesetzt sein; um sicherzugehen, daß der Bericht weiter ausgeführt wird, wurden beideauf WAHR zurückgesetzt.

2587 Syntaxfehler oder fehlende Berichtsausgabefunktion.2600 Bitte bestätigen Sie das neue Kennwort durch Eingabe in das Feld 'Bestätigen' und

anschließendes Drücken der Eingabetaste.2601 Sie haben keine Leseberechtigung für '|'.2602 Sie haben keine Änderungsberechtigung für '|'.2603 Sie haben keine Ausführungsberechtigung für '|'.2604 Sie können sich die Berechtigungen dieses Objekts nicht ansehen.2605 Benutzer kann aus Gruppe '|' nicht entfernt werden.2606 Kein zulässiger Microsoft Access-Objekttyp.2607 Sie haben keine Ausschneideberechtigung für '|'.2608 Sie haben keine Kopierberechtigung für '|'.2609 Sie haben keine Löschberechtigung für '|'.2610 Bitte geben Sie eine persönliche Kennummer ein, bestehend aus mindestens vier und höchstens

zwanzig Zeichen und Ziffern.2612 Kein zulässiger Kontoname.2613 Sie haben keine Berechtigung zum Umbenennen von '|'.2614 Sie haben keine Berechtigung, dieses Formular anzusehen.2615 Sie haben keine Berechtigung, den Eigentümer von '|' zu ändern.2616 Sie können keine Berechtigungen ändern für '|'.2617 Sie haben keine Berechtigung zum Importieren oder Exportieren von '|'.2646 Eine Beziehung zur Durchsetzung der referenziellen Integrität kann nicht hergestellt werden.

Vorhandene Daten in Tabelle '|' verstoßen gegen die angegebene Beziehung.2647 Die Tabelle '|' hat keinen Primärschlüssel. Sie können sie nicht als Detailtabelle in einer

1:1-Beziehung auswählen.2648 Die Beziehung wurde als 1:1-Beziehung erstellt, weil ein eindeutiger Index in den angegebenen

Feldern der verwandten Tabellen besteht.2649 Eine Beziehung zur Durchsetzung der referenziellen Integrität kann nicht hergestellt werden.

Das Feld/die Felder in der Primärtabelle muß/müssen der Primärschlüssel sein oder eineneindeutigen Index haben.

2650 Eine Beziehung zur Durchsetzung der referenziellen Integrität kann nicht hergestellt werden.Übereinstimmende Felder müssen den gleichen Datentyp aufweisen.

2651 Eine Beziehung zwischen Feldern des Datentyps 'Memo', 'OLE-Objekt' oder 'Ja/Nein' kann nichthergestellt werden.

2680 Maximale Anzahl von OLE-Objekten bereits geladen.2683 Es gibt kein Objekt in diesem Steuerelement.2684 Dieses Feld ist leer. Verwenden Sie 'Objekt einfügen', um ein neues Objekt zu erstellen.2685 Die Daten in diesem Feld werden nicht als OLE-Objekt erkannt.2686 Das |-Objekt kann nicht gespeichert werden.2687 Das |-Objekt kann nicht gelesen werden.2690 Eine Systemressource, die zum Zeichnen des |-Objekts erforderlich ist, steht nicht zur

Verfügung.2691 Es kann keine Verbindung mit der Anwendung des Objekts hergestellt werden.2694 Zwischenablage-Operation fehlgeschlagen. Sie kann vielleicht von einer anderen Anwendung

benutzt werden, oder Sie haben zuwenig Arbeitsspeicher zur Verfügung.2695 Konvertiertes |-Objekt konnte nicht angezeigt werden.2696 Unzulänglich formulierte OLE-Information.2697 Es gab ein Problem beim Laden des |-Objekts.2698 Es gab ein Problem beim Speichern des |-Objekts.2699 Ein Problem trat auf bei der Verwendung der Anwendung des Objekts.2700 Die andere Anwendung oder ein .DLL konnte nicht gefunden werden. Bitte bestätigen Sie, daß es

einwandfrei registriert wurde.2701 Die andere Anwendung wird bereits benutzt.2702 Das |-Objekt scheint nicht einwandfrei registriert zu sein.2703 Ein Problem trat beim Versuch auf, Daten mit dem |-Objekt auszutauschen.2704 Dieses |-Objekt hat keine Präsentationsinformation.2707 Eine Datei, die zum Abschluß der Operation benötigt wird, konnte nicht geöffnet werden.2711 Ein Objekt, das zum Abschluß der Operation benötigt wird, fehlt.2713 Ein Problem trat auf bei der Verwendung der Namensinformation des |-Objekts.2714 Dieses |-Objekt hat keine unterstützten Verben.2715 Der 'Verb'-Index ist außerhalb des Bereichs für das |-Objekt.2717 Dieses |-Objekt ist nicht initialisiert oder hat keine Präsentationsinformation.2719 Ein Problem trat auf bei der Verwendung des |-Objekts.2723 Dieses |-Objekt unterstützt nicht die beabsichtigte Operation.2724 Es befindet sich eine unkorrekte Version eines OLE-unterstützenden .DLLs auf Ihrem Computer.2725 Es gibt ein Problem mit der Registrations-Datenbank.2726 I/O Fehler beim Lesen von REG.DAT.2727 I/O Fehler beim Schreiben von REG.DAT.2728 Operation ist abgebrochen worden.2729 Das aktive OLE-Objekt ist belegt. Schließen Sie die aktuelle Operation ab, oder drücken Sie

die Eingabetaste und versuchen es erneut.2730 Kommunikation mit der Anwendung des Objekts kann nicht durchgeführt werden. Versuchen Sie es

bitte später erneut.2731 Ein Fehler ist bei der Anwendung des Objekts aufgetreten. Sie könnte fehlerhaft registriert

sein.

Page 680: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-10 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge2732 Ein Problem trat auf beim Zugriff auf den Speicher des |-Objekts.2733 Auf den Speicher des Objekts kann nicht zugegriffen werden.2734 Das |-Objekt kann momentan nicht gespeichert werden.2735 Schreibschutzfehler beim Speichern des |-Objekts.2736 Diese Datei ist bereits vorhanden.2737 Die Datei konnte nicht gefunden werden.2738 Zuwenig Arbeitsspeicher vorhanden zum Zugriff auf den Speicher des |-Objekts.2739 Auf den Speicher wird von einem anderen Benutzer zugegriffen.2740 Der Speicher des |-Objekts ist von einem anderen Benutzer gesperrt.2741 Nicht genug Speicherplatz vorhanden zum Speichern des |-Objekts.2742 Es konnten keine Dateien mehr erstellt werden.2743 Das |-Objekt ist in einem Format gespeichert, das nicht kompatibel mit der OLE-Version auf

Ihrem Computer ist.2744 Der von Ihnen angegebene Pfad konnte nicht gefunden werden.2745 SHARE.EXE muß für OLE-Unterstützung installiert sein, um korrekt zu arbeiten.2746 Zu viele OLE-Objekte in Ihrem Formular.2747 Ein Fehler trat auf beim Zeichnen eines |-Objekts.2748 Diese Eigenschaft ist nicht verfügbar für das |-Objekt.2749 Nicht genügend Arbeitsspeicher vorhanden zum Abschluß der Operation am |-Objekt.2750 Die Operation am |-Objekt konnte nicht erfolgreich abgeschlossen werden.2751 Operation abgebrochen.2752 Ein interner Fehler trat beim Übergeben eines Arguments auf.2753 Fehler während der OLE-Operation.2754 Fehler bei der Kommunikation mit der Anwendung des Objekts.2755 Fehler beim Ausführen der Anwendung des Objekts.2756 Fehler beim Zugriff auf den Speicher des OLE-Objekts.2757 Fehler beim Verwenden des OLE-Objekts.2758 Es gab ein Problem beim Initialisieren von MSAOLE20.DLL.2759 Mehr Argumente wurden angegeben als das Objektelement zuläßt.2760 Ein interner Fehler trat auf beim Verweis auf das Objektelement.2761 Ein Fehler trat auf beim Verweis auf das Objektelement.2762 | hat einen Fehler zurückgegeben beim Verweis auf das Objektelement.2763 |1 hat den folgenden Fehler zurückgegeben: |22764 Das Objekt erlaubt nicht, das Element einzustellen.2765 Das Objekt kann eines der Argumente, die an das Element übergeben wurden, nicht konvertieren.2766 Das Objekt enthält kein Element mit Namen |.2767 Das Objekt unterstützt nicht die verwendete Sprache.2768 Der Datenfeldindex ist außerhalb des Objektelements.2769 Das Objektelement enthält einen von Access Basic nicht unterstützten Datentyp.2770 Das Objekt des Bezugs ist kein aktives OLE-Objekt.2771 Das Objektfeld enthält kein OLE-Objekt.2772 OLE-Objekt-Klasse '|' kann nicht gefunden werden.2773 Die Datensatzgruppe | unterstützt nicht OLE-Automation.2774 Das Objekt unterstützt nicht OLE-Automation.2775 Mehr Argumente als von Access Basic unterstützt werden an das Objektelement übergeben.2776 Das Objektelement ist kein Datenfeld.2777 Der erforderliche Datensatzgruppenname wurde nicht geliefert oder war ungültig.2778 Ein Klassen- oder Dateiname fehlt.2779 Durch das Objektelement wurden keine Daten zurückgegeben.2780 Die Datensatzgruppe | unterstützt nicht das Laden von Objekten aus einer Datei.2781 Kein Objekt der Datensatzgruppe |1 konnte geladen werden aus Datei |2. Prüfen Sie sowohl die

Datensatzgruppe als auch den Dateinamen.2782 Das Objektelement enthält keinen Wert.2783 Ungültige Einstellung der Eigenschaft 'Action'.2784 Der Eintrag in der Eigenschaft 'Herkunftsdokument' ist zu lang.2785 Ungültige Eigenschaften 'Herkunftsdokument' oder 'Herkunftselement' wurden festgelegt. Die

Herkunftsanwendung konnte das Dokument nicht öffnen.2786 Das OLE-Objekt, das erstellt wurde oder benutzt wird, ist kein verknüpftes OLE-Objekt.2787 Ein ungebundenes OLE-Objekt kann nicht kopiert werden in der Datenblattansicht.2788 Das |-Objekt ist nicht als verknüpftes Objekt gespeichert.2789 Die Eigenschaft 'Action' kann nur in der Formularansicht eingestellt werden.2790 Es kann kein eingebettetes OLE-Objekt erstellt werden in einem Steuerelement, das nur ein

verknüpftes OLE-Objekt zuläßt.2791 Es kann kein verknüpftes OLE-Objekt erstellt werden in einem Steuerelement, das nur ein

eingebettetes OLE-Objekt zuläßt.2792 Ein gesperrtes OLE-Objekt kann nicht gespeichert werden.2793 Die Operation, die in der Einstellung der Eigenschaft 'Action' angegeben ist, kann nicht

durchgeführt werden, weil das Objektfeld entweder gesperrt oder deaktiviert ist.2794 Das benutzerdefinierte OLE-Steuerelement entspricht nicht seiner Beschreibung in der

Registrierungsdatenbank.2795 Das |-Objekt enthält einen Ereignisnamen oder ergibt einen Prozedurnamen, die mehr als 40

Zeichen enthalten.2796 Das |-Objektereignis enthält einen unbenannten Parameter.2797 OLE 1-Objekte können nicht als Symbol dargestellt werden.2798 Die Operation OLE_DELETE, die in der Eigenschaft 'Action' angegeben ist, kann nicht an einem

Objekt in einem gebundenen Objektfeld durchgeführt werden.2799 Das Objekt kann nicht aktiviert werden beim Empfang des Fokus.2800 Das Objekt ist gesperrt, und alle Änderungen, die Sie vorgenommen haben, werden rückgängig

gemacht, wenn das Formular geschlossen wird.2801 Das OLE-Objekt ist nicht geladen, weil das ungebundene OLE-Steuerelement nicht initialisiert

worden ist.2802 Ein benutzerdefiniertes OLE-Steuerelement darf nur in ein Objektfeld eingesetzt werden.2803 Sie haben unzureichende Zugriffsrechte oder Lizenzen, die zum Öffnen oder Erstellen des OLE-

Page 681: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-11

Code FehlerzeichenfolgeObjekts erforderlich sind.

3000 Reservierter Fehler (|); es gibt keine Meldung für diesen Fehler.3001 Ungültiges Argument.3002 Sitzung konnte nicht gestartet werden.3003 Transaktion konnte nicht gestartet werden; bereits zu viele verschachtelte Transaktionen

vorhanden.3004 Datenbank '|' nicht gefunden.3005 '|' ist kein zulässiger Datenbankname.3006 Datenbank '|' ist exklusiv gesperrt.3007 Bibliotheks-Datenbank '|' konnte nicht geöffnet werden.3008 Tabelle '|' ist exklusiv gesperrt.3009 Tabelle '|' konnte nicht gesperrt werden; sie wird gerade bearbeitet.3010 Tabelle '|' ist bereits vorhanden.3011 Objekt '|' nicht gefunden.3012 Objekt '|' ist bereits vorhanden.3013 Installierbare ISAM-Datei konnte nicht umbenannt werden.3014 Zusätzliche Tabellen können nicht geöffnet werden.3015 '|' ist kein Index in dieser Tabelle.3016 Feld wird nicht in Datensatz passen.3017 Feldlänge ist zu groß.3018 Feld '|' nicht gefunden.3019 Operation unzulässig ohne aktuellen Index.3020 Aktualisieren ohne die Methode 'AddNew' oder 'Edit'.3021 Kein aktueller Datensatz.3022 Doppelter Wert in Index, Primärschlüssel oder Beziehung; Änderungen waren nicht erfolgreich.3023 Methode 'AddNew' oder 'Edit' bereits verwendet.3024 Datei '|' nicht gefunden.3025 Mehr Dateien können nicht geöffnet werden.3026 Nicht genügend Speicher auf Festplatte.3027 Aktualisieren nicht möglich; Datenbank oder Objekt ist schreibgeschützt.3028 Microsoft Access konnte nicht gestartet werden. Die Systemdatenbank (normalerweise

'SYSTEM.MDA') fehlt oder ist exklusiv von einem anderen Benutzer geöffnet.3029 Kein zulässiger Kontoname oder kein zulässiges Kennwort.3030 '|' ist kein zulässiger Kontoname.3031 Kein zulässiges Kennwort.3032 Operation kann nicht ausgeführt werden.3033 Keine Berechtigung für '|'.3034 Übernehmen oder Zurücksetzen ohne Anweisung 'BeginTrans'.3036 Datenbank hat maximale Größe erreicht.3037 Es können nicht noch mehr Tabellen oder Abfragen geöffnet werden.3039 Index konnte nicht erstellt werden; zu viele Indizes bereits definiert.3040 Datenträger Ein-/Ausgabefehler während des Einlesens.3041 Datenbank, die mit einer neueren Version von Microsoft Access erstellt wurde als diese, kann

nicht geöffnet werden.3042 Keine MS-DOS-Dateikennungen mehr vorhanden.3043 Platten- oder Netzwerkfehler.3044 '|' ist kein zulässiger Pfad.3045 '|' konnte nicht verwendet werden; Datei wird bereits verwendet.3046 Speichern nicht möglich; momentane Sperrung durch anderen Benutzer.3047 Datensatz zu groß.3048 Mehr Datenbanken können nicht geöffnet werden.3049 Datenbank '|' kann nicht geöffnet werden. Vielleicht ist es keine Microsoft Access-Datenbank,

oder die Datei könnte beschädigt sein.3050 Datei konnte nicht gesperrt werden; SHARE.EXE ist nicht geladen.3051 Datei '|' konnte nicht geöffnet werden.3052 Anzahl der MS-DOS-Dateisperrungen überschritten. Sie müssen die mit SHARE.EXE eingestellte

Anzahl der Sperrungen erhöhen.3053 Zu viele Client-Tasks.3054 Zu viele Memo- oder OLE-Objektfelder.3055 Kein zulässiger Dateiname.3056 Die Datenbank konnte nicht repariert werden.3057 Operation nicht unterstützt bei eingebundenen Tabellen.3058 Nullwert in Index oder Primärschlüssel nicht möglich.3059 Operation von Benutzer abgebrochen.3060 Falscher Datentyp für Parameter '|'.3061 |1 Parameter wurden erwartet, aber nur |2 wurden geliefert.3062 Doppelte Benennung von '|'.3063 Doppelte Zielangabe in '|'.3064 Aktionsabfrage '|' kann nicht geöffnet werden.3065 Eine Abfrage, die keine Aktionsabfrage ist, kann nicht ausgeführt werden.3066 Die Abfrage muß mindestens ein Ausgabefeld besitzen.3067 Die Abfrage muß auf mindestens einer Tabelle oder Abfrage basieren.3068 Ungültiger Alias-Name.3069 Kann nicht auf Aktionsabfrage '|' basieren.3070 Der Bezug des Namens '|' kann nicht erkannt werden.3071 Ausdruck kann nicht ausgewertet werden.3073 Operation muß eine aktualisierbare Abfrage verwenden.3074 Tabellenname '|' kann nicht in FROM-Klausel wiederholt werden.3075 |1 in Abfrageausdruck '|2'.3076 | in Kriterienausdruck.3077 | im Ausdruck.3078 Tabelle oder Abfrage '|' nicht gefunden.3079 Mehrdeutiger Feldbezug '|'.

Page 682: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-12 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge3080 Verknüpfte Tabelle '|' ist nicht in FROM-Klausel aufgelistet.3081 Mehr als eine Tabelle mit dem gleichen Namen (|) kann nicht verknüpft werden.3082 JOIN-Operation '|' bezieht sich auf eine unverknüpfte Tabelle.3083 Interne Berichtsabfrage kann nicht benutzt werden.3084 In Aktionsabfrage kann nicht eingefügt werden.3085 Undefinierte Funktion '|' in Ausdruck.3086 Von angegebenen Tabellen konnte nicht gelöscht werden.3087 Zu viele Ausdrücke in GROUP BY-Klausel.3088 Zu viele Ausdrücke in ORDER BY-Klausel.3089 Zu viele Ausdrücke in DISTINCT-Ausgabe.3090 Ergebnistabelle darf nicht mehr als ein Feld vom Datentyp 'Zähler' enthalten.3091 HAVING-Klausel (|) ohne Gruppierung oder Aggregatfunktion.3092 HAVING-Klausel kann nicht in TRANSFORM-Anweisung ausgeführt werden.3093 ORDER BY-Klausel (|) in Konflikt mit DISTINCT.3094 ORDER BY-Klausel (|) in Konflikt mit GROUP BY-Klausel.3095 Keine Aggregatfunktion möglich im Ausdruck (|).3096 Keine Aggregatfunktion möglich in WHERE-Klausel (|).3097 Keine Aggregatfunktion möglich in ORDER BY-Klausel (|).3098 Keine Aggregatfunktion möglich in GROUP BY-Klausel (|).3099 Keine Aggregatfunktion möglich in JOIN-Operation (|).3100 Verknüpftes Schlüsselfeld '|' kann nicht auf Wert 'Null' gesetzt werden.3101 Es gibt keinen Datensatz in Tabelle '|2' mit übereinstimmenden Schlüsselfeldern '|1'.3102 Zirkuläre Abhängigkeit verursacht durch '|'.3103 Von Alias '|' verursachte zirkuläre Abhängigkeit in der SELECT-Liste der Abfragedefinition.3104 Festgelegte Spaltenüberschrift '|' kann in einer Kreuztabellenabfrage nur einmal angeben

werden.3105 Fehlender Zielfeldname in SELECT INTO-Anweisung (|).3106 Fehlender Zielfeldname in UPDATE-Anweisung (|).3107 Datensatz/-sätze kann/können nicht hinzugefügt werden; keine Berechtigung 'Daten einfügen' für

'|'.3108 Datensatz/-sätze kann/können nicht bearbeitet werden; keine Berechtigung 'Daten aktualisieren'

für '|'.3109 Datensatz/-sätze kann/können nicht gelöscht werden; keine Berechtigung 'Daten löschen' für

'|'.3110 Definitionen lesen nicht möglich; keine Berechtigung 'Entwurf lesen' für Tabelle oder Abfrage

'|'.3111 Erstellen nicht möglich; keine Erstellungsberechtigung für Tabelle oder Abfrage '|'.3112 Datensatz/-sätze kann/können nicht gelesen werden; keine Berechtigung 'Daten lesen' für '|'.3113 '|' kann nicht aktualisisert werden; Feld nicht aktualisierbar.3114 Kann kein Memo- oder OLE-Objekt enthalten, wenn Sie eindeutige Werte (|) auswählen.3115 Memo- oder OLE-Objekt nicht möglich in Aggregatfunktionsargument (|).3116 Memo- oder OLE-Objekt nicht möglich in Kriterium (|) einer Aggregatfunktion.3117 Es kann nicht sortiert werden nach Memo oder OLE-Objekt (|).3118 Es kann nicht verknüpft werden nach Memo oder OLE-Objekt (|).3119 Es kann nicht gruppiert werden nach Memo oder OLE-Objekt (|).3120 Mit '*' (|) ausgewählte Felder können nicht gruppiert werden.3121 Mit '*' ausgewählte Felder können nicht gruppiert werden.3122 '|' ist nicht Teil einer Aggregatfunktion oder einer Gruppierung.3123 '*' in einer Kreuztabellenabfrage nicht erlaubt.3124 Keine Eingabe möglich von interner Berichtsabfrage (|).3125 '|' ist kein zulässiger Name.3126 Unzulässiges Einklammern des Namens '|'.3127 INSERT INTO-Anweisung enthält unbekannten Feldnamen '|'.3128 Die Tabelle, von der gelöscht werden soll, muß angegeben werden.3129 Unzulässige SQL-Anweisung; 'DELETE', 'INSERT', 'SELECT' oder 'UPDATE' erwartet.3130 Syntaxfehler in DELETE-Anweisung.3131 Syntaxfehler in FROM-Klausel.3132 Syntaxfehler in GROUP BY-Klausel.3133 Syntaxfehler in HAVING-Klausel.3134 Syntaxfehler in INSERT-Anweisung.3135 Syntaxfehler in JOIN-Operation.3136 Syntaxfehler in LEVEL-Klausel.3137 Fehlendes Semikolon (;) am Ende der SQL-Anweisung.3138 Syntaxfehler in ORDER BY-Klausel.3139 Syntaxfehler in PARAMETER-Klausel.3140 Syntaxfehler in PROCEDURE-Klausel.3141 Syntaxfehler in SELECT-Anweisung.3142 Zeichen nach Ende von SQL-Anweisung gefunden.3143 Syntaxfehler in TRANSFORM-Anweisung.3144 Syntaxfehler in UPDATE-Anweisung.3145 Syntaxfehler in WHERE-Klausel.3146 ODBC - Aufruf fehlgeschlagen.3151 ODBC - Verbindung zu '|' fehlgeschlagen.3154 ODBC - DLL '|' nicht gefunden.3155 ODBC - Einfügen fehlgeschlagen in eingebundener Tabelle '|'.3156 ODBC - Löschen fehlgeschlagen in eingebundener Tabelle '|'.3157 ODBC - Aktualisieren fehlgeschlagen in eingebundener Tabelle '|'.3158 Datensatz konnte nicht gespeichert werden; momentan gesperrt durch einen anderen Benutzer.3159 Kein zulässiges Lesezeichen.3160 Tabelle ist nicht geöffnet.3161 Datei konnte nicht entschlüsselt werden.3162 Null ist unzulässig.3163 Einfügen nicht möglich; Daten zu lang für Feld.

Page 683: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-13

Code Fehlerzeichenfolge3164 Feld konnte nicht aktualisiert werden.3165 .INF-Datei konnte nicht geöffnet werden.3166 Fehlende Memo-Datei.3167 Datensatz ist gelöscht.3168 .INF-Datei ungültig.3169 Unzulässiger Typ im Ausdruck.3170 Installierbare ISAM nicht gefunden.3171 Netzpfad oder Benutzername nicht gefunden.3172 Datei PARADOX.NET konnte nicht geöffnet werden.3173 Tabelle 'MSysAccounts' in der Systemdatenbankdatei (SYSTEM.MDA) konnte nicht geöffnet werden.3174 Tabelle 'MSysGroups' in der Systemdatenbankdatei (SYSTEM.MDA) konnte nicht geöffnet werden.3175 Datum außerhalb des Bereichs oder in unzulässigem Format.3176 Datei '|' konnte nicht geöffnet werden.3177 Kein zulässiger Tabellenname.3179 Unerwartetes Dateiende registriert.3180 Nach Datei '|' konnte nicht geschrieben werden.3181 Unzulässiger Bereich.3182 Unzulässiges Dateiformat.3183 Nicht genug Platz auf temporärer Platte.3184 Abfrage konnte nicht ausgeführt werden; verknüpfte Tabelle nicht gefunden.3185 Versuch der Erstellung zu vieler Felder bei SELECT INTO in eine Remote-Datenbank.3186 Speichern nicht möglich; wird gerade von Benutzer '|2' auf Rechner '|1' gesperrt.3187 Lesen nicht möglich; wird gerade von Benutzer '|2' auf Rechner '|1' gesperrt.3188 Aktualisieren nicht möglich; wird gerade von einer anderen Sitzung auf diesem Rechner

gesperrt.3189 Tabelle '|1' ist exklusiv gesperrt von Benutzer '|3' auf Rechner '|2'.3190 Zu viele Felder definiert.3191 Feld kann nicht mehr als einmal definiert werden.3192 Ausgabetabelle '|' nicht gefunden.3193 (unbekannt)3194 (unbekannt)3195 (Ausdruck)3196 '|' kann nicht verwendet werden; Datenbank wird bereits verwendet.3197 Daten sind geändert; Operation angehalten.3198 Sitzung konnte nicht gestartet werden. Zu viele Sitzungen sind aktiv.3199 Dieser Bezug kann nicht gefunden werden.3200 Der Datensatz kann nicht gelöscht oder geändert werden. Da verwandte Datensätze in der Tabelle

'|' existieren, würden Regeln der referentiellen Integrität verletzt.3201 Der Datensatz kann nicht hinzugefügt oder geändert werden. Die Regeln der referentiellen

Integrität erfordern einen verwandten Datensatz in der Tabelle '|'.3202 Speichern nicht möglich; wird gerade gesperrt von einem anderen Benutzer.3203 Unterabfrage kann nicht in Ausdruck (|) angegeben werden.3204 Datenbank ist bereits vorhanden.3205 Zu viele Kreuztabellen-Spaltenüberschriften (|).3206 Es kann keine Beziehung zwischen einem Feld und sich selbst erstellt werden.3207 Operation wird nicht in einer Paradox-Tabelle ohne Primärschlüssel unterstützt.3208 Ungültiger Eintrag 'Deleted' im [dBASE ISAM]-Abschnitt in msacc20.ini.3209 Ungültiger Eintrag 'Stats' im [dBASE ISAM]-Abschnitt in msacc20.ini.3210 Verbindungskette zu lang.3211 Tabelle '|' kann nicht gesperrt werden; sie wird bearbeitet.3212 Tabelle '|1' konnte nicht gesperrt werden; sie wird gerade bearbeitet von Benutzer '|3' auf

Rechner '|2'.3213 Ungültiger Eintrag 'Date' im [dBASE ISAM]-Abschnitt in msacc20.ini.3214 Ungültiger Eintrag 'Mark' im [dBASE ISAM]-Abschnitt in msacc20.ini.3215 Zu viele Btrieve-Tasks.3216 Parameter '|' wurde angegeben; Tabellenname ist erforderlich.3217 Parameter '|' wurde angegeben; Datenbankname ist erforderlich.3218 Aktualisieren nicht möglich; gerade gesperrt.3219 Unzulässige Operation.3220 Falsche Sortierreihenfolge in Paradox.3221 Ungültige Einträge in [Btrieve]-Abschnitt in WIN.INI.3222 Die Abfrage kann keinen Datenbank-Parameter enthalten.3223 '|' ist kein zulässiger Parametername.3224 Btrieve-Data-Dictionary kann nicht gelesen werden.3225 Beim Datensatzsperren ist eine gegenseitige Sperre aufgetreten, während eine Btrieve-Operation

durchgeführt wurde.3226 Fehler entdeckt bei Benutzung der Btrieve-DLL.3227 Ungültiger Eintrag 'Century' im [dBASE ISAM]-Abschnitt in msacc20.ini.3228 Ungültiger Eintrag 'CollatingSequence' im [Paradox ISAM]- oder [dBASE ISAM]-Abschnitt in

msacc20.ini.3229 Btrieve -- Feld kann nicht geändert werden.3230 Veraltete Paradox-Sperrdatei.3231 ODBC -- Feld wäre zu lang; Daten wurden abgeschnitten.3232 ODBC -- Tabelle konnte nicht erstellt werden.3234 ODBC -- Remote-Abfrage-Timeout abgelaufen.3235 ODBC -- Datentyp wird auf dem Server nicht unterstützt.3238 ODBC -- Daten außerhalb des Bereichs.3239 Zu viele aktive Benutzer.3240 Btrieve -- WBTRCALL.DLL fehlt.3241 Btrieve -- keine Ressourcen mehr verfügbar.3242 Unzulässige Bezugnahme in der Anweisung SELECT.3243 Keiner der Import-Feldnamen stimmt mit Feldern der angefügten Tabelle überein.3244 Durch Kennwort geschütztes Arbeitsblatt kann nicht importiert werden.

Page 684: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-14 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code Fehlerzeichenfolge3245 Feldnamen der ersten Zeile in der zu importierenden Tabelle konnten nicht gelesen werden.3246 Operation nicht unterstützt in Transaktion.3247 ODBC -- Definition der verknüpften Tabelle hat sich geändert.3248 Ungültiger 'NetworkAccess'-Eintrag in msacc20.ini.3249 Ungültiger 'PageTimeout'-Eintrag in msacc20.ini.3250 Schlüssel konnte nicht erstellt werden.3251 Dieses Feature ist nicht verfügbar.3252 Ein Formular, dessen zugrundeliegende Abfrage eine benutzerdefinierte Funktion enthält, die

versucht, die Eigenschaft 'DatensatzgruppeDuplizieren' einzustellen oder abzurufen, kann nichtgeöffnet werden.

3254 ODBC -- Es können nicht alle Datensätze gesperrt werden.3256 Index-Datei nicht gefunden.3257 Syntaxfehler in Deklaration WITH OWNERACCESS OPTION.3258 Abfrage enthält mehrdeutige Inklusionsverknüpfungen.3259 Ungültiger Felddatentyp.3260 Aktualisieren nicht möglich; wird gerade gesperrt durch Benutzer '|2' auf Rechner '|1'.3261 |3262 |3263 Ungültiges Datenbankobjekt.3264 Keine Felder definiert - Tabelle kann nicht angefügt werden.3265 Name nicht gefunden in dieser Sammlung.3266 Es kann nicht angefügt werden. - Feld ist Teil einer 'TableDefs'-Sammlung.3267 Die Eigenschaft kann nur festgelegt werden, wenn das Feld Teil einer Fields-Auflistung des

Recordset-Objekts ist.3268 Die Eigenschaft kann nicht eingestellt werden, wenn das Objekt Teil einer Auflistung ist.3269 Es kann nicht angefügt werden. - Index ist Teil einer 'TableDefs'-Sammlung.3270 Eigenschaft nicht gefunden.3271 Ungültiger Wert der Eigenschaft.3272 Objekt ist keine Auflistung.3273 Methode paßt nicht zu diesem Objekt.3274 Die externe Tabelle hat nicht das erwartete Format.3275 Unerwarteter Fehler vom externen Datenbanktreiber (|).3276 Ungültige Datenbank-Kennung.3277 Mehr als 10 Felder in einem Index sind nicht erlaubt.3278 Datenbank-Engine wurde nicht initialisiert.3279 Datenbank-Engine ist bereits initialisiert.3280 Ein Feld, das Teil eines Index ist, kann nicht gelöscht werden.3281 Dieser Index kann nicht gelöscht werden. Es ist entweder der aktuelle Index, oder er wird in

einer Beziehung verwendet.3282 Feld oder Index können nicht in einer Tabelle definiert werden, die Daten enthält.3283 Der Primärschlüssel ist bereits vorhanden.3284 Der Index ist bereits vorhanden.3285 Ungültige Indexdefinition.3286 Format der Memodatei entspricht nicht dem angegebenen externen Datenbankformat.3287 Ein Index kann nicht an einem Memofeld oder OLE Objektfeld erstellt werden.3288 Paradox: Kein Primärindex.3289 Syntaxfehler in CONSTRAINT-Klausel.3290 Syntaxfehler in 'CREATE TABLE'-Anweisung.3291 Syntaxfehler in 'CREATE INDEX'-Anweisung.3292 Syntaxfehler in Felddefinition.3293 Syntaxfehler in 'ALTER TABLE'-Anweisung.3294 Syntaxfehler in 'DROP INDEX'-Anweisung.3295 Syntaxfehler in 'DROP TABLE'-Anweisung.3296 Verknüpfungsausdruck nicht unterstützt.3297 Tabelle oder Abfrage konnten nicht importiert werden. Es wurden keine Datensätze gefunden,

oder alle Datensätze enthalten Fehler.3298 Es gibt mehrere Tabellen mit diesem Namen; geben Sie bitte den Eigentümer im Format

'Eigentümer.Tabelle' an.3299 ODBC-Spezifikation-Bestätigungsfehler (|). Dieser Fehler sollte dem Vertreiber des ODBC-

Treibers gemeldet werden.3300 Es kann keine Beziehung hergestellt werden.3301 Diese Operation kann nicht ausgeführt werden; Features dieser Version von Microsoft Access

sind nicht verfügbar in Datenbanken mit älterem Format.3302 Regeln können nicht geändert werden, wenn sie in dieser Tabelle angewendet sind.3303 Dieses Feld kann nicht gelöscht werden -- es gehört zu einer Beziehung oder mehreren

Beziehungen.3304 Sie müssen einen persönlichen Bezeichner (Personal Identifier; PID) eingeben, der aus 4 bis 20

Zeichen und Zahlen besteht.3305 Fehlerhafte Verbindungskette in Pass-Through-Abfrage.3306 Höchstens ein Feld kann von einer Unterabfrage zurückgegeben werden, die nicht das

Schlüsselwort EXISTS verwendet.3307 Spaltenanzahl in den beiden markierten Tabellen oder Abfragen der Union-Abfrage stimmt nicht

überein.3308 TOP-Argument (Spitzenwerte) ist ungültig in Auswahlabfrage.3309 Eigenschaft kann nicht größer als 2 KB festgelegt werden.3310 Die Eigenschaft wird nicht unterstützt für externe Datenquellen oder für Datenbanken, die in

einer früheren Version von Microsoft Access erstellt wurden.3311 Angegebene Eigenschaft ist bereits vorhanden.3312 Gültigkeitsregeln und Standardwerte können nicht auf Systemtabellen oder eingebundene Tabellen

angewendet werden.3313 Dieser Gültigkeitsausdruck kann nicht auf diesem Feld plaziert werden.3314 Feld '|' kann keinen Nullwert enthalten.3315 Feld '|' kann nicht eine Zeichenfolge mit Länge Null sein.

Page 685: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-15

Code Fehlerzeichenfolge3316 |3317 Der Wert oder die Werte, den/die Sie eingegeben haben, verstößt/verstoßen gegen die

Gültigkeitsregel ('|2'), festgelegt in '|1'.3318 Abfrageentwurf nicht zulässig für Löschabfragen.3319 Syntaxfehler in UNION-Abfrage.3320 | im Ausdruck der Gültigkeitsprüfung auf Tabellenebene.3321 Keine Datenbank in der Verbindungskette oder in der IN-Klausel angegeben.3322 Kreuztabellenabfrage enthält eine oder mehrere ungültige fixierte Spaltenüberschrift(en).3323 Die Abfrage gibt keine Datensätze zurück.3324 Methode 'Execute' muß bei Aktions- oder Datendefinitionsabfrage verwendet werden.3325 Pass-Through-Abfrage mit Eigenschaft 'LiefertDatensätze' auf 'wahr' eingestellt hat keine

Datensätze zurückgegeben.3326 Diese Datensatzgruppe kann nicht aktualisiert werden.3327 Feld '|' basiert auf einem Ausdruck und kann nicht bearbeitet werden.3328 Tabelle '|2' ist schreibgeschützt.3329 Der Datensatz in der Tabelle '|' wurde von einem anderen Benutzer gelöscht.3330 Der Datensatz in der Tabelle '|' wurde von einem anderen Benutzer gesperrt.3331 Um Änderungen an diesem Feld vornehmen zu können, muß erst der Datensatz gespeichert werden.3332 Es kann kein Wert in ein leeres Feld auf der '1'-Seite einer Inklusionsverknüpfung eingegeben

werden.3333 Datensätze in der Tabelle '|' hätten keinen Datensatz auf der '1'-Seite.3334 Darf nur Version 1.0-Format aufweisen.3335 'DeleteOnly' aufgerufen mit 'non-zero cbData'.3336 Btrieve: Ungültige 'IndexDDF'-Option in msacc20.ini.3337 Ungültige 'DataCodePage'-Option in msacc20.ini.3338 Btrieve: Xtrieve-Optionen sind nicht korrekt in msacc20.ini.3339 Btrieve: Ungültige 'IndexDeleteRenumber'-Option in msacc20.ini.3340 Abfrage '|' ist beschädigt.3341 Aktuelles Feld muß dem Verknüpfungsschlüssel '|' auf der 1-Seite der Inklusionsverknüpfung

entsprechen.3342 Ungültiges Memo- oder OLE-Objekt in Unterabfrage ('|').3343 Nicht erkennbares Datenbankformat '|'.3344 Unbekannte oder ungültige Referenz '|1' im Gültigkeitsausdruck oder Standardwert in Tabelle

'|2'.3345 Unbekannte oder ungültige Feldreferenz '|'.3346 Die Anzahl von Abfragewerten und Zielfeldern ist verschieden.3347 Es können keine Datensätze eingefügt werden; der Primärschlüssel der Tabelle '|' ist nicht in

der Datensatzgruppe.3348 Es können keine Datensätze eingefügt werden, der Verknüpfungsschlüssel der Tabelle '|' ist

nicht in der Datensatzgruppe.3349 Numerischer Feldüberlauf.3350 Objekt ist ungültig für Operation.3351 ORDER BY-Ausdruck (|) verwendet Felder, die nicht zur Ausgabe geeignet sind.3352 Kein Zielfeldname angegeben in Anweisung INSERT (|).3353 Btrieve: Datei FILE.DDF kann nicht gefunden werden.3354 Höchstens ein Datensatz kann von dieser Unterabfrage zurückgegeben werden.3355 Syntaxfehler im Standardwert.3356 Datenbank ist geöffnet von Benutzer '|2' auf Rechner '|1'. Sie können die Datenbank nicht

exklusiv öffnen.3357 Diese Abfrage ist keine gültige Datendefinitionsabfrage.3358 Microsoft Access-Systemdatenbank (normalerweise SYSTEM.MDA) konnte nicht geöffnet werden.3359 Pass-Through-Abfrage muß mindestens ein Zeichen enthalten.3360 Abfrage ist zu komplex.3361 Union-Abfragen nicht erlaubt in Unterabfragen.3362 Aktualisieren oder Löschen einzelner Zeilen betraf mehr als eine Zeile einer Remote-Tabelle.

Der als eindeutig bezeichnete Index enthält doppelte Werte.3363 Es können keine Datensätze eingefügt werden; es gibt keinen übereinstimmenden Datensatz auf

der '1'-Seite.3364 Ein Memo- oder OLE-Objektfeld '|' kann nicht in einer SELECT-Klausel einer Union-Abfrage

verwendet werden.3365 Eigenschaft kann nicht eingestellt werden für Remote-Objekte.3366 Keine Felder definiert -- Beziehung kann nicht angefügt werden.3367 Es kann nicht angefügt werden. Das Objekt befindet sich bereits in der Auflistung.3368 Auf beiden Seiten einer Beziehung muß sich die gleiche Anzahl Felder des gleichen Datentyps

befinden.3369 Feld kann nicht in der Indexdefinition gefunden werden.3370 Der Entwurf von '|' kann nicht bearbeitet werden. Er ist in einer schreibgeschützten

Datenbank.3371 Tabelle/Einschränkung kann nicht gefunden werden.3372 Kein solcher Index '|2' in Tabelle '|1'.3373 Es kann keine Beziehung hergestellt werden. Beziehungstabelle '|' hat keinen Primärschlüssel.3374 Die angegebenen Felder sind nicht eindeutig indiziert in Tabelle '|'.3375 Tabelle '|1' hat bereits einen Index mit dem Namen '|2'3376 Tabelle '|' ist nicht vorhanden.3377 Keine Beziehung '|2' in Tabelle '|1'.3378 Es gibt bereits eine Beziehung mit dem Namen '|' in der aktuellen Datenbank.3379 Beziehungen können nicht erstellt werden, um referentielle Integrität zu erzwingen.

Existierende Daten in Tabelle '|2' verletzen Regeln der referentiellen Integrität inverknüpfter Tabelle '|1'.

3380 Das Feld '|2' ist bereits in der Tabelle '|1' vorhanden.3381 Es gibt kein Feld mit dem Namen '|2' in Tabelle '|1'.3382 Die Länge des Feldes '|' muß 1 bis 255 sein.3383 Das Feld '|' kann nicht gelöscht werden; es ist Bestandteil einer Beziehung oder mehrerer

Page 686: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW 8 Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

Seite: 8-16 D:\Eigene\Doku\DB\DBAcc08.doc – 9773

Code FehlerzeichenfolgeBeziehungen.

3384 Eine eingebaute Eigenschaft kann nicht gelöscht werden.3385 Benutzerdefinierte Eigenschaften unterstützen keine Nullwerte.3386 Die Eigenschaft '|' muß vor der Verwendung dieser Methode eingestellt sein.3387 Das Verzeichnis TEMP konnte nicht gefunden werden.3388 Unbekannte Funktion '|2' im Gültigkeitsausdruck oder Standardwert in '|1'.3389 Abfrageunterstützung nicht verfügbar.3390 Kontoname ist bereits vorhanden.3391 Ein Fehler ist aufgetreten. Die Eigenschaften wurden nicht gespeichert.3392 Es gibt keinen Primärschlüssel in Tabelle '|'.3393 Verknüpfen, Gruppieren oder Sortieren kann nicht durchgeführt werden. Verbundene Felder sind

zu lang.3394 Die Eigenschaft kann nicht gespeichert werden; sie ist eine Schema-Eigenschaft.3395 Ungültige Einschränkung der referentiellen Integrität.3396 Weitergabe der Operation nicht möglich. Da Detaildatensätze in Tabelle '|' existieren, würden

die Regeln der referentiellen Integrität verletzt.3397 Weitergabe der Operation nicht möglich. Es muß einen Detaildatensatz in Tabelle '|' geben.3398 Weitergabe der Operation nicht möglich; Ergebnis wäre ein Nullwert in einem

Primärschlüsselfeld in Tabelle '|'.3399 Weitergabe der Operation nicht möglich; Ergebnis wäre ein doppelter Wert in einem

Primärschlüsselfeld in Tabelle '|'.3400 Weitergabe der Operation nicht möglich; es würde zweimal Feld '|2' in Tabelle '|1'

aktualisiert.3401 Weitergabe der Operation nicht möglich; das Feld '|' würde einen Nullwert enthalten, was

unzulässig ist.3402 Weitergabe der Operation nicht nicht möglich; das Feld '|' würde eine Zeichenfolge der Länge

Null enthalten, was unzulässig ist.3403 Weitergabe der Operation nicht möglich; '|'3404 Weitergabe der Operation nicht möglich; der eingegebene Wert ist nicht zulässig wegen der

Gültigkeitsregel '|2, die in '|1' festgelegt ist.3405 Fehler '|' in Gültigkeitsregel.3406 Fehler '|' in Standardwert.3407 Die Tabelle 'MSysConf table' des Servers existiert, aber hat ein ungültiges Format. Wenden Sie

sich an Ihren Systemadministrator.3408 Zu viele 'FastFind'-Sessions wurden aufgerufen.3409 Ingültiger Feldname '|' in Definition des Index oder der Beziehung.3410 Diese Datenbank kann nicht zum Aktualisieren geöffnet werden3411 Ingültiger Eintrag. Weitergabe der in Tabelle '|1' angegebenen Operation kann nicht

durchgeführt werden, weil der eingegebene Wert zu groß für Feld '|2' ist.3412 |3413 Weitergabe der Aktualisierung von Tabelle '|1' kann nicht durchgeführt werden, weil sie gerade

von Benutzer '|3' auf Rechner '|2' bearbeitet wird.3414 Weitergabe der Aktualisierung von Tabelle '|' kann nicht durchgeführt werden, weil sie gerade

bearbeitet wird.3415 Eine Zeichenkette der Länge Null ist nur in einem Text- oder Memofeld gültig.3416 |3417 Eine Aktionsabfrage kann nicht zur Eingabe verwendet werden.3418 '|' kann nicht geöffnet werden. Ein anderer Benutzer hat die Tabelle geöffnet und verwendet

eine verschiedene Netzwerk-Kontrolldatei oder Sperrmethode.3419 Diese Paradox 4.x-Tabelle kann nicht geöffnet werden, weil ParadoxNetStyle auf 3.x in

msacc20.ini eingestellt ist.3420 Das Objekt ist nicht mehr gültig.3421 Datentyp-Konvertierungsfehler.3422 Die Tabellenstruktur kann nicht bearbeitet werden. Ein anderer Benutzer hat die Tabelle

geöffnet.3423 Sie können nicht unter Verwendung von ODBC eine externe Microsoft Access- oder ISAM-

Datenbanktabelle in Ihre Datenbank einbinden.3424 Datenbank kann nicht erstellt werden; die angegebene Sprache ist ungültig in der angegebenen

Version.3425 Diese Methode oder Eigenschaft ist für diese Datenbankgruppe gegenwärtig nicht verfügbar.3426 Die Aktion wurde von einem zugeordneten Objekt abgebrochen.3427 Fehler in Datenzugriffsobjekts-Automatisierung.3428 Die Datenbank-Engine hat ein Problem in Ihrer Datenbank entdeckt. Um das Problem zu

korrigieren, müssen Sie die Datenbank reparieren und komprimieren.7750 Die Eigenschaft kann nicht eingestellt werden, weil das Steuerelement Teil einer Optionsgruppe

ist.7751 Die Eigenschaft 'Objektpalette' kann nicht für ein gebundenes OLE-Objekt in der

Entwurfsansicht abgerufen werden.7752 Ein Filter kann nicht angewendet werden, wenn alle Datensätze gesperrt sind.7753 |7754 Die Spalte im Datenblatt kann nicht verschoben werden.7755 Der Diagrammassistent kann nicht aufgerufen werden. Stellen Sie sicher, daß die

Formularassistenten installiert sind.7850 Assistent kann nicht gefunden werden, oder Syntaxfehler im Deklarationsbereich eines Access

Basic-Moduls. Abschnitt [Libraries] von msacc20.ini nach erforderlichen Assistenten-Bibliotheken überprüfen, und alle Access Basic-Module der Datenbank kompilieren

7851 Eine Symbolleiste mit Namen '|' existiert bereits in dieser Datenbank.7852 Ungültiger Name für eine Symbolleiste: '|'.7853 Die Standardspaltenbreite muß mindestens 0,25 mm (0,1 Zoll) betragen.7854 Tabellen sind die einzigen Objekte, die von 2.0- in 1.x-Datenbanken exportiert werden können.

Objekte können nicht in 1.x-Datenbanken importiert oder eingebunden werden, wenn sie mitMicrosoft Access 2.0 geöffnet wurden.

7855 Import-/Exportfunktionen konnten nicht geladen werden.

Page 687: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW MS-Access – Fehlersuche © Prof. Dr.-Ing. H.-J. Scheibl

D:\Eigene\Doku\DB\DBAcc08.doc – 9773 Seite: 8-17

Code Fehlerzeichenfolge7856 Das Menü kann nicht geändert werden, wenn die Objektanwendung aktiv ist.7857 Systeminformationen können nicht angezeigt werden.7858 Die Tabulatorbreite muß eine Ganzzahl zwischen 1 und 30 sein.7900 Fehlertabelle konnte nicht erstellt werden; Datenbank kann nicht konvertiert werden.7901 In Fehlertabelle konnte nicht geschrieben werden; Datenbank kann nicht konvertiert werden.7902 Fehler sind aufgetreten beim Konvertieren der |1 Gültigkeitsregel(n) und der/des

Standardwerte(s). Prüfen Sie die Fehler in der Fehlertabelle '|2'.7903 Dieses Feld konnte nicht eingefügt werden; es gibt zu viele Felder in der Tabelle.7904 Im Feld-Editor ist ein Fehler aufgetreten.7905 Felddatentypen konnten nicht geändert werden. Es befinden sich Daten in dieser Tabelle, die

die Datensatzgültigkeitsregel verletzen. Sie müssen die Datensatzgültigkeitsregel entfernenoder die Daten korrigieren, bevor eine Datentypänderung möglich ist.

7950 Bezug auf die Eigenschaft 'DatensatzgruppeDuplizieren' ist nicht möglich in derEntwurfsansicht.

7951 Ungültiger Bezug auf die Eigenschaft 'DatensatzgruppeDuplizieren'.

8.2 Einsatz des Debuggers

Page 688: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 1

Belegarbeit in Datenbanken – Diskettenverwaltung

Prof. Dr.-Ing. H.-J. Scheibl

Die Belegarbeit besteht aus dem Entwurf und der Realisierung einer Aufgabe in Microsoft Access. Hierzu istein Entwurf, eine Anwendung und die zugehörige Dokumentation zu entwerfen. Die Unterlagen werden se-mesterbegleitend erstellt und abgeliefert (Art, Umfang und Zeitpunkt am Ende dieser Beschreibung). Eserfolgt eine Bewertung der Teilaufgaben, die in die Gesamtnote eingeht.

1 Aufgabenbeschreibung

Sicher besitzen Sie selbst eine Fülle von Datenträgern, angefangen von 5¼“ Disketten,über 3½" bis hin zu CD-ROMs. Hin und wieder werden Sie sich fragen: „Wo finde ich dieDatei xyz.abc?“ Sie wissen genau, daß Sie diese Datei irgendwo gespeichert haben.Auch wollen Sie möglichst keine Doubletten aufheben. Daher sollte Ihnen ein passendesProgramm den Namen des Datenträgers der gesuchten Datei liefern. Eine andere Funkti-on erstellt eine Liste über die Doubletten usw.

Entwerfen Sie eine Anwendung unter MS Access, die folgende Aufgaben erfüllt:

1. Weitgehend automatisches Einlesen von Datenträgern in einen vom Benutzer ge-wählten Katalog mit Übernahme der Informationen zu den Datenträgern, den Pfadenund den Dateien.Automatisch soll hier auch bedeuten, daß die manuellen Tätigkeiten weitgehend mi-nimiert werden (siehe folgende Punkte).

2. Unterscheidung zwischen physikalischem Label auf dem Datenträger, die Sie u. U.nicht verändern wollen (z. B. bei Originaldisketten), und „logischem“ Namen der Da-tenträgern, mit dem Sie Ihre Datenträger beschriften und nach dem Sie diese sortiertablegen. Er ist auf jeden Fall eindeutig. Das Label dagegen kann mehrfach vorkom-men.

3. Erkennen von Labeln, die automatisch einlesbar sind (in diesem Fall Übernahme desLabels als Name), und solchen, die eine manuelle Ergänzung des Namens erfordern.Sie wählen hierzu ein Erkennungszeichen aus, daß Sie Ihrem Label voranstellen.Dieses Anfangszeichen sollte möglichst auf einem kommerziellen Datenträger nichtzu erwarten sein. Wird ein solches Label erkannt, dann wird es automatisch zum Na-men des Datenträgers. Der gesamte Datenträger wird sofort eingelesen.

4. Informieren und Befragen des Benutzers, wenn dieser einen Datenträger mehrfacheinlesen will (vielleicht hat sich ja sein Inhalt verändert, siehe folgender Punkt).

5. Möglichkeit der automatischen Korrektur, wenn ein Datenträger überschrieben oderverändert wurde, d. h. Rückfrage beim Benutzer, ob die Daten eines als doppelt er-kannter Datenträger noch einmal aufgenommen werden sollen. Der einfache Weg,den Datenträger vollständig zu löschen und neu einzulesen, hat den Nachteil, daß diegesamten Kommentare und Stichwörter ebenfalls gelöscht werden (siehe folgendePunkte), nur z. B. weil eine kleine Datei auf der Diskette verändert wurde. ÜberlegenSie, wie ein Abgleich zwischen Katalog und Datenträger erfolgen könnte, so daß feh-lende Dateien gelöscht, veränderte Dateien korrigiert und neue Dateien aufgenom-men werden.

6. Vergabe von Kommentaren zu jedem Datenträger, allen Pfaden und zu jeder Datei.7. Einfache Suche nach Datenträgern, Pfaden oder einzelnen Dateien.

Page 689: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 2

8. Erstellen von Berichten, z. B. einer Dateiliste nach einem Suchkriterium.9. Optimale Darstellung von Doubletten. Unterscheidung echter Doubletten und geän-

derter Versionen. Start der Aufzählung mit der jüngsten Datei. Darunter ältere Vari-anten, die sich im Datum bzw. der Größe unterscheiden.

10. Exportieren dieser Ergebnislisten zur Weiterverarbeitung in eine Textverarbeitungusw.

-------------------------------------------- Optional----------------------------------------------------------11. Einführung eines „Themas“, zu dem mehrere Datenträger gehören können, z. B.

DOS, Windows 95 usw. werden auf vielen Datenträgern geliefert.12. Vergabe von beliebig vielen Stichwörtern zu jedem Datenträger, jedem Pfad und zu

jeder Datei. Dabei soll ein gemeinsamer Thesaurus existieren. Die Suche sollte alsoDatenträger, Pfade oder einzelne Dateien zu einem Stichwort liefern.

13. Erweiterte Suche nach den weiteren gespeicherten Informationen. Typisch wäre dieAbfrage, auf welchem Datenträger noch ein bestimmter Platz vorhanden ist usw.

14. Komplexe Suchanfragen durch logische Kombinationen, z. B. der Frage nach allenDateien zu einem Stichwort, die jünger als ein vorgegebenes Datum sind usw.

15. Erkennung von .ARC, .ARJ, .LZH, .PAK, .ZIP und .ZOO Dateien und Auf-nahme dieser Dateien in den Katalog mit Vermerk der Abhängigkeit von der Haupt-datei. Versuch, ähnliches mit EXPAND Dateien durchzuführen.

16. Erkennen und Abspeichern von Sonderdateien wie z. B. grafischen Dateien .BMP,. GIF, .IMG, .PCX und .RLE sowie Klangdateien .WAV. Speichern weitererInformationen wie Auflösung usw.

17. Erstellung von individuellen Berichten nach Benutzerwünschen.

2 Entity-Relationship-Entwurf

Stellen Sie zuerst ein ER-Diagramm für das Problem auf. Achten Sie hierbei auf die Nor-malformen. Sollten Sie an einer Stelle gegen eine Normalform verstoßen, dann begrün-den Sie Ihren Lösungsweg ausführlich. Stellen Sie auch Erweiterungen und Alternativenvor. Begründen Sie diese.

Ich empfehle Ihnen, den ER Entwurf mit dem Werkzeug CASE/4/0 oder ähnlichem durch-zuführen.

3 Realisation

Setzen Sie Ihren Entwurf in eine Access Anwendung um.

Achten Sie besonders darauf, daß Benutzerfehler nicht zu inkonsistenten Datenbestän-den führen, d. h. fangen Sie alle Fehleingaben aus.

Sollten Sie Summenfelder haben, dann müßten diese bei Änderungen der Details mitge-führt werden. So verringert sich die freie Kapazität eines Datenträgers auch dann, wennman eine neue Datei per Hand einträgt, bzw. Dateien oder ganze Pfade löscht. BeachtenSie dabei, daß die Dateigröße auf Sektoren- bzw. Clustergrenzen aufgerundet werdenmuß.

Page 690: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 3

3.1 Vorbereitung

Gehen Sie davon aus, daß Sie eine Vielzahl von Disketten, CD-ROMs usw. besitzen. Je-der Datenträger erhält einen eindeutigen Namen. Soweit dies möglich ist, schreiben Siediesen Namen auch als Label auf den Datenträger. Bei den Originaldisketten bzw. denCD-ROMs wollen Sie dieses nicht, oder es ist technisch gar nicht möglich (z. B. CD-ROM). Zum automatischen Einlesen versehen Sie alle beschreibbaren Datenträger miteinem Label, das Sie als solches automatisches Label erkennen können. Hierzu wählenSie z. B. ein Sonderzeichen als Startzeichen (Achtung! Die DOS-Versionen sind etwaseigen, so ist § in DOS 5.0 nicht erlaubt). Denkbar sind aber $,%,_ o. a. Access selbsthat einige Sonderzeichen für das Suchen, so daß Sie in den Namen (Labeln) auf die Zei-chen *,#,[,],-,?,! verzichten sollten. Es wird das Dollarzeichen $ empfohlen.

Wir gehen also von nebenstehendem Modell aus, wobei, wieerwähnt, der Name auf dem Etikett vermerkt ist, während dasLabel auf der Diskette selbst steht.

Wir geben allen unseren Datenträgern (so weit diese möglichist) ein solches Label. Diese vorbereiteten Datenträger solltenohne Rückfrage verarbeitet werden. Alle anderen werden perHand nachkorrigiert.

3.2 Eingangsfenster

Das Eingangsfenster sollte den Stand der letzten Verarbeitung darstellen und wenn mög-lich am Ende der Verarbeitung gespeichert werden. Wesentliche Informationen sind

− Statistik des Kataloges (Anzahl der gespeicherten Dateien, Pfade, Datenträger)− Einleselaufwerk (von wo gelesen wird, also A: … Z: )− Einleseoptionen (was geschieht mit gepackten Dateien usw.)− letzter gelesener Datenträger− Informationen zu diesem Datenträger

3.3 Einlesefunktion

Will ein Benutzer einen neuen Datenträger einlesen, dann wählt der das passende Lauf-werk aus. Standard sollte A: bzw. das zuletzt benutzte Laufwerk sein. Das Programmliest dann die allgemeinen Daten vom Datenträger und stellt sie, wenn keine automati-sche Verarbeitung erfolgt, dem Benutzer zur Verfügung. Interessante Informationen sind

− physikalisches Label− Typ des Datenträgers− Kapazität des Datenträgers− belegter Platz− reservierter Platz− freier Platz− Seriennummer des Datenträgers− usw.

$00001 $00001

$00002 WIN 95

$00001 BACKUP

Name

Label

Page 691: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 4

Stellen Sie hierbei zuerst einmal fest, was Ihnen DOS bzw. Windows und Access Basicüberhaupt liefert. Ggf. wird die Funktionalität durch eine geeignete .DLL Datei erweitert.Entscheiden Sie, was sinnvoll und was weniger sinnvoll ist.

Apropos belegter Platz. Die Summe der wahren Dateilängen entspricht nicht dem reser-vierten Platz, da die Reservierung immer in vollen Clustern erfolgt. Wie gelangen Sie andiese Informationen?

Am besten stellen Sie diese Kurzinformationen über den Datenträger in einem Popup-Fenster dar. Der Benutzer kann nun Korrekturen vornehmen und ggf. das fehlende Labelund den eindeutigen Namen ergänzen. Hierbei sollten Sie darauf achten, daß der Nameobligat und eindeutig sein muß. Das Label kann dagegen leer bleiben. In diesem Formu-lar können Sie dem Datenträger auch gleich mit einen Kommentar versehen.

Hat der Datenträger kein Label und wird es vom Benutzer eingegeben, so kann es aufWunsch (Kontrollkästchen) auf den Träger geschrieben (wenn hierzu eine passendeWindows-API Funktion zur Verfügung steht).

Nach den entsprechenden Prüfungen wird der Inhalt des Datenträgers in den Katalogaufgenommen. Hierbei handelt es sich um die Unterverzeichnisse und die Dateien.

Stellen Sie eine Liste aller Ihrer Prüfungen zur Datenkonsistenz und zum ordnungsgemä-ßen Ablauf in schriftlicher Form auf und geben Sie diese im Entwurfsteil Ihres Beleges ab.

3.4 Nachbearbeitung [optional]

Sofort mit der Anzeige des eingelesenen Datenträgers sollte es möglich sein, diesemStichwörter zuzuweisen. Weiterhin sollte es möglich sein, den Pfaden und Einzeldateienebenfalls Kommentare und Stichwörter zuordnen können. Gehören mehrere Datenträgerzu einem Thema (DOS, WinWord usw.), dann ist es nicht sinnvoll, jedem einzelnen Da-tenträger den gleichen Kommentar bzw. die gleichen Stichwörter zuzuordnen. WelcheAlternative können Sie vorschlagen?

3.5 Korrekturfunktionen

Das Programm sollte einen bereits katalogisierten Datenträger erkennen und dem Benut-zer die Möglichkeit geben, das Einlesen abzubrechen oder eine Update zu veranlassen.Im letzteren Fall sollten alle Informationen des Datenträgers erneuert werden. ÜberlegenSie, was dabei mit den mühsam erstellten Kommentaren und Stichwörtern geschieht.Denken Sie daran, daß Dateien bzw. Pfade des Datenträgers

verändertgelöschthinzugefügt

sein können. Wie kann ein solcher Abgleich sinnvoll erfolgen?

Manuell sollten folgende Funktionen durchführbar sein

Page 692: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 5

NeueingebenLöschenKorrigieren

sowohl von Datenträgern als auch von Pfaden und Dateien mit den jeweils relevantenInformationen. Dabei muß die Integrität der Daten erhalten bleiben, d. h. das Löscheneines Datenträgers muß das Löschen aller seiner Pfade und seiner Dateien beinhaltenusw. Denken Sie aber auch daran, daß sich die freie Kapazität des Datenträgers dabeiverändert. Ggf. müssen weitere Informationen, wie Anzahl der Dateien, Anzahl der Ver-zeichnisse usw. auf dem Datenträger mitgeführt werden.

3.6 Berichte

Standardmäßig vorbereitet sollten folgende Berichte sein

Übersicht über die DatenträgerÜbersicht über einen Datenträger[Übersicht über die Pfade]Übersicht über die DateienÜbersicht über doppelte Dateien

Optimal wäre es, wenn der Benutzer eigene Auswertungen selbst konstruieren könnte.

3.7 Suchfunktionen

Entwickeln Sie geeignete Suchfunktionen für die verschiedenen Informationen. StellenSie eine Liste aller Möglichkeiten auf, z. B. Suche nach

einem physikalischen Labeleinem logischen Nameneinem Pfadeiner DateiDateien über einer bestimmten Größeälter oder jünger als ein vorgebbares Datumvon einem bestimmten Datum ggf. mit Uhrzeit (hier ist oft die Version versteckt)nach Datenträgern, die noch genug Speicherplatz besitzennach allen Objekten (Datenträgern, Pfaden, Dateien) zu einem bestimmten Stichwortnach Stichwortkombinationen, die durch Und, Oder, Nicht verknüpft sindusw.

Realisieren Sie die wichtigsten Suchfunktionen. Überlegen Sie, wie die Platzhalter * und? eingesetzt werden können. Überlegen Sie Möglichkeiten der kombinierten Abfragen,d. h. durch Und bzw. Oder verknüpfte Einzelabfragen.

Page 693: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 6

3.8 Verwaltungsfunktionen

Vergessen Sie nicht die Funktionen zur Datenbankoptimierung nach großen Veränderun-gen. Denken Sie daran, daß die PC Zeitrechnung erst 1980 anfängt!

3.9 Zusatzinformationen [optional]

Versuchen Sie, gepackte Archive zu erkennen und aufzudröseln. Wie kann der Bezug(und die Anzeige) solcher Dateien auf das Archiv hergestellt werden? Denken Sie dabeidaran, daß ein Benutzer sehr wohl mehrfach packen kann, d. h. in einer gepackten Dateikann es Originaldateien und bereits gepackte Dateien geben.

Haben Sie eine Idee, wie man selbstentpackende Archive mit der Erweiterung .EXE er-kennen und ebenfalls aufdröseln könnte?

4 Handbücher

Schreiben Sie ein Benutzerhandbuch für Ihr Programm. Orientieren Sie sich dabei anhandelsüblichen Produkten oder an den DIN Normen. Als Vorschlag kann Ihnen folgendeListe dienen

Installation der beigefügten DisketteStarten der DatenträgerverwaltungBedienung der Datenträgerverwaltung

Beschreibung des EingangsformularsEinlesen der Datenträger...Beenden des ProgrammesFehlerbehandlung

VerwaltungsfunktionenDatenkompressionSicherung

Schreiben Sie ein Programmhandbuch mit (mindestens) folgender Gliederung

EinleitungAufbau der DatenbankFormulare, Berichte, ListenProgramme

5 Hinweise

Zum Einlesen der Datenträger erhalten Sie verschiedene Programme. Zum einen handeltes sich um mehrere VBA Module allgemein, traeger_bearbeiten usw., die eindirektes Einlesen über Basic bzw. API Funktionen erlauben.

Page 694: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 7

Weiterhin stehen Ihnen eine Reihe unterschiedlicher DLL-Dateien zur Verfügung, dieFunktionen realisieren, die ABA nicht oder nicht vernünftig bietet. Die Funktionalität derDLL steht Ihnen in Access durch folgende Deklarationen zur Verfügung (am Beispiel vondskutil1.DLL dargestellt). Hiermit importieren Sie die DLL-Funktionen

Option Compare Database 'Verwenden der Datenbank-Sortierreihenfolge ...Option Explicit

Declare Function liesdisk Lib "dskutil1.DLL" (ByVal lw As Integer) As IntegerDeclare Function naechstedatei Lib "dskutil1.DLL" () As IntegerDeclare Function gibdateiname Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateipfad Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateidatum Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function gibdateizeit Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateigroesse Lib "dskutil1.DLL" () As LongDeclare Function gibtraegername Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function setztraegername Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function gibverzzahl Lib "dskutil1.DLL" () As IntegerDeclare Function gibfreienplatz Lib "dskutil1.DLL" () As Long

Die Funktionen liefern die gewünschten Werte normalerweise über den Parameter szurück. Das Funktionsergebnis zeigt dann an, ob die Funktion erfolgreich war oder nicht

-1 erfolgreich 0 nicht erfolgreich

Beispiel:

erg = gibtraegername(zk)

erg enthält als Rückgabewert den nullterminierten Namen, der in einen String gewandeltwerden muß. Achten Sie darauf, daß zk groß genug dimensioniert ist, z. B.

Dim zk As String * 100

zk ist ein nullterminierter String, der zur weiteren Bearbeitung in einen klassischenBasic-String umgewandelt werden muß. Ein solcher String enthält ein Längenbyte mitdaran anschließendem Text. Damit ist er auf 255 Zeichen beschränkt. Mit dem Längen-byte ergibt das eine Länge von 256 Zeichen. Die Umwandlungsroutine lautet

s = Left$(zk, InStr(zk, Chr(0)) - 1)

Ausnahmen von dieser Regel sind Funktionen ohne Argumente, also

liesdisk liefert die Anzahl der Dateien, muß zur Initialisierung der Daten alserste Funktion aufgerufen werden.

gibdateigroesse liefert die Dateigrößegibverzzahl liefert die Anzahl der Verzeichnissegibfreienplatz liefert den freien Platz der Diskette

Die verschiedenen DLLs haben folgende Eigenschaften

Page 695: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 8

dskutil1.DLLDiese DLL stammt aus dem Artikel

E. Globau: Ordnung im Dateiendschungel, DOS 3/95, S. 164 – 170E. Globau: Nicht auf die lange Bank geschoben, DOS 4/95, S. 266 – 272I. Böhme: Datenerfassung automatisch, DOS 5/95, S. 148 – 153

Sie liest die Verzeichnisse rekursiv auf den Heap und liefert dann die Verzeichnis- undDateinamen aus dem Heap. Diese DLL zeigt folgende Nachteile:

1. Bei großen Inhaltsverzeichnissen (CD-ROMs mit mehren tausend Dateien) kommt eszum Speicherüberlauf.

2. Informationen zu den Verzeichnissen stehen nicht zur Verfügung. Verzeichnisse habenz. B. auch ihr eigenes Erstellungsdatum und ihre eigene Erstellungszeit.

3. Die Einträge sind unsortiert. Dies soll heißen, daß Einträge des gleichen Verzeichnis-ses nicht hintereinander stehen, sondern durch die Einträge der Unterverzeichnissegetrennt sind. Dies macht besondere Maßnahmen notwendig, damit jedes Verzeichniseines Datenträgers nur einmal in die Datenbank aufgenommen wird.

Vorteilhaft sind die Punkte

1. Alle Daten stehen direkt nach dem Einlesen zur Verfügung.2. Der Datenträger wird in einem Rutsch gelesen.

dskutil2.DLLDiese DLL beseitigt das Sortierproblem, indem es selbst alle Dateien eines Verzeichnis-ses richtig anordnet. Damit kann durch einfachen Vergleich der laufenden Pfade erkanntwerden, ob ein neuer Pfad in die Pfadtabelle aufgenommen werden muß.

dskutil3.DLLDiese DLL entschärft einerseits das Überlaufpro-blem und liefert andererseits Daten zu den Ver-zeichnissen. Ersteres geschieht dadurch, daß nichtfür jede Datei der vollständige Pfad auf den Heapgeschrieben wird, wie dies bei den vorangehendenDLLs der Fall ist. Vielmehr wird eine doppelt ver-kettete Liste angelegt, die einerseits aus der Listeder Pfade und andererseits aus Listen der zugehö-rigen Dateien besteht.

dskutil4.DLLDiese DLL liefert sequentiell alle Einträge eines Verzeichnisses, d. h. Dateien und Unter-verzeichnisse. Die Verarbeitung aller Unterverzeichnisse muß daher in Access selbst er-folgen. Vorteilhaft dabei ist, daß keine zusätzlichen Speicherprobleme auftreten, da im-mer nur ein Eintrag gelesen wird. Sie ist nicht zu den vorangegangenen DLLs kompatibel.Beachten Sie hierzu die Prozeduren im Interface.

pfad1 pfad2 pfad3

dat1-1

dat1-2

dat1-3

dat2-1

dat2-2

dat2-3

dat3-1

dat3-2

dat3-3

Page 696: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 9

6 Aufgaben

Um Ihnen die Gelegenheit zu geben, die Belegaufgabe über das gesamte Semester zubearbeiten, ist sie in folgende Teilaufgaben unterteilt:

6.1 Entwurf

Entwerfen Sie Ihre Datenbank. Hierzu gehören:

1. Definition der notwendigen Tabellen einschließlich der einzelnen Felder.2. Aufstellen des Unternehmensdatenmodells (UDM), aus dem die Beziehungstypen zwi-

schen den Tabellen hervorgehen.

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Ausdruck der Tabellenbeschreibungen (z. B. Bildschirmausdruck)3. Ausdruck des Unternehmensdatenmodells (Relationen)4. Kurze Erläuterung der gewählten Datenstruktur.5. Erweiterungen und Alternativen6. Diskette mit der aktuellen Datenbank und den Ergebnissen des Entwurfstools (falls

eingesetzt)

6.2 Formulare

Entwickeln Sie Ihr Hauptformular, die Unterformulare und ggf. weitere Formulare (nochohne das automatische Einlesen). Hierzu gehen Sie in folgenden Schritten vor:

1. Füllen Sie Ihre Datenbank (manuell) mit mindestens 2 Datenträgern, 2 Pfaden pro Da-tenträger, 2 Dateien pro Datenträger.

2. Entwickeln Sie das Hauptformular zur Darstellung eines Datenträgers mit seinen Pfa-den und Dateien.

3. Testen Sie Ihre Anwendung sorgfältig. Sowohl Träger wie auch Pfade und Dateienmüssen sich neu eingeben, ändern und löschen lassen.

4. Realisieren Sie geeignete Suchfunktionen.

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Ausdruck des/der Formular(e) in verschiedenen Zuständen.3. Beschreibung, wie diese Zustände zustande kommen.4. Diskette mit dem aktuellen Programm

6.3 Einlesen

Erweitern Sie Ihr Hauptformular mit einer Schaltfläche zum Einlesen von Disketten/Fest-platten usw. Hierzu gehen Sie in folgenden Schritten vor:

Page 697: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 10

1. Implementierung der Schaltfläche und Einbeziehen des Einleseprogrammes.2. Austesten des Programmes, insbesondere Prüfung der Grenzen (volle Länge des La-

bels, Dateinamens, Pfadnamens, große Datenträger wie CD-ROM usw.), doppeltesEinlesen von Disketten,

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Benutzerhandbuch3. Beschreibung der Besonderheiten4. PAP oder Struktogramm für das Wiedereinlesen eines vorhandenen Datenträgers

(auch wenn Sie diese Funktion nicht realisieren können oder wollen).5. Diskette mit dem aktuellen Programm

6.4 Berichte

Entwickeln Sie die Berichte zum Erkennen von Duplikaten. Hierzu gehören

1. ein Bericht zur Erkennung echter Duplikate (Name, Größe, Datum, Zeit gleich)2. ein Bericht zur Erkennung möglicher Duplikate (Name gleich)3. ein Bericht zur Erkennung von Entwicklungen (Name gleich, Größe, Datum Zeit aber

ungleich)4. Testen Sie Ihr Programm mit geeigneten Testdaten. Lesen Sie hierzu zwei Datenträger

unter anderen Namen ein und führen Sie die entsprechenden Änderungen durch.

Es ist von Ihnen abzuliefern:

1. Deckblatt in der üblichen Form2. Ausdruck der Testtabellen3. Ausdruck der Berichte4. Diskette mit dem aktuellen Programm

Ich hoffen, daß Ihnen die Aufgabe Spaß macht und daß Sie das Programm auch noch invielen Jahren für Ihre Zwecke verwenden können. Daher sollte Ihnen keine Anstrengungzu groß sein (schließlich warten bei mir ca. 800 Disketten auf Katalogisierung).

6.5 Gesamtdokumentation

Zusammenfassung der Dokumentationen zu einer Gesamtdokumentation. Es ist abzuge-ben:

1. Ergänztes, vollständiges Benutzerhandbuch2. Ergänztes, vollständiges Programmhandbuch3. Diskette mit dem endgültigen Programm

) Hinweis: Die Abgabetermine für die verschiedenen Aufgaben entnehmen Sie bittedem Merkblatt der Vorlesung „Datenbanken“.

Page 698: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 11

Viel Erfolg

Prof. Scheibl

Page 699: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 1

Belegarbeit in Datenbanken – Diskettenverwaltung

Prof. Dr.-Ing. H.-J. Scheibl

Die Belegarbeit besteht aus dem Entwurf und der Realisierung einer Aufgabe in Microsoft Access. Hierzu istein Entwurf, eine Anwendung und die zugehörige Dokumentation zu entwerfen. Die Unterlagen werden se-mesterbegleitend erstellt und abgeliefert (Art, Umfang und Zeitpunkt am Ende dieser Beschreibung). Eserfolgt eine Bewertung der Teilaufgaben, die in die Gesamtnote eingeht.

1 Aufgabenbeschreibung

Sicher besitzen Sie selbst eine Fülle von Datenträgern, angefangen von 5¼“ Disketten,über 3½" bis hin zu CD-ROMs. Hin und wieder werden Sie sich fragen: „Wo finde ich dieDatei xyz.abc?“ Sie wissen genau, daß Sie diese Datei irgendwo gespeichert haben.Auch wollen Sie möglichst keine Doubletten aufheben. Daher sollte Ihnen ein passendesProgramm den Namen des Datenträgers der gesuchten Datei liefern. Eine andere Funkti-on erstellt eine Liste über die Doubletten usw.

Entwerfen Sie eine Anwendung unter MS Access, die folgende Aufgaben erfüllt:

1. Weitgehend automatisches Einlesen von Datenträgern in einen vom Benutzer ge-wählten Katalog mit Übernahme der Informationen zu den Datenträgern, den Pfadenund den Dateien.Automatisch soll hier auch bedeuten, daß die manuellen Tätigkeiten weitgehend mi-nimiert werden (siehe folgende Punkte).

2. Unterscheidung zwischen physikalischem Label auf dem Datenträger, die Sie u. U.nicht verändern wollen (z. B. bei Originaldisketten), und „logischem“ Namen der Da-tenträgern, mit dem Sie Ihre Datenträger beschriften und nach dem Sie diese sortiertablegen. Er ist auf jeden Fall eindeutig. Das Label dagegen kann mehrfach vorkom-men.

3. Erkennen von Labeln, die automatisch einlesbar sind (in diesem Fall Übernahme desLabels als Name), und solchen, die eine manuelle Ergänzung des Namens erfordern.Sie wählen hierzu ein Erkennungszeichen aus, daß Sie Ihrem Label voranstellen.Dieses Anfangszeichen sollte möglichst auf einem kommerziellen Datenträger nichtzu erwarten sein. Wird ein solches Label erkannt, dann wird es automatisch zum Na-men des Datenträgers. Der gesamte Datenträger wird sofort eingelesen.

4. Informieren und Befragen des Benutzers, wenn dieser einen Datenträger mehrfacheinlesen will (vielleicht hat sich ja sein Inhalt verändert, siehe folgender Punkt).

5. Möglichkeit der automatischen Korrektur, wenn ein Datenträger überschrieben oderverändert wurde, d. h. Rückfrage beim Benutzer, ob die Daten eines als doppelt er-kannter Datenträger noch einmal aufgenommen werden sollen. Der einfache Weg,den Datenträger vollständig zu löschen und neu einzulesen, hat den Nachteil, daß diegesamten Kommentare und Stichwörter ebenfalls gelöscht werden (siehe folgendePunkte), nur z. B. weil eine kleine Datei auf der Diskette verändert wurde. ÜberlegenSie, wie ein Abgleich zwischen Katalog und Datenträger erfolgen könnte, so daß feh-lende Dateien gelöscht, veränderte Dateien korrigiert und neue Dateien aufgenom-men werden.

6. Vergabe von Kommentaren zu jedem Datenträger, allen Pfaden und zu jeder Datei.7. Einfache Suche nach Datenträgern, Pfaden oder einzelnen Dateien.

Page 700: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 2

8. Erstellen von Berichten, z. B. einer Dateiliste nach einem Suchkriterium.9. Optimale Darstellung von Doubletten. Unterscheidung echter Doubletten und geän-

derter Versionen. Start der Aufzählung mit der jüngsten Datei. Darunter ältere Vari-anten, die sich im Datum bzw. der Größe unterscheiden.

10. Exportieren dieser Ergebnislisten zur Weiterverarbeitung in eine Textverarbeitungusw.

-------------------------------------------- Optional----------------------------------------------------------11. Einführung eines „Themas“, zu dem mehrere Datenträger gehören können, z. B.

DOS, Windows 95 usw. werden auf vielen Datenträgern geliefert.12. Vergabe von beliebig vielen Stichwörtern zu jedem Datenträger, jedem Pfad und zu

jeder Datei. Dabei soll ein gemeinsamer Thesaurus existieren. Die Suche sollte alsoDatenträger, Pfade oder einzelne Dateien zu einem Stichwort liefern.

13. Erweiterte Suche nach den weiteren gespeicherten Informationen. Typisch wäre dieAbfrage, auf welchem Datenträger noch ein bestimmter Platz vorhanden ist usw.

14. Komplexe Suchanfragen durch logische Kombinationen, z. B. der Frage nach allenDateien zu einem Stichwort, die jünger als ein vorgegebenes Datum sind usw.

15. Erkennung von .ARC, .ARJ, .LZH, .PAK, .ZIP und .ZOO Dateien und Auf-nahme dieser Dateien in den Katalog mit Vermerk der Abhängigkeit von der Haupt-datei. Versuch, ähnliches mit EXPAND Dateien durchzuführen.

16. Erkennen und Abspeichern von Sonderdateien wie z. B. grafischen Dateien .BMP,. GIF, .IMG, .PCX und .RLE sowie Klangdateien .WAV. Speichern weitererInformationen wie Auflösung usw.

17. Erstellung von individuellen Berichten nach Benutzerwünschen.

2 Entity-Relationship-Entwurf

Stellen Sie zuerst ein ER-Diagramm für das Problem auf. Achten Sie hierbei auf die Nor-malformen. Sollten Sie an einer Stelle gegen eine Normalform verstoßen, dann begrün-den Sie Ihren Lösungsweg ausführlich. Stellen Sie auch Erweiterungen und Alternativenvor. Begründen Sie diese.

Ich empfehle Ihnen, den ER Entwurf mit dem Werkzeug CASE/4/0 oder ähnlichem durch-zuführen.

3 Realisation

Setzen Sie Ihren Entwurf in eine Access Anwendung um.

Achten Sie besonders darauf, daß Benutzerfehler nicht zu inkonsistenten Datenbestän-den führen, d. h. fangen Sie alle Fehleingaben aus.

Sollten Sie Summenfelder haben, dann müßten diese bei Änderungen der Details mitge-führt werden. So verringert sich die freie Kapazität eines Datenträgers auch dann, wennman eine neue Datei per Hand einträgt, bzw. Dateien oder ganze Pfade löscht. BeachtenSie dabei, daß die Dateigröße auf Sektoren- bzw. Clustergrenzen aufgerundet werdenmuß.

Page 701: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 3

3.1 Vorbereitung

Gehen Sie davon aus, daß Sie eine Vielzahl von Disketten, CD-ROMs usw. besitzen. Je-der Datenträger erhält einen eindeutigen Namen. Soweit dies möglich ist, schreiben Siediesen Namen auch als Label auf den Datenträger. Bei den Originaldisketten bzw. denCD-ROMs wollen Sie dieses nicht, oder es ist technisch gar nicht möglich (z. B. CD-ROM). Zum automatischen Einlesen versehen Sie alle beschreibbaren Datenträger miteinem Label, das Sie als solches automatisches Label erkennen können. Hierzu wählenSie z. B. ein Sonderzeichen als Startzeichen (Achtung! Die DOS-Versionen sind etwaseigen, so ist § in DOS 5.0 nicht erlaubt). Denkbar sind aber $,%,_ o. a. Access selbsthat einige Sonderzeichen für das Suchen, so daß Sie in den Namen (Labeln) auf die Zei-chen *,#,[,],-,?,! verzichten sollten. Es wird das Dollarzeichen $ empfohlen.

Wir gehen also von nebenstehendem Modell aus, wobei, wieerwähnt, der Name auf dem Etikett vermerkt ist, während dasLabel auf der Diskette selbst steht.

Wir geben allen unseren Datenträgern (so weit diese möglichist) ein solches Label. Diese vorbereiteten Datenträger solltenohne Rückfrage verarbeitet werden. Alle anderen werden perHand nachkorrigiert.

3.2 Eingangsfenster

Das Eingangsfenster sollte den Stand der letzten Verarbeitung darstellen und wenn mög-lich am Ende der Verarbeitung gespeichert werden. Wesentliche Informationen sind

− Statistik des Kataloges (Anzahl der gespeicherten Dateien, Pfade, Datenträger)− Einleselaufwerk (von wo gelesen wird, also A: … Z: )− Einleseoptionen (was geschieht mit gepackten Dateien usw.)− letzter gelesener Datenträger− Informationen zu diesem Datenträger

3.3 Einlesefunktion

Will ein Benutzer einen neuen Datenträger einlesen, dann wählt der das passende Lauf-werk aus. Standard sollte A: bzw. das zuletzt benutzte Laufwerk sein. Das Programmliest dann die allgemeinen Daten vom Datenträger und stellt sie, wenn keine automati-sche Verarbeitung erfolgt, dem Benutzer zur Verfügung. Interessante Informationen sind

− physikalisches Label− Typ des Datenträgers− Kapazität des Datenträgers− belegter Platz− reservierter Platz− freier Platz− Seriennummer des Datenträgers− usw.

$00001 $00001

$00002 WIN 95

$00001 BACKUP

Name

Label

Page 702: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 4

Stellen Sie hierbei zuerst einmal fest, was Ihnen DOS bzw. Windows und Access Basicüberhaupt liefert. Ggf. wird die Funktionalität durch eine geeignete .DLL Datei erweitert.Entscheiden Sie, was sinnvoll und was weniger sinnvoll ist.

Apropos belegter Platz. Die Summe der wahren Dateilängen entspricht nicht dem reser-vierten Platz, da die Reservierung immer in vollen Clustern erfolgt. Wie gelangen Sie andiese Informationen?

Am besten stellen Sie diese Kurzinformationen über den Datenträger in einem Popup-Fenster dar. Der Benutzer kann nun Korrekturen vornehmen und ggf. das fehlende Labelund den eindeutigen Namen ergänzen. Hierbei sollten Sie darauf achten, daß der Nameobligat und eindeutig sein muß. Das Label kann dagegen leer bleiben. In diesem Formu-lar können Sie dem Datenträger auch gleich mit einen Kommentar versehen.

Hat der Datenträger kein Label und wird es vom Benutzer eingegeben, so kann es aufWunsch (Kontrollkästchen) auf den Träger geschrieben (wenn hierzu eine passendeWindows-API Funktion zur Verfügung steht).

Nach den entsprechenden Prüfungen wird der Inhalt des Datenträgers in den Katalogaufgenommen. Hierbei handelt es sich um die Unterverzeichnisse und die Dateien.

Stellen Sie eine Liste aller Ihrer Prüfungen zur Datenkonsistenz und zum ordnungsgemä-ßen Ablauf in schriftlicher Form auf und geben Sie diese im Entwurfsteil Ihres Beleges ab.

3.4 Nachbearbeitung [optional]

Sofort mit der Anzeige des eingelesenen Datenträgers sollte es möglich sein, diesemStichwörter zuzuweisen. Weiterhin sollte es möglich sein, den Pfaden und Einzeldateienebenfalls Kommentare und Stichwörter zuordnen können. Gehören mehrere Datenträgerzu einem Thema (DOS, WinWord usw.), dann ist es nicht sinnvoll, jedem einzelnen Da-tenträger den gleichen Kommentar bzw. die gleichen Stichwörter zuzuordnen. WelcheAlternative können Sie vorschlagen?

3.5 Korrekturfunktionen

Das Programm sollte einen bereits katalogisierten Datenträger erkennen und dem Benut-zer die Möglichkeit geben, das Einlesen abzubrechen oder eine Update zu veranlassen.Im letzteren Fall sollten alle Informationen des Datenträgers erneuert werden. ÜberlegenSie, was dabei mit den mühsam erstellten Kommentaren und Stichwörtern geschieht.Denken Sie daran, daß Dateien bzw. Pfade des Datenträgers

verändertgelöschthinzugefügt

sein können. Wie kann ein solcher Abgleich sinnvoll erfolgen?

Manuell sollten folgende Funktionen durchführbar sein

Page 703: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 5

NeueingebenLöschenKorrigieren

sowohl von Datenträgern als auch von Pfaden und Dateien mit den jeweils relevantenInformationen. Dabei muß die Integrität der Daten erhalten bleiben, d. h. das Löscheneines Datenträgers muß das Löschen aller seiner Pfade und seiner Dateien beinhaltenusw. Denken Sie aber auch daran, daß sich die freie Kapazität des Datenträgers dabeiverändert. Ggf. müssen weitere Informationen, wie Anzahl der Dateien, Anzahl der Ver-zeichnisse usw. auf dem Datenträger mitgeführt werden.

3.6 Berichte

Standardmäßig vorbereitet sollten folgende Berichte sein

Übersicht über die DatenträgerÜbersicht über einen Datenträger[Übersicht über die Pfade]Übersicht über die DateienÜbersicht über doppelte Dateien

Optimal wäre es, wenn der Benutzer eigene Auswertungen selbst konstruieren könnte.

3.7 Suchfunktionen

Entwickeln Sie geeignete Suchfunktionen für die verschiedenen Informationen. StellenSie eine Liste aller Möglichkeiten auf, z. B. Suche nach

einem physikalischen Labeleinem logischen Nameneinem Pfadeiner DateiDateien über einer bestimmten Größeälter oder jünger als ein vorgebbares Datumvon einem bestimmten Datum ggf. mit Uhrzeit (hier ist oft die Version versteckt)nach Datenträgern, die noch genug Speicherplatz besitzennach allen Objekten (Datenträgern, Pfaden, Dateien) zu einem bestimmten Stichwortnach Stichwortkombinationen, die durch Und, Oder, Nicht verknüpft sindusw.

Realisieren Sie die wichtigsten Suchfunktionen. Überlegen Sie, wie die Platzhalter * und? eingesetzt werden können. Überlegen Sie Möglichkeiten der kombinierten Abfragen,d. h. durch Und bzw. Oder verknüpfte Einzelabfragen.

Page 704: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 6

3.8 Verwaltungsfunktionen

Vergessen Sie nicht die Funktionen zur Datenbankoptimierung nach großen Veränderun-gen. Denken Sie daran, daß die PC Zeitrechnung erst 1980 anfängt!

3.9 Zusatzinformationen [optional]

Versuchen Sie, gepackte Archive zu erkennen und aufzudröseln. Wie kann der Bezug(und die Anzeige) solcher Dateien auf das Archiv hergestellt werden? Denken Sie dabeidaran, daß ein Benutzer sehr wohl mehrfach packen kann, d. h. in einer gepackten Dateikann es Originaldateien und bereits gepackte Dateien geben.

Haben Sie eine Idee, wie man selbstentpackende Archive mit der Erweiterung .EXE er-kennen und ebenfalls aufdröseln könnte?

4 Handbücher

Schreiben Sie ein Benutzerhandbuch für Ihr Programm. Orientieren Sie sich dabei anhandelsüblichen Produkten oder an den DIN Normen. Als Vorschlag kann Ihnen folgendeListe dienen

Installation der beigefügten DisketteStarten der DatenträgerverwaltungBedienung der Datenträgerverwaltung

Beschreibung des EingangsformularsEinlesen der Datenträger...Beenden des ProgrammesFehlerbehandlung

VerwaltungsfunktionenDatenkompressionSicherung

Schreiben Sie ein Programmhandbuch mit (mindestens) folgender Gliederung

EinleitungAufbau der DatenbankFormulare, Berichte, ListenProgramme

5 Hinweise

Zum Einlesen der Datenträger erhalten Sie verschiedene Programme. Zum einen handeltes sich um mehrere VBA Module allgemein, traeger_bearbeiten usw., die eindirektes Einlesen über Basic bzw. API Funktionen erlauben.

Page 705: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 7

Weiterhin stehen Ihnen eine Reihe unterschiedlicher DLL-Dateien zur Verfügung, dieFunktionen realisieren, die ABA nicht oder nicht vernünftig bietet. Die Funktionalität derDLL steht Ihnen in Access durch folgende Deklarationen zur Verfügung (am Beispiel vondskutil1.DLL dargestellt). Hiermit importieren Sie die DLL-Funktionen

Option Compare Database 'Verwenden der Datenbank-Sortierreihenfolge ...Option Explicit

Declare Function liesdisk Lib "dskutil1.DLL" (ByVal lw As Integer) As IntegerDeclare Function naechstedatei Lib "dskutil1.DLL" () As IntegerDeclare Function gibdateiname Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateipfad Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateidatum Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function gibdateizeit Lib "dskutil1.DLL" (ByVal s As String) As IntegerDeclare Function gibdateigroesse Lib "dskutil1.DLL" () As LongDeclare Function gibtraegername Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function setztraegername Lib "dskutil1.DLL" (ByVal s As String) As

IntegerDeclare Function gibverzzahl Lib "dskutil1.DLL" () As IntegerDeclare Function gibfreienplatz Lib "dskutil1.DLL" () As Long

Die Funktionen liefern die gewünschten Werte normalerweise über den Parameter szurück. Das Funktionsergebnis zeigt dann an, ob die Funktion erfolgreich war oder nicht

-1 erfolgreich 0 nicht erfolgreich

Beispiel:

erg = gibtraegername(zk)

erg enthält als Rückgabewert den nullterminierten Namen, der in einen String gewandeltwerden muß. Achten Sie darauf, daß zk groß genug dimensioniert ist, z. B.

Dim zk As String * 100

zk ist ein nullterminierter String, der zur weiteren Bearbeitung in einen klassischenBasic-String umgewandelt werden muß. Ein solcher String enthält ein Längenbyte mitdaran anschließendem Text. Damit ist er auf 255 Zeichen beschränkt. Mit dem Längen-byte ergibt das eine Länge von 256 Zeichen. Die Umwandlungsroutine lautet

s = Left$(zk, InStr(zk, Chr(0)) - 1)

Ausnahmen von dieser Regel sind Funktionen ohne Argumente, also

liesdisk liefert die Anzahl der Dateien, muß zur Initialisierung der Daten alserste Funktion aufgerufen werden.

gibdateigroesse liefert die Dateigrößegibverzzahl liefert die Anzahl der Verzeichnissegibfreienplatz liefert den freien Platz der Diskette

Die verschiedenen DLLs haben folgende Eigenschaften

Page 706: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 8

dskutil1.DLLDiese DLL stammt aus dem Artikel

E. Globau: Ordnung im Dateiendschungel, DOS 3/95, S. 164 – 170E. Globau: Nicht auf die lange Bank geschoben, DOS 4/95, S. 266 – 272I. Böhme: Datenerfassung automatisch, DOS 5/95, S. 148 – 153

Sie liest die Verzeichnisse rekursiv auf den Heap und liefert dann die Verzeichnis- undDateinamen aus dem Heap. Diese DLL zeigt folgende Nachteile:

1. Bei großen Inhaltsverzeichnissen (CD-ROMs mit mehren tausend Dateien) kommt eszum Speicherüberlauf.

2. Informationen zu den Verzeichnissen stehen nicht zur Verfügung. Verzeichnisse habenz. B. auch ihr eigenes Erstellungsdatum und ihre eigene Erstellungszeit.

3. Die Einträge sind unsortiert. Dies soll heißen, daß Einträge des gleichen Verzeichnis-ses nicht hintereinander stehen, sondern durch die Einträge der Unterverzeichnissegetrennt sind. Dies macht besondere Maßnahmen notwendig, damit jedes Verzeichniseines Datenträgers nur einmal in die Datenbank aufgenommen wird.

Vorteilhaft sind die Punkte

1. Alle Daten stehen direkt nach dem Einlesen zur Verfügung.2. Der Datenträger wird in einem Rutsch gelesen.

dskutil2.DLLDiese DLL beseitigt das Sortierproblem, indem es selbst alle Dateien eines Verzeichnis-ses richtig anordnet. Damit kann durch einfachen Vergleich der laufenden Pfade erkanntwerden, ob ein neuer Pfad in die Pfadtabelle aufgenommen werden muß.

dskutil3.DLLDiese DLL entschärft einerseits das Überlaufpro-blem und liefert andererseits Daten zu den Ver-zeichnissen. Ersteres geschieht dadurch, daß nichtfür jede Datei der vollständige Pfad auf den Heapgeschrieben wird, wie dies bei den vorangehendenDLLs der Fall ist. Vielmehr wird eine doppelt ver-kettete Liste angelegt, die einerseits aus der Listeder Pfade und andererseits aus Listen der zugehö-rigen Dateien besteht.

dskutil4.DLLDiese DLL liefert sequentiell alle Einträge eines Verzeichnisses, d. h. Dateien und Unter-verzeichnisse. Die Verarbeitung aller Unterverzeichnisse muß daher in Access selbst er-folgen. Vorteilhaft dabei ist, daß keine zusätzlichen Speicherprobleme auftreten, da im-mer nur ein Eintrag gelesen wird. Sie ist nicht zu den vorangegangenen DLLs kompatibel.Beachten Sie hierzu die Prozeduren im Interface.

pfad1 pfad2 pfad3

dat1-1

dat1-2

dat1-3

dat2-1

dat2-2

dat2-3

dat3-1

dat3-2

dat3-3

Page 707: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 9

6 Aufgaben

Um Ihnen die Gelegenheit zu geben, die Belegaufgabe über das gesamte Semester zubearbeiten, ist sie in folgende Teilaufgaben unterteilt:

6.1 Entwurf

Entwerfen Sie Ihre Datenbank. Hierzu gehören:

1. Definition der notwendigen Tabellen einschließlich der einzelnen Felder.2. Aufstellen des Unternehmensdatenmodells (UDM), aus dem die Beziehungstypen zwi-

schen den Tabellen hervorgehen.

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Ausdruck der Tabellenbeschreibungen (z. B. Bildschirmausdruck)3. Ausdruck des Unternehmensdatenmodells (Relationen)4. Kurze Erläuterung der gewählten Datenstruktur.5. Erweiterungen und Alternativen6. Diskette mit der aktuellen Datenbank und den Ergebnissen des Entwurfstools (falls

eingesetzt)

6.2 Formulare

Entwickeln Sie Ihr Hauptformular, die Unterformulare und ggf. weitere Formulare (nochohne das automatische Einlesen). Hierzu gehen Sie in folgenden Schritten vor:

1. Füllen Sie Ihre Datenbank (manuell) mit mindestens 2 Datenträgern, 2 Pfaden pro Da-tenträger, 2 Dateien pro Datenträger.

2. Entwickeln Sie das Hauptformular zur Darstellung eines Datenträgers mit seinen Pfa-den und Dateien.

3. Testen Sie Ihre Anwendung sorgfältig. Sowohl Träger wie auch Pfade und Dateienmüssen sich neu eingeben, ändern und löschen lassen.

4. Realisieren Sie geeignete Suchfunktionen.

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Ausdruck des/der Formular(e) in verschiedenen Zuständen.3. Beschreibung, wie diese Zustände zustande kommen.4. Diskette mit dem aktuellen Programm

6.3 Einlesen

Erweitern Sie Ihr Hauptformular mit einer Schaltfläche zum Einlesen von Disketten/Fest-platten usw. Hierzu gehen Sie in folgenden Schritten vor:

Page 708: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 10

1. Implementierung der Schaltfläche und Einbeziehen des Einleseprogrammes.2. Austesten des Programmes, insbesondere Prüfung der Grenzen (volle Länge des La-

bels, Dateinamens, Pfadnamens, große Datenträger wie CD-ROM usw.), doppeltesEinlesen von Disketten,

Es ist von Ihnen abzuliefern:

1. Deckblatt in üblicher Form2. Benutzerhandbuch3. Beschreibung der Besonderheiten4. PAP oder Struktogramm für das Wiedereinlesen eines vorhandenen Datenträgers

(auch wenn Sie diese Funktion nicht realisieren können oder wollen).5. Diskette mit dem aktuellen Programm

6.4 Berichte

Entwickeln Sie die Berichte zum Erkennen von Duplikaten. Hierzu gehören

1. ein Bericht zur Erkennung echter Duplikate (Name, Größe, Datum, Zeit gleich)2. ein Bericht zur Erkennung möglicher Duplikate (Name gleich)3. ein Bericht zur Erkennung von Entwicklungen (Name gleich, Größe, Datum Zeit aber

ungleich)4. Testen Sie Ihr Programm mit geeigneten Testdaten. Lesen Sie hierzu zwei Datenträger

unter anderen Namen ein und führen Sie die entsprechenden Änderungen durch.

Es ist von Ihnen abzuliefern:

1. Deckblatt in der üblichen Form2. Ausdruck der Testtabellen3. Ausdruck der Berichte4. Diskette mit dem aktuellen Programm

Ich hoffen, daß Ihnen die Aufgabe Spaß macht und daß Sie das Programm auch noch invielen Jahren für Ihre Zwecke verwenden können. Daher sollte Ihnen keine Anstrengungzu groß sein (schließlich warten bei mir ca. 800 Disketten auf Katalogisierung).

6.5 Gesamtdokumentation

Zusammenfassung der Dokumentationen zu einer Gesamtdokumentation. Es ist abzuge-ben:

1. Ergänztes, vollständiges Benutzerhandbuch2. Ergänztes, vollständiges Programmhandbuch3. Diskette mit dem endgültigen Programm

) Hinweis: Die Abgabetermine für die verschiedenen Aufgaben entnehmen Sie bittedem Merkblatt der Vorlesung „Datenbanken“.

Page 709: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

FHTW Belegarbeit in Datenbanken – Diskettenverwaltung © Prof. Dr.-Ing. H.-J-Scheibl

D:\Eigene\Doku\DB\DBBeleg.doc - 970412 Seite: 11

Viel Erfolg

Prof. Scheibl

Page 710: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 1

Name: _______________________ Datum: ___________________ Matrikel: _____________________

Nachklausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platz nicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sie leer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem doku-mentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zu Ihren Gunsten ausgelegt werden. Also, erst denken, dann schreiben! 1 Begriffe

Kreuzen Sie das Ergebnis folgender Aussagen an: Ja Nein ! ! Chen hat die ERM-Diagramme entwickelt. 1

! ! Eine Tabelle benötigt immer einen Primärschlüssel. 1

! ! Mit dem Wert Null in einem Fremdschlüssel wird eine konditionale Bezie-hung realisiert.

1

! ! Null wird intern als Zahl 0 gespeichert. 1

! ! Der logische Wert True wird intern als Zahl 0 gespeichert. 1

! ! Mit einem Tabellenkalkulationsprogramm lassen sich Datenbanken realisieren. 1

! ! Im RDM finden wir keine mx:mx Beziehungstypen. 1

! ! XML dient als Sprache zum Austausch von Daten zwischen unterschiedlichen DBMS.

1

! ! Der Beziehungstyp Ordner – Datei hat die Komplexität mc:mc. 1

! ! Reine m:m Beziehungstypen kommen beim Modellieren sehr häufig vor. 1

! ! Mit DBMS lassen sich keine Bäume (z. B. Personalplan) realisieren. 1

! ! RDBMS sind von sich aus objektorientiert. 1 2 Grundlagen Access

Ja Nein ! ! Die Löschweitergabe sollten wir bei der Definition eines Beziehungstyps im

Zweifel immer aktivieren. 1

! ! Bei Fremdschlüsseln sollten wir immer die Indizierung ohne Wiederholung markieren.

1

S. 1 2 3 4 5 6 7 8 Σ 14 9 12 12 12 6 18 17 100

Page 711: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 2

! ! Wenn wir für einen Beziehungstyp nachträglich referentielle Integrität ein-führen, kann es zu Problemen mit den vorhandenen Daten kommen.

1

! ! Ist der Primärschlüssel ein Autowert-Schlüssel, so sollten wir immer beim Festlegen der referentiellen Integrität die Änderungsweitergabe aktivieren.

1

! ! Wird ein Datensatz gelöscht, so rutschen die Autowert-Schlüssel ab seiner Nummer um 1 nach vorn.

1

! ! Access vergibt Autowert-Schlüssel, die von einem Anwender nicht benutzt werden (Abbruch der Eingabe), bei der nächsten Anforderung neu heraus.

1

! ! Datenbanken können mit ihren Tabellen bzw. Teilen von Tabellen über die ganze Welt verstreut sein.

1

! ! ADO ist die Abkürzung für „Allgemeines Datenobjekt“. 1

! ! Skriptsprache laufen grundsätzlich nur auf dem Client. 1 3 Normalformen

Gegen welche Normalform verstößt die untenstehende Tabelle (Bild 1)? Begründen Sie Ihre Aussage!

Verstoß gegen __________________________________________________________________________________________________________________________________________ 1

Begründung: ______________________________________________________________________________________________________________________________________________ 1

Bild 1: Tabelle: Ausstattung

Page 712: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 3

Die Datei ist Teil eines einfachen Modells (Bild 2). Wie kann der falsche Entwurf in diesem Modell repariert werden? Zeichnen Sie zuerst das ERM oder RDM Ihres Vorschlags. 6 Füllen Sie Ihre Tabellen mit den ersten fünf Datensätzen der Tabelle nach Bild 1. Gehen Sie von drei Autos aus, die jeweils die Ausstattung 1, 3 bzw. 5 besitzen. Markieren Sie die Primärschlüssel jeder Tabelle! Tabelle: Ausstattung Attribut: ? AS_tBemerkung ?

ABS

6 Tabelle: ? Fortsetzung von links A_aAutoID ? ? A_aAutoID ? ? 1

6

Bild 2: Modell einer Autoverwaltung

Page 713: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 4

4 SQL

Beantworten Sie folgende Fragen: Wie heißen die beiden Felder, über die ein Inner Join realisiert wird? ____________________________________________________________________________________________________________________________________________________________________ 2

Welches Ergebnis liefert eine JOIN Selektion zweier überkreuzt verknüpfter Tabellen? ____________________________________________________________________________________________________________________________________________________________________ 2

Welches Ergebnis liefert eine JOIN-Abfrage dreier Tabellen, die über mx:mx Beziehungstypen hin-tereinander geschaltet sind? ____________________________________________________________________________________________________________________________________________________________________ 2

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum mit Rücksprungankern werden nacheinander folgende Schlüssel in der angegebenen Reihenfolge eingegeben: M G K C R U A L E H Wie sieht der logische Baum nach dieser Eingabe aus?

Bild 3: Überkreuz verknüpfte Tabellen

Page 714: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 5

3 und die erzeugte Datei aus? Zeichnen Sie auch die Rücksprunganker in den logi-schen Baum ein! 6 Löschen Sie nun den Knoten G aus diesem Baum. In der Vorlesung haben Sie ein einfa-ches Verfahren kennen gelernt, die drei entstehenden Teilbäume (den Wald) wieder zu-sammenzuführen. Achtung: Wenden Sie nun ein anderes Verfahren als das in der Vorlesung bespro-chene an! Ersetzen Sie den gelöschten Knoten durch seinen alphabetischen Nachfolger also das H. Wie sieht nun der Baum aus?

2 Warum hat dieses Verfahren i. a. Vorteile gegenüber dem Ihnen bekannten Verfahren? ____________________________________________________________________________________________________________________________________________________________________ 1

0 Erdesatz

1

2

3

4

5

6

7

8

9

10

11

Page 715: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 6

Wie sieht nun die Abbildung des Baums auf eine Ran-dom-Datei aus? Markieren Sie die Änderungen gegenüber der Aus-gangsdatei farbig! Denken Sie noch einmal daran, auf keinen Fall einen oder mehrere Datensätze zu bewegen. Einzig die Zei-ger in der Random-Datei ändern sich. 6 6 Entwurf einer Datenbank

Sie erhalten den Auftrag, für einen Provider eine möglichst variable Datenbanklösung für das Internet zu entwickeln. Der Provider möchte diese Datenbank für die Lastminute-Angebote von (mehreren) angeschlossenen Reisebüros einsetzen. Hierzu hat er sich fol-gendes überlegt: Benutzergruppen: Verwalter Der Provider und ggf. weitere Personen müssen Administratorrechte besitzen. Reisebüros Die angeschlossenen Reisebüros bilden eine geschlossene Benutzergruppe, die ihre An-gebote eingeben darf, ohne dabei auf fremde Daten zugreifen zu können. Besucher Der Besucher darf die Angebote nur lesen. Eine Buchung ist (in unserer Aufgabe) nicht vorgesehen. Angebote: Die Angebote der Reiseveranstalter soll auf individuell gestalteten HTML-Seiten erfolgen. HTML-Seite: Diese Seiten besitzen ein individuelles Layout. Daher sollen sie als Vorlage von einem Designer erstellt werden, aber nicht in der Datenbank abgespeichert werden. Seitenbeschreibung: Jede HTML-Seite soll ein Abbild in einer Tabelle der Datenbank erhalten. Zur Verrech-nung der Kosten legt der Provider für jede Seite einen Seitenpreis pro Zeiteinheit (pro Tag) fest. Auf jeder HTML-Seite gibt es eine Reihe variabler Steuerelemente deren Na-men in der Datenbank abzuspeichern sind. Dabei muß der Typ des Steuerelements be-rücksichtigt werden:

0 Erdesatz

1

2

3

4

5

6

7

8

9

10

11

Page 716: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 7

l Listenfeld s Zeichenkettenfeld n Ganzzahlfeld f Gleitkommafeld b Logisches Feld d Datumsfeld i Bildfeld t Bezeichnungsfeld Feldbeschreibung: Für alle Felder ist ein individueller Hilfetext für die Meldungszeile abzuspeichern. Für einige Feldtypen sind zusätzliche Informationen notwendig: Listenfeld: Für ein Listenfeld sind die möglichen Optionen abzuspeichern (Nachschautabelle). Bildfeld: Für ein Bildfeld sind die Abmessungen, sowie eine Beschriftung abzuspeichern. Angebotsdaten: Die einzelnen Felder haben nun pro Angebot einen individuellen Wert. Bei den Listenfeldern bezieht sich dieser Wert auf einen Eintrag in der Nachschautabelle der Optionen. Für jedes Angebot sind noch Verwaltungsdaten abzuspeichern. Hierbei handelt es sich um: Datum, an dem das Angebot erstellt wurde Datum, an dem das Angebot erscheinen soll Datum, bis zu dem das Angebot erscheinen soll Sperrvermerk, der vom Provider nach Kontrolle eingetragen wird Erstellen Sie das ERM zu dieser Aufgabenbeschreibung. ____________________________________________________________________________________________________________________________________________________________________ 18

Page 717: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 2000 D5TI1 Nachklausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000W\00WD5TIV\00WD5TIVN.doc – 00288 Seite: 8

Beschreiben Sie in kurzen Worten die Bedeutung der gewählten Entitätstypen. Wie wollen Sie die notwendigen Attribute verteilen? ____________________________________________________________________________________________________________________________________________________________________ 7

Beschreiben Sie die Bedeutung der gewählten Beziehungstypen: ____________________________________________________________________________________________________________________________________________________________________ 7

Wie können Sie das Zugriffsproblem lösen? Welche Möglichkeiten stehen Ihnen zur Ver-fügung? ____________________________________________________________________________________________________________________________________________________________________ 3

Page 718: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 1

Name: _______________________ Datum: ___________________ Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platz nicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sie leer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem doku-mentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zu Ihren Gunsten ausgelegt werden. Also, erst denken, dann schreiben! 1 Begriffe

Wie heißen die Erfinder des ERM-Diagramms? __________________________________________________________________________________________________________________ 1

des RDM? __________________________________________________________________________________________________________________ 1

Welche Ergänzungen müssen Sie beim Übergang vom ERM zum RDM vornehmen: ____________________________________________________________________________________________________________________________________________________________________ 2

____________________________________________________________________________________________________________________________________________________________________

2 Grundlagen

Erklären Sie den assoziativen Beziehungstyp: ____________________________________________________________________________________________________________________________________________________________________ 2

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

Welche Typen des Ist-ein (IS-A) Beziehungstyps kennen Sie? ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

S. 1 2 3 4 5 6 7 Σ 10 16 4 16 4 22 18 90

Page 719: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 2

Erklären Sie die Bedeutung des Begriffs „referentielle Integrität“: Geben Sie zur Erklärung ein geeignetes Beispiel an: ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

Beispiel: _____________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

Wie wird ein 1:1-Beziehungstyp realisiert? ____________________________________________________________________________________________________________________________________________________________________ 1

Wie wird ein mc:mc-Beziehungstyp realisiert? Erklären Sie insbesondere, wie das c (z. B, in Microsoft Access) verwirklicht wird. ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

Warum kann in unserer Beispieltabelle student kein Verstoß gegen die 2NF vorliegen? ____________________________________________________________________________________________________________________________________________________________________ 1

Was versteht man unter „Löschweitergabe“? Geben Sie ein Beispiel für den Einsatz an: ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

Beispiel: _____________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

3 SQL

Geben Sie für folgende Sachverhalte die richtigen Bezeichnungen an: Wird eine Tabelle in ein oder mehrere Spalten zerlegt, so nennt man das: ____________________________________________________________________________________________________________________________________________________________________ 1

Mit welcher Anweisung und welcher Klausel wird diese Zerlegung programmiert?

Page 720: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 3

____________________________________________________________________________________________________________________________________________________________________ 1

Werden aus einer Tabelle Zeilen ausgewählt so nennt man das: ____________________________________________________________________________________________________________________________________________________________________ 1

Mit welcher Anweisung und mit welcher Klausel wird diese Auswahl programmiert? ____________________________________________________________________________________________________________________________________________________________________ 1

Welcher Unterschied besteht zwischen einem left join und einem right join: ____________________________________________________________________________________________________________________________________________________________________ 1

Unter welcher Bezeichnung werden beide Verknüpfungen zusammengefaßt? ____________________________________________________________________________________________________________________________________________________________________ 1

4 Datenbankaufbau

4.1 Binäre Bäume

Sie werden als Gutachter für eine Gerichtsverhandlung engagiert und finden folgende In-dextabelle vor (Achten Sie auf die Numerierung ab 1!). Die grau unterlegten Felder sind natürlich nicht gespeichert, sondern dienen der Erläuterung: Satz Wurzel gelöscht 1 2 11 Erde links rechts Index 2 9 3 M 3 4 6 Q 4 -2 5 O 5 -4 -3 P 6 -3 8 R 7 -1 15 8 -6 0 S 9 12 10 F 10 -9 -2 L 11 -1 7 12 0 13 A 13 14 -9 E 14 -12 -13 B Die Polizei vermutet, daß sich der Täter als letztes aus der Datenbank gelöscht hat. Diese Datenbank wurde gerade neu aufgebaut und enthält noch wenige Daten. Der Sachbear-beiter gibt an, daß seine bisherige Tätigkeit nur aus Neueingaben und einer letzten Lö-

Page 721: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 4

schung bestand, bis er den Tatort verlassen hat. Er kann sich aber leider nicht mehr an die Fehleingabe, die er gelöscht hat, erinnern. Stellen Sie eine Liste der Indizes auf, die in die Datenbank eingegeben und dann gelöscht wurden. Schreiben Sie für die gelöschten Indizes ein ? hin und ergänzen eine Ziffer, in der die Löschung vorgenommen wurde (also 1 für den 1. gelöschten DS usw.) ____________________________________________________________________________________________________________________________________________________________________ 2

Stellen Sie den logischen Baum für diese Tabelle bis zum ersten gelöschten Datensatz auf (Ergänzen Sie bei Bedarf weitere Kästchen nach unten). 6

In welchem Bereich kann sich das 1. Fragezeichen bewegen? Tip: Zeichnen Sie in das Diagramm ? für die Positionen ein, an denen der nächste Index gestanden haben könnte. Streichen Sie dann alle ? aus, an denen der Baum nicht weitergehen kann. ____________________________________________________________________________________________________________________________________________________________________ 4

Nachdem Sie nun Ihr Ergebnis mit dem Sachbearbeiter diskutiert haben, erinnert sich die-ser, daß es ein Buchstabe am Ende des Alphabets war, den er wieder gelöscht hat. Ergänzen Sie nun die restlichen Eingaben bis zum nächsten gelöschten Index. 4

Page 722: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 5

In welchem Bereich kann nun der Buchstabe des Täters liegen? Begründen Sie Ihre Ver-mutungen! ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

5 Beurteilung vorhandener Datenbanken

Während einer Access-Schulung wurde folgendes Beispiel aus einer Unterlage des Klett-Verlags eingesetzt. Es handelt sich um die Verwaltung eines Tanzvereins.

Page 723: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 6

Bei der Beurteilung des Bei-spiels drängen sich folgende

Fragen auf. Leider enthält das Beispiel im Original nicht immer alle Fehler in auffälliger Form. Ergänzen Sie daher die Tabellen logisch in wahrscheinlicher Form (also fragen Sie sich: Was könnte schiefgehen?): In den obigen Tabellen sind die Primärschlüssel nicht ersichtlich. Markieren Sie durch (farbige) Unterstreichung in den Tabellen die jeweiligen Primärschlüssel! ____________________________________________________________________________________________________________________________________________________________________ 5

Stellen Sie das Unternehmensdatenmodell (UDM) dieser Anwendung auf: ____________________________________________________________________________________________________________________________________________________________________ 13

Welche Tabellen (können) enthalten Datenredundanzen, die durch Schlüsselredundanzen beseitigt werden sollten? Begründen Sie diese Aussagen! ____________________________________________________________________________________________________________________________________________________________________ 4

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

Page 724: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 7

Welche Art der Beziehungstypen realisiert die Tabelle Kursbelegung? Begründung! Art: ____________________________________________________________________________________________________________________________________________________________ 2

Begründung: ___________________________________________________________________________________________________________________________________________

Welche der Tabellen sind in der vorliegenden Form überflüssig? Begründen Sie Ihre Ant-wort! ____________________________________________________________________________________________________________________________________________________________________ 2

____________________________________________________________________________________________________________________________________________________________________

Könnten diese Tabellen aufgrund Ihrer eigenen Überlegungen trotzdem nicht überflüssig sein? Begründen Sie Ihre Antwort! ____________________________________________________________________________________________________________________________________________________________________ 2

Welche weiteren Tabellen sind notwendig, um die Normalformtheorie zu befriedigen? Be-gründen Sie Ihre Antwort! ____________________________________________________________________________________________________________________________________________________________________ 3

____________________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________________

Zeichnen Sie das erweiterte UDM: ____________________________________________________________________________________________________________________________________________________________________ 9

Ergänzung:

Page 725: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 2000 D5TI1 Klausur in Datenbanken

C:\Eigene\Doku\2000\DB\Klausur\2000S\00SD5TIV\001D5TIV2000.doc – 99194 Seite: 8

Wenn Sie genau nachdenken, so ist natürlich die Tabelle Altersstufe und deren Be-ziehungen zu den Mitgliedern völliger Blödsinn, schließlich werden die Mitglieder Jahr für Jahr älter und müssen ständig neuen Altersstufen zugeordnet werden. Richtig ist es, das Geburtdatum eines Mitglieds (ggf. mit bestimmten Regeln, z. B. nur das volle Jahr usw.) dazu zu benutzen, die Altersstufe zu berechnen. In diesem Fall ist die Tabelle Altersstufe dazu aber wenig geeignet. Schließlich ist sie nicht einmal in 1NF, da das Feld Bezeichnung nicht atomar ist, sondern den Anfang und das Ende eines Be-reichs enthält. Interessant ist dann die Eigenschaft ab 50 und der Bereich unter 14. Damit lassen sich die Mitglieder aber nicht mehr so einfach mit Altersstufe ver-knüpfen, weil die Beziehung zum Feld Gruppe immer neu, d. h. dynamisch bestimmt werden muß. Eine durchaus reizvolle Aufgabe, die absolut nicht trivial ist. Eine äußerst verdächtige Tabelle stellt auch Tanzkurse selbst dar. Die gewählten Bei-spiele für den Primärschlüssel Kurs-Nr (einmal abgesehen davon, daß es Kursus-Nr heißen müßte), legen den Verdacht auf "sprechenden Schlüssel" nahe mit A für Stan-dardtänze, C für Moderne Tänze, D für Krankengymnastik usw. Dann fehlt aber eine Nachschautabelle für diese Informationen.

Page 726: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken mÛiÛtmÛiÛt LöÛéuÛngeÛnLöÛéuÛngeÛn

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

1 Begriffe

Wie heißen die Abkürzungen ERM und RDM ausgeschrieben?

Entity-Relationship-Modell __________________________________________________________________________________________________________________ 2

Relationales Datenmodell _______________________________________________________________________________________________________________________

Erklären Sie den Unterschied zwischen:

Entität/Entitätstyp: Entität ist ein einzigesObÛjekÛt realeÛn WelÛt odeÛr uÛnÛêeÛreÛr VoÛrÛëtellÛuÛng _________ 2

Entitätstyp ist die Zusammenfassung mehrerer Entitäten in einer abstrakten Klasse ________

Beziehung/Beziehungstyp: BeÙzÛiehÛuÛng bestehen zÛwÛiÛêcheÛn zÛweÛi koÛnkÛreÛteÛn EÛnÛtÛiÛtäÛteÛn_______________ 2

Beziehungstyp ist dagegen die mengenmäßige Betrachtung aller Beziehungen. __________________

Was versteht man unter einer Domäne (domain)?

Wertebereich eines Attributs ____________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut eintrittsalter einer natürlichen Personin eine Firma vorgeben (Bitte alle Grenzen und den/die möglichen Datentypen angeben)?

Natürliche Zahl (größer Null) Mindestalter z. B. 14 Jahre ___________________________________________________________ 2

Höchstalter z. B. 65 Jahre. Dieser Typ paßt in ein Byte._________________________________________________________________

Welchen Typ und welche Domäne würden Sie für das Attribut zugname für die Züge ander FHTW vorgeben? Beschreiben Sie bei Bedarf jeden Teil des Attributs. Geben Sie je-weils ein geeignetes Eingabeformat vor. Achten Sie dabei auf Muß/Kann und die Schreib-weise!

S. 1 2 3 4 5 8 9 109 20 12 8 9 20 8 14

Page 727: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 2

Format Bedeutung Domäne

0 Fachbereich 1 bis 5

0000 Jahr < aktuelles Jahr-15, > aktuelles Jahr-90

>L Jahressemester S, W

>L Studientyp A, D, F

0 Fachsemester 1 bis 9 (für Fernstudenten), sonst 1 bis 7

>LL? Studiengang aus Liste der vorhandenen Studiengänge

0 laufende Nr. 1 bis 9

14Aus welchen Teilen setzt sich der Begriff „Komplexität“ zusammen:

Die Komplexität setzt sich aus der Kardinalität (Anzahl) und der Konditionalität (Mög-____ 2

lichkeit) zusammen.__________________________________________________________________________________________________________________________________

Wie werden diese Teile im ERM dargestellt?

Die Kardinalität wird durch die Angabe von 1 bzw. m dargestellt._______________________________________________ 2

Die Konditionalität wird durch die Angabe von c realisiert, dabei entfällt eine vorhandene 1.

Das m wird aber geschrieben. _____________________________________________________________________________________________________________________

und wie im RDM?

Erklären Sie die beiden (neben den unterschiedlichen Symbolen) wesentlichen Unter-schiede zwischen dem ERM und dem RDM:

Das ERM enthält keine Fremschlüssel zur Realisierung der Beziehungen________________________________________ 2

mx:mx Beziehungen lassen sich im RDM nicht darstellen. ______________________________________________________________

1-Beziehungc-Beziehungm-Beziehungmc-Beziehung

Page 728: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 3

2 Access Grundlagen

Wie wird in Access eine mx:x (z. B. mc:1) Beziehung hergestellt? Erklären Sie, welcheVoraussetzung dabei in der Detailtabelle erfüllt sein muß.

In der Detailtabelle wird ein Fremdschlüssel vom Typ Long Integer angelegt._____________________________ 4

Im UDM wird dann der Primärschlüssel der Mastertabelle mit der Maus auf den Fremd-.____

schlüssel gezogen. Es erscheint ein Fenster mit der Abfrage zur referentiellen Integrität ______________

Erklären Sie die Bedeutung derFelder im Kasten Mit referen-tieller Integrität (siehenebenstehendes Bild):

Mit referentielle Integri-tät:

HÝieÛrÛuÛnÛteÛr veÛrÛëtehÛt maÛn dÛie ÜbeÛr- ___

ÛwachÛuÛng deÛr BeÙzÛiehÛuÛngeÛn zÛwÛiÛêcheÛn _

zÛweÛi TabelleÛn, genauer zÛwÛiÛêcheÛn ______

eÛiÛneÛr MaÛëteÛrÛtabelle uÛnd eÛiÛneÛr DeÛtaÛilÛtabelle iÛn eÛiÛneÛr 1:m BeÙzÛiehÛuÛng. Es läßt sichr kein_________

neuerDS mit fehlendem Bezug in die Detailtabelle eintragen. Es läßt sich kein DS aus der ___

Mastertabelle mit zugehörigen DS in der Detailtabelle löschen.. BeÛiÛépÛiel: EÛiÛn StÛudeÛnÛt ________

kaÛnÛn eÛiÛneÛr voÛrhaÛndeÛneÛn KlaÛéêe zÛugeoÛrdÛneÛt weÛrdeÛn. Eine leere Klasse kann gelöscht werden. _____ 4

Aktualisierungsweitergabe an Detailfeld:

Wird der Primärschlüssel der Mastertabelle geändert, so werden die Fremdschlüssel in den__________

Detailtabellen ebenfalls korrigiert (nur bei sprechenden, änderbaren Primärschlüsseln möglich) ____ 1

Löschweitergabe an Detaildatensatz:

Wird der Mastersatz gelöscht, so werden ebenfalls alle mit ihme verknüpfte Detailsätze _________

gelöscht. _____________________________________________________________________________________________________________________________________________________ 1

Wann und warum haben Sie in Ihrem Beleg diese Option aktiviert?

Wird eine Musik-CD gelöscht, so werden auch alle Varianten (Tracks) gelöscht___________________________

____________________________________________________________________________________________________________________________________________________________________ 2

Page 729: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 4

Erklären Sie folgende Be-sonderheiten im nebenste-henden UDM:

Wozu legt Access die Ta-bellen mit dem Zusatz _1 an?

Diese Tabellen werden als Alias-Namen für die SQL-Anweisungen benötigt. _________________________________

____________________________________________________________________________________________________________________________________________________________________ 2

Was realisieren wir mit der Tabelle student_1?

Die c:c Beziehung „ist_klassensprecher“ zuesätzlich zur Beziehung „geht in“.___________________________________

____________________________________________________________________________________________________________________________________________________________________ 2

Was realisieren wir mit der Kombination klasse, ist_teil_von, klasse_1?

Eine rekursive mc:mc-Beziehung. Mehrere Klassen lassen sich in Oberklassen zusammenfassen. _____

Eine Klasse kann dabei zu verschiedenen Oberklassen gehören.____________________________________________________________ 2

Warum haben wir die Doppelbeziehung zwischen liest und hoert eingeführt?

Bei der ersten Abfrage stellen wir fest, daß die doppelte m:m-Beziehung zu einer Kann-Aus- _

sage führte. Eine Abfrage liefert alle Themen, die verschiedene Professoren lesen könnten. ____________

Eine Klasse hört aber genau ein Thema bei einem Professor ________________________________________________________________ 2

Page 730: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 5

Wie haben wir das in Access realisiert? Erklären Sie dies anhand des Fensters zur Ein-gabe der Beziehungen auf der vorhergehenden Seite.

Nachdem ein Attribut mit der Maus übertragen wurde, können wir in der 2. Zeile des __________

Unterformulars.je ein weiteres Attribut in der Kombinationsliste aufklappen und markieren.______ 2

3 SQL

Erklären Sie folgende Begriffe (Achten Sie dabei auf Präzision im Ausdruck)

Projektion Hierunter versteht man die Zerlegung einer Tabelle in eine/mehrere Spalten______ 1

Selektion Auswahl von Datensätzen nach vorgegebenen Kriterien____________________________________________ 1

Union Vereinigung von Datensätzen aus mehreren Tabellen mit gleichen Attributen ____ 1

Inner Join Aus zwei verknüpften Tabellen werden die Datensätze ausgewählt und zusam- _ 2

mengestellt, die eine gemeinsame Bedingung erfüllen ______________________________________________________________

Outer Join Aus zwei verknüpften Tabellen werden die Datensätze alle Datensätze der_________ 2

1. Tabelle ausgewählt. Die Attribute der 2. Tabelle werden nur ergänzt, wenn die ___________

gemeinsame Bedingung erfüllt ist._______________________________________________________________________________________________

4 Datenbankentwurf

Für Herrn Münch sollen Sie eine Verwaltung der Verkabelung als Datenbank realisieren.Herr Münch zeigt Ihnen seine bisherige manuelle Buchführung (Blatt ist beigefügt). Aufintensive Fragen erhalten Sie folgende Auskünfte:

Page 731: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 6

1. Jeder Raum der AdK hat eine eindeutige, sprechende Raum-nummer mit Gebäude, Stockwerk und laufender Nummer. Die-se ist Ihnen hinlänglich bekannt.

2. In fast allen Räumen der AdK sind eine oder mehrere RJ45-Dosen mit je zwei Buchsen vorhanden. Die Buchsen werdenin jedem Raum eindeutig durchnumeriert. Eine Differenzierungin Buchsen und Dosen ist nicht notwendig.

3. Einige Räume sind Wiring Centers (WCs), in denen die Kabelder Buchsen aus den verschiedenen Räumen zusammenlau-fen und aufgelegt sind.

Bild 4-1: Dose mit zweiBuchsen

Buchse A23-1

Page 732: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 7

Jede Buchse ist dabei mit einem einzigen WC verbunden. Das Kabel endet dort in ei-ner gleichbenannten Buchse.

Bild 4-2: 3 Chassis mit aufgelegten Kabeln bzw. Modulen

Buchse A23-1

Chassis

ChassisChassis

Modul

Modul

Modul

Modul

Kabel aus den RäumenKabel aus den Räumen

Page 733: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 8

4. In diesen WCs stehen Module mit sog. Ports. Jedes Modul hat eine eindeutige Be-zeichnung. Die Ports sind jeweils innerhalb der Module durchnumeriert (Bild 4-4).

5. Eine Buchse und ein Port können nun über ein Patch-Kabel verbunden sein (müssen

es aber nicht).6. Die Module finden Platz in Chassis, die sich, wie erwähnt, in den WCs befinden.7. Der FB ist in mehrere Ringe unterteilt, die jeweils eine einzige Haupt-IP-Adresse besit-

zen. So hat das FB-Netz die IPs 141.45.188.x. Die Einwahlpunkte liegen dagegen auf141.45.187.x usw. (Wobei x eine Zahl zwischen 0 und 255 ist).

8. Die Module sind nun jeweils einem solchen Ring (oder Subnetz) zugeordnet. Damitwird auch jeder PC über den Port mit einem solchen Ring verknüpft.

Prüfung:Ihr Entwurf sollte so gestaltet sein, daß er folgender Prüfung standhält:

Ein PC wird über eine Buchse einem Subnetz zugeordnet. Er muß dann im richtigen WCeinen freien Port in einem Modul finden, um an der Kommunikation teilnehmen zu kön-nen.

Aufgabe: Zeichnen Sie ein ERM oder RDM für diese Aufgabenstellung. Achten Sie dabeiauch auf formale Richtigkeit (denken Sie an die Unterschiede!).

Bild 4-3: Aufgelegte Buchsen-Kabel

Buchse A23-1

Page 734: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 9

Unbedingt sauber und leserlich zeichnen!!! (wie wäre es mit Lineal oder gar Scha-blone?) (vielleicht sogar erst einmal einen Entwurf auf Schmierpapier?)

Die Musterlösung enthält einige (Nachschau-) Tabellen mehr, als für die „einfache Klausur-lösung erwartet wird. Programmierprobleme ergeben sich aus dem sprechenden Schlüssel aus

Bild 4-4: Modul mit Ports

Bild 4-5: Modellierung der Beziehungen im UDM

Port 1

Modul

Modul

Modul

Modul

Port 2

Page 735: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 10

Raumnummer und laufender Dosennummer (oder besser Buchsennummer). Die c:c-Beziehungzwischen Buchse und Port wird nicht durch eine Zwischentabelle gelöst. Vielmehr wird sie durcheinen Fremdschlüssel in der Dose realisiert, der bei Bedarf auf NULL steht, wenn die Buchsenicht angeschlossen ist. Der Fremdschlüssel hätte auch bei den Ports angelegt werden können.Die Entscheidung muß folgende Punkte berücksichtigen:1. Wo kommen weniger NULL-Werte zustande? Wahrscheinlich sind die Ports eher belegt als

die Buchsen. Dies spricht für den Fremdschlüssel bei den Ports.2. Welche Abfrage ist häufiger? Meist wird man von der Buchse ausgehend fragen: An

welchen Port hängt ein PC (über eine Dose? Diese Frage spricht für den Fremdschlüssel in derDosentabelle.

Die Eigenschaft „WC“ wird als einfaches, logisches Feld beim Raum deklariert. Überentsprechende Abfragen bzw. angepaßte Programmierung sorgen wir dafür, daß ein Chassis nur ineinem WC zu stehen kommt.Im Entwurf fehlt noch die zweite feste Zuordnung einer Buchse zu einem WC oder, wenn alleBuchsen eines Raumes immer im gleichen WC aufgelegt sind, die Zuordnung des Raumes zueinem WC. Hierdurch ergibt sich eine rekursive Beziehung zwischen zwei Räumen, die denRahmen des Entwurfs erneut sprengen würde. Je nach Konfiguration könnte dies sogar amGebäudeteil festgemacht werden, wenn nur immer ein WC pro Gebäudeteil vorgesehen ist.Um die Hauptfunktion des Programmes, nämlich Zuordnung von Buchse zu Port, Modul unddamit Netz bzw. die Suche nach dieser Verknüpfung zu realisieren, könnte folgendes Formulardienen:

Da Buchsen neben derNeueingabe auch gesuchtwerden sollen, muß eineentsprechende Suchfunk-tion vorhanden sein.In einem Unterformularsind alle freien Ports mitdem dazugehörigenModul und Subnetz zufinden. Dabei interessierenaber nur die Ports in demWC, in dem Der Raumbzw. die Buchse aufgelegtist.Der Benutzer wählt nuneinen geeigneten Modulaus und erhält alle indiesem Modul befindli-chen freien Ports.Wie immer ist jedeLösung weiter

ausbaufähig. Wir sollten aber überlegen, ob die Firma sich eine „vornehmere“ Lösung leistenkann.

20

Page 736: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 11

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum werden nacheinander folgende Schlüssel in der angegebenenReihenfolge eingegeben:

M F C A B Q L O P E

Wie sieht der logische Baum nach dieser Eingabe aus? Streichen Sie nicht benötigteKästchen deutlich aus! Ergänzen Sie eventuell notwendige weitere Kästchen nach unten!

4

Wie sieht für diesen Baum die Indexdatei mit Rücksprungankern aus?

0 11 1 Erdesatz

1 2 6 M

2 3 7 F

3 4 10 C

4 0 5 A

5 -4 -3 B

6 8 0 Q

7 -2 -1 L

8 -1 9 O

9 -8 -6 P

10 -3 -2 E

114

Wie würde ein ausgeglichener Baum mit den gleichen Inhalten aussehen? Hinweis: Esgibt mehrere Lösungen. Finden Sie eine.

In der folgenden Lösung ist der linke Teilbaum grau hinterlegt.

M

F

C

A

Β

E

L

Q

O

P

Page 737: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\991F8TIV.doc – 99194 Seite: 12

4In welcher Reihenfolge hätten die Schlüssel eingegeben werden müssen, um Ihre Lösungzu erzeugen? Auch hier gibt es mehrere Lösungen (z. B. zuerst Tiefe, dann Breite):

L C B A F E P O M QLLM E B A C F L P O Q_______________________________________________________ 2

Löschen Sie nun aus dem ausgeglichen Baum die Wurzel. Wie sieht der Baum aus,wenn Sie immer den linken Teilbaum nach oben schieben und den Rest entsprechendanhängen? Ergänzen Sie wiederum bei Bedarf weitere Kästchen.

4

Wie verändert sich die Indexdatei durch das Löschen?

Der linke Teilbaum wandert nach oben, der rechteTeilbaum wird an das „rechteste“ Element angehängt.Die eingegebenen Datensätze bleiben an ihren Plätzen,nur die Zeiger werden verändert.Der gelöschte Datensatz wird in die Kette der freienDatensätze eingehängt.Insgesamt werden 4 Datensätze korrigiert: Erde, gelöschterDS, rechts außen Teilbaum 1, links außen Teilbaum 2.Dies ist im Baum fett dargestellt.

4

L

C

A

B

F

E

P

QO

M

C

B

A

F

P

QO

M

E

0 1 2 Erdesatz

1 11 0 gelöscht

2 3 5 c

3 4 -2 B

4 0 -3 A

5 6 7 F

6 -2 -5 E

7 8 10 P

8 9 -7 O

9 -5 -8 M

10 -7 0 Q

11

Page 738: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\991F8TIL.doc – 99194 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken – Labor

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

1 Aufgabenstellung

Wir wollen mit der Aufgabenstellung aus der Vorlesungsklausur fortfahren und diese inAccess realisieren. Hier noch einmal die Kurzfassung:

Für Herrn Münch sollen Sie eine Verwaltung der Verkabelung als Datenbank realisieren.Herr Münch zeigt Ihnen seine bisherige manuelle Buchführung (Blatt ist beigefügt). Aufintensive Fragen erhalten Sie folgende Auskünfte:

1. Jeder Raum der AdK hat eine eindeutige, sprechende Raumnummer mit Gebäude,Stockwerk und laufender Nummer. Diese ist Ihnen hinlänglich bekannt.

2. In fast allen Räumen der AdK sind eine oder mehrere RJ45-Dosen mit je zwei Buchsenvorhanden. Die Buchsen werden in jedem Raum eindeutig durchnumeriert. Eine Diffe-renzierung in Buchsen und Dosen ist nicht notwendig.

3. Einige Räume sind Wiring Centers (WCs), in denen die Kabel der Buchsen aus denverschiedenen Räumen zusammenlaufen und aufgelegt sind.

Jede Buchse ist dabei mit einem einzigen WC verbunden. Das Kabel endet dort in ei-ner gleichbenannten Buchse.

4. In diesen WCs stehen Module mit sog. Ports. Jedes Modul hat eine eindeutige Be-zeichnung. Die Ports sind jeweils innerhalb der Module durchnumeriert.

5. Eine Buchse und ein Port können nun über ein Patch-Kabel verbunden sein (müssenes aber nicht).

6. Die Module finden Platz in Chassis, die sich, wie erwähnt, in den WCs befinden.7. Der FB ist in mehrere Ringe unterteilt, die jeweils eine einzige Haupt-URL besitzen. So

hat das FB-Netz die URLs 141.45.188.x. Die Einwahlpunkte liegen dagegen auf141.45.187.x usw. (Wobei x eine Zahl zwischen 0 und 255 ist).

8. Die Module sind nun jeweils einem solchen Ring (oder Subnetz) zugeordnet. Damitwird auch jeder PC über den Port mit einem solchen Ring verknüpft.

A. 1 2 3 4 6

Page 739: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\991F8TIL.doc – 99194 Seite: 2

Prüfung:Ihr Entwurf sollte so gestaltet sein, daß er folgender Prüfung standhält:

Ein PC wird über eine Buchse einem Subnetz zugeordnet. Er muß dann im richtigen WCeinen freien Port in einem Modul finden, um an der Kommunikation teilnehmen zu kön-nen.

Aufgabe: Zeichnen Sie ein ERM oder RDM für diese Aufgabenstellung. Achten Sie dabeiauch auf formale Richtigkeit (denken Sie an die Unterschiede!).

2 Vor- bzw. Nachbereitung

1. Legen Sie ein Verzeichnis Klausur auf dem Laufwerk I: an.2. Alle Programmteile speichern Sie bitte in diesem Verzeichnis.3. Bearbeiten Sie die Aufgabe.4. Ganz zum Schluß legen Sie Ihren Prüfungsbeleg im Netz ab. Achtung!! Dies können

Sie nur ein einziges Mal durchführen. Hierzu gehen Sie in folgenden Schritten vor:5. Öffnen Sie den Explorer und lösen dort Extras|Netzlaufwerk verbinden aus. Mappen Sie das LaufwerkK: mit nebenstehenderEingabe. Es sollte nachkurzer Zeit das LaufwerkK: im Explorer erschei-nen.

6. Wechseln Sie nun in dasVerzeichnis scheibl\F8TI1.

7. Legen Sie ein neues Verzeichnis unter Ihrem Nachnamen an.8. Kopieren Sie nun alle Dateien aus Ihrem Verzeichnis Klausur in dieses neue Ver-

zeichnis. Damit haben Sie Ihre Klausur abgegeben.

3 Tabellen

Legen Sie zuerst alle Tabellen mit den vorgesehenen Feldern an. Geben Sie möglichstalle wichtigen Eigenschaften an, um später das Generieren zu vereinfachen (also Be-zeichner, Nachschlagtabellen usw.).

Füllen Sie nun die Tabellen mit folgenden Werten. Diese sind teilweise von Ihrem Namenbzw. Ihrer Matrikel abhängig. Dies dient natürlich nur dazu, daß keine Verwechslungenbei den Ausdrucken auftreten. Schließlich bin ich ganz sicher, daß Sie auf keinem Fallvon Ihrem Nachbarn abschreiben.

Wir beginnen mit drei Räumen. Diese liegen alle im Gebäude F. Die Raumnummern be-stimmen Sie aus Ihrer Matrikel. Die ersten zwei Ziffern ergänzen Sie um eine Null undgeben die drei Ziffern als Raumnummer ein. Die mittleren beiden Ziffern ergeben einenzweiten Raum. Die letzten drei Ziffern ergeben das Wiring-Center, also

Page 740: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 99 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\991F8TIL.doc – 99194 Seite: 3

0123456 als Matrikel führt zu den RäumenF001F023F456 als Wiring-Center

In jedem Raum gebe es zwei Dosen mit insgesamt vier Buchsen.

Im Wiring-Center gibt es zwei Chassis, ihren Namen und den Mädchennamen Ihrer Frau(oder Ihren eigenen) führen (Unverheiratete erfinden einen passenden Namen).

Jedes Chassis enthält zwei Hubs, die Sie als Hub oben und Hub unten bezeichnen.Die Hubs verfügen jeweils über 8 Ports. Der obere Hub bedient das Subnetz141.45.188, die beiden unteren Hubs bedienen die Subnetze 141.45.186 bzw.141.45.189.

4 Abfragen

Entwerfen Sie alle Abfragen, die für die nächsten Aufgaben notwendig sind.

5 Formulare

Generieren Sie nun zu allen Tabellen die passenden Formulare.

Eines der Formulare sollte dazu geeignet sein, eine Buchse zu suchen und sie einemfreien Port zuzuordnen. Achten Sie dabei darauf, daß nur freie Ports neu belegt werdendürfen.

Verbinden Sie nun mind. 6 Buchsen mit Ports aus verschiedenen Subnetzen.

Achten Sie darauf, daß Chassis nur in WCs eingebaut werden können.

6 Berichte

Erstellen Sie nun zwei Berichte, die die Buchsenbelegung bzw. die Portbelegung ausge-ben.

Die Buchsenbelegung sollte nach den Räumen sortiert die Verknüpfung aller Buchsen mitPort, Modul, Chassis und Subnetz darstellen. Dabei sollen auch die leeren Buchsen er-scheinen.

Bei der Portbelegung ist die Sortierung durch das Chassis mit seinen Modulen vorgege-ben.

Page 741: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc - 98278 Seite: 1

Name: _______________________ Datum:___________________

Matrikel-Nr: ___________________

Nachklausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

2 Begriffe

Was bedeuten die folgenden Abkürzungen in Klartext:

ERM: - _____________________________________________________________________________________________________________________________________________________ 1

RDM: - _____________________________________________________________________________________________________________________________________________________ 1

Wie bezeichnet man (nach ihrem Erfinder) ERM-Diagramme noch?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie mit eigenen Worten die folgenden Begriffe. Machen Sie dabei die Unter-schiede klar:

Entität: -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Entitätstyp: -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Beziehung _________________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Beziehungstyp -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Was versteht man unter einer Domäne (domain)?

- ____________________________________________________________________________________________________________________________________________________________________ 1

S. 1 2 3 4 5 6 7 812 15 15 2 6 22 20 8

Page 742: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Som

mersem

ester 98 D2W

IW N

achklausur in Datenbanken

D:\E

igene\Doku\D

B\K

lausur\982D2W

IWn.doc - 98278

Seite: 2

Tragen S

ie in die leeren Kästchen die fehlenden B

egriffe des RD

M ein:

5

KASSETTEN

GRUPPE

U-GRUPPE

TITEL

DREHTAG

REDAKTION

KAMERA

AUFTRAGGEB

STANDORT

VERSAND

INFO

ID

53

Sport

Boxen

Box-Amateur-Meisterschaft

03.04.93

Pflüger

C.Fischer

Berlin

0 - Kampf

1

2127

Kultur

Party Metropol Superstar

16.06.93

Berlin

0 -Showeinlage:Step

2

2128

Kultur

Nancy-Lee-GRA

03.05.93

Viola

S.Di Tidaro

Berlin

0 -Grand Hotel von innen

3

2129

Kultur

West-Side-Story-Pemiere Feier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer

4

6781

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Modenschau -Christian

5

2135

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0-Studio in Rom

6

2130

Kultur

Theater

West-Side-Story

27.07.93

E.Lang

S.Di Tidaro

Berlin

0 -Finale

7

2131

Kultur

West-Side-Story-Premierenfeier

28.07.93

E.Lang

M.Gräser

Berlin

0 -Leute im Foyer -I.

8

2133

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Tidaro

Zdf

Berlin

0 -I.-Brüssau auf

9

2134

Kultur

Promis

Werner Brüssau

02.07.93

Peters/raue

S.Di Todaro

Zdf

Berlin

0 -Häuser/Dächer

10

2425

Kultur

Montserrat Caballe

14.07.93

T.Ohm

C.Fischer

Berlin

0 -Hilton-hotel -Interv

11

6782

Verschiedenes

Mode

fashion

07.08.94

Edda Lang

Matthias Gräser

Rtl G.M.D.

Berlin

0-Interview Claus Pöhland

12

2261

Kultur

Heller

Berlin

0- Akrobatinnen - Tänzer

13

2259

Kultur

Filmausschnitte Malcom X

Berlin

014

2126

Kultur

Party-Metropol-Superstar

16.06.93

Berlin

0 -Showeinlage -Step

15

6266

Verschiedenes

Musik

Berlin

0 -ohne Bild,nur Musik

16

6191

Verschiedenes

Tränenpalast

A.Choo

F.Brauer

Berlin

0 -Eingang-ränenpalast

17

6192

Verschiedenes

Zoobilder

Berlin

0 -Affen-Insel

18

1000

Politik

Skinhead Prozess

09.07.92

Berlin

0- Autos Haus

19

6193

Verschiedenes

Kita/Tierversuche

M.Illner

Sat 1

Berlin

0 -Kinder spielen in

20

6194

Verschiedenes

Zirkus Busch

14.04.93

M.Gräser

Berlin

0 -Aufbauarbeiten

21

6195

Verschiedenes

OFF-Gorillababys

18.03.93

T.Ohm

M.Gräser

Berlin

0 -9 Monate altes

22

6196

Verschiedenes

Hitze

Berlin

0 -Fernsehturm

23

6257

Verschiedenes

Tiere

Moschusochse Balthasar

04.10.92

T.Ohm

M.Gräser

Rtl

Berlin

0 -I.-Wolfgang Völz

24

6256

Verschiedenes

Löwe als Nachbar

01.12.92

I.Hüttig

Rtl

Berlin

0 -Tiere -Löwen im

25

5013

Wissenschaft

Stralsund-Treuhand

SAT.1

Berlin

0-Leute am Computerputer

26

5014

Wissenschaft

Stralsund-Treuhand

SAT 1

Berlin

0 -Schiff -Hafen

27

5015

Wissenschaft

Stralsund-Treuhand

SAT1

Berlin

0 -Schiff-Astoria

28

5010

Wissenschaft

Stralsund

Berlin

0 -Schreinerwerkstatt

29

5011

Wissenschaft

Stralsund

Berlin

0 -Bedienung-Hand

30

5012

Wissenschaft

Stralsund

Berlin

0 -Gelände von oben

31

5007

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Betriebsgelände

32

5008

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Westhafen

33

5009

Wissenschaft

Stralsund-Treuhand

Berlin

0 -Schweißen

34

5004

Wissenschaft

CIM-Data

Berlin

0 -Technische

35

10F

ühren Sie 5 F

ehler in dieser Datenbank auf. S

chreiben Sie den F

ehler und die Begründung in die unteren K

ästchen. Ziehen S

ie Pfeile zur fehler-

haften Stelle.

wie heiß

t das Ganze:

Page 743: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 3

2 Access Grundlagen

Kann in Access ein Schlüssel aus mehreren Attributen (Feldern) bestehen?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Wie legen Sie den Schlüssel in Access an?

______________________________________________________________________________________________________________________________________________________________________

______________________________________________________________________________________________________________________________________________________________________ 2

Erklären Sie den Begriff „Referentielle Integrität“. Benutzen Sie zur Erläuterung ein ge-eignetes Beispiel an.

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 4

Was bedeutet der Begriff „Änderungsweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Warum haben wir ihn nie aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was bedeutet der Begriff „Löschweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wann und warum haben Sie in Ihrem Beleg diese Option aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Page 744: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 4

3 Datenbankanalyse

Gegeben seien die beiden folgenden Tabellen:

Die beiden Tabellen sind wie nebenstehendverknüpft:

Erklären Sie, warum die Abfrage ksprechernur einen einzigen Student liefert:

Matrikel Name Klassenname

1 Mayer 396SD6TI 1

Beschreiben Sie hierzu die Verarbeitungslogik,mit der diese Liste erstellt wird:

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Matrikel Name Geschlecht Geburtsdatum Vordiplom in Klasse

1 Mayer M 10.10.63 Ja 1

2 Müller W 01.04.65 Ja 1

3 Schulze M 17.02.64 Nein

4 Huber M 05.11.62 Ja 3

5 Adam M 27.09.64 Ja 2

6 Bergmann W 16.03.66 Ja

7 Zuse M 31.01.63 Nein 1

8 Schwinge M 25.03.65 Ja

9 Bisanz M 28.09.64 Ja 4

10 Berthold M 12.04.63 Ja 1

11 Winkelmann M 31.10.63 Ja 3

12 Freitag M 12.12.64 Nein 2

13 Keyl M 22.05.62 Ja 4

14 Fanke W 15.09.63 Ja 1

15 Lorenz M 12.04.64 Nein 5

16 Schulz M 22.09.65 Nein 2

17 Hofmann M 21.11.63 Ja 2

18 Binder M 22.02.65 Ja 4

19 Mai M 01.01.63 Ja 7

20 Oschipowski M 23.05.66 Ja 7

21 Dahley M 19.07.64 Ja 2

22 Hemberger M 22.08.65 Nein 3

23 Ritter M 30.04.66 Nein 2

24 Kreft M 22.09.64 Ja 2

25 Eger W 19.04.65 Ja 1

26 Mayer M 15.06.62 Nein

Klassen-Nr. Klassenname Anzahl Sprecher

1 396SD6TI 1 25 1

2 396SD6NT 1 30 3

3 396SD1NT 1 22 8

4 396SD2NT 1

5 396SD2TI 1

6 396SD3NT 1

7 396SD2MST1

8 396SD3NT 2

9 396SD3TI 1

10 396SD3TI 2

11 396WD6TI 1

Page 745: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 5

Was muß man tun, damit alle zugeordneten Klassensprecher angezeigt werden?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Auf welchen Eingabefehler ist das obige Ergebnis zurückzuführen?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Wie können wir diesen Fehler verhindern?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wie können wir eigentlich eine Tabelle mit den Studenten einer Klasse erzeugen?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

4 Datenbankentwurf

Für die Finanzverwaltung der FHTW sollen Sie eine Budgetverwaltung entwerfen. Hierzuerhalten Sie von der Finanzverwaltung folgende Informationen:

1. Die FHTW ist in Abteilungen gegliedert (auch die Fachbereiche usw. werden als sol-che bezeichnet. Jede Abteilung hat eine eindeutige Abteilungsnummer, eine Bezeich-nung und weitere Attribute.

2. Pro Abteilung gibt es mehrere Konten, die jeweils zu einer anderen Kategorie gehören,z. B. Investitionen, Lehr- und Lernmittel usw.

3. Einmal pro Jahr wird für jedes dieser Konten ein Budgetplan erstellt, d. h. die Ober-grenze der verfügbaren Mittel festgelegt.

4. Über das Jahr fallen Buchungen an, die einem der Konten zugeordnet werden müssen.5. Es darf natürlich das Budget pro Jahr nicht überschritten werden.6. Die Daten müssen 10 Jahre aufgehoben werden, d. h. man muß auch Budget und Bu-

chungen aus den vergangen Jahren abrufen und kontrollieren können.

Entwerfen Sie das RDM für diese Aufgabenstellung. Achten Sie dabei auf Vollständigkeitder Bezeichnungen sowie der Komplexitäten:

Hier noch einmal die Tabelle der RDM-Symbole. DenkenSie aber auch an die Unterschiede zum ERM.

1-Beziehungc-Beziehungn-Beziehungnc-Beziehung

Page 746: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 6

Unbedingt sauber und leserlich auf dieser Seite zeichnen!!!

22

Legen Sie Felder für jede der Tabellen an. Konzentrieren Sie sich dabei auf die wesentli-chen Attribute. Als Beispiel sind bereits vier Abteilungen vorgegeben. Gehen Sie weiter-hin von vier Kategorien Investition, Lehr- und Lernmittel, Personal, Stud. Hilfskräfte aus.Tragen sie einige Buchungen exemplarisch ein:

Tabelle: abteilunga_nr a_name ?F1 Fachbereich 1F2 Fachbereich 2F3 Fachbereich 3HZ Hochschulrechenzentrum

Diese Vorlagen erheben keinen Anspruch auf Vollständigkeit!!

Page 747: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 7

20

Page 748: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Nachklausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\982D2WIWn.doc -98278 Seite: 8

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum werden nacheinander folgende Schlüssel in der angegebenenReihenfolge eingegeben:

M F B A Q O C L P G

Wie sieht der logische Baum nach dieser Eingabe aus? Streichen Sie nicht benötigteKästchen deutlich aus!

4

Wie würde ein ausgeglichener Baum mit den gleichen Inhalten aussehen?

4

Viel Erfolg!

Maximum: 100 Punkte

Page 749: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

1 Begriffe

Wie bezeichnet man (nach ihrem Erfinder) ERM-Diagramme noch?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie den Unterschied zwischen:

Entität/Entitätstyp: - _______________________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

Beziehung/Beziehungstyp: ________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

Was versteht man unter einer Domäne (domain)?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut geschlecht einer natürlichen Person vor-geben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut laufende Rechnungsnummer einerRechnung vorgeben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

S. 1 2 3 4 5 6 7 88 14 14 0 8 24 24 8

Page 750: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 2

Erklären Sie die Bedeutung der im ERM verwendeten Symbole:

student klasse

snr

sname

sgeschl

sgeb svord

knr kname

kanzahl

gseit

gehoertc mc

N 6;0

Date

C 30

L

"M","W"Date N 4;0 C 20

N 3;0

zu

student -_______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________- _______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________- _______________________________________________________________________________________________________________________________________ 3

c, mc -______________________________________________________ 2

Warum sind im Diagramm die Attribute snr und knr fett dargestellt

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie die beiden (neben den abweichenden Symbolen) wesentlichen Unterschiedezwischen dem ERM und dem RDM:

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

2 Access Grundlagen

Welche drei Eigenschaften müssen Sie in Access festlegen, um ein Feld einer Tabelleminimal zu beschreiben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

gehört_zu

sname

N 6;0

Page 751: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 3

Wie stellen Sie eine Beziehung zwischen zwei Tabellen her?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Bei dieser Aktion erscheint ein Fenster, bei dem Sie folgende Punkte entscheiden müs-sen.

Erklären Sie den Begriff „Referentielle Integrität“. Benutzen Sie zur Erläuterung ein ge-eignetes Beispiel an.

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 4

Was bedeutet der Begriff „Änderungsweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Warum haben wir ihn nie aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was bedeutet der Begriff „Löschweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wann und warum haben Sie in Ihrem Beleg diese Option aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Page 752: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 4

3 Datenbankanalyse

Gegeben seien die beiden folgenden Tabellen,die wir während den Übungen benutzt haben.Sie sind, wie im dritten Bild dargestellt, mitein-ander verknüpft.

Matrikel Name Geschlecht Geburtsdatum Vordiplom in Klasse

1 Mayer M 10.10.63 Ja 1

2 Müller W 01.04.65 Ja 1

3 Schulze M 17.02.64 Nein

4 Huber M 05.11.62 Ja 3

5 Adam M 27.09.64 Ja 2

6 Bergmann W 16.03.66 Ja

7 Zuse M 31.01.63 Nein 1

8 Schwinge M 25.03.65 Ja

9 Bisanz M 28.09.64 Ja 4

10 Berthold M 12.04.63 Ja 1

11 Winkelmann M 31.10.63 Ja 3

12 Freitag M 12.12.64 Nein 2

13 Keyl M 22.05.62 Ja 4

14 Fanke W 15.09.63 Ja 1

15 Lorenz M 12.04.64 Nein 5

16 Schulz M 22.09.65 Nein 2

17 Hofmann M 21.11.63 Ja 2

18 Binder M 22.02.65 Ja 4

19 Mai M 01.01.63 Ja 7

20 Oschipowski M 23.05.66 Ja 7

21 Dahley M 19.07.64 Ja 2

22 Hemberger M 22.08.65 Nein 3

23 Ritter M 30.04.66 Nein 2

24 Kreft M 22.09.64 Ja 2

25 Eger W 19.04.65 Ja 1

26 Mayer M 15.06.62 Nein

Erklären Sie, warum die Abfrage ksprechernur einen einzigen Student liefert:

Matrikel Name Klassenname

1 Mayer 396SD6TI 1

Beschreiben Sie hierzu die Verarbeitungslogik,mit der diese Liste erstellt wird:

- ____________________________________________________________________________________________________________________________________________________________________

Klassen-Nr. Klassenname Anzahl Sprecher

1 396SD6TI 1 25 1

2 396SD6NT 1 30 3

3 396SD1NT 1 22 8

4 396SD2NT 1

5 396SD2TI 1

6 396SD3NT 1

7 396SD2MST1

8 396SD3NT 2

9 396SD3TI 1

10 396SD3TI 2

11 396WD6TI 1

Page 753: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 5

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was muß man tun, damit alle zugeordneten Klassensprecher angezeigt werden?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Auf welchen Eingabefehler ist das obige Ergebnis zurückzuführen?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Wie können wir diesen Fehler verhindern?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wie können wir eigentlich eine Tabelle mit den Studenten einer Klasse erzeugen?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

4 Datenbankentwurf

Für die Inventarverwaltung der FHTW sollen Sie eine Geräteverwaltung entwerfen. Hier-zu erhalten Sie von der Hausverwaltung folgende Informationen.

1. Alle Räume der FHTW sind mit Standort, Gebäude und Raumnummer eindeutig ge-kennzeichnet.

2. In den Räumen haben ein oder mehrere Personen Ihren Arbeitsplatz.3. Manche Räume (z. B. Druckerräume) sind einer Person zugeordnet, die aber dort nicht

ihren Arbeitsplatz hat.4. Sehr große Hörsäle werden von mehreren Personen betreut.5. Die Räume sind (teilweise) mit Telefon, Faxgerät und Computern ausgerüstet.6. Die Computer sind von bestimmten Typen.7. Die Computer haben teilweise Zusatzausstattungen (Netzwerkkarten, Meßeinschübe

usw.).8. Auf den Computern laufen ein Betriebssystem und verschiedene Anwendungspro-

gramme.

Entwerfen Sie das RDM für diese Aufgabenstellung. Achten Sie dabei auf Vollständigkeitder Bezeichnungen sowie der Komplexitäten:

Page 754: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 6

Hier noch einmal die Tabelle der RDM-Symbole. DenkenSie aber auch an die Unterschiede zum ERM.

Unbedingt sauber und leserlich zeichnen!!! (wie wäre es mit Lineal oder gar Scha-blone?) (vielleicht sogar erst einmal einen Entwurf auf Schmierpapier?)

24

Legen Sie Felder für jede der Tabellen an. Konzentrieren Sie sich dabei auf die wesentli-chen Attribute. Es müssen also für den Mitarbeiter nicht der Vorname, die Namen seinerKinder und Kindeskinder usw. erfaßt werden (Benutzen Sie ggf. die Rückseiten). Markie-ren Sie die Primärschlüssel und die Fremdschlüssel verschiedenfarbig Verknüpfen Siedeutlich diese Schlüssel miteinander. Geben Sie 4 Mitarbeiter (je 2 sitzen zusammen), 6Räume (bitte Mehrfachzuordnung realisieren), 3 PC, 6 Telefone, 2 Fax ein. VerwendenSie sinnvolle Schlüssel (z. B. einstellige Zahlen für den Mitarbeiter, zweistellige Zahlenfür den Schlüssel usw.:

Tabelle: personalp_nr p_name ?1 Müller2 Mayer3 Schulze4 Huber

1-Beziehungc-Beziehungn-Beziehungnc-Beziehung

Page 755: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 7

Diese Vorlagen erheben keinen Anspruch auf Vollständigkeit!! Wählen Sie richtig!

24

Page 756: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 F8TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981F8TI.doc - 98195 Seite: 8

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum werden nacheinander folgende Schlüssel in der angegebenenReihenfolge eingegeben:

M F A B Q L O P C E

Wie sieht der logische Baum nach dieser Eingabe aus? Streichen Sie nicht benötigteKästchen deutlich aus!

4

Wie würde ein ausgeglichener Baum mit den gleichen Inhalten aussehen?

4

Viel Erfolg!

Maximum: 100 Punkte

Page 757: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

1 Begriffe

Wie bezeichnet man (nach ihrem Erfinder) ERM-Diagramme noch?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie den Unterschied zwischen:

Entität/Entitätstyp: - _______________________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

Beziehung/Beziehungstyp: ________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

Was versteht man unter einer Domäne (domain)?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut geschlecht einer natürlichen Person vor-geben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut laufende Rechnungsnummer einerRechnung vorgeben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

S. 1 2 3 4 5 6 7 88 13 14 7 20 18 8 12

Page 758: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 2

Erklären Sie die Bedeutung der im ERM verwendeten Symbole:

student klasse

snr

sname

sgeschl

sgeb svord

knr kname

kanzahl

gseit

gehoertc mc

N 6;0

Date

C 30

L

"M","W"Date N 4;0 C 20

N 3;0

zu

student -_______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________- _______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________ 1

- _______________________________________________________________________________________________________________________________________- _______________________________________________________________________________________________________________________________________ 2

c, mc -______________________________________________________ 2

Warum sind im Diagramm die Attribute snr und knr fett dargestellt

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie die beiden (neben den abweichenden Symbolen) wesentlichen Unterschiedezwischen dem ERM und dem RDM:

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

2 Access Grundlagen

Welche drei Eigenschaften müssen Sie in Access festlegen, um ein Feld einer Tabelleminimal zu beschreiben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

gehört_zu

sname

N 6;0

Page 759: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 3

Wie stellen Sie in einem bereits geöffneten UDM eine Beziehung zwischen zwei dort vor-handenen Tabellen her?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Bei dieser Aktion erscheint ein Fenster, bei dem Sie folgende Punkte entscheiden müs-sen.

Erklären Sie den Begriff „Referentielle Integrität“. Benutzen Sie zur Erläuterung ein ge-eignetes Beispiel an.

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 4

Was bedeutet der Begriff „Änderungsweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Warum haben wir ihn nie aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was bedeutet der Begriff „Löschweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wann und warum haben Sie in Ihrem Beleg diese Option aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Page 760: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 4

3 SQL

Erklären Sie folgende Begriffe (Achten Sie dabei auf Präzision im Ausdruck)

Projektion - _________________________________________________________________________________________________________________________________________ 1

Selektion - _________________________________________________________________________________________________________________________________________ 1

Union - _________________________________________________________________________________________________________________________________________ 1

Inner Join - _________________________________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

Outer Join - _________________________________________________________________________________________________________________________________________ 2

- __________________________________________________________________________________________________________________________________________________________

____________________________________________________________________________________________________________________________________________________________

4 Datenbankentwurf

Für die Inventarverwaltung der FHTW sollen Sie eine Geräteverwaltung entwerfen. Hier-zu erhalten Sie von der Hausverwaltung folgende Informationen.

1. Alle Räume der FHTW sind mit Standort, Gebäude und Raumnummer eindeutig ge-kennzeichnet.

2. Aufgrund der baulichen Gegebenheiten gibt es Durchgangsräume, über die ange-schlossene Räume zu erreichen sind. Man benötigt dann zwei verschiedene Schlüssel.

3. Für jeden Raum gibt es keinen, einen oder mehrere Schlüssel. Hat ein Raum mehrereZugangstüren, so können dort verschiedene Schlösser eingebaut sein.

4. Es gibt aber auch Schlüssel, die mehrere oder sogar alle Schlösser schließen.5. Die Fachbereiche legen pro Semester die Zutrittsrechte des Personals zu den ver-

schiedenen Räume fest.6. Es muß aber auch möglich sein, (z. B. einem Studenten) für eine bestimmte Zeit ein

Zutrittsrecht einzuräumen. Außerhalb des Zeitbereiches erlischt das Zutrittsrecht.7. Zutrittsrecht und Verfügbarkeit der Schlüssel bestimmen der Vergabe an Personen.

Entwerfen Sie das RDM für diese Aufgabenstellung. Achten Sie dabei auf Vollständigkeitder Bezeichnungen sowie der Komplexitäten:

Hier noch einmal die Tabelle der RDM-Symbole. DenkenSie aber auch an die Unterschiede zum ERM.

1-Beziehungc-Beziehungn-Beziehungnc-Beziehung

Page 761: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 5

Unbedingt sauber und leserlich zeichnen!!! (wie wäre es mit Lineal oder gar Scha-blone?) (vielleicht sogar erst einmal einen Entwurf auf Schmierpapier?)

20

Legen Sie Felder für jede der Tabellen an. Konzentrieren Sie sich dabei auf die wesentli-chen Attribute. Es müssen also für den Mitarbeiter nicht der Vorname, die Namen seinerKinder und Kindeskinder usw. erfaßt werden (Benutzen Sie ggf. die Rückseiten). Markie-

Page 762: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 6

ren Sie die Primärschlüssel und die Fremdschlüssel verschiedenfarbig Verknüpfen Siedeutlich diese Schlüssel miteinander. Geben Sie 4 Mitarbeiter, 6 Räume (einer mit Durch-gangsraum), 12 Schlüssel (1 Generalschlüssel, 1 Mehrfachschlüssel für 3 Räume), 6 Zu-griffsrechte ein. Verwenden Sie sinnvolle Schlüssel (z. B. einstellige Zahlen für den Mitar-beiter, zweistellige Zahlen für den Schlüssel usw.):

Tabelle: personalp_nr p_name ?1 Müller2 Mayer3 Schulze4 HuberDiese Vorlagen erheben keinen Anspruch auf Vollständigkeit!! Wählen Sie richtig!

Page 763: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 7

18

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum werden nacheinander folgende Schlüssel in der angegebenenReihenfolge eingegeben:

M F A B Q L O P C E

Wie sieht der logische Baum nach dieser Eingabe aus? Streichen Sie nicht benötigteKästchen deutlich aus!

4

Wie für diesen Baum die Indexdatei mit Rücksprungankern aus?

Page 764: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 8

01234567891011

4

Wie würde ein ausgeglichener Baum mit den gleichen Inhalten aussehen?

4

Löschen Sie nun aus dem originalen Baum den Eintrag M heraus. Wie sieht der Baumaus, wenn Sie immer den linken Teilbaum nach oben schieben?

4Wie verändert sich die Indexdatei durch das Löschen?

Page 765: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D6TI1 Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D6TI.doc - 98195 Seite: 9

01234567891011

4

Viel Erfolg!

Maximum: 100 Punkte

Page 766: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall geschlossen wieder zurück (also nicht entheften!). Sollte der Platznicht ausreichen, so benutzen Sie die Rückseiten. Nur wenn auch dieser Platz nicht reicht, verwenden Sieleer Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Schreiben Sie mit einem do-kumentechten Stift! Machen Sie deutlich, was Sie meinen. Widersprüchliche Aussagen können nicht zuIhren Gunsten ausgelegt werden. Also, erst denken, dann schreiben!

1 Begriffe

Was bedeuten die folgenden Abkürzungen in Klartext:

ERM: - _____________________________________________________________________________________________________________________________________________________ 1

RDM: - _____________________________________________________________________________________________________________________________________________________ 1

Wie bezeichnet man (nach ihrem Erfinder) ERM-Diagramme noch?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie mit eigenen Worten die folgenden Begriffe. Machen Sie dabei die Unter-schiede klar:

Entität: -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Entitätstyp: -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Beziehung _________________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Beziehungstyp -_______________________________________________________________________________________________________________________________________ 2

-_______________________________________________________________________________________________________________________________________

Was versteht man unter einer Domäne (domain)?

- ____________________________________________________________________________________________________________________________________________________________________ 1

S. 1 2 3 4 5 6 7 812 9 12 3 5 27 24 8

Page 767: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 2

Welche Domäne würden Sie für das Attribut geschlecht einer natürlichen Person vor-geben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Welche Domäne würden Sie für das Attribut laufende Rechnungsnummer einerRechnung vorgeben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Erklären Sie die beiden (neben den abweichenden Symbolen) wesentlichen Unterschiedezwischen dem ERM und dem RDM:

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

2 Access Grundlagen

Welche drei Eigenschaften müssen Sie in Access festlegen, um ein Feld einer Tabelleminimal zu beschreiben?

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

- ____________________________________________________________________________________________________________________________________________________________________ 1

Wie stellen Sie eine Beziehung zwischen zwei Tabellen her?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Bei dieser Aktion erscheint ein Fenster, bei dem Sie folgende Punkte entscheiden müs-sen.

Erklären Sie den Begriff „Referentielle Integrität“. Benutzen Sie zur Erläuterung ein ge-eignetes Beispiel an.

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

Page 768: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 3

- ____________________________________________________________________________________________________________________________________________________________________ 4

Was bedeutet der Begriff „Änderungsweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Warum haben wir ihn nie aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was bedeutet der Begriff „Löschweitergabe“?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wann und warum haben Sie in Ihrem Beleg diese Option aktiviert?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

3 Datenbankanalyse

Gegeben seien die beiden folgenden Tabellen:

Klassen-Nr. Klassenname Anzahl Sprecher

1 396SD6TI 1 25 1

2 396SD6NT 1 30 3

3 396SD1NT 1 22 8

4 396SD2NT 1

5 396SD2TI 1

6 396SD3NT 1

7 396SD2MST1

8 396SD3NT 2

9 396SD3TI 1

10 396SD3TI 2

11 396WD6TI 1

Page 769: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 4

Matrikel Name Geschlecht Geburtsdatum Vordiplom in Klasse

1 Mayer M 10.10.63 Ja 1

2 Müller W 01.04.65 Ja 1

3 Schulze M 17.02.64 Nein

4 Huber M 05.11.62 Ja 3

5 Adam M 27.09.64 Ja 2

6 Bergmann W 16.03.66 Ja

7 Zuse M 31.01.63 Nein 1

8 Schwinge M 25.03.65 Ja

9 Bisanz M 28.09.64 Ja 4

10 Berthold M 12.04.63 Ja 1

11 Winkelmann M 31.10.63 Ja 3

12 Freitag M 12.12.64 Nein 2

13 Keyl M 22.05.62 Ja 4

14 Fanke W 15.09.63 Ja 1

15 Lorenz M 12.04.64 Nein 5

16 Schulz M 22.09.65 Nein 2

17 Hofmann M 21.11.63 Ja 2

18 Binder M 22.02.65 Ja 4

19 Mai M 01.01.63 Ja 7

20 Oschipowski M 23.05.66 Ja 7

21 Dahley M 19.07.64 Ja 2

22 Hemberger M 22.08.65 Nein 3

23 Ritter M 30.04.66 Nein 2

24 Kreft M 22.09.64 Ja 2

25 Eger W 19.04.65 Ja 1

26 Mayer M 15.06.62 Nein

Die beiden Tabellen sind wie nebenstehendverknüpft:

Erklären Sie, warum die Abfrage ksprechernur einen einzigen Student liefert:

Matrikel Name Klassenname

1 Mayer 396SD6TI 1

Beschreiben Sie hierzu die Verarbeitungslogik,mit der diese Liste erstellt wird:

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Was muß man tun, damit alle zugeordneten Klassensprecher angezeigt werden?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Page 770: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 5

Auf welchen Eingabefehler ist das obige Ergebnis zurückzuführen?

- ____________________________________________________________________________________________________________________________________________________________________ 1

Wie können wir diesen Fehler verhindern?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

Wie können wir eigentlich eine Tabelle mit den Studenten einer Klasse erzeugen?

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________

- ____________________________________________________________________________________________________________________________________________________________________ 2

4 Datenbankentwurf

Für die Hausverwaltung der FHTW sollen Sie eine Schlüsselverwaltung (also die Dingermit den kleinen Zähnchen) entwerfen. Hierzu erhalten Sie von der Hausverwaltung fol-gende Informationen.

1. Alle Räume der FHTW sind mit Standort, Gebäude und Raumnummer eindeutig ge-kennzeichnet.

2. Aufgrund der baulichen Gegebenheiten gibt es Durchgangsräume, über die ange-schlossene Räume zu erreichen sind. Man benötigt dann zwei Schlüssel.

3. Für jeden Raum gibt es keinen, einen oder mehrere Schlüssel.4. Es gibt aber auch Schlüssel, die mehrere oder sogar alle Räume schließen.5. Die Fachbereiche legen pro Semester die Zugriffsrechte des Personals auf die ver-

schiedenen Räume fest.6. Es muß aber auch möglich sein, (z. B. einem Studenten) für eine bestimmte Zeit ein

Schlüsselrecht einzuräumen. Außerhalb des Zeitbereiches erlischt das Zugriffsrecht.

Entwerfen Sie das RDM für diese Aufgabenstellung. Achten Sie dabei auf Vollständigkeitder Bezeichnungen sowie der Komplexitäten:

Hier noch einmal die Tabelle der RDM-Symbole. DenkenSie aber auch an die Unterschiede zum ERM.

Unbedingt sauber und leserlich auf der nächsten Seite zeichnen!!!

1-Beziehungc-Beziehungn-Beziehungnc-Beziehung

Page 771: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 6

27

Legen Sie Felder für jede der Tabellen an. Konzentrieren Sie sich dabei auf die wesentli-chen Attribute. Es müssen also für den Mitarbeiter nicht der Vorname, die Namen seinerKinder und Kindeskinder usw. erfaßt werden (Benutzen Sie ggf. die Rückseiten). Markie-ren Sie die Primärschlüssel und die Fremdschlüssel verschiedenfarbig Verknüpfen Siedeutlich diese Schlüssel miteinander. Geben Sie 4 Mitarbeiter, 6 Räume (einer mit Durch-gangsraum), 12 Schlüssel (1 Generalschlüssel, 1 Mehrfachschlüssel für 3 Räume), 6 Zu-griffsrechte ein. Verwenden Sie sinnvolle Schlüssel (z. B. einstellige Zahlen für den Mitar-beiter, zweistellige Zahlen für den Schlüssel usw.):

Tabelle: personalp_nr p_name ?1 Müller2 Mayer3 Schulze4 Huber

Diese Vorlagen erheben keinen Anspruch auf Vollständigkeit!!

Page 772: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 7

24

Page 773: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 98 D2WIW Klausur in Datenbanken

D:\Eigene\Doku\DB\Klausur\981D2WIW.doc - 98195 Seite: 8

5 Datenbankaufbau

5.1 Binäre Bäume

In einem binären Baum werden nacheinander folgende Schlüssel in der angegebenenReihenfolge eingegeben:

M F A B Q L O P C E

Wie sieht der logische Baum nach dieser Eingabe aus? Streichen Sie nicht benötigteKästchen deutlich aus!

4

Wie würde ein ausgeglichener Baum mit den gleichen Inhalten aussehen?

4

Viel Erfolg!

Maximum: 100 Punkte

Page 774: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 1

Name:________________________ Datum:___________________

Matrikel-Nr: ___________________

Klausur in Datenbanken mÛiÛtmÛiÛt LöÛéuÛngeÛnLöÛéuÛngeÛn

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall wieder zurück. Sollte der Platz nicht ausreichen, so benutzen Sieleere Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Machen Sie deutlich, was Siemeinen. Widersprüchliche Aussagen können nicht zu Ihren Gunsten ausgelegt werden.

1 Datenbankanalyse

Im Microsoft Office Journal, Heft 1/97, finden wir eine Kundenverwaltung. Sie besteht auszwei Tabellen, die hier aufgetrennt dargestellt sind:

KundenKundennummer Firma Anrede Vorname Nachname Straße Postfach PLZ (Straße)

2 Fischer & Co. KG Frau Karin Lauer Michelsbert 3 78 36 301511 Müller GmbH Herr Rainer Zufall Mozartweg 12 13 40 80486

PLZ(Postfach)

Ort Telefon(Zentrale)

Telefon(Durchwahl)

Fax (Zentrale) Fax (Durchwahl) Handy

30151 Bahlen 030 / 161264 030 / 456272180122 München 0 89 / 3216-0 089 / 3216 - 80 0 89 / 3216-55 0 89 / 3216-85 0171 / 12346576

Umsatz1 Umsatz2 Umsatz3 Umsatz4 Umsatz5 Umsatz6 Umsatz7 Umsatz8 Umsatz9 Umsatz10 Umsatz11 Umsatz120,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM

BestellungID KundenID BestellNummer (Kunde) BestellNummer (Intern) Bestelldatum Bestellt durch4 2 1230 12 31.01.96 Dr. Fies

Lieferdatum Lieferung per Zahldatum Summe (netto) Skonto12.02.96 UPS 12.03.96 12.515,56 DM Ja

Das Unternehmensdatenmodell ist sehr einfach. Eszeigt eine 1:m Beziehung zwischen Kunden undBestellung:

Beurteilen Sie bitte den Entwurf und beantworten Siefolgende Fragen. Legen Sie dabei jede Kleinigkeit aufdie Goldwaage und bewerten Sie die Punkte:

Page 775: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 2

Welche Normalform erfüllt der Entwurf?

keÛiÛne ________________________________________________________________________________________________________________________________________________________ 2

Begründung

UÛmÛêaÛîz iÛët WiedeÛrholfeld_____________________________________________________________________________________________________________________ 2

Warum wäre das Wiederholfeld Umsatz in dieser Form tolerabel?

ImÛmeÛr feÛëte Zahl voÛn WiedeÛrholÛuÛngeÛn (12 MoÛnaÛte).____________________________________________________________________ 2

Untersuchen Sie nun alle Felder und geben Sie Ihre Meinung darüber ab, ob das Feld inder gewählten Form so in Ordnung geht. Beachten Sie auch die eingegebenen Daten.Wo sind Ihrer Meinung nach Eingabeplausibilitäten bzw. vorgegebene Formatierungennotwendig:

Feld sinnvoll PlausibilitätenKundennummer WieÛêo keÛiÛn ZähleÛr?Firma

Anrede übeÛr NachÛêchaÛuÛtabelleVorname

Nachname

Straße

Postfach

PLZ (Straße)

PLZ (Postfach)

Ort

Telefon (Zentrale) LeeÛrÛëtelleÛn heÛraÛuÛs!Telefon (Durchwahl) WaÛrÛuÛm hÛieÛr noch eÛiÛnÛmal alleÛs? LeeÛrÛëtelleÛn heÛraÛuÛs!Fax (Zentrale) LeeÛrÛëtelleÛn heÛraÛuÛs!Fax (Durchwahl) LeeÛrÛëtelleÛn heÛraÛuÛs!Handy LeeÛrÛëtelleÛn heÛraÛuÛs!Umsatz1 … Umsatz12 KaÛnÛn beÛrechÛneÛt weÛrdeÛn?ID WieÛêo keÛiÛn ZähleÛr?KundenID

BestellNummer (Kunde)

BestellNummer (Intern)

Bestellt durch eÛxÛtÛra MÛiÛtaÛrbeÛiÛteÛr-TabelleLieferdatum

Lieferung per übeÛr NachÛêchaÛuÛtabelleSumme (netto)

Skonto WieÛvÛiel, ØëtaÛtÛt Ja 7Überprüfen Sie die Daten. Ist ein schwerwiegender, logischer Fehler zu sehen?

DeÛr WeÛrÛt deÛr BeÛëtellÛuÛng taÛuchÛt iÛm UÛmÛêaÛîz nÛichÛt aÛuf.______________________________________________________________ 2

Page 776: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 3

WeÛiÛteÛre FehleÛr ØéiÛnd: PLZ eÛiÛneÛs PoÛëtfacheÛs iÛët nÛichÛt gleÛich deÛr PLZ deÛs OrÛteÛs__________________________ JahÛr iÛmDaÛtÛuÛm vÛieÛrÛëtellÛig daÛrÛëtelleÛn. ________________________________________________________________________________________________

Was muß am Jahresende geschehen?

Die UÛmÛêaÛîzÙzahleÛn mÛüÛéêeÛn gelöÛêchÛt weÛrdeÛn. Sie geheÛn daÛmÛiÛt veÛrloÛreÛn. _____________________________________ 2

Wie würde Ihr Verbesserungsvorschlag aussehen? Zeichnen Sie hierzu ein ERM. 15

Kunden

Mitarbeiter

UmsatzSpediteur

Anrede

Bestellung

ist für CN

hat 1

arbeitet bei

1

ist von 1liefert CN

hat

N

macht CN

tätigt

CN

ist von

1

wird geliefert 1

DaÛs RDM: ØéiehÛt folgeÛndeÛrÛmaÛôeÛn aÛuÛs:

Page 777: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 4

Die TabelleÛn AÛnÛrede bÚzÛw. SpedÛiÛteÛuÛr ØéiÛnd NachÛêchaÛuÛtabelleÛn, dÛie uÛnÛnöÛtÛige RedÛuÛnaÛnÙzeÛnveÛrÛmeÛideÛn. FÛüÛr eÛiÛneÛn KÛuÛndeÛn weÛrdeÛn alle MÛiÛtaÛrbeÛiÛteÛr eÛrfaÛõt, dÛie BeÛëtellÛuÛngeÛn täÛtÛigeÛn(dÛüÛrfeÛn). HÝieÛrdÛuÛrch kaÛnÛn eÛs zÛu eÛiÛneÛr zÛuÛêäÛîzlÛicheÛn SicheÛrheÛiÛt koÛmÛmeÛn. EÛnÛtÛêcheÛideÛnd iÛëtjedoch dÛie EÛiÛnfÛühÛrÛuÛng deÛr UÛmÛêaÛîzÛtabelle mÛiÛt HÝiÛëtoÛrÛie. StaÛtÛt deÛr möglÛicheÛn BeÛrechÛnÛuÛngaÛuÛs deÛn BeÛëtellÛuÛngeÛn haÛt dÛieÛêe Tabelle deÛn VoÛrÛteÛil deÛr deÛuÛtlÛich gÛröÛôeÛreÛn VeÛraÛrbeÛiÛtÛuÛngÛs-geÛêchÛwÛiÛndÛigkeÛiÛt. Sie wÛiÛrd alÛêo iÛm NoÛrÛmalfall iÛmÛmeÛr aÛngelegÛt.

2 Datenbankentwurf

2.1 CD-Verwaltung

Im Buch: Peter Monadjemi: Visual Basic 4 – Das Kompendium, Markt & Technik 3-87791-751-8

finden Sie die folgenden beiden Tabellen (leicht modifiziert):

TitleCDIndex Name Kategorie Interpret

1 The ghost of tom joad Rock Bruce Springsteen2 Mirror ball Rock Neil Young3 Springsteen live Rock Bruce Springsteen4 Talking back to the night Ballade Steve Windows5 Script for a Jester's Tear Rock Marillion6 A collection of great dance songs Classic Pink Floyd7 Achtung Baby Rock U28 Breaking all the rules Blues-Rock Walter Trout9 Hammerharter Grandprix der Volksmusik Lustige Volksmusik Jodler aus verschiedenen Weinanbaugebieten

10 Selected Ambient Works 85-92 New Music Apex Twins

Page 778: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 5

Tracks (gekürzt)CDIndex TrackNr Name Dauer

1 1 the ghost of tom joad 4,231 2 straight time 3,25

.....1 12 my best was never good enough 22 1 Song X 0

.....2 9 Throw your hatred down 02 10 Scenery 02 11 Fallen Angel 09 1 Drunten im Tal 15,229 2 Oben auf der Alm 12,369 4 Mitten im Wald 9,99

10 1 Xtal 4,5110 2 Tha 9,0110 3 Pulsewidth 3,4710 9 Schottkey 5,0710 10 Ptolemy 7,1210 11 Hedphelym 6,0210 12 Delphium 5,3610 13 Actium 7,3510 4 Ageispolis 5,2110 5 i 1,1310 6 Green Calx 6,0210 8 Heliosphan 4,51

Analysieren Sie diese Tabellen:

1. Welche Felder/Feldkombinationen könnten die Primärschlüssel der Tabellen sein? CDIndeÛx bÚzÛw. KoÛmbÛiÛnaÛtÛioÛn aÛuÛs CDIndeÛx uÛnd TrackNr__________________________________________________________________ 2 2. Gibt es Fehler in der Eingabeüberwachung? Beachten Sie, daß die Tabellen in der

Reihenfolge der Eingabe dargestellt sind. Was würden Sie besser machen? EÛs fehlÛt eÛiÛne VollÛëtäÛndÛigkeÛiÛtÛéübeÛrÛwachÛuÛng deÛr Track-NuÛmÛmeÛrÛn. So fehlÛt z. B. Nr. 7___________ beÛi deÛr CD 10. TrackÛs ohÛne SpÛieldaÛueÛr ØéiÛnd ØéiÛnÛnloÛs _______________________________________________________________________ 4 3. Gegen welche Normalform (nur 1NF bis 3NF untersuchen) verstößt dieser Entwurf? keÛiÛne, dÛiÛìkÛtÛuÛtabel iÛët hÛieÛrbeÛi deÛr InÛteÛrÛpÛreÛt mÛiÛt VoÛr- uÛnd ZÛuÛnaÛme_________________________________________ 2 4. Welche Anomalien können auftreten? Was kann man dagegen tun? ÄÛndeÛrÛuÛngÛêaÛnoÛmalÛieÛn, weÛnÛn KaÛtegoÛrÛieÛn uÛmbeÛnaÛnÛnÛt weÛrdeÛn ØêolleÛn. EÛiÛnfÛühÛrÛuÛng eÛiÛneÛr ____________ 4 NachØêchaÛuÛtabelle mÛiÛt alleÛn KaÛtegoÛrÛieÛn, ggf. EÛiÛnfÛühÛrÛuÛng eÛiÛneÛs SchlÛüÛéêelÛs______________________________ WaÛs geÛìhÛiehÛt eÛigeÛnÛtlÛich beÛi CDØs mÛiÛt LÛiedeÛrÛn veÛrÛêchÛiedeÛneÛr InÛteÛrÛpÛreÛteÛr?Øs _________________________________ 5. Wie würde Ihr Entwurf aussehen (Achtung! Keine weiteren Informationen wie Texter,

Komponist usw. hinzufügen!)? Zeichnen Sie ein ER-Diagramm auf. Beachten Sie da-

Page 779: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 6

bei, daß ein Lied auf verschiedenen CD und ggf. von verschiedenen Interpreten ge-sungen werden kann:

EÛiÛne CD gehöÛrÛt geÛnaÛu zÛu eÛiÛneÛr KaÛte-______goÛrÛie, EÛiÛne KaÛtegÛrÛie uÛmfaÛõt mehÛreÛre CDØs _

Eine CD emthält mindestens ein Lied. ______Ein Lied kann auf verschiedenen CDs sein._

WeÛnÛn eÛiÛn LÛied aÛuf eÛiÛneÛr CD iÛët, daÛnÛn_____eÛnÛtÛëteheÛn Track-InfoÛrÛmaÛtÛioÛneÛn ___________________(aÛéêoÚzÛiaÛtÛiÛveÛr TyÛp). __________________________________________

EÛiÛn LÛied kaÛnÛn voÛn keÛiÛneÛm, eÛiÛneÛm odeÛr mehÛreÛreÛn InÛteÛrÛpÛreÛteÛn geÛéuÛngeÛn weÛrdeÛn. ____________________

EÛiÛn InÛteÛrÛpÛreÛt ØéiÛngÛt eÛiÛneÛs (ØêoÛnÛët wäÛre eÛr keÛiÛneÛr odeÛr mehÛreÛre LÛiedeÛr____________________________________________

NichÛt jede CD iÛët „reÛiÛnÛraÛééig". DaheÛr iÛët eÛiÛne KlaÛééifÛiÙzÛieÛrÛuÛng deÛr LÛiedeÛr deÛnkbaÛr. __________________

20

3 Datenbankaufbau

3.1 Binäre Bäume

In einem binären Baum mit Rücksprungankern werden nacheinander folgende Schlüsselin der angegebenen Reihenfolge eingegeben:

E B A D C F G

Wie sieht der logische Baum nach dieser Eingabe aus?

4

und die erzeugte Datei aus?

Kategorie

Lied

Track

Interpret

CD

umfaßt CN

umfaßt

CN

CN

CNgehört zu 1gehört zu 1

N

N

ist auf

singt

E

B

DA

F

G

C

Page 780: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 7

Zeichnen Sie auch die Rücksprunganker in den logi-schen Baum ein.

6

Der Baum ist nicht ausgeglichen. Wie müßte er verändert werden, damit er ausgeglichenist. Es reicht die logische Darstellung:

4

3.2 B-Bäume

Erläutern Sie, warum B-Bäume immer ausgeglichen sind:

B-BäÛuÛme wachÛêeÛn gÛrÛuÛndÛêäÛîzlÛich nach obeÛn bÚzÛw. ØêchÛrÛuÛmÛpfeÛn voÛn obeÛn. DaÛmÛiÛt ____________________

veÛräÛndeÛrÛt Øéich dÛie Höhe ØêäÛmÛtlÛicheÛr TeÛilbäÛuÛme gleÛichÙzeÛiÛtÛig. SoÛmÛiÛt kaÛnÛn eÛs keÛiÛne _______________HöheÛnÛuÛnÛteÛrÛêchÛiede zÛwÛiÛêcheÛn veÛrÛêchÛiedeÛneÛn TeÛilbäÛuÛmeÛn gebeÛn. __________________________________________________________ 2

Beweisen Sie IhreAussagen, indemSie im folgendenBaum den Schlüs-sel 67 neu ein-geben (Die kleinenZiffern neben denBlöcken sind dieinternen

Blocknummern).

Wie sieht der Baum nach der Eingabe aus? Ergänzen Sie, wenn nötig, weitere Blöcke:

1 9 2 Erdesatz

2 3 7 E

3 4 5 B

4 0 -3 A

5 6 -2 D

6 -3 -5 C

7 -2 8 F

8 -7 0 G

91011

D

B

CA

F

GE

02 05

45

10 20 50 60

13 14 22 24 46 47 48 52 55 58 61 62 65 66

1

2

4 5 6 7 8 9

3

Page 781: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken mÛiÛt LöÛéuÛngeÛn

D:\Eigene\Doku\DB\Klausur\971D6Kla.doc - 971023 Seite: 8

8

Löschen Sie nunim nebenstehen-den Baum denEintrag 22. Be-schreiben Sie dieEffekte! Schrumpftder Baum? WennJa. wie?

DeÛr lÛiÛnke TeÛilbaÛuÛm iÛët mÛiÛnÛiÛmal, d. h. alle KÛnoÛteÛn habeÛn k EÛiÛnÛtÛräge. WiÛr köÛnÛneÛn uÛnÛsdaheÛr keÛiÛn EleÛmeÛnÛt voÛm NachbaÛrÛn leÛiheÛn, ØêoÛndeÛrÛn mÛüÛéêeÛn nach obeÛn aÛuÛéweÛicheÛn.

DieÛs fÛühÛrÛt daÙzÛu,daÛß deÛr BaÛuÛmØêchÛrÛuÛmÛpfÛt. Eswerden drei Blöckefreigesetzt.

12

Maximum: 100 Punkte

02 05

45

10 20 50 60 65

13 14 22 24 46 47 48 52 55 58 61 62

1

2

4 5 6 7 8 9

3

66 67

10

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

02 05

10 25 30 40

13 14 20 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Page 782: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 1

Name: _______________________ Datum: __________________

Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall wieder zurück. Sollte der Platz nicht ausreichen, so benutzen Sieleere Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Machen Sie deutlich, was Siemeinen. Widersprüchliche Aussagen können nicht zu Ihren Gunsten ausgelegt werden.

1 Datenbankanalyse

Im Microsoft Office Journal, Heft 1/97, finden wir eine Kundenverwaltung. Sie besteht auszwei Tabellen, die hier aufgetrennt dargestellt sind:

KundenKundennummer Firma Anrede Vorname Nachname Straße Postfach PLZ (Straße)

2 Fischer & Co. KG Frau Karin Lauer Michelsbert 3 78 36 301511 Müller GmbH Herr Rainer Zufall Mozartweg 12 13 40 80486

PLZ(Postfach)

Ort Telefon(Zentrale)

Telefon(Durchwahl)

Fax (Zentrale) Fax (Durchwahl) Handy

30151 Bahlen 030 / 161264 030 / 456272180122 München 0 89 / 3216-0 089 / 3216 - 80 0 89 / 3216-55 0 89 / 3216-85 0171 / 12346576

Umsatz1 Umsatz2 Umsatz3 Umsatz4 Umsatz5 Umsatz6 Umsatz7 Umsatz8 Umsatz9 Umsatz10 Umsatz11 Umsatz120,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM 0,00 DM

BestellungID KundenID BestellNummer (Kunde) BestellNummer (Intern) Bestelldatum Bestellt durch

4 2 1230 12 31.01.96 Dr. Fies

Lieferdatum Lieferung per Zahldatum Summe (netto) Skonto12.02.96 UPS 12.03.96 12.515,56 DM Ja

Das Unternehmensdatenmodell ist sehr einfach. Eszeigt eine 1:m Beziehung zwischen Kunden undBestellung :

Beurteilen Sie bitte den Entwurf und beantworten Siefolgende Fragen. Legen Sie dabei jede Kleinigkeit aufdie Goldwaage und bewerten Sie die Punkte:

Welche Normalform erfüllt der Entwurf?

Page 783: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 2

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

2

Begründung

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

2

Warum wäre das Wiederholfeld Umsatz in dieser Form tolerabel?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

2

Untersuchen Sie nun alle Felder und geben Sie Ihre Meinung darüber ab, ob das Feld inder gewählten Form so in Ordnung geht. Beachten Sie auch die eingegebenen Daten.Wo sind Ihrer Meinung nach Eingabeplausibilitäten bzw. vorgegebene Formatierungennotwendig:

Feld sinnvoll PlausibilitätenKundennummer

Firma

Anrede

Vorname

Nachname

Straße

Postfach

PLZ (Straße)

PLZ (Postfach)

Ort

Telefon (Zentrale)

Telefon (Durchwahl)

Fax (Zentrale)

Fax (Durchwahl)

Handy

Umsatz1 … Umsatz12

ID

KundenID

BestellNummer (Kunde)

BestellNummer (Intern)

Bestellt durch

Lieferdatum

Lieferung per

Summe (netto)

Skonto

7Überprüfen Sie die Daten. Ist ein schwerwiegender, logischer Fehler zu sehen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

2

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

Page 784: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 3

Was muß am Jahresende geschehen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 2

Wie würde Ihr Verbesserungsvorschlag aussehen? Zeichnen Sie hierzu ein ERM. 15

Kunden

Mitarbeiter

UmsatzSpediteur

Anrede

Bestellung

ist für CN

hat 1

arbeitet bei

1

ist von 1liefert CN

hat

N

macht CN

tätigt

CN

ist von

1

wird geliefert 1

Page 785: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 4

2 Datenbankentwurf

2.1 CD-Verwaltung

Im Buch: Peter Monadjemi: Visual Basic 4 – Das Kompendium, Markt & Technik 3-87791-751-8

finden Sie die folgenden beiden Tabellen (leicht modifiziert):

TitleCDIndex Name Kategorie Interpret

1 The ghost of tom joad Rock Bruce Springsteen2 Mirror ball Rock Neil Young3 Springsteen live Rock Bruce Springsteen4 Talking back to the night Ballade Steve Windows5 Script for a Jester's Tear Rock Marillion6 A collection of great dance songs Classic Pink Floyd7 Achtung Baby Rock U28 Breaking all the rules Blues-Rock Walter Trout9 Hammerharter Grandprix der Volksmusik Lustige Volksmusik Jodler aus verschiedenen

Weinanbaugebieten10 Selected Ambient Works 85-92 New Music Apex Twins

Tracks (gekürzt)CDIndex TrackNr Name Dauer

1 1 the ghost of tom joad 4,231 2 straight time 3,25

.....1 12 my best was never good enough 22 1 Song X 0

.....2 9 Throw your hatred down 02 10 Scenery 02 11 Fallen Angel 09 1 Drunten im Tal 15,229 2 Oben auf der Alm 12,369 4 Mitten im Wald 9,99

10 1 Xtal 4,5110 2 Tha 9,0110 3 Pulsewidth 3,4710 9 Schottkey 5,0710 10 Ptolemy 7,1210 11 Hedphelym 6,0210 12 Delphium 5,3610 13 Actium 7,3510 4 Ageispolis 5,2110 5 i 1,1310 6 Green Calx 6,0210 8 Heliosphan 4,51

Analysieren Sie diese Tabellen:

1. Welche Felder/Feldkombinationen könnten die Primärschlüssel der Tabellen sein? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 2 2. Gibt es Fehler in der Eingabeüberwachung? Beachten Sie, daß die Tabellen in der

Reihenfolge der Eingabe dargestellt sind. Was würden Sie besser machen?

Page 786: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 5

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 4 3. Gegen welche Normalform (nur 1NF bis 3NF untersuchen) verstößt dieser Entwurf? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 2 4. Welche Anomalien können auftreten? Was kann man dagegen tun? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 4 ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 5. Wie würde Ihr Entwurf aussehen (Achtung! Keine weiteren Informationen wie Texter,

Komponist usw. hinzufügen!)? Zeichnen Sie ein ER-Diagramm auf. Beachten Sie da-bei, daß ein Lied auf verschiedenen CD und ggf. von verschiedenen Interpreten ge-sungen werden kann:

��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������������������������� ��������������������������������������������������������������� �������������

��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������������������������� ��������������������������������������������������������������� �������������

��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������������������������� ��������������������������������������������������������������� �������������� �������� �� ��� ���� ����������� ������ ��������������������������������������������������������������� ���������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

20

3 Datenbankaufbau

3.1 Binäre Bäume

In einem binären Baum mit Rücksprungankern werden nacheinander folgende Schlüsselin der angegebenen Reihenfolge eingegeben:

Kategorie

Lied

Track

Interpret

CD

umfaßt CN

umfaßt

CN

CN

CNgehört zu 1gehört zu 1

N

N

ist auf

singt

Page 787: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 6

E B A D C F G

Wie sieht der logische Baum nach dieser Eingabe aus?

4

und die erzeugte Datei aus?

Zeichnen Sie auch die Rücksprunganker in den logi-schen Baum ein.

6

Der Baum ist nicht ausgeglichen. Wie müßte er verändert werden, damit er ausgeglichenist. Es reicht die logische Darstellung:

4

3.2 B-Bäume

Erläutern Sie, warum B-Bäume immer ausgeglichen sind:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �2

E

B

DA

F

G

C

1 Erdesatz

234567891011

D

B

CA

F

GE

Page 788: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Sommersemester 97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\vw\971D6Kla.doc - 970630 Seite: 7

Beweisen Sie IhreAussagen, indemSie im folgendenBaum den Schlüs-sel 67 neu ein-geben (Die kleinenZiffern neben denBlöcken sind dieinternen

Blocknummern).

Wie sieht der Baum nach der Eingabe aus? Ergänzen Sie, wenn nötig, weitere Blöcke:

8

Löschen Sie nunim nebenstehen-den Baum denEintrag 22. Be-schreiben Sie dieEffekte! Schrumpftder Baum? WennJa. wie?

12

Maximum: 100 Punkte

02 05

45

10 20 50 60

13 14 22 24 46 47 48 52 55 58 61 62 65 66

1

2

4 5 6 7 8 9

3

02 05

45

10 20 50 60 65

13 14 22 24 46 47 48 52 55 58 61 62

1

2

4 5 6 7 8 9

3

66 67

10

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

02 05

10 25 30 40

13 14 20 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

Page 789: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 1

Name: _______________________ Datum: __________________

Matrikel-Nr: ___________________

Klausur in Datenbanken

Prof. Dr.-Ing. H.-J. Scheibl

Geben Sie diese Blätter auf jeden Fall wieder zurück. Sollte der Platz nicht ausreichen, so benutzen Sieleere Blätter, auf denen Sie die Angaben im Kopf dieses Blattes wiederholen. Machen Sie deutlich, was Siemeinen. Widersprüchliche Aussagen können nicht zu Ihren Gunsten ausgelegt werden.

1 Datenbankentwurf

1.1 Handelsfirma

Im Buch: Said Baloui: Microsoft ACCESS – das Kompendium, Markt & Technik

finden Sie folgende (nur z. T. als schlechte Beispiele angeprangerte) Entwürfe für eineHandelsfirma (S. 133 ff sowie Demodiskette). Basis der Entwürfe sind die vertriebenenProdukte und die Kunden (die Primärschlüssel sind unterstrichen):

produkt(p_nr,p_typ, p_bezeichnung,p_vkpreis,p_stueck)kunde(k_nr,k_name,k_vorname,k_strasse,k_plz,k_ort,k_telefon,k_fax,k_rabatt)

Für die Auftragsverwaltung macht der Autor folgenden Erstvorschlag

auftrag(k_nr,p_nr,a_stueck,a_ausdatum,a_datum,a_redatum,a_eindatum)

Kundennummer k_nr, Produktnummer p_nr sowie Auftragsdatum a_datum dienenals Primärschlüssel, weil kein Kunde am gleichen Tag einen Artikel zweimal bestellt.

Die anderen Felder haben folgende Bedeutung

a_stueck Stückzahl im Auftraga_ausdatum Auslieferungsdatuma_redatum Rechnungsdatuma_eindatum Eingangsdatum der Zahlung

Als Daten gibt der Autor folgende Werte an (die Primärschlüssel sind gegraut):

k_nr p_nr a_stueck a_ausdatum a_datum a_redatum a_eindatum

5 24 2 03.05.92 03.05.92 12.05.92 20.05.925 86 1 06.05.92 03.05.92 12.05.92 20.05.925 65 10 07.05.92 03.05.92 12.05.92 20.05.928 3 1 18.05.92 09.05.92 04.06.92 14.06.92

Beurteilen Sie den Entwurf! Gegen welche NF wird verstoßen und warum:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �4

Page 790: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 2

Ein Bekannter des Autors macht ihm folgenden Vorschlag:

k_nr p_nr1 a_stueck1 a_ausdatum1 p_nr2 a_stueck2 a_ausdatum2

5 24 2 03.05.92 86 1 06.05.928 3 1 18.05.92

p_nr3 a_stueck3 a_ausdatum a_datum a_redatum a_eindatum

86 1 06.05.92 03.05.92 12.05.92 20.05.9209.05.92 04.06.92 14.06.92

Warum handelt es sich um keine Tabelle im Sinne einer relationalen Datenbank (Was hatder Bekannte vergessen?)?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �2

Wenn Sie diesen Fehler repariert haben, beurteilen Sie bitte den Entwurf weiter. Gegenwelche NF verstößt er und warum:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �4

Wie würde Ihr Entwurf aussehen?1. Zeichnen Sie alle Tabellen auf, die Sie einführen würden, damit der Entwurf keine

Normalform verletzt.2. Benutzen Sie die vorgegebenen Attributnamen als Spaltenüberschriften. Führen Sie

nur dann neue Felder ein, wenn dies unbedingt notwendig ist! Die Begründung, daßder Schlüssel zu lang ist und ein Zähler sinnvoll wäre, sollte hier außer Acht gelassenwerden.

3. Markieren Sie die Primärschlüssel der Tabellen.4. Tragen Sie die Daten in die neuen Tabellen ein.5. Zeichnen Sie die Verknüpfung der Tabellen ein.

Tip: Die vorbereiteten Raster dienen ausschließlich zur Unterstützung. Weder ihre An-zahl noch die Form geben irgendwelche Hinweise zur Lösung!

20

Page 791: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 3

Welche Annahme des Autors müssen Sie bei Ihrem Entwurf verschärfen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �2

1.2 CD-Verwaltung

Im Buch: Peter Monadjemi: Visual Basic 4 – Das Kompendium, Markt & Technik 3-87791-751-8

finden Sie die folgenden beiden Tabellen (leicht modifiziert):

TitleCDIndex Name Kategorie Interpret

1 The ghost of tom joad Rock Bruce Springsteen2 Mirror ball Rock Neil Young3 Springsteen live Rock Bruce Springsteen4 Talking back to the night Ballade Steve Windows5 Script for a Jester's Tear Rock Marillion6 A collection of great dance songs Classic Pink Floyd7 Achtung Baby Rock U28 Breaking all the rules Blues-Rock Walter Trout9 Hammerharter Grandprix der Volksmusik Lustige Volksmusik Jodler aus verschiedenen

Weinanbaugebieten10 Selected Ambient Works 85-92 New Music Apex Twins

Tracks (gekürzt)CDIndex TrackNr Name Dauer

1 1 the ghost of tom joad 4,231 2 straight time 3,25

.....1 12 my best was never good enough 22 1 Song X 0

.....2 9 Throw your hatred down 02 10 Scenery 02 11 Fallen Angel 09 1 Drunten im Tal 15,229 2 Oben auf der Alm 12,369 4 Mitten im Wald 9,99

10 1 Xtal 4,5110 2 Tha 9,0110 3 Pulsewidth 3,4710 9 Schottkey 5,0710 10 Ptolemy 7,1210 11 Hedphelym 6,0210 12 Delphium 5,3610 13 Actium 7,3510 4 Ageispolis 5,2110 5 i 1,1310 6 Green Calx 6,0210 8 Heliosphan 4,51

Analysieren Sie diese Tabellen:

1. Welche Felder/Feldkombinationen könnten die Primärschlüssel der Tabellen sein?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������2

2. Gibt es Fehler in der Eingabeüberwachung? Beachten Sie, daß die Tabellen in der

Reihenfolge der Eingabe dargestellt sind. Was würden Sie besser machen?

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������4

Page 792: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 4

3. Gegen welche Normalform (nur 1NF bis 3NF untersuchen) verstößt dieser Entwurf? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 2 4. Welche Anomalien können auftreten? Was kann man dagegen tun? ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������� 4 ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

5. Wie würde Ihr Entwurf aussehen (Achtung! Keine weiteren Informationen wie Texter,

Komponist usw. hinzufügen!)? Zeichnen Sie ein ER-Diagramm auf. Beachten Sie da-bei, daß ein Lied auf verschiedenen CD und ggf. von verschiedenen Interpretern ge-sungen werden kann:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������������

20

2 Datenbankaufbau

2.1 Binäre Bäume

In einem binären Baum mit Rücksprungankern werden nacheinander folgende Schlüsselin der angegebenen Reihenfolge eingegeben:

E B A D C F G

Wie sieht der logische Baum nach dieser Eingabe aus?

Page 793: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 5

4

und die erzeugte Datei aus?

Zeichnen Sie auch die Rücksprunganker in den logi-schen Baum ein.

6

Der Baum ist nicht ausgeglichen. Wie müßte er verändert werden, damit er ausgeglichenist. Es reicht die logische Darstellung:

4

2.2 B-Bäume

Erläutern Sie, warum B-Bäume immer ausgeglichen sind:

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �

��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� ��������������������������������������������������������������� �2

E

B

DA

F

G

C

1 Erdesatz

234567891011

D

B

CA

F

GE

Page 794: Informationen zur Vorlesung: FHTW Berlin Datenbanken FB 3

Wintersemester 96/97 D6TI Klausur in Datenbanken

D:\Eigene\Doku\DB\962D6Kla.doc - 970412 Seite: 6

+Beweisen SieIhre Aussagen,indem Sie im fol-genden Baum denSchlüssel 67 neueingeben (Diekleinen Ziffern ne-ben den Blöckensind die internen

Blocknummern).

Wie sieht der Baum nach der Eingabe aus? Ergänzen Sie, wenn nötig, weitere Blöcke:

8

Löschen Sie nunim nebenstehen-den Baum denEintrag 22. Be-schreiben Sie dieEffekte! Schrumpftder Baum? WennJa. wie?

12

Maximum: 100 Punkte

02 05

45

10 20 50 60

13 14 22 24 46 47 48 52 55 58 61 62 65 66

1

2

4 5 6 7 8 9

3

02 05

45

10 20 50 6065

13 14 22 24 46 47 48 52 55 58 61 62

1

2

4 5 6 7 8 9

3

66 67

10

02 05

25

10 20 30 40

13 14 22 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3

02 05

10 25 30 40

13 14 20 24 26 27 28 32 35 38 41 42 45 46

1

2

4 5 6 7 8 9

3