0%

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

Jedem Gegenstand eine eigene ID geben

Angenommen, der Verleihraum besitzt zwei Akkubohrer. Sie können denselben Namen haben, aber der Katalog muss die physischen Bohrer trotzdem unterscheiden können.

Diese zwei Datensätze machen das möglich:

idasset_tagname
41DRILL-01Cordless drill
42DRILL-02Cordless drill

Jetzt kommt ein Projektor mit der ID 41 hinzu. Das aktuelle Schema würde ihn akzeptieren. Dann hätten zwei unterschiedliche Gegenstände dieselbe ID.

Die Spalte id braucht eine Regel, die das verhindert. In SQL identifiziert ein Primärschlüssel eine Zeile in einer Tabelle.

Die ID schützen

Öffne schema.sql und ändere die erste Spalte von id INTEGER in id INTEGER PRIMARY KEY. Lass die anderen vier Spalten unverändert.

Hier ist das vollständige Schema nach dieser Änderung:

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

Klicke auf Run und finde id INTEGER PRIMARY KEY in der von SQLite ausgegebenen Tabellendefinition.

Lies diese Zeile von links nach rechts. id benennt die Spalte, INTEGER bleibt ihre Affinität, und PRIMARY KEY ergänzt die neue Regel. Die anderen Spaltendeklarationen haben sich nicht geändert.

Wenn du auf Submit klickst, erhält SQLite zwei gleich benannte Bohrer mit unterschiedlichen ausdrücklich angegebenen IDs. Beide sollen akzeptiert werden. Danach erhält es einen weiteren Gegenstand mit einer bereits verwendeten ID, der abgelehnt werden soll. Du musst diese Datensätze nicht in schema.sql schreiben. Deine Aufgabe ist es, die Regel zu schreiben, der sie folgen müssen.

Das Verleihprogramm liefert in diesem Kapitel jede ID. Wir verlassen uns nur auf das Verhalten, das du hier sehen kannst: Unterschiedliche ausdrücklich angegebene IDs werden akzeptiert, eine wiederholte ausdrücklich angegebene ID wird abgelehnt.

Beachte, was der Primärschlüssel nicht verhindert. Beide Bohrer dürfen weiterhin Cordless drill heißen, weil ein Name einen Gegenstand beschreibt, aber nicht unbedingt ein einzelnes physisches Objekt identifiziert. id als Primärschlüssel zu wählen schützt diese Unterscheidung.

Deine Tabelle kann ihre Zeilen jetzt unterscheiden. Sie akzeptiert weiterhin einen Gegenstand, dessen Kennzeichen, Name, Kategorie oder Leihdauer überhaupt keinen Wert hat. Die nächste Regel schützt diese erforderlichen Angaben.

Aufgabe

Öffne schema.sql und ändere die erste Spalte von id INTEGER in id INTEGER PRIMARY KEY. Lass die anderen vier Spalten unverändert.

Klicke auf Run und prüfe, ob SQLite den Primärschlüssel in der vollständigen Definition von items zeigt. Reiche dann deine Arbeit ein. Unterschiedliche ausdrücklich angegebene IDs müssen akzeptiert werden, eine wiederholte ausdrücklich angegebene ID muss abgelehnt werden. Namen dürfen sich weiterhin wiederholen.