Online Suche im Handbuch |
Diese Kontaktdatenbank ist ein Adressbuch, welches schön zeigt, wie man mit zwei Tabellen arbeitet. Die Kontaktdatenbank kann einfach um viele Features erweitert werden.
Die Datenbank enthält zwei Tabellen, die Kontakt Tabelle, die die Adressen enthält, und einen Feld für die Kommentare, dem ID - Feld und eine Tabelle für Kommentare. Die Tabellendefinitionen 1a und 1b zeigen die Statements der DDL (Data Definition Language) von MySQL (oder auch jeder anderen SQL Variante) , mit der die Struktur der Datenbank im SQL Server generiert wird.
Die Beispiele 1c und 1d zeigen die Syntax, wie man diese Statements an den MySQL Datenbankserver sendet.
Alle Tabellendefinitionen entsprechen dem SQL Standard, mit einer Ausnahme:
Das ID (uid) Feld ist ein autoincrement
Feld. Auch wenn diese nicht
zum Standard gehören, sind sie aber eine sinnvolle Erweiterung, die in alle
SQL Datenbanken inzwischen unterstützt wird. Wenn also eine Reihe (oder auch Tupel genannt)
angefügt wird, dann wird eine anschließende, laufende Nummer vergeben. Es
ist immer nur ein autoincrement
Feld pro Tabelle zulässig. Ohne
diese Erweiterung müßte man ersatzweise das Statement so schreiben:
"INSERT INTO contact VALUES (SELECT( max(uid) +1 FROM contact..."
Das Problem dabei ist, daß man immer ein Subselect ausführen muß, welches von MySQL aber nicht unterstützt wird. Eine andere Möglichkeit wäre es, die Kontakt Tabelle zu sperren, die maximale UID zu bestimmen, und den neuen Kontakt dann in UID +1 einzufügen.
Das C API Interface, mit welchem man MySQL Datenbanken aus C++ heraus ansteuern kann, sieht hingegen diese Möglichkeit vor. Die Funktion heißt mysql_insert_id(). Mit Hilfe von PERL ist dies ebenfalls möglich, das Konstrukt würde dann $contact->insert_id heißen.
In dem letzten Teil der Tabellendefinition sind KEY Werte definiert. Diese
INDEX Attribute sollten stets bei Feldern hinzugefügt werden, die viel
abgefragt werden. Sie beschleunigen die Suche in der Datenbank erheblich,
insbesondere auch bei verknüpften Tabellen. Da UID ein autoincrement
feld
ist, muß es als PRIMARY KEY definiert werden. Der User
sieht dieses Feld nicht, es dient nur der eindeutigen Verknüpfung mit einem
Kontakt. In der anderen Tabelle wird dieses Feld analog zugeordnet (KEY
uid). UID ist dasjenige Feld, was den Kontakteintrag mit der Kommentar
Tabelle verknüpft. In der Kommentar Tabelle ist dieses Feld nicht eindeutig
vergeben (unique), was bedeutet, daß zu einem Kontakt Feld gleich mehrere
Kommentare zugeordnet werden können. Das nennt man one-to-many
relationship. Das ist auch der Hauptgrund, warum diese Datenbank in
zwei Tabellen aufgeteilt wurde. Siehe hierzu auch das Kapitel
Entity Relationship. Die Datenbank enthält zudem noch
contact_date und contact_comment Felder, beide sind INDEX
Felder, damit die Suche und damit die Verknüpfung schneller erfolgt. INDEX
Felder sind in Wirklichkeit HASH-Tables und deswegen rasendschnell, nebenher
gesagt.
Online Suche im Handbuch |