Robert Großkopf Aufbau einer Datenbank am Beispiel einer

Werbung
Robert Großkopf
Aufbau einer Datenbank am Beispiel einer
Adressdatenbank
- Februar 2010 / Mai 2010 -
Inhaltsverzeichnis
Tabellenentwurf....................................................................................................................................2
Primärschlüssel.....................................................................................................................................3
Auslagerung von Daten in eine 2. Tabelle............................................................................................4
Beziehung zwischen den Tabellen........................................................................................................6
Das erste Formular...............................................................................................................................8
Der Formularassistent......................................................................................................................8
Weitere Formularbearbeitung........................................................................................................12
Bearbeitung von Beschriftungsfeldern......................................................................................13
Erstellung eines Listenfeldes....................................................................................................15
Nachträgliche Erstellung eines weiteren Listenfeldes..............................................................22
Erstellung eines Formulares mit Subformular....................................................................................26
Seite 1 von 31
Eine Adressverwaltung kann bereits mit einfachen Bordmitteln von Base recht schnell erstellt
werden. Grundlage der Adressverwaltung ist eine Tabelle, in der in unterschiedlichen Spalten
entsprechend Vorname, Nachname usw. eingetragen werden können. Im Gegensatz zu Tabellen aus
einer Tabellenkalkulation muss aber bei so einer Tabelle von vornherein klar sein, welcher Art die
Inhalte einer jeden Spalte sind. Vorname und Nachname sind immer Texte. Um so eine Tabelle zu
erstellen wird in Base der Tabellenentwurf gestartet.
Tabellenentwurf
Wie oben bei dem Vornamen zu sehen schlägt Base, wie bei allen anderen Feldern, bereits vor, den
Feldtyp „Text [VARCHAR]“ zu nehmen. Grundsätzlich hat diese Eigenschaft immer die
Möglichkeit, wirklich alles in die Spalten einzugeben. Nur schließt sie gleichzeitig aus, dass
besondere Möglichkeiten von Datumsfeldern, Zahlenfeldern oder gar Bildmaterial enthaltenden
Feldern später genutzt werden können. So ist deswegen z.B. das Geburtsdatum (GebDat) natürlich
mit der Feldtyp „Datum [DATE]“ versehen. Wenn aber z.B. das Feld für die Telefonnummer als
„Zahl [NUMERIC]“ angelegt wird, dann ist es nicht mehr möglich, führende Nullen oder
Schrägstriche o.ä. in diesem Feld unterzubringen.
Im Unteren Bereich des Entwurfsfensters befinden sich weitere Einstellungen zu den Felder: Ist
Seite 2 von 31
„Eingabe erforderlich“ auf „Ja“ gesetzt, so ist eine Speicherung des Datensatzes nur möglich, wenn
im obigen Beispiel ein Vorname eingegeben wurde. Die maximale Länge des Namens ist auf 50
Zeichen festgelegt (Standardvorschlag, kann bei Bedarf erweitert werden). Ein Standardwert für
den Inhalt ist nicht festgelegt, da natürlich nicht einmal annähern jede Person „Otto“ o.ä. heißt. Das
Format-Beispiel lässt ein „@“ in hellgrau erscheinen. Das „@“ steht für Texteingabe jeglicher Art.
Bei Zahlen kann hier z.B. die Angabe als Währungsfeld in € gewählt werden. Dies hat aber nur
etwas mit der späteren Darstellung, nicht mit der Speicherung in der Datenbank zu tun.
Primärschlüssel
Meist scheitert der erste Versuch der
Eingabe in eine Tabelle daran, dass
ein für die spätere Datenverwaltung
unabdingbares Feld vergessen wurde:
der Primärschlüssel. Dieses Feld ist,
wie der Name andeute, das zuerst
vorhandene, Grundlegende und
einzigartige Feld einer jeden Tabelle.
Anhand dieses Feldes werden die
Daten später zum Suchen innerhalb
der Datenbank indiziert. Deshalb darf
ein Primärschlüsselfeld auch keine
doppelten Werte haben.
Prinzipiell ist jede Feldart für den
Zusatz „Primärschlüssel“ geeignet.
Wenn allerdings z.B. der Vorname
zum Primärschlüssel erklärt würde,
könnten 2 Personen mit gleichem Vornamen in
der Datenbank nicht verwaltet werden. Mehr
Ähnlichkeit mit Primärschlüsseln haben da schon
Felder wie z.B. das der Postleitzahl oder das einer
Bankleitzahl. Am einfachsten und
unkompliziertesten ist es hingegen, einfach ein
zusätzliches Zahlenfeld festzulegen, das zudem
noch automatisch hochgezählt wird. Das Feld
bekommt den Feldtyp „Integer [INTEGER]“ und
wird mit der Eigenschaft Auto-Wert versehen.
Der Name für das Feld ist wieder beliebig zu
wählen. Häufig wird dafür aber das Kürzel „ID“
verwandt – in Anlehnung an „Identifikationsfeld“.
Seite 3 von 31
Ist die Tabelle mit Primärschlüssel erstellt, so ist die Datenbank vom Prinzip her gebrauchsfertig.
Namen und Adressen können eingegeben werden, die Tabelle kann für Serienbriefe genutzt werden
usw.
Auslagerung von Daten in eine 2. Tabelle
Je mehr Daten allerdings in die Tabelle kommen, desto mehr fällt auf, dass in einzelne Felder
immer wieder die gleichen Texte eingetragen werden. Manchmal sind es dann auch nicht die ganz
genau gleichen Texte, da Schreibfehler ungewollt zusätzliche Wortschöpfungen erzeugen. Diese
Mehrfacheingaben sind bei einer Adressdatenbank z.B. einer Schule oder eines Sportvereins zuerst
bei den Feldern „Ort“ und „Postleitzahl“ zu verzeichnen. Um solche Mehrfacheingaben zu
umgehen werden die entsprechenden Felder aus der Haupttabelle in eigene Tabellen ausgelagert.
Seite 4 von 31
Diese Auslagerung hat den Vorteil, dass die Datenbank selbst wegen sehr vieler Wiederholungen
nicht weiter aufgebläht wird und dass eben Schreibfehler eher vermieden werden. Die
Auslagerungen haben für den frischen Datenbänkler aber den Nachteil, dass die Haupttabelle jetzt
nicht mehr so ohne weiteres editierbar ist. In der Haupttabelle steht jetzt statt der Postleitzahl nur
noch eine Nummer, die auf den entsprechenden Primärschlüssel der Postleitzahltabelle verweist.
Seite 5 von 31
Eine 2. Tabelle wurde erstellt, die vorherigen Felder für die Postleitzahl und den Ort entfernt und
ein Feld für den Primärschlüssel aus der neuen Tabelle PLZ_Ort erstellt. Das Feld muss denselben
Feldtyp haben wie der Primärschlüssel aus der 2. Tabelle.
Beziehung zwischen den Tabellen
Die Beziehung zwischen den Tabellen kann prinzipiell zwar offen gelassen werden und nur durch
die Bestückung mit dem Formular definiert werden, aber wenn bestimmte Automatiken später
funktionieren sollen bietet es sich ein, einen ersten Beziehungsentwurf zu erstellen.
Seite 6 von 31
Der Beziehungsentwurf wird geöffnet und beide bisher erstellten Tabellen in das Entwurfsfenster
geladen. Der Dialog zum Hinzufügen der Tabellen wird anschließend geschlossen.
Seite 7 von 31
Zwischen den beiden Tabellen wird von dem Primärschlüsselfeld der Tabelle „PLZ_Ort“ zu dem
diesen Wert vertretenden Feld in der Tabelle „Person“ mit der Maus eine Verbindung gezogen.
Damit wird das Feld PLZ_Ort_ID in der Tabelle „Person“ ein zweites Schlüsselfeld, das als
Fremdschlüssel bezeichnet wird. Die Beziehung von „PLZ_Ort“.“ID“ zu „Person“.“PLZ_Ort_ID“
ist eine 1:n-Beziehung. In der Tabelle „PLZ_Ort“ kommt der „ID“-Wert jeweils nur einmal vor (ein
Kennzeichen eines Primärschlüssels), aber viele Personen aus der Tabelle „Person“ können am
selben Ort mit derselben Postleitzahl wohnen.
Die oben gezeigte Verbindung kann noch mit verschiedenen Eigenschaft versehen werden, die hier
erst einmal nicht weiter in Anspruch genommen werden. Der Beziehungsentwurf wird gespeichert
und verlassen.
Das erste Formular
Jetzt ist die Eingabe in die Tabelle natürlich nicht mehr so einfach. Beim Eingeben der Daten
müsste jetzt jedes Mal nachgesehen werden, mit welcher Nummer denn die Postleitzahl in der
ausgelagerten Tabelle verzeichnet ist. Spätestens jetzt ist die Zeit gekommen, das erste Formular zu
erstellen.
Der Formularassistent
Seite 8 von 31
Prinzipiell kann ein Formular auf einer einfachen Seite des Writer erstellt werden. An dieser Stelle
wird allerdings die Formularerstellung mit Hilfe des Assistenten in Base dargestellt.
Seite 9 von 31
Das Formular kann mit Tabellen und Abfragen bestückt werden. Hier ist die Tabelle „Person“
ausgewählt. Von den Feldern, die im Formular angezeigt werden sollen, wurde das ID-Feld
ausgeschlossen. In diesem Feld erfolgt ja sowieso keine Eingabe. Wenn es dennoch eingebunden
wird, so sollte es später mit einem Schreibschutz versehen werden.
Ein Subformular (Formular, das dem gewünschten Formular untergeordnet wird) gibt es nicht, so
dass wir schnell im Assistenten weiter die Punkte abarbeiten können.
Seite 10 von 31
Die Anordnung der Kontrollfelder für das Hauptformular (übergeordnetes Formular, in diesem Fall
das einzige Formular) wird angeklickt. Standardmäßig ist hier das Tabellenkontrollfeld vorgesehen.
Es ist für den Start sicher eine gute Wahl, wenn nicht allzu viel Datenfelder nebeneinander
dargestellt werden sollen. Prinzipiell sind die Schritte, die jetzt folgen, auch mit diesem Kontrollfeld
möglich. Oben ist aber jetzt die Darstellung „In Blöcken – Beschriftungen oben“ angewählt.
Im Hintergrund zeigt sich schon die entsprechende Auswahl und ein kleines Manko des Assistenten:
Einige Felder werden scheinbar willkürlich in die Länge gezogen, obwohl der Inhalt bereits im
Tabellenentwurf auf eine bestimmte Zeichenzahl begrenzt wurde (z.B. die Hausnummer, die im
Entwurf auf 10 Zeichen gesetzt war). Da die Einstellungen aber nicht endgültig wird einfach
weitergegangen über Dateneingabe (Voreinstellung belassen), Stile (Je nach Wunsch, hier auch die
Voreinstellung belassen) und den Formularnamen.
Seite 11 von 31
Da das Formular so zwar grundsätzlich genauso brauchbar ist wie die vorherige Tabelle könnte jetzt
nach der Abspeicherung (hier der Name „Person“ nach der zugrundeliegenden Tabelle) mit ihm
gearbeitet werden allerdings ohne einen ersichtbaren Vorteil gegenüber den Tabellen. Es muss also
weiter verändert werden.
Weitere Formularbearbeitung
Dreh- und Angelpunkt aller Veränderungen im Formular ist der Formular-Navigator, der jetzt
aufgerufen wird.
Zuerst werden einmal die Felder in eine ansehnlichere Form gebracht, die dem zu erwartenden
Inhalt auch halbwegs entspricht. Der Assistent verknüpft die Überschriften zu den Eingabefeldern
mit den Eingabefeldern. Werden Eingabefelder verkleinert, so wird gleichzeitig der Platz für die
Überschrift dieser Felder verkleinert. Entweder muss die Gruppierung mit der rechten Maustaste
betreten oder das einzelne Feld über den Navigator direkt ausgewählt werden.
Seite 12 von 31
Bearbeitung von Beschriftungsfeldern
Da für die Überschriften die Feldbezeichnungen aus der Tabelle „Person“ übernommen wurden ist
hier sicherlich eine Änderung erwünscht. Dies geht über den Aufruf der mit dem Feld verbundenen
Eigenschaften, nicht mit einem Umbenennen der Feldbezeichnung:
Seite 13 von 31
Seite 14 von 31
Auch eventuelle Überschriften in den Formularen werden in der Regel über die Beschriftungsfelder
erstellt und anschließend entsprechend mit einer Schriftformatierung, versteckt hinter dem Button
mit den 3 Punkten rechts von dem Feld „Schrift“, versehen. Häufig passiert es, dass solche
Neueinfügungen partout nicht aus der linken oberen Ecke des Formulares herauszubewegen sind.
Hier hilft ein Blick auf die Verankerung, die dann nicht am Absatz sondern als Zeichen gesetzt
wurde.
Erstellung eines Listenfeldes
In einem Formular können die Daten prinzipiell genauso eingegeben werden wie direkt in der
Tabelle. Daneben hat aber für uns zuerst einmal das Listenfeld eine zusätzliche Bedeutung. Mit
einem Listenfeld wird nämlich jetzt z.B. die Postleitzahl ausgewählt aber in der darunterliegenden
Tabelle der zu der Postleitzahl gehörige Primärschlüssel abgespeichert. Das Listenfeld stellt also
sozusagen den Blick auf die 2. Tabelle innerhalb eines Formulares dar. Allerdings benötigt dieses
Listenfeld selbst natürlich entsprechende Einträge, die es aus der Postleitzahl-Tabelle liest. Zuerst
muss also die Postleitzahl-Tabelle gefüllt werden, bevor ein entsprechender Wert für die Adresse
ausgesucht werden kann. Etwas umständlich zu Anfang, bei sehr vielen gleichen Postleitzahlen aber
recht schnell erledigt. Dieses Listenfeld wird anstelle des bisherigen (formatierbaren) Feldes
fmtPLZ_Ort_ID eingebaut:
Seite 15 von 31
Dass das Feld durch ein Listenfeld ersetzt wurde ist hier erst einmal nur
an dem Symbolwechsel erkennbar. Erst der Aufruf der Eigenschaften
zeigt, dass jetzt ein aufklappbares Feld mit entsprechenden Zusätzen
verfügbar ist.
Seite 16 von 31
Das Listenfeld soll in der Liste Postleitzahlen und Ort darstellen, aber den entsprechenden
Primärschlüssel auf das darunterliegende Feld übertragen. Die Daten des Listenfeldes müssen also
bearbeitet werden.
Seite 17 von 31
SQL ist die Abfragesprache an Datenbanken. Mit dieser Sprache wird der Inhalt der Liste gefüllt.
Jetzt könnte im „Listeninhalt“ der Code direkt eingegeben werden. Mit Betätigen des Buttons rechts
von dem freien Feld öffnet sich der Editor für Abfragen, so dass die Abfragen dort einfacher
zusammengestellt werden können.
„Gebundenes Feld“ bedeutet, dass die Abfrage aus mindestens 2 Feldern bestehen muss. Ein Feld
wird angezeigt, das andere (gebundene) Feld wird anschließend in die zugrundeliegende Tabelle
geschrieben. Die Zählung der Felder beginnt bei 0, so dass das 2. Feld unserer Abfrage den nicht
anzuzeigenden Zahlenwert (Primärschlüssel der Tabelle PLZ_Ort) enthält und an das obige
Datenfeld weitergibt.
Seite 18 von 31
Dem Abfrageentwurf werden die Tabellen hinzugefügt, aus denen die entsprechenden Werte
ausgelesen werden sollen. Nachdem das Popup geschlossen wurde können im Unteren Fensterinhalt
die anzuzeigenden Inhalte ausgewählt werden. Das 2. Feld ist hier, wie unten gezeigt, die ID.
Seite 19 von 31
Leider ist die Abfrage so für den weiteren Gebrauch noch nicht so gut geeignet. Jetzt würde die
Postleitzahl angezeigt und die ID gespeichert. Der User müsste also auswendig zu den
Postleitzahlen die Orte wissen. Entweder bringt er also gleich Orte und Postleitzahlen in einem
einzigen Feld unter oder die Abfrage muss so gestaltet werden, dass beide zusammen angezeigt
werden.
Um die Werte gemeinsam anzuzeigen ist es einfacher, Text direkt in die SQL-Anweisung zu
schreiben. Dafür muss die Design-Ansicht ausgeschaltet werden.
Hier ist der bisherige Befehl sichtbar, wie er mit der Design-Oberfläche erstellt wurde. Die SQLAnweisungen sind blau dargestellt, die Tabellenfelder ockerfarben gekennzeichnet:
Seite 20 von 31
SELECT (wähle aus) „Postleitzahl“, „ID“ (Felder sind durch ein Komma voneinander getrennt)
FROM (von Tabelle) „PLZ_Ort“ AS (bezeichnet als) „PLZ_Ort“. Eigentlich reicht auch die Abfrage
ohne die Abschlusskennzeichnung (AS „PLZ_Ort“) aus. Diese Bezeichnung wird allerdings von der
GUI automatisch hinzugefügt, da bei komplexeren Abfragen an dieser Stelle mit zusätzlichen Tricks
gearbeitet werden kann.
Das erste Feld „Postleitzahl“ soll nun auch den Ort anzeigen. Bei der eingebauten HSQLDB bietet
sich dafür an, entsprechend zusammen darzustellende Inhalte durch jeweils 2 senkrechte Striche
miteinander zu verbinden. ||' ' fügt an die „Postleitzahl“ einen einfachen Freiraum (Leertaste) ein; ||
„Ort“ schreibt zusätzlich den Ort in das Feld, so dass jetzt, wie erforderlich, die Postleitzahl und der
Ort in dem Listenfeld angezeigt werden können.
Die Abfrage wird durch Betätigung des Speicherbuttons an das Listenfeld weitergegeben. Der
Listeninhalt zeigt jetzt den Abfragetext, zusätzlich erweitert um die Sortierung der Einträge in dem
Listenfeld nach der Postleitzahl. Der Eigenschaftsdialog wird geschlossen,.
Seite 21 von 31
Das Formular ist nach der Abspeicherung fertig zur Benutzung. Da es zur Zeit noch zur
Formularerstellung geöffnet ist wird das Formular einfach geschlossen und erneut aufgerufen.
Leider ist jetzt das Feld „Postleitzahl Ort“ immer noch ohne Inhalt. Dieser muss erst einmal direkt
in die entsprechende Tabelle PLZ_Ort eingetragen werden, damit er hier verfügbar ist. Bei einer
begrenzten Zahl an Datensätzen ist das recht schnell erledigt.
Nachträgliche Erstellung eines weiteren Listenfeldes
Das Formular ist fertig – und dann fällt uns ein, dass wir gerne noch ein weiteres Feld in der Tabelle
abspeichern wollen, das zudem noch durch ein Auswahlfeld mit Daten beschickt werden soll. Ein
weiteres Listenfeld, in disem Falle für das Geschlecht, muss her.
Das Listenfeld wird ausgewählt und auf der Formularfläche aufgezogen.
Seite 22 von 31
Der Assistent für das Listenfeld erscheint. Für unser spezielles Feld können wir ihn hier leider nicht
weiter gebrauchen – also brechen wir einfach die Ausführung des Assistenten ab.
Noch sieht nichts nach einem Listenfeld aus. Lediglich das Kästchen ist aufgezogen und kann jetzt
in seinen Eigenschaften festgelegt werden.
Seite 23 von 31
Die Kontrollfeldeigenschaften werden mit der rechten Maustaste aufgerufen.
Im Reiter „Daten“ wird das Feld „Geschlecht“ ausgesucht.
Seite 24 von 31
Als Listeninhalt wird eine Werteliste erstellt. Hier soll lediglich ein „m“ und ein „w“ eingetragen
werden – in der Tabelle ist der Platz auf einen Buchstaben beschränkt worden. Die einzelnen
Buchstaben werden untereinander in die Liste eingetragen, indem zum Abschluss eines jeden
Eintrags die Hochstelltaste („Shift“) zusammen mit der Eingabetaste („Enter“) betätigt wird.
Unter dem Reiter „Allgemein“ finden sich die Listen-Einträge, die in dem Feld vom Formular her
sichtbar sind. Das können natürlich die gleichen Einträge sein. Auf jeden Fall sollte aber die gleiche
Reihenfolge wie unter „Daten“ benutzt werden, da sonst „Herr“ als „w“ abgespeichert wird.
Seite 25 von 31
Wird eine Standardselektion gewünscht so kann die hier ausgewählt werden. In dem Feld
„Standardselektion“ erscheint dann eine Zahl, die die Position der Auswahl in der Listenreihenfolge
verdeutlicht. Anfangsposition ist hier die „0“.
Im Anschluss kann dann noch das Design des Feldes bearbeitet werden (ausklappbar,
Farbhintergrund etc. an das Restformular angepasst usw.).
Erstellung eines Formulares mit Subformular
Das vorhergehende Formular benötigte bereits Eingaben in der Tabelle PLZ_Ort. Wird dieselbe
Datenbank mit einer Kombination aus Formular und Subformular bearbeitet, so ist die Eingabe von
Postleitzahl und Ort auch direkt möglich.
Seite 26 von 31
Die Ausgangstabelle für das Hauptformular ist jetzt die Tabelle PLZ_Ort. Das ID-Feld wird dabei in
der Darstellung des Formulares nicht benötigt.
Als mögliches Subformular bietet Base die Tabelle „Person“ an. Da die Beziehung zu dieser Tabelle
Seite 27 von 31
bereits definiert ist erkennt der Assistent die Beziehung und bietet sie an. Also: Subformular
hinzufügen – Subformular basiert auf bestehender Beziehung, Tabelle „Person“ auswählen.
In dem Subformular brauchen die beiden Felder, die auf den Primärschlüsseln der beiden benutzten
Tabellen beruhen, nicht angezeigt zu werden.
Als Darstellungsart ist hier für das Subformular das Tabellenkontrollfeld ausgewählt. So können
direkt sichtbar zu Postleitzahl und Ort im Hauptformular entsprechend viele Datensätze im
Seite 28 von 31
Subformular angezeigt und editiert werden.
Das Formular ist danach prinzipiell fertig, wird aber sicher noch überarbeitet werden müssen.
Die Spalten in dem Tabellenkontrollfeld können in der Breite beeinflusst werden (z.B. mit der Maus
schieben). Die Lage der Felder in dem Subformular kann durch Verschieben, wie oben zu sehen,
bearbeitet werden.
Seite 29 von 31
Die Eigenschaften der einzelnen Felder im Tabellenkontrollfeld sind über die rechte Maustaste
verfügbar.
Wird das Formular jetzt aufgerufen, so geht der Cursor zuerst einmal nur durch das Hauptformular.
Immer wieder werden Postleitzahlen und Orte eingegeben, aber die Eingabe von Personen ist erst
möglich, wenn ein bereits bestehender Datensatz neu aufgerufen wird.
Soll direkt nach der Eingabe im Hauptformular ins Subformular gesprungen werden, so muss die
Aktivierungsreihenfolge der Formularfelder aufgerufen werden:
Wird die Aktivierungsreihenfolge automatisch sortiert, so wird das Subformular auch mit
einbezogen, obwohl es (leider) nicht angezeigt wird.
Danach ist auch dieses Formular als Alternative zum Formular „Person“ einsatzbereit.
Je größer eine Datenbank geplant ist, desto stärker werden Werte aus der Haupttabelle in andere
Seite 30 von 31
Tabellen ausgelagert. Ziel ist einfach, wiederholte Eingabe von Werten zu vermeiden und so später
auch einen schnelleren Zugriff auf ausgewählte Daten zu erhalten.
Mit den ersten Datenbankerfahrungen wachsen natürlich die Ansprüche an die Bedienbarkeit.
Gerade bei einer Adressdatenbank sind hier aber sehr schnell Grenzen zu spüren, die mit der
gewohnten Adresseingabe zusammenhängen: Zuerst wird Vorname und Nachname erfasst, dann die
Straße und die Hausnummer und zuletzt die Postleitzahl sowie der Ort.
Diese Ansprüche in der Bedienbarkeit sind dann in der Regel nur über Makros zu realisieren. In
einem 2. Teil dieser Anleitung wird ein möglicher Weg über Makros aufgezeigt.
Seite 31 von 31
Herunterladen