Eine Tabelle erstellen, die ihre Daten schützt · Übung
Eine unmögliche Leihdauer ablehnen
Ein Standardwert behandelt die übliche Leihdauer, aber jemand kann weiterhin eine sinnlose Zahl angeben. Einen Gegenstand für null Tage oder für minus drei Tage auszuleihen soll keinen Datensatz erzeugen.
Dieses Verhalten möchten wir haben:
Angegebener Wert für loan_days | Was SQLite tun soll |
|---|---|
14 | 14 speichern |
2.5 | 2.5 speichern |
0 | Den Datensatz ablehnen |
-3 | Den Datensatz ablehnen |
| Es wird kein Wert angegeben | Den Standardwert 7 speichern |
NULL | Den Datensatz ablehnen |
Eine positive Zahl verlangen
Sieh dir die Verhaltenstabelle noch einmal an. Jede akzeptierte Zahl ist größer als null, während jede abgelehnte Zahl null oder kleiner ist. In SQL wird dieser Vergleich als loan_days > 0 geschrieben.
Öffne schema.sql und erweitere die letzte Spaltendeklaration zu:
loan_days INTEGER NOT NULL DEFAULT 7 CHECK (loan_days > 0)
Lass jede andere Zeile unverändert. Klicke auf Run und finde den neuen Vergleich in der vollständigen Tabellendefinition.
Der Ausdruck loan_days > 0 vergleicht den angegebenen Wert mit null. Er ist für eine positive Zahl wahr und für null oder eine negative Zahl falsch. Eine CHECK-Bedingung sagt SQLite, einen Datensatz abzulehnen, wenn dieser Vergleich falsch ist.
Die beiden anderen Regeln auf derselben Zeile haben weiterhin eigene Aufgaben. DEFAULT 7 liefert den Wert, wenn loan_days ausgelassen wird. NOT NULL lehnt einen ausdrücklich fehlenden Wert ab.
Beachte, dass 2.5 im akzeptierten Teil der Tabelle steht. Obwohl diese Spalte eine INTEGER-Affinität hat, beschränkt gewöhnliches SQLite sie nicht strikt auf ganze Zahlen. Eine positive reelle Zahl wie 2.5 kann hier gespeichert werden und besteht den Vergleich.
Für numerische Werte ist das eine verlässliche Regel für positive Zahlen, keine strikte Beschränkung auf ganze Zahlen oder allgemeine Typprüfung. Nur ganze Zahlen zu erzwingen würde eine weitere Entscheidung erfordern, die wir dieser Tabelle nicht hinzufügen.
Verwende Submit, wenn die Deklaration geladen wird. Die Tabelle soll positive ganze und reelle Zahlen akzeptieren, null und negative Zahlen ablehnen, beim Auslassen des Wertes 7 verwenden und weiterhin NULL ablehnen. Sobald sich diese Fälle wie gezeigt verhalten, hat die Tabelle items alle vorgesehenen Schutzregeln.
Aufgabe
Öffne schema.sql und füge eine CHECK-Regel hinzu, die loan_days nur akzeptiert, wenn der Wert größer als null ist. Behalte NOT NULL und DEFAULT 7 an derselben Spalte bei.
Klicke auf Run, untersuche die vollständige Tabellendefinition und reiche dein Schema ein. Positive Zahlen einschließlich 2.5 müssen akzeptiert werden. Null und negative Zahlen müssen abgelehnt werden. Beim Auslassen von loan_days muss weiterhin 7 gespeichert werden, während ein ausdrücklich angegebenes NULL weiterhin abgelehnt werden muss.