Eine Tabelle erstellen, die ihre Daten schützt · Übung
Die übliche Leihdauer vorgeben
Die meisten Gegenstände im Verleihkatalog können für sieben Tage ausgeliehen werden. Ein besonderer Gegenstand kann eine andere Dauer haben. Aber jeden gewöhnlichen Datensatz erneut 7 angeben zu lassen lädt zu vermeidbaren Fehlern ein. Die Tabelle kann sich die übliche Wahl an einer Stelle merken, sodass jedes Programm, das sie verwendet, dieselbe Antwort erhält.
Diese drei Fälle sollen sich unterschiedlich verhalten:
Angegebener Wert für loan_days | Was SQLite tun soll |
|---|---|
| Es wird kein Wert angegeben | 7 speichern |
14 wird angegeben | 14 speichern |
NULL wird angegeben | Den Datensatz ablehnen |
Die Tabelle braucht einen üblichen Wert für den ersten Fall und muss zugleich im dritten Fall ihren Schutz vor fehlenden Daten behalten.
Den üblichen Wert ergänzen
Öffne schema.sql und finde die aktuelle Deklaration:
loan_days INTEGER NOT NULL
Füge den üblichen Wert hinzu, ohne die bereits vorhandene Regel zu entfernen:
loan_days INTEGER NOT NULL DEFAULT 7
Klicke auf Run und finde diese Zeile in der vollständigen Tabellendefinition, die SQLite ausgibt.
DEFAULT sagt SQLite, was es speichern soll, wenn ein neuer Datensatz diese Spalte auslässt. Es ersetzt keinen angegebenen Wert. Ein Gegenstand mit 14 Tagen Leihdauer behält 14.
Eine Spalte auszulassen und NULL anzugeben sind unterschiedliche Anfragen. loan_days auszulassen sagt sinngemäß: „Verwende den üblichen Wert der Tabelle.“ NULL anzugeben sagt ausdrücklich, dass der Wert fehlt. Die vorhandene Regel NOT NULL lehnt diesen fehlenden Wert ab. Behalte deshalb sowohl NOT NULL als auch DEFAULT 7 auf der Zeile.
Diese Unterscheidung ist wichtig, wenn ein Programm einen Datensatz erstellt. Es kann die Entscheidung der Tabelle überlassen oder bewusst eine andere Dauer angeben. Es kann NULL nicht als andere Schreibweise für den Standardwert verwenden.
Sobald die neue Deklaration geladen wird, wähle Submit und vergleiche die Ergebnisse mit den drei Fällen am Anfang der Lektion. Eine ausgelassene Leihdauer soll zu 7 werden, ein angegebener Wert wie 14 soll 14 bleiben, und ein ausdrückliches NULL soll weiterhin abgelehnt werden.
Dieser Standardwert erspart wiederholte Arbeit, entscheidet aber nicht, welche angegebenen Zahlen sinnvoll sind. Die Tabelle würde weiterhin 0 oder -2 als Leihdauer akzeptieren. In der nächsten Lektion ergänzt du dafür eine eigene Regel.
Aufgabe
Öffne schema.sql und gib loan_days den Standardwert 7. Behalte die Regel NOT NULL bei.
Klicke auf Run und prüfe, ob die Tabellendefinition beide Regeln enthält. Reiche dann dein Schema ein. Wenn loan_days ausgelassen wird, muss 7 gespeichert werden. Ein angegebener positiver Wert muss erhalten bleiben, und ein ausdrücklich angegebenes NULL muss weiterhin abgelehnt werden.