von Michael Christoph
|
Relationen, Primär und Fremdschlüssel
MySQL ist eine so genannte »Relationale Datenbank«. Das bedeutet, dass die Daten nicht alle in einer einzigen Tabelle vorliegen, sondern sich über beliebig viele Tabellen verteilen können. Dabei unterscheidet man zwischen drei Arten der Relationen (s. »Fallbeispiele«):
1:1 Jeweils ein Satz der einen Tabelle ist mit einem Satz der anderen Tabelle verknüpft (z.B. das Gehalt zu einem Mitarbeiter)
1:n Ein Satz der einen Tabelle kann mit beliebig vielen einer anderen Tabelle verknüpft sein (z.B. viele E-Mail-Adressen einer Person)
n:m Hierbei können beliebig viele Sätze einer Datenbank mit beliebig vielen Sätzen einer anderen Datenbank verknüpft sein (mehrere Fotos, die mehrere Personen enthalten). Dazu wird eine eigene Datenbank benötigt, die nur die beiden Verknüpfungen enthält (z.B. BildNr und PersonNr).
Mit dem Primärschlüssel (primary key) kann eindeutig ein Eintrag einer Tabelle identifiziert werden. Der Index ist mit NOT NULL zu deklarieren und pratischerweise mit AUTO_INCREMENT zu versehen. Der Schlüssel kann sich dabei auch aus mehreren Feldern der Tabelle bilden (z.B. »Familienname + Vorname + Geburtsdatum«). Über den Fremdschlüssel (foreign key) werden Tabellen verbunden. Dabei können auch mehrere Sätze (oder keiner) einer anderen Datenbank zutreffen.
Das Datenbankdesign
Bevor jedoch eine neue Tabelle erzeugt werden kann, muss überlegt werden, welche Daten darin gespeichert werden sollen. Entsprechend stellt SQL dann unterschiedliche Datentypen für (Fließkomma-) Zahlen und Strings zur Verfügung. Auch Binärdaten, so genannte BLOBs, können in der Datenbank gesichert werden. So können z.B. Bild- oder Musikdaten direkt mit einem Datensatz verknüpft werden. Effizienter und platzsparender für solche Dateien ist jedoch, nur den Datennamen in der Datenbank zu hinterlegen. Für das Beispiel im dritten Kursteil wird eine Adressdatenbank benötigt. Den Aufbau der gespeicherten Datensätze finden Sie in der Tabelle »Aufbau: Adressdatenbank«
|
Bevor allerdings eine Tabelle mit all diesen Feldern angelegt wird, kommen in der Praxis die »Normalformen« zum Zuge. Diese legen fest, wie eine Tabelle strukturiert sein muss, damit später eine vernünftige Pflege möglich ist. In der Praxis kommen meist nur die ersten drei Normalformen zum Einsatz, die nachfolgend kurz vereinfacht aufgezeigt werden. Wer sich näher damit befassen möchte, sei auf die umfangreiche Literatur zu SQL und Datenbankdesign verwiesen.
Die erste Normalform .
Familien- und Vorname wurden getrennt, damit es zu keiner Verwechslung kommen kann und zum anderen soll auch eine Sortierung nach Familiennamen möglich sein.
Soweit die Theorie. In der Praxis wird man allerdings aus Performancegründen oftmals gegen diese Regeln verstoßen! So ist es z.B. einfacher, zu jeder Adresse direkt PLZ und Ort einzutragen. Es hängt immer von der Zielanwendung ab, inwieweit eine Tabelle optimiert wird. Sollen schnelle Suchanfragen möglich sein, wird man wiederholende Spaltenwerte in Kauf nehmen, um die Suche in einer zusätzlichen Datenbank zu sparen. Auch wenn die verknüpften Daten zu einem späteren Zeitpunkt nicht mehr vorhanden sind, müssen diese gesichert werden. Beispiel: Wenn ein Artikel gelöscht wird, muss trotzdem noch der Lieferschein rekonstruierbar sein. Ein Beispiel zur Erzeugung unserer Datenbank finden Sie in Listing 1.
Integrität der Datenbank sicherstellen
Bei diesem Punkt muss MySQL leider passen. Für die Integrietät sind Sie also selber verantworlich. Durch Unachtsamkeit kann es dabei passieren, dass »tote« Datensätze vorhanden sind. Z.B. eine E-Mail-Adresse die auf eine Person verweist, die bereits gelöscht wurde. Soweit wäre das noch nicht weiter schlimm. Gehen wir aber einen Schritt weiter und legen eine neue Person unter der alten Personennummer an. Dann hat diese »von Geisterhand« eine völlig falsche E-Mail-Adresse erhalten die alte!
Beim Löschen von Tabellen-Einträgen ist also mit Sorgfalt vorzugehen und evtl.
abhängige Datensätze unbedingt zu löschen! Natürlich nur, wenn nicht von einer
anderen Datenbank darauf verwiesen wird.
Datenbanken und Tabellen anlegen
|
Als Datenbank wird im MySQL-Sprachgebrauch ein Container bezeichnet, der beliebig viele Tabellen in sich aufnehmen kann. So hat z.B. die mitgelieferte MySQL-Datenbank u.a. die Tabellen user, host und dbP. Nur auf die Tabellen wird per SQL-Kommandos zugegriffen. Im Filesystem ist die Datenbank lediglich eine Schublade, in der die Tabellen als einzelne Dateien abgelegt werden. Jede Tabelle besteht aus mehreren Teildateien, die die Daten (*.myd), die Indexwerte (*.myi) und die Tabellenbeschreibung (*.frm) enthalten.
Eine neue Datenbank wird mit dem SQL-Kommando CREATE DATABASE erzeugt. In der Amiga-Version ist das allerdings nicht möglich! Stattdessen ist ein makedir MYSQL:data/name im Datenverzeichnis von mySQL auszuführen. Die einzelnen Tabellen werden mit CREATE TABLE <name> <eigenschaften> angelegt. Der Tabellenaufbau lässt sich mit ALTER TABLE <name> <eigenschaften> verändern und mit DROP TABLE <name> komplett löschen (Tabellenbeschreibung und vorhandene Daten). Neue Einträge in den Tabellen werden mit INSERT INTO <tabelle> VALUES <werte> erfasst oder mit UPDATE <tabelle> SET <wert> WHERE <bedingung> ein bereits vorhandener Eintrag aktualisiert.
Mit DELETE FROM <tabelle> WHERE <bedingung> werden alle auf die Bedingung zutreffenden Einträge aus der Tabelle gelöscht.
|
Das mächtigste Kommando ist SELECT <ausgabefelder> FROM <tabelle> , mit dem sich Einträge in der Tabelle suchen lassen. Dabei können umfangreiche Such- (WHERE), Gruppierungs- (GROUP BY) und Sortierungsoptionen (SORT BY) zum Einsatz kommen.
Mit den beschriebene Befehlen können Sie in Kombination mit dem MySQL-Client Datenbanken und Tabellen ändern. Groß- und Kleinschreibung ist MySQL egal, sowohl bei den Kommandos als auch bei den Tabellennamen oder Datenbankfeldern. Zum Vergleichen von Zahlen und Texten existieren zwei unterschiedliche Operatoren:
Mit einfachem Gleichheitszeichen (=) werden zwei Zahlen verglichen, bei Texten ist LIKE zu verwenden. Der Vergleich muss 100-prozentig übereinstimmen. Als Platzhalter kann jedoch das Prozentzeichen (%) für beliebig viele Zeichen verwendet werden (entspricht #? beim Amiga).
Der MySQl-Monitor verlangt als Abschluss jeder Eingabe ein Semikolon dieses ist jedoch nicht Bestandteil eines SQL-Kommandos. Bei Abfragen mit anderen Tools (z.B. mit PHP) ist dieses Semikolon nicht notwendig.
MySQL-Administration
Im lokalen Einsatz lassen sich die Datenbanken einfach von der Shell aus anlegen
und bearbeiten. Auch Select-Anfragen können hier ausprobiert werden. Dazu dient
das Kommando mysql.
Der Aufruf erfolgt so
mysql [ -u <user> -p <passwort> -h <host> ]
Ist ein Passwort erforderlich kann es direkt (ohne Leerstelle!) mit angegeben werden. Host und User sind i.d.R. nicht erforderlich. Es erscheint der MySQL-Prompt. Sie können ihn mit status überprüfen, ob eine korrekte Verbindung zum Server besteht. Angezeigt werden im Erfolgsfall ein paar statistische Daten über den Zustand des MySQL-Servers. Weitere nützliche Kommandos sind z.B. SHOW DATABASES; oder SHOW TABLES um vorhandene Datenbanken oder Tabellen der aktuellen Datenbank anzuzeigen.
|
Befindet sich die Datenbank bei einem Provider auf dessen Festplatte, werden Sie keinen direkten Zugriff (z.B. per Telnet) haben. Eine komfortable Lösung stellt »phpMyAdmin« dar. In der Datei config.inc.php sind die Einträge User/Passwort/ Server/Datenbank anzupassen. Danach kann die komplette Schublade zum Internet-Provider kopiert werden. Die Schublade dort sollte unbedingt mit einem Zugangsschutz versehen werden. Nutzen Sie beim Apache die Sicherung per .htaccess. Sie stellen so sicher, dass nicht jeder Zugriff auf Ihre Datenbank hat. Für Informationen wenden Sie sich an Ihren Internet-Provider, der einen Verzeichnisschutz mittels htpasswd anlegen kann. Die lokale Datenbank kann auch nicht einfach zum ISP kopiert werden. Zum einen werden Sie keine entsprechenden Rechte erhalten, zum anderen kann beim ISP auch eine ganz andere Version von mySQL im Einsatz sein. Der letzte Punkt ist unbedingt abzuklären, damit keine »zukünftigen« Kommandos zum Einsatz kommen.
Die komplette Datenbank incl. Beschreibung kann über mysqldump ausgelesen und in eine Datei geschrieben werden. Importiert wird das Ganze über das MySQL-Kommando. Diese Vorgehensweise ist auch bei einer Versionsänderung von MySQL notwendig/empfohlen. In diesem Zusammenhang können Sie einfach auf phpMyAdmin zurückgegreifen. Dort kann die komplette Dump-Datei übertragen und durch MySQL interpretiert werden (s. »Update«).
Im nächsten Teil des Kurses werden wir die Theorie in die Praxis umsetzen und ein Web-fähiges Adressbuch programmieren, das Sie auch im Internet verwenden können.
|
lb
Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster
AMIGA schicken.
Zuletzt aktualisiert am 23. Oktober 2001, Michael Christoph.