Maak een tabel die zijn gegevens beschermt · oefening
Geef de gebruikelijke uitleentermijn op
De meeste voorwerpen in de uitleencatalogus kunnen zeven dagen worden geleend. Een bijzonder voorwerp kan een andere termijn hebben, maar als elk gewoon record opnieuw 7 moet bevatten, kan er onnodig een fout ontstaan. De tabel kan de gebruikelijke keuze op één plek onthouden, zodat elk programma dat de tabel gebruikt hetzelfde antwoord krijgt.
We willen dat deze drie gevallen zich verschillend gedragen:
Opgegeven waarde voor loan_days | Wat SQLite moet doen |
|---|---|
| Er wordt geen waarde opgegeven | 7 opslaan |
14 wordt opgegeven | 14 opslaan |
NULL wordt opgegeven | Het record weigeren |
De tabel heeft voor het eerste geval een gebruikelijke waarde nodig en moet tegelijk de bescherming tegen ontbrekende gegevens in het derde geval behouden.
Voeg de gebruikelijke waarde toe
Open schema.sql en zoek de huidige definitie:
loan_days INTEGER NOT NULL
Voeg de gebruikelijke waarde toe zonder de bestaande regel te verwijderen:
loan_days INTEGER NOT NULL DEFAULT 7
Druk op Run en zoek die regel in de volledige tabeldefinitie die SQLite afdrukt.
DEFAULT vertelt SQLite wat het moet opslaan wanneer een nieuw record die kolom weglaat. Het vervangt geen waarde die wel is opgegeven. Een voorwerp dat 14 uitleendagen krijgt, houdt 14.
Een kolom weglaten en NULL opgeven zijn verschillende verzoeken. loan_days weglaten betekent in feite: “gebruik de gebruikelijke waarde van de tabel.” Expliciet NULL opgeven zegt dat de waarde ontbreekt. De bestaande regel NOT NULL weigert die ontbrekende waarde, dus laat zowel NOT NULL als DEFAULT 7 op de regel staan.
Dit onderscheid is van belang wanneer een programma een record maakt. Het kan de keuze aan de tabel overlaten of bewust een andere termijn opgeven. Het kan NULL niet als een andere schrijfwijze voor de standaardwaarde gebruiken.
Zodra de nieuwe definitie laadt, kies je Submit en vergelijk je de resultaten met de drie gevallen bovenaan de les. Een weggelaten uitleentermijn moet 7 worden, een opgegeven waarde zoals 14 moet 14 blijven en een expliciete NULL moet nog steeds worden geweigerd.
Deze standaardwaarde bespaart herhaald werk, maar bepaalt niet welke opgegeven getallen zinvol zijn. De tabel zou nog steeds 0 of -2 als uitleentermijn accepteren. In de volgende les voeg je daar een aparte regel voor toe.
Opdracht
Open schema.sql en geef loan_days een standaardwaarde van 7. Behoud de regel NOT NULL.
Druk op Run en controleer of de tabeldefinitie beide regels bevat. Stuur daarna je schema in. Bij het weglaten van loan_days moet 7 worden opgeslagen, een opgegeven positieve waarde moet behouden blijven en een expliciet opgegeven NULL moet nog steeds worden geweigerd.