# Der Datenspeicher für Ihre Internetseiten
Die Untertreibung des Jahres: »Beim Anlegen einer Datenbank fallen nur wenige einfache Schritte an.«
– Einführung in Microsoft Office XP
Die Einrichtung einer Datenbank ist mit Sicherheit nicht nach ein paar Schritten erledigt, außer natürlich, alle wichtigen Überlegungen wurden vorher angestellt und das Layout der Datenbank wurde geplant. Dann kann in einem abschließenden Schritt die Datenbank eingerichtet werden. Bis diese Überlegungen jedoch vollständig sind, ist ein wenig Know-how erforderlich. Denn ohne zu wissen, wie Datenbanken funktionieren und welche Systeme es gibt, wird aus dem Plan, eine Datenbank zu erstellen oder gar zu verwenden, schnell ein mühseliges und aufreibendes Unterfangen.
# Mein SQL gib mir heute ...
MySQL ist seit einiger Zeit in aller Munde. Es wird häufig mit Linux oder auch Webservern in Verbindung gebracht. Man könnte behaupten, dass MySQL das Linux unter den Datenbanksystemen ist. Als Open Source ist es nicht nur kostenlos, sondern auch der Quelltext ist im Internet frei erhältlich. Dies führt ähnlich wie bei Linux dazu, dass sich Programmierer auf der ganzen Welt an der Entwicklung von MySQL beteiligen und sie stetig vorantreiben.
Viele Linux-Distributoren, wie z. B. SUSE oder RedHat, legen MySQL ihren Distributionen sogar bei, und auch Provider für Webspace setzen als Datenbanksystem in der Regel MySQL ein.
Der Name MySQL ist auf die Datenbank-Abfragespache SQL zurückzuführen. Als Anfang der 70er Jahre die ersten Datenbanksysteme auf den Markt kamen, wurde kurze Zeit später eine einheitliche Sprache entwickelt, mit der es möglich sein sollte, Abfragen an jedes beliebige Datenbanksystem zu stellen, ohne jeweils eine neue Sprache lernen und einsetzen zu müssen. Diese Sprache ist SQL, was für »Structured Query Language« steht und übersetzt »strukturierte Abfragesprache« bedeutet. Wie der Name schon vermuten lässt, unterstützt auch MySQL die Abfragesprache SQL.
# Datenbanktypen
Seit das erste Datenbanksystem der Öffentlichkeit vorgestellt wurde, sind mittlerweile ca. 30 Jahre vergangen. In dieser Zeit hat sich natürlich viel getan, und so ist es nur normal, dass es mittlerweile Hunderte verschiedener Datenbanksysteme gibt. In all der ganzen Zeit haben sich jedoch nur zwei Datenbanktypen durchgesetzt: relationale und objektorientierte. MySQL gehört zu den relationalen Datenbanksystemen.
# Relationale Datenbanksysteme
Die Urform der Datenbanken sind relationale Datenbanken. In solchen Systemen werden Daten in Tabellen gespeichert. Wenn Sie schon einmal mit einer Tabellenkalkulation wie z. B. Excel eine Übersicht erstellt haben, in die Sie alle Bücher eingetragen haben, die in Ihrem Regal stehen, ist dies bereits eine Form von relationaler Datenbank.
Ich bleibe zunächst bei dem Beispiel der Bücher-Tabelle. Sicherlich hätten Sie diese Tabelle auch strukturiert, so dass Sie zu jedem Buch z. B. den Namen des Autors, den Titel des Buches, die Seitenzahl, die ISBN und den Namen des Verlages notieren können. In der Regel sind dies die Spalten in einer Tabelle. In die nachfolgenden Zeilen haben Sie dann immer den passenden Wert eingetragen. Die Tabelle 1.1 stellt dieses Beispiel einmal schematisch dar.
Autor | Titel | Seitenzahl | ISBN | Verlag |
---|---|---|---|---|
Mark Lubkowitz | Webseiten | 1128 | 3–89842–313–1 | Galileo Press |
Christian Wenz | JavaScript | 624 | 3–89842–234–8 | Galileo Press |
Tabelle 1.1: Beispiel für eine Datenbanktabelle
Die einzelnen Zeilen der Tabelle 1.1 werden bei Datenbanken auch Datensatz genannt. Ein solcher Datensatz besteht aus mehreren Feldern. In unserem Fall sind dies fünf Felder, nämlich Autor, Titel, Seitenzahl, ISBN und Verlag.
Auf die gleiche Art werden auch Daten in einer relationalen Datenbank gespeichert. Das oberste Element ist die Datenbank, die sich in mehrere Tabellen unterteilt. Eine Tabelle wiederum unterteilt sich in mehrere Datensätze und diese schlussendlich in mehrere Felder.
# Objektorientierte Datenbanksysteme
Die Strukturierung und Ablage einer objektorientierten Datenbank geht einen anderen Weg. Die Daten werden nicht als Datensatz in einer Tabelle gespeichert, sondern als Objekt. Die Entwicklung dieser Systeme erfolgte erst Mitte der 80er Jahre, als auch die objektorientierte Programmierung (OOP) langsam, aber sicher den Markt der Programmiersprachen eroberte.
Der Vorteil dieser Systeme in Zusammenhang mit der OOP ist, dass die Objekte nicht zuerst in einen Datensatz umgewandelt werden müssen, bevor sie in der Datenbank gespeichert werden, und umgekehrt, dass der Datensatz nicht erst in ein Objekt umgewandelt werden muss, wenn er aus einer Datenbank ausgelesen wird.
Das oberste Element ist auch wiederum die Datenbank, gefolgt von der Klasse. Die Klasse enthält dann die Objekte. Somit werden Objekte also direkt in die entsprechende Klasse der Datenbank eingefügt oder entsprechend ausgelesen.
Eigenartigerweise konnten sich objektorientierte Datenbanken nicht annähernd so erfolgreich durchsetzen wie objektorientierte Programmiersprachen, was sicherlich auf die Inkompatibilität zurückzuführen ist. Denn der Zugriff auf eine solche Datenbank mit einer nicht objektorientierten Programmiersprache gestaltet sich äußerst schwierig bzw. ist nahezu unmöglich. Relationale Datenbanken hingegen können mit prinzipiell jeder Programmiersprache angesprochen werden, egal ob sie objektorientiert ist oder nicht.
# Redundanz und Inkonsistenz
Da in den Anfangstagen der Datenbanken Speicher noch nicht in den Größen und zu so günstigen Preisen verfügbar war wie heutzutage, versuchte man stets, an allen Ecken zu sparen. Dies führte bekanntermaßen zu dem Jahr-2000-Fehler, da Jahreszahlen nur zweistellig gespeichert wurden, wodurch ein paar Byte eingespart werden konnten. Wer ahnte damals, dass solch ein System über 20 Jahre lang eingesetzt werden würde?
Sei's drum, auch bei Datenbanken ging man den Weg, Speicher einzusparen, hauptsächlich, indem man versuchte, Redundanz zu vermeiden. Anstatt häufig wiederkehrende Werte abzuspeichern, wurden solche Werte in eine zusätzliche Tabelle verlagert. Eine solche Redundanz ist z. B. auch in Tabelle 1.1 wiederzufinden. Als Verlag wurde zweimal »Galileo Press« gespeichert. Bei lediglich zwei Einträgen mag dies nicht weiter problematisch sein. Die Redundanz ist sehr gering, wenn es aber hundert Datensätze wären, die alle als Verlag »Galileo Press« enthalten, ist die Redundanz schon relativ groß.
Problematisch wird dies auch, wenn Sie nun »Galileo Press« durch »Galileo Computing« ersetzen möchten. Sie müssten nun alle Datensätze überarbeiten, mit der Gefahr, einen Datensatz zu übersehen. Redundanz führt dann also zu Inkonsistenz, da die abgelegten Daten nicht mehr unbedingt plausibel sind.
Würden Sie die Verlage und die Namen nun in eine zusätzliche Tabelle auslagern, würde zum einen die Redundanz verringert werden, und zum anderen würden mögliche Inkonsistenz vermieden. Gehen Sie einmal davon aus, die Tabelle würde den Namen »Verlage« erhalten. Die Tabelle könnte nun die Felder »Name« und »Webseite« enthalten. Zusätzlich wird dieser Tabelle noch ein Feld hinzugefügt: »ID«. Dieses Feld soll einen eindeutigen Wert enthalten, der innerhalb der Tabelle nur einmal vorkommt und so den Datensatz genau identifiziert. Dieses Feld wird auch Primärschlüssel genannt.
Anstatt nun den Namen des Verlages in der Tabelle mit den Büchern zu speichern, wird dort lediglich der entsprechende Primärschlüssel des Verlags gespeichert.
ID | Verlag | Webseite |
---|---|---|
1 | Galileo Press | www.galileo-press.de |
Tabelle 1.2: Datenbanktabelle »Verlage«
In der Tabelle »Bücher« könnte das nun folgendermaßen aussehen.
Autor | Titel | Seitenzahl | ISBN | Verlag |
---|---|---|---|---|
Mark Lubkowitz | Webseiten | 1128 | 3–89842–313–1 | 1 |
Christian Wenz | JavaScript | 624 | 3–89842–234–8 | 1 |
Tabelle 1.3: Datenbanktabelle »Bücher« mit Bezug auf »Verlage«
Um nun den Namen des Verlages zu ändern, müsste lediglich der entsprechende Datensatz in der Tabelle »Verlage« geändert werden, und zwar nur einmal.
Durch diese Technik werden also Redundanz und Inkonsistenz, jedoch auch übergroße Tabellen vermieden. Im nächsten Schritt könnten nun z. B. die Autoren in eine Tabelle mit dem Namen »Autoren« verschoben werden, und in der Tabelle »Bücher« könnte anstatt des Namens einfach wieder ein Primärschlüssel angegeben werden.
# Zusammenfassung
- MySQL ist ein kostenloses Datenbanksystem.
- Die meistverbreiteten Datenbanksysteme sind relationale und objektorientierte.
- MySQL ist ein relationales Datenbanksystem.
- Als Abfragesprache wird bei MySQL die Structured Query Language, kurz SQL, verwendet.
# Fragen und Übungen
- Worin besteht der Unterschied zwischen relationalen und objektorientierten Datenbanksystemen?
- Was ist Redundanz?
- Was ist Inkonsistenz?
- Wie lassen sich Redundanz und Inkonsistenz vermeiden?