Maak een tabel die zijn gegevens beschermt · oefening
Stel de gegevens die een voorwerp nodig heeft verplicht
Een voorwerp met ID 51 en inventariscode CAMERA-07 komt zonder naam in de catalogus terecht:
| id | asset_tag | name | category | loan_days |
|---|---|---|---|---|
| 51 | CAMERA-07 | NULL | photography | 7 |
NULL is de aanduiding van SQLite voor het ontbreken van een opgeslagen waarde. De huidige definitie name TEXT geeft de kolom een tekstaffiniteit, maar stelt een waarde niet verplicht. SQLite zou dit onvolledige record accepteren als het schema geen extra regel toevoegt.
NOT NULL vertelt SQLite dat een kolom een waarde moet hebben.
Stel alle vier de gegevens verplicht
Open schema.sql en voeg NOT NULL toe na het opgegeven type van asset_tag, name, category en loan_days. Laat id INTEGER PRIMARY KEY ongewijzigd.
Dit is het volledige schema dat je aan het bouwen bent:
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
);
Druk op Run en lees de volledige definitie die SQLite afdrukt. Op alle vier de gewijzigde regels hoort NOT NULL te staan.
Lees een van die regels van links naar rechts. In name TEXT NOT NULL identificeert name de kolom, blijft TEXT de affiniteit en voegt NOT NULL de verplichting toe. Hetzelfde patroon beschermt de andere drie gegevens.
Druk op Submit zodra het schema zonder fouten laadt. Bij het insturen wordt een record geprobeerd met NULL als inventariscode, en daarna afzonderlijke records met NULL als naam, categorie en uitleentermijn. SQLite moet ze allemaal weigeren. Het voorbeeld hierboven laat de ontbrekende naam zien, maar als je alleen name beschermt, blijven de andere drie gaten open.
Als een van die gevallen nog wordt geaccepteerd, vergelijk dan de volledige definitie van die kolom met het schema hierboven. De ontbrekende NOT NULL hoort op de regel van de waarde die erdoorheen glipte.
NOT NULL heeft een precieze taak. Het weigert het ontbreken van een waarde. Het bepaalt niet of opgegeven tekst nuttig is, dus een leeg stukje tekst is een ander probleem dan NULL.
Deze regel zegt ook niets over herhaalde waarden die geen NULL zijn. Twee records kunnen nog steeds dezelfde inventariscode hebben, terwijl een code bedoeld is om één fysiek voorwerp te identificeren. Je hebt de belangrijke gegevens verplicht gesteld; hierna voorkom je dat de code opnieuw wordt gebruikt.
Opdracht
Open schema.sql. Voeg NOT NULL toe aan elk van deze vier kolomdefinities:
asset_tag TEXTname TEXTcategory TEXTloan_days INTEGER
Laat id INTEGER PRIMARY KEY ongewijzigd. Druk op Run en controleer of alle vier de regels in de volledige tabeldefinitie staan. Stuur daarna je werk in. SQLite moet een expliciete NULL in elk van die vier kolommen weigeren.