DB Browser – snel opstarten

  1. File → New Database…shop.db
  2. Ga naar Execute SQL
  3. Kopieer/voer je SQL uit met ▶ Run
  4. Bekijk rijen via Browse Data

Recap: relationeel denken

  • Tabel = soort (bv. products)
  • Rij = record
  • Kolom = attribuut
  • Primary key = unieke ID

SQLite & types

SQLite werkt met type-affinities:

  • INTEGER
  • REAL
  • TEXT
  • BLOB

CREATE TABLE – de structuur

We starten met een productentabel.

CREATE TABLE products (
        product_id  INTEGER PRIMARY KEY,
        name        TEXT,
        price_cents INTEGER,
        stock       INTEGER
      );

CREATE TABLE – kwaliteit met constraints

  • NOT NULL: verplicht veld
  • DEFAULT: startwaarde
  • CHECK: domeinregels
  • UNIQUE: geen dubbels

Variant 1 — met DEFAULT

CREATE TABLE IF NOT EXISTS products (
  product_id  INTEGER PRIMARY KEY,
  name        TEXT NOT NULL DEFAULT '',
  price_cents INTEGER NOT NULL DEFAULT 0,
  stock       INTEGER NOT NULL DEFAULT 0
);

Variant 2 — met CHECKS

CREATE TABLE IF NOT EXISTS products (
  product_id  INTEGER PRIMARY KEY,
  name        TEXT NOT NULL,
  price_cents INTEGER NOT NULL CHECK (price_cents >= 0),
  stock       INTEGER NOT NULL CHECK (stock >= 0)
);

Variant 3 — met NOT NULL

CREATE TABLE IF NOT EXISTS products (
  product_id  INTEGER PRIMARY KEY,
  name        TEXT NOT NULL,
  price_cents INTEGER NOT NULL,
  stock       INTEGER NOT NULL
);

Variant 4 — met UNIQUE

CREATE TABLE IF NOT EXISTS products (
  product_id  INTEGER PRIMARY KEY,
  name        TEXT NOT NULL UNIQUE,
  price_cents INTEGER NOT NULL,
  stock       INTEGER NOT NULL DEFAULT 0
);

INSERT – basis

INSERT INTO products (name, sku, price_cents, stock)
VALUES ('Laptop 14"', 'L14-2025', 99900, 25);
Werk met centen als INTEGER. Minder afrondfouten.

INSERT – meerdere rijen

INSERT INTO products (name, sku, price_cents, stock) VALUES
  ('Smartphone', 'SP-001', 69900, 10),
  ('Headphones', 'HP-123', 14900, 50),
  ('USB-C kabel', 'C-USB', 1200, 200);

INSERT – defaults en NULL

-- stock en timestamps hebben defaults
INSERT INTO products (name, price_cents)
VALUES ('Docking station', 129900);
NULL kan alleen als de kolom niet NOT NULL is.

SELECT – als controle

SELECT * FROM products;              -- alles
SELECT name, price_cents FROM products; -- specifieke kolommen
SELECT * FROM products WHERE stock < 10 ORDER BY stock; -- filter + sort
Joins komen later. Nu focussen we op invoer en structuur.

Oefeningen in de les

  1. Maak products volgens de verbeterde versie.
  2. Voeg 5 producten toe (waarvan 1 met default stock).
  3. Test een fout: negatieve prijs...