0%

Maak een tabel die zijn gegevens beschermt · oefening

Geef elk voorwerp een eigen ID

Stel dat de uitleenruimte twee accuboormachines heeft. Ze kunnen dezelfde naam hebben, maar de catalogus moet de fysieke boormachines wel uit elkaar kunnen houden.

Deze twee records maken dat mogelijk:

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

Nu komt er een projector binnen met ID 41. Het huidige schema zou die accepteren, waardoor twee verschillende voorwerpen hetzelfde ID hebben.

De kolom id heeft een regel nodig die dit voorkomt. In SQL identificeert een primaire sleutel één rij in een tabel.

Bescherm het ID

Open schema.sql en verander de eerste kolom van id INTEGER in id INTEGER PRIMARY KEY. Laat de andere vier kolommen staan zoals ze zijn.

Dit is het volledige schema na die wijziging:

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

Druk op Run en zoek id INTEGER PRIMARY KEY in de tabeldefinitie die SQLite afdrukt.

Lees die regel van links naar rechts. id geeft de kolom een naam, INTEGER blijft de affiniteit en PRIMARY KEY voegt de nieuwe regel toe. De andere kolomdefinities zijn niet veranderd.

Wanneer je op Submit drukt, krijgt SQLite twee boormachines met dezelfde naam en verschillende expliciete ID’s. Beide moeten worden geaccepteerd. Daarna krijgt het een ander voorwerp met een ID dat al in gebruik is. Dat moet worden geweigerd. Je hoeft die records niet in schema.sql te schrijven; je taak is om de regel te schrijven waaraan ze moeten voldoen.

Het uitleenprogramma geeft in dit hoofdstuk elk ID op. We gaan alleen uit van het gedrag dat je hier ziet: verschillende expliciete ID’s worden geaccepteerd en een herhaald expliciet ID wordt geweigerd.

Let op wat de primaire sleutel niet voorkomt. Beide boormachines mogen nog steeds Cordless drill heten, want een naam beschrijft een voorwerp maar identificeert niet noodzakelijk één fysiek object. Door id als primaire sleutel te kiezen, bescherm je dat onderscheid.

Je tabel kan zijn rijen nu uit elkaar houden. Hij accepteert nog steeds een voorwerp waarvan de inventariscode, naam, categorie of uitleentermijn helemaal geen waarde heeft. De volgende regel gaat die verplichte gegevens beschermen.

Opdracht

Open schema.sql en verander de eerste kolom van id INTEGER in id INTEGER PRIMARY KEY. Laat de andere vier kolommen ongewijzigd.

Druk op Run en controleer of SQLite de primaire sleutel in de volledige definitie van items toont. Stuur daarna je werk in. Verschillende expliciete ID’s moeten worden geaccepteerd, terwijl een herhaald expliciet ID moet worden geweigerd. Namen mogen nog steeds worden herhaald.