Advanced SQL - Einstiegstutorial 1 - Die Standardtabellen
1. Die Abschnitte
- Vorwort
- Die Modellierung
- Die Standardtabellen
- Die Relationen von Mitgliedern
- Die Relationen von Angeboten
- Feinheiten
2. Hödelpups?
Na ja, so wirklich anspruchsvoll ist das hier nicht. Bis auf eine Ausnahme. Wir legen diesmal großen Wert auf einen geringen Speicherverbrauch unserer Tabellen. Und zwar beim Primärschlüssel. Denn da kann man viel einsparen, wenn man sich vorher ein paar Gedanken über die mögliche Anzahl von Einträgen macht.
unsigned
Wie ihr hoffentlich wisst, haben Spalten vom Typ "Zahl" automatisch einen Wertebereich von -X bis +X. Das wollen wir diesmal komplett verbieten, um den Speicherbedarf optimal auszunutzen. Also werden alle Primärschlüssel damit ausgezeichnet. Außerdem gibt es da noch ein paar Details, auf die man achten muss. Aber dazu erfahrt ihr mehr unter dem Punkt Feinheiten.
3. Die Tabellen
... liste ich zuerst mal nur komplett auf. Die Details kommen im Anschluss.
DROP TABLE IF EXISTS gilde;
CREATE TABLE gilde
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(128),
einnahmen MEDIUMINT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
DROP TABLE IF EXISTS wesen;
CREATE TABLE wesen
(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
wesen VARCHAR(128),
PRIMARY KEY (id)
) ENGINE=INNODB;
DROP TABLE IF EXISTS stufe;
CREATE TABLE stufe
(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
stufe VARCHAR(128),
PRIMARY KEY (id)
) ENGINE=INNODB;
DROP TABLE IF EXISTS status;
CREATE TABLE status
(
id ENUM('1','2') NOT NULL DEFAULT 2,
status VARCHAR(128),
UNIQUE KEY(id)
) ENGINE=INNODB;
Erläuterung
SMALLINT
und TINYINT
Wie ich schon sagte, achten wir diesmal auf den Speicherbedarf. Die Tabelle gilde
kann also maximal 65.535 Einträge
enthalten. Gut bei World of Warcraft gibt es sicher ein paar mehr, aber das soll uns nicht jucken. Bei den beiden Tabellen
wesen
und stufe
sind es nur maximal 255 Einträge. Aber jeder, der schon mal solche Rollenspiele gezockt
hat, weiß, dass man da nicht mehr benötigt.
ENUM
Diesen Spaltentyp habe ich euch bisher gänzlich unterschlagen. Dabei können normalerweise Einträge nur die Werte erhalten, die man
innerhalb von ENUM
angegeben hat, also hier 1
und 2
. Ein NULL
wäre auch noch
möglich, wenn wir das hier mit NOT NULL
nicht abgeklemmt hätten.
Ohne Angabe für DEFAULT
wird bei einem nicht vorhandenen Eintrag für die Spalte ein Leerwert abgespeichert. Wenn man nicht
im Strict-Modus ist, aber dazu äußere ich mich bei den kommenden Praxistutorials.
Eine weitere Feinheit gibt es noch. Bei den Angaben zu ENUM
muss man die Werte immer in Anführungszeichen oder Hochkommata
setzen. Bei der Angabe eines Default-Wertes kann man bei Zahlen dagegen darauf verzichten. Um aber zu verhindern, dass man hier mehr
als zwei Einträge vornehmen kann, wird die Spalte id
noch mit einem UNIQUE KEY
versehen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt