Verbind tabellen in plaats van gegevens te herhalen · oefening
Voeg verwijzende sleutels toe aan de tabel loans
De twee ID’s in een uitlening hebben duidelijke bestemmingen. item_id moet overeenkomen met items.id en member_id met members.id. De tabel kan die beloften vastleggen in plaats van ze alleen in ons hoofd te laten bestaan.
Je project begint met twee zichtbare bestanden. Je bewerkt schema.sql; dat bevat de tabeldefinities. Wanneer je op Run drukt, bouwt run_relationships.py een nieuwe oefendatabase op basis van je schema en drukt het af wat SQLite waarneemt. Laat dat uitvoerbestand ongewijzigd. Later verschijnen connections.py en report.sql wanneer je ze nodig hebt voor Python- en SQL-werk.
De editor kleurt .sql-bestanden als SQL. Als je de beginbestanden wilt herstellen, gebruik je Reset project en open je deze pagina daarna opnieuw. Houd er rekening mee dat Reset project je opgeslagen werk hier verwijdert.
Leg beide verwijzingen vast
Open schema.sql. De vijf kolommen van loans zijn al aanwezig. Voeg deze twee regels toe na returned_on TEXT, met een komma vóór de eerste nieuwe regel:
FOREIGN KEY (item_id) REFERENCES items (id),
FOREIGN KEY (member_id) REFERENCES members (id)
Een FOREIGN KEY is een tabelregel over een relatie, oftewel een verwijzende sleutel. De eerste definitie zegt dat het item_id van elke uitlening naar een bestaande items.id verwijst. De tweede geeft member_id dezelfde relatie met members.id.
Druk op Run. De eerste twee regels onder Declared references horen naar de bedoelde bovenliggende kolommen te wijzen. De uitvoer meldt ook dit:
Default foreign_keys: 0
Missing member accepted: yes
Dat resultaat is geen tegenspraak. De definities zijn aanwezig, maar op een normale nieuwe verbinding begint SQLite met de controle op relaties uitgeschakeld. Vastleggen en afdwingen zijn aparte beslissingen. Je schema beschrijft de relaties nu. Hierna zorg je dat elke verbinding die je functie opent ze afdwingt.
Stuur je werk in zodra returned_on nog steeds een ontbrekende waarde accepteert, geldige bovenliggende ID’s werken en beide gevallen met een ontbrekend bovenliggend record worden geweigerd nadat de controle is ingeschakeld door de beoordelaar.
Opdracht
Open schema.sql en leg beide relaties in loans vast: item_id moet verwijzen naar items(id) en member_id naar members(id). Laat de vijf kolommen ongewijzigd en blijf een ontbrekende waarde in returned_on toestaan.
Druk op Run om de definities te bekijken. Stuur het schema daarna in om het met nieuwe geldige rijen en rijen met een ontbrekend voorwerp of lid te laten controleren.