Advanced SQL - Einstiegstutorial 2 - Angebotstabellen füllen
1. Die Abschnitte
- Vorwort
- Ein paar Hinweise zum Frontend
- Mitgliedstabellen füllen
- Angebotstabellen füllen
- Referentielle Integrität
- Fazit
2. Noch ein Designfehler?
Auf reiner SQL-Ebene betrachtet könnte man das vermuten. Denn es ist ohne weiteres möglich, dass man bei den beiden Tabellen
markt
und angebot
in den entsprechenden Spalten besitzer
/mitglied
und
von
/an
dieselbe ID eines Mitglieds eintragen kann. Außerdem ist es auch problemlos möglich, Gildenmeister zu
tauschen, was eigentlich nicht der Sinn der Sache ist. Hinzu kommt noch, dass man auch Spieler einsetzen kann, die nicht zur jeweiligen
Gilde gehören.
Tja, bei unserer Modellierung kann man so was nur auf PHP-Ebene abfangen. Aber keine Angst, das ist der Normalfall. Denn mit reinem SQL hat man ja eh keine Chance. Außerdem ist die entsprechende Logik unserer späteren Anwendung hier noch nicht von Bedeutung.
3. Die Tabelle markt
Damit ihr keine falschen Daten eingebt, habe ich euch schon ein paar Datensätze vorbereitet. OK, mehr Möglichkeiten gibt es im Moment eh nicht, wenn ihr meine SQL-Statements aus dem vorherigen Abschnitt übernommen habt. Ansonsten stellt euch selber was zusammen.
INSERT INTO markt VALUES (1, 2, 1, 5000);
INSERT INTO markt VALUES (2, 4, 3, 10000);
INSERT INTO markt VALUES (3, 6, 5, 2000);
INSERT INTO markt VALUES (4, 8, 7, 4000);
Erläuterung
Gut, das sieht im Moment ein wenig wie Chinesisch aus, ist aber einfach zu erklären. Da bietet zum Beispiel der Gildenmeister mit der ID
2
sein Mitglied mit der ID 1
für 5000
Öcken/Gold an. Beim Rest ist das Prinzip dasselbe.
4. Die Tabelle angebot
Auch hier gilt dasselbe wie bei der Tabelle markt
. Entweder ihr bastelt selber herum oder übernehmt den folgenden Mini-Dump,
wenn ihr die Daten aus dem vorherigen Abschnitt übernommen habt.
INSERT INTO angebot VALUES (1, 2, 4, 3, 4000);
INSERT INTO angebot VALUES (2, 4, 6, 5, 10000);
INSERT INTO angebot VALUES (3, 6, 8, 7, 5000);
INSERT INTO angebot VALUES (4, 8, 2, 1, 3000);
Erläuterung
Das funktioniert eigentlich genau so wie bei der Tabelle markt
. Nur gibt es hier folgendes Schema. Erst die ID des
Anbieters, dann die ID dessen, der das Angebot erhält und zu guter Letzt kommt das Mitglied des Angebotenen und der angebotene Preis.
5. Die Tabelle tausch
Hier ist die Sache etwas komplizierter. Zuerst muss man nämlich Daten in die Tabelle angebot
eintragen. Und danach kann
man die Tabelle tausch
füllen.
INSERT INTO angebot VALUES (5, 2, 4, NULL, NULL);
INSERT INTO angebot VALUES (6, 6, 8, NULL, NULL);
INSERT INTO tausch VALUES (5, 1, 'offer');
INSERT INTO tausch VALUES (5, 3, 'demand');
INSERT INTO tausch VALUES (6, 5, 'offer');
INSERT INTO tausch VALUES (6, 7, 'demand');
Erläuterung
Zuerst legt man zwei Angebote an, lässt aber die ID des gewünschten Mitglieds und den Preis weg. Also die Spalten mit dem NULL
.
Und danach erst kommen die Tauschangebote. In diesem Fall bietet zum Beispiel der Gildenmeister mit der ID 2
dem Gildenmeister
mit der ID 4
sein Mitglied mit der ID 1
an und möchte dafür das Mitglied mit der ID 4
. Und das ist
dann das Angebot mit der ID 5
.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt