0%

Tabellen verknüpfen, statt Daten zu wiederholen · Übung

Fremdschlüssel zur Tabelle loans hinzufügen

Die beiden IDs in einem Ausleihvorgang haben klare Ziele. item_id muss zu items.id passen und member_id zu members.id. Die Tabelle kann diese Zusagen festhalten, statt sie nur in unseren Köpfen zu belassen.

Dein Projekt beginnt mit zwei sichtbaren Dateien. schema.sql gehört dir zum Bearbeiten und enthält die Tabellendefinitionen. Wenn du auf Run klickst, baut run_relationships.py aus deinem Schema eine neue Übungsdatenbank und gibt aus, was SQLite beobachtet. Lass dieses Ausführungsprogramm unverändert. Später erscheinen connections.py und report.sql, wenn du sie für Python- und SQL-Arbeit brauchst.

Der Editor hebt .sql-Dateien als SQL hervor. Wenn du die Ausgangsdateien wiederherstellen möchtest, verwende Reset project und öffne diese Seite erneut. Denke daran, dass Reset project deine hier gespeicherte Arbeit entfernt.

Beide Verweise deklarieren

Öffne schema.sql. Die fünf Spalten von loans sind bereits vorhanden. Füge diese beiden Zeilen hinter returned_on TEXT hinzu, mit einem Komma vor der ersten neuen Zeile:

FOREIGN KEY (item_id) REFERENCES items (id),
FOREIGN KEY (member_id) REFERENCES members (id)

Ein FOREIGN KEY ist eine Tabellenregel über eine Beziehung. Die erste Deklaration besagt, dass die item_id jedes Ausleihvorgangs auf eine vorhandene items.id verweist. Die zweite gibt member_id dieselbe Beziehung zu members.id.

Klicke auf Run. Die ersten beiden Zeilen unter Declared references sollten auf die vorgesehenen übergeordneten Spalten verweisen. Die Ausgabe meldet außerdem Folgendes:

Default foreign_keys: 0
Missing member accepted: yes

Dieses Ergebnis ist kein Widerspruch. Die Deklarationen sind vorhanden, aber SQLite beginnt auf einer gewöhnlichen neuen Verbindung mit ausgeschalteter Durchsetzung der Beziehungen. Deklaration und Durchsetzung sind separate Entscheidungen. Dein Schema beschreibt jetzt die Beziehungen. Als Nächstes lässt du jede von deiner Funktion geöffnete Verbindung sie durchsetzen.

Reiche ein, wenn returned_on weiterhin einen fehlenden Wert akzeptiert, gültige übergeordnete IDs funktionieren und beide Fälle mit fehlenden übergeordneten Datensätzen abgelehnt werden, nachdem die Prüfung die Durchsetzung aktiviert hat.

Aufgabe

Öffne schema.sql und deklariere beide Beziehungen in loans: item_id muss auf items(id) und member_id auf members(id) verweisen. Behalte die fünf Spalten unverändert bei und erlaube für returned_on weiterhin einen fehlenden Wert.

Klicke auf Run, um die Deklarationen zu untersuchen. Reiche dann das Schema zur Prüfung mit neuen gültigen Zeilen, Zeilen mit fehlendem Gegenstand und Zeilen mit fehlendem Mitglied ein.