Maak een tabel die zijn gegevens beschermt · oefening
Weiger een onmogelijke uitleentermijn
Een standaardwaarde regelt de gebruikelijke uitleentermijn, maar iemand kan nog steeds een getal opgeven dat nergens op slaat. Een voorwerp nul dagen of min drie dagen lenen mag geen record opleveren.
Dit is het gedrag dat we willen:
Opgegeven waarde voor loan_days | Wat SQLite moet doen |
|---|---|
14 | 14 opslaan |
2.5 | 2.5 opslaan |
0 | Het record weigeren |
-3 | Het record weigeren |
| Er wordt geen waarde opgegeven | De standaardwaarde 7 opslaan |
NULL | Het record weigeren |
Stel een positief getal verplicht
Kijk nog eens naar de tabel met gewenst gedrag. Elk geaccepteerd getal is groter dan nul, terwijl elk geweigerd getal nul of kleiner is. In SQL schrijf je die vergelijking als loan_days > 0.
Open schema.sql en breid de laatste kolomdefinitie uit tot:
loan_days INTEGER NOT NULL DEFAULT 7 CHECK (loan_days > 0)
Laat elke andere regel ongewijzigd. Druk op Run en zoek de nieuwe vergelijking in de volledige tabeldefinitie.
De expressie loan_days > 0 vergelijkt de opgegeven waarde met nul. Ze is waar voor een positief getal en onwaar voor nul of een negatief getal. Een CHECK-constraint vertelt SQLite dat het een record moet weigeren wanneer die vergelijking onwaar is.
De andere twee regels op dezelfde regel hebben nog steeds hun eigen taak. DEFAULT 7 geeft de waarde wanneer loan_days wordt weggelaten. NOT NULL weigert een expliciet ontbrekende waarde.
Let erop dat 2.5 bij de geaccepteerde waarden in de tabel staat. Hoewel deze kolom INTEGER-affiniteit heeft, beperkt gewoon SQLite de waarden niet strikt tot gehele getallen. Een positief kommagetal zoals 2.5 kan hier worden opgeslagen en voldoet aan de vergelijking.
Voor numerieke waarden vereist deze regel inderdaad een positief getal. Hij dwingt geen gehele getallen of algemene typecontrole af. Alleen gehele getallen afdwingen zou een extra keuze vereisen die we niet aan deze tabel toevoegen.
Gebruik Submit zodra de definitie laadt. De tabel moet positieve gehele getallen en kommagetallen accepteren, nul en negatieve getallen weigeren, 7 gebruiken als de waarde wordt weggelaten en nog steeds NULL weigeren. Zodra die gevallen zich gedragen zoals getoond, heeft de tabel items alle beschermingen die we hem wilden geven.
Opdracht
Open schema.sql en voeg een CHECK-regel toe die loan_days alleen accepteert als de waarde groter is dan nul. Laat NOT NULL en DEFAULT 7 op dezelfde kolom staan.
Druk op Run, bekijk de volledige tabeldefinitie en stuur je schema in. Positieve getallen, waaronder 2.5, moeten worden geaccepteerd. Nul en negatieve getallen moeten worden geweigerd. Bij het weglaten van loan_days moet nog steeds 7 worden opgeslagen, terwijl een expliciet opgegeven NULL nog steeds moet worden geweigerd.