# Die Datenbank
Das Rückgrat ist bei manchen Politikern unterentwickelt. Vielleicht weil es so selten benutzt wird.
– Margaret »Maggie« Thatcher, erste Premierministerin Großbritanniens (1979–1990)
Nun sollen erst die Datenbankstruktur und die Tabellen geplant werden.
# Datenbankstruktur planen und festlegen
Die Planung der Datenbankstruktur ist recht fix abgeschlossen. Für jede einzelne Rubrik wird einfach eine Tabelle angelegt. Da die Inhalte nur sehr wenig, bis gar keine Relationen umfassen, werden also lediglich vier verschiedene Tabellen benötigt:
news
Tabelle, die die einzelnen News enthältdownloads
Tabelle, die die Downloads bzw. die Pfad- und Dateinamen zu den Dateien enthältlinks
Tabelle, die die einzelnen Einträge für die Links enthältarticles
Tabelle, die die Artikel enthält
Nun soll die Datenbank natürlich noch angelegt werden.
Falls Sie im weiteren Verlauf nicht die Muße haben sollten, die Datenbanken und Tabellen von Hand zu definieren, finden Sie auf der beiliegenden CD‑ROM im Verzeichnis x:\misc\project_db.sql eine SQL-Datei, die die Datenbank und Tabellen anlegt und mit ein paar Inhalten füllt.
Die Datenbank soll den Namen project
tragen und wird mit der Anweisung
CREATE DATABASE project
erzeugt.
# Tabellenstruktur planen und erzeugen
# Planung
Als Erstes soll nun die Tabelle news
geplant und angelegt werden. Zu einer richtigen Nachricht gehören ein Titel, der Text der Nachricht und ein Datum, an dem die Nachricht eingetragen wurde. Zusätzlich sollte natürlich ein Primärschlüssel für die Tabelle definiert werden, damit die einzelnen Nachrichten später auch auseinander gehalten und eindeutig identifiziert werden können. Es kann immer einmal vorkommen, dass eine Nachricht erst später oder nach einer gewissen Zeit gar nicht mehr angezeigt werden soll. Darum sollte eine zusätzliche Spalte definiert werden, mit der genau das festgelegt werden kann. Daraus ergibt sich folgende Struktur:
Feld | Typ | Optionen |
---|---|---|
id | INT | AUTO_INCREMENT PRIMARY KEY |
title | VARCHAR(64) | |
message | TEXT | |
datetime | TIMESTAMP | |
visible | TINYINT(4) |
Tabelle 2.1: Die Tabelle news
Das Feld id
bildet den Primärschlüssel der Tabelle. Das Feld title
enthält den Titel der Nachricht, wobei eine Zeichenanzahl vom 64 vollkommen ausreichend sein sollte. Die eigentliche Nachricht wird im Feld message
gespeichert. Damit die Nachricht auch einmal etwas länger sein darf, wurde dem Feld der Typ TEXT
zugewiesen. Das Datum und die Uhrzeit, als die Nachricht eingetragen wurde, wird im Feld TIMESTAMP
gespeichert. Schlussendlich wird mit dem Feld visible
festgelegt, ob die Nachricht zu sehen sein darf oder nicht. Um dabei für spätere Änderungen flexibel zu bleiben, bedeutet der Wert –1, dass die Nachricht nicht zu sehen ist. Jeder andere Wert, der größer als –1 ist, bedeutet, dass die Nachricht sichtbar ist.
Um die Datenbank nicht allzu stark zu belasten, habe ich mich entschlossen, in der Tabelle downloads
den Pfad- und Dateinamen und nicht die Datei selbst zu speichern. Außerdem sollte ein Titel des Downloads und ein Kommentar dazu gespeichert werden, damit der Benutzer vor dem Download ein paar Informationen erhält, was er nun herunterladen will. Natürlich darf der Primärschlüssel nicht fehlen. Außerdem soll wieder festgelegt werden können, ob der Download sichtbar ist oder nicht.
Feld | Typ | Optionen |
---|---|---|
id | INT | AUTO_INCREMENT PRIMARY KEY |
title | VARCHAR(64) | |
comment | TEXT | |
path | VARCHAR(128) | |
filename | VARCHAR(64) | |
datetime | TIMESTAMP | |
visible | TINYINT(4) |
Tabelle 2.2: Die Tabelle downloads
Das Feld id
bildet wieder den Primärschlüssel. In title
kann ein Titel mit maximal 64 Zeichen hinterlegt werden und in comment
eine notfalls auch längere Beschreibung des Downloads. Da die Dateien alle in einem bestimmten Verzeichnis abgelegt werden, werden der Pfadname und der Dateiname einzeln gespeichert. Dies führt zwar zu Redundanz, da der Pfad aber immer der gleiche ist, führt es nicht zwangsläufig zu Inkonsistenz. Für spätere Änderungen der Struktur bietet sich der Aufbau jedoch an. Der Pfadname (Feld path
) darf maximal 128 und der Dateiname (Feld filename
) maximal 64 Zeichen lang sein. Außerdem wird wieder der Zeitpunkt, an dem der Download hinzugefügt worden ist, in datetime
gespeichert, und angegeben, ob der Download sichtbar sein soll oder nicht. Jeder Wert, der größer als –1 ist, bedeutet, dass der Download sichtbar ist.
Die Tabelle links
benötigt als Erstes natürlich einen Primärschlüssel. Ansonsten sollen zu den einzelnen Links ein Titel, eine Beschreibung bzw. ein Kommentar und natürlich die URI gespeichert werden. Hier soll ebenso wieder festgelegt werden, ob der Eintrag sichtbar ist oder nicht.
Feld | Typ | Optionen |
---|---|---|
id | INT | AUTO_INCREMENT PRIMARY KEY |
title | VARCHAR(64) | |
uri | VARCHAR(255) | |
comment | TEXT | |
visible | TINYINT(4) |
Tabelle 2.3: Die Tabelle links
Auch bei dieser Tabelle wird im Feld id
der Primärschlüssel gespeichert. Im Feld title
wird der Titel des Links gespeichert, der maximal 64 Zeichen lang sein darf. In uri
wird die URI gespeichert, die maximal 255 Zeichen lang sein darf. Der hohe Wert wurde gewählt, weil eine URI generell nur maximal 255 Zeichen umfassen darf. Die Beschreibung bzw. der Kommentar zum Link wird in comment
gespeichert, und visible
definiert wieder, ob der Link sichtbar ist oder nicht.
Wie immer wird ein Primärschlüssel benötigt. Zu jedem Artikel soll außerdem ein Titel und natürlich der Artikel selbst abgelegt werden. Auch der Zeitpunkt der Hinzufügung des Artikels wird gespeichert. Da Artikel jedoch sehr lang werden können, wird zusätzlich ein Feld benötigt, das zu einem weiterführenden Artikel verzweigt. Und – wie soll es anders sein – es soll festgelegt werden können, ob der Artikel sichtbar ist oder nicht.
Feld | Typ | Optionen |
---|---|---|
id | INT | AUTO_INCREMENT PRIMARY KEY |
title | VARCHAR(64) | |
content | LONGTEXT | |
datetime | TIMESTAMP | |
nextPageId | INT | |
visible | TINYINT(4) |
Tabelle 2.4: Die Tabelle articles
Das Feld id
nimmt wieder den Primärschlüssel auf. In title
darf ein 64 Zeichen langer Titel gespeichert werden. Der eigentliche Artikel wird in content
abgelegt. Damit dabei HTML-Formatierungen mit Elementen verwendet werden können und der Artikel auch mal etwas länger sein darf, wurde als Typ LONGTEXT
gewählt. In visible
darf wieder eine Zahl gespeichert werden, die angibt, ob der Artikel sichtbar ist oder nicht.
# Erzeugen
Die Tabellen werden mit den folgenden SQL-Anweisungen angelegt. Die SQL-Anweisung für die Tabelle news
sieht so aus:
CREATE TABLE news (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(64) NOT NULL DEFAULT '',
message TEXT NOT NULL DEFAULT '',
datetime TIMESTAMP,
visible TINYINT(4) NOT NULL DEFAULT '0'
)
Die SQL-Anweisung für die Tabelle downloads
:
CREATE TABLE downloads (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(64) NOT NULL DEFAULT '',
comment TEXT NOT NULL DEFAULT '',
path VARCHAR(128) NOT NULL DEFAULT '',
filename VARCHAR(64) NOT NULL DEFAULT '',
datetime TIMESTAMP,
visible TINYINT(4) NOT NULL DEFAULT '0'
)
Die SQL-Anweisung für die Tabelle links
:
CREATE TABLE links (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(64) NOT NULL DEFAULT '',
uri VARCHAR(255) NOT NULL DEFAULT 'http://',
comment TEXT NOT NULL DEFAULT '',
visible TINYINT(4) NOT NULL DEFAULT '0'
)
Die SQL-Anweisung für die Tabelle articles
:
CREATE TABLE articles (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(64) NOT NULL DEFAULT '',
content LONGTEXT NOT NULL DEFAULT '',
datetime TIMESTAMP,
visible TINYINT(4) NOT NULL DEFAULT '0'
)
# Erste Einträge anlegen
Damit später die Funktion des Projekts getestet werden kann, sollten Sie jetzt schon ein paar Einträge anlegen. Wie bereits gesagt: Falls Sie dies nicht alles von Hand vornehmen möchten, können Sie die Datei x:\misc\project_db.sql verwenden.
# Zusammenfassung
- Es wird eine Datenbank namens
project
für die Daten verwendet. - Es werden vier Tabelle verwendet:
news
,downloads
,links
undarticles
.