Die Wunschlisten-Tabelle
Willkommen beim Abschlussprojekt! Pixel Shop möchte eine neue Funktion: eine Wunschliste. Ein Kunde, dem ein Spiel gefällt, das er aber gerade nicht kaufen will, speichert es auf seiner Wunschliste, und der Shop kann ihm später Bescheid geben, wenn das Spiel erscheint oder im Angebot ist. In dieser Lektion baust du den Datenbankteil der Funktion selbst: Du entwirfst und erstellst die Tabelle, füllst sie und beantwortest dann die Fragen des Shops dazu und zu seinen Verkäufen. Du brauchst dafür ein bisschen von allem aus dem Kurs.
Das ganze Projekt ist eine Datei, die wächst. Jede Übung beginnt mit der Lösung der vorigen, und du ergänzt sie. Denk daran, dass jedes Ausführen mit einer frischen Kopie der Datenbank des Shops beginnt: Die Tabelle, die du erstellst, ist beim nächsten Ausführen nicht mehr da, außer deine Datei erstellt sie erneut. Deshalb bleibt das CREATE TABLE (und später der INSERT) oben in der Datei und läuft jedes Mal, wenn du auf Ausführen klickst.
Jede gute Tabelle beginnt mit einer Frage: Was sagt eine Zeile aus? Hier ist es „dieser Kunde wünscht sich dieses Spiel, seit diesem Tag“. Die Tabelle braucht also drei Spalten: die ID des Kunden, die ID des Spiels und das Datum, an dem das Spiel hinzugefügt wurde. Ein Kunde kann sich viele Spiele wünschen, und viele Kunden können sich dasselbe Spiel wünschen. Es ist eine Viele-zu-viele-Beziehung, genau wie positionen zwischen Bestellungen und Spielen oder bewertungen zwischen Spielen und Kunden.
Eine solche Tabelle braucht keine eigene id. Ihr Primärschlüssel ist das Paar der beiden IDs, ein zusammengesetzter Primärschlüssel. Er identifiziert nicht nur jede Zeile, sondern stellt auch sicher, dass dasselbe Spiel nicht zweimal auf der Wunschliste desselben Kunden stehen kann.
Der Rest ist wie bei den eigenen Tabellen des Shops: IDs sind INTEGER, das Datum ist TEXT in der Form 'YYYY-MM-DD', jede Spalte muss einen Wert haben (NOT NULL), die IDs zeigen auf vorhandene Zeilen (REFERENCES), und die Tabelle ist STRICT, damit SQLite die Typen prüft. Zur Erinnerung eine Tabelle, die genauso gebaut ist: Schlagwörter von Spielen, wobei ein Spiel viele Schlagwörter haben kann und ein Schlagwort viele Spiele:
CREATE TABLE spiel_schlagwoerter (
spiel_id INTEGER NOT NULL REFERENCES spiele (id),
schlagwort TEXT NOT NULL,
PRIMARY KEY (spiel_id, schlagwort)
) STRICT;Der zusammengesetzte Primärschlüssel kommt nach der letzten Spalte, in einer eigenen Zeile, mit seinen Spalten in Klammern. Typischer Fehler: PRIMARY KEY nach jeder der beiden Spalten zu schreiben. Das ergibt zwei Primärschlüssel, und SQLite stoppt mit table "wunschliste" has more than one primary key.
Sobald die Tabelle existiert, zeigt SELECT * FROM wunschliste; sie an. Sie hat noch keine Zeilen, das Ergebnis ist also nur die Zeile mit den Namen der Spalten. So prüfst du schnell, ob du die Spalten richtig hast.
So schreibst du es:
Anweisungen
- 1
Erstelle unter dem Kommentar
-- 1. Die Tabelle für die Wunschlistedie Tabellewunschlistemit drei Spalten, in dieser Reihenfolge:kunde_idundspiel_idvom TypINTEGERundhinzugefuegtvom TypTEXT. Füge darunter die AbfrageSELECT * FROM wunschliste;hinzu und klicke auf Ausführen. Das Ergebnis hat keine Zeilen, nur die Spalten:kunde_id spiel_id hinzugefuegt - 2
Jede Spalte muss immer einen Wert haben, und SQLite soll die Typen prüfen: Gib allen drei Spalten
NOT NULLund mach die TabelleSTRICT. - 3
Und die Schlüssel: Der Primärschlüssel ist das Paar aus
kunde_idundspiel_id;kunde_idverweist aufkunden (id)undspiel_idaufspiele (id).