Kapitel 2
Eine Tabelle erstellen, die ihre Daten schützt
Wie SQLite jeden Wert speichert
Die Tabelle items, die du in Kapitel 1 kennengelernt hast, hatte drei Spalten. Das Verleihprojekt braucht jetzt zwei weitere. Ein Inventarkennzeichen ist ein kurzer Code, der an einem physischen Gegenstand angebracht ist, zum Beispiel DRILL-01. Die Leihdauer sagt, wie viele Tage jemand den Gegenstand behalten darf.
Hier steht der erweiterte Tabellenentwurf neben einer aktuellen Zeile:
| Spalte | Deklarierter Typ | Aktueller Wert |
|---|---|---|
id | INTEGER | 1 |
asset_tag | TEXT | DRILL-01 |
name | TEXT | Cordless drill |
category | TEXT | tools |
loan_days | INTEGER | 7 |
Sieh dir zuerst die Werte in der letzten Spalte an. 1 und 7 sind ganze Zahlen. DRILL-01, Cordless drill und tools sind Text. SQLite merkt sich diesen Unterschied für jeden gespeicherten Wert.
Fünf Arten, wie SQLite einen Wert speichert
SQLite verwendet fünf Bezeichnungen für gespeicherte Werte:
INTEGERfür eine ganze Zahl wie7;REALfür eine Fließkommazahl wie7.5oder7.0;TEXTfür Text wieCordless drill;BLOBfür rohe Bytes, zum Beispiel den Inhalt eines kleinen Bildes;NULL, wenn kein Wert vorhanden ist.
Die Verleihtabelle braucht momentan nur ganze Zahlen und Text, aber du wirst bald NULL kennenlernen. REAL und BLOB vervollständigen die Gruppe, auch wenn diese Tabelle sie heute nicht braucht.
Welche Zeile ordnet alle fünf SQLite-Bezeichnungen den beschriebenen Werten korrekt zu?
SQLite nennt jede dieser fünf Bezeichnungen eine Speicherklasse. Eine Speicherklasse beschreibt einen tatsächlichen Wert. Der aktuelle Wert 7 hat zum Beispiel die Speicherklasse INTEGER.
Ein Wert ist nicht seine Spalte
Die mittlere Spalte der ersten Tabelle beschreibt den Entwurf, nicht einen bereits gespeicherten Wert. In gewöhnlichen SQLite-Tabellen gibt ein deklarierter Typ wie INTEGER oder TEXT einer Spalte eine Vorliebe für Werte dieser Art. SQLite nennt diese Vorliebe die Typaffinität der Spalte.
Damit bleibt eine nützliche Unterscheidung für die nächsten Schritte: Eine Spalte hat eine Affinität, während jeder gespeicherte Wert eine Speicherklasse hat. Eine INTEGER-Affinität allein verspricht nicht, dass jeder Wert für das Verleihprojekt sinnvoll ist. In den nächsten Lektionen schreibst du die Tabelle und ergänzt die Regeln, die sie schützen.