0%

Eine Tabelle erstellen, die ihre Daten schützt · Übung

Die nötigen Angaben zu einem Gegenstand verlangen

Ein Gegenstand mit der ID 51 und dem Inventarkennzeichen CAMERA-07 gelangt ohne Namen in den Katalog:

idasset_tagnamecategoryloan_days
51CAMERA-07NULLphotography7

NULL ist SQLites Kennzeichnung für einen fehlenden gespeicherten Wert. Die aktuelle Deklaration name TEXT gibt der Spalte eine Textaffinität, verlangt aber keinen Wert. SQLite würde diesen unvollständigen Datensatz akzeptieren, sofern das Schema keine weitere Regel ergänzt.

NOT NULL sagt SQLite, dass eine Spalte einen Wert haben muss.

Alle vier Angaben verlangen

Öffne schema.sql und füge hinter dem deklarierten Typ von asset_tag, name, category und loan_days jeweils NOT NULL hinzu. Behalte id INTEGER PRIMARY KEY unverändert bei.

Hier ist das vollständige Schema, das du aufbaust:

CREATE TABLE items (
    id INTEGER PRIMARY KEY,
    asset_tag TEXT NOT NULL,
    name TEXT NOT NULL,
    category TEXT NOT NULL,
    loan_days INTEGER NOT NULL
);

Klicke auf Run und lies die vollständige Definition, die SQLite ausgibt. Auf allen vier geänderten Zeilen soll NOT NULL stehen.

Lies eine dieser Zeilen von links nach rechts. In name TEXT NOT NULL bezeichnet name die Spalte, TEXT bleibt ihre Affinität, und NOT NULL ergänzt die Anforderung. Dasselbe Muster schützt die anderen drei Angaben.

Klicke auf Submit, wenn das Schema erfolgreich geladen wird. Bei der Einreichung wird ein Datensatz mit NULL als Inventarkennzeichen ausprobiert, danach einzelne Datensätze mit NULL als Name, Kategorie und Leihdauer. SQLite muss jeden davon ablehnen. Das Beispiel oben zeigt den fehlenden Namen, aber nur name zu schützen würde die anderen drei Lücken offenlassen.

Wenn einer dieser Fälle weiterhin akzeptiert wird, vergleiche die vollständige Deklaration der betreffenden Spalte mit dem Schema oben. Das fehlende NOT NULL gehört auf die Zeile für den Wert, der durchgerutscht ist.

NOT NULL hat eine präzise Aufgabe. Es lehnt das Fehlen eines Wertes ab. Es entscheidet nicht, ob ein angegebener Text nützlich ist. Ein leerer Text ist deshalb ein anderes Problem als NULL.

Diese Regel sagt auch nichts über wiederholte Werte, die nicht NULL sind. Zwei Datensätze können weiterhin dasselbe Inventarkennzeichen tragen, obwohl ein Kennzeichen einen einzelnen physischen Gegenstand identifizieren soll. Du hast die wichtigen Angaben verpflichtend gemacht. Als Nächstes schützt du das Kennzeichen vor mehrfacher Verwendung.

Aufgabe

Öffne schema.sql. Füge jeder dieser vier Spaltendeklarationen NOT NULL hinzu:

  • asset_tag TEXT

  • name TEXT

  • category TEXT

  • loan_days INTEGER

Behalte id INTEGER PRIMARY KEY unverändert bei. Klicke auf Run und prüfe, ob alle vier Regeln in der vollständigen Tabellendefinition erscheinen. Reiche dann deine Arbeit ein. SQLite muss ein ausdrückliches NULL in jeder dieser vier Spalten ablehnen.