Weiter Zurück [Inhalt] Online Suche im Handbuch

58.1 Beschreibung

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.


Weiter Zurück [Inhalt] Online Suche im Handbuch