Maaltijdopties stroomlijnen
Het cafetariapersoneel hoort over al het goede werk op de middelbare school om gegevens te organiseren voor belangrijke aspecten van de schoolorganisatie. Zij willen nu ook aanhaken. Het team wil vooral bijhouden welke verschillende maaltijdopties er gedurende het schooljaar beschikbaar zijn. Met hulp van de IT-afdeling is hiervoor de volgende tabel gedefinieerd:
CREATE TABLE meal (
id INTEGER,
name VARCHAR(50) NOT NULL
ingredients VARCHAR(150), -- comma seperated list
avg_student_rating NUMERIC,
date_served DATE,
total_calories SMALLINT NOT NULL
);
Met je kennis van database-normalisatie geef je een beter ontwerp voor de meal-tabel.
Deze oefening maakt deel uit van de cursus
PostgreSQL-databases maken
Oefeninstructies
- Maak de definitie van de
ingredient-tabel af om ingrediënten op te slaan. - Maak van de kolom
idin demeal-tabel eenPRIMARY KEYen verwijder de kolommeningredientsendate_servedzodat demeal-tabel voldoet aan 2NF. - Maak de definitie van
meal_dateaf om data op te slaan waarop eenmealwordt geserveerd. - Maak de definitie van
meal_ingredientaf zodat ingrediënten in deingredient-tabel kunnen worden verwezen vanuit demeal_ingredient-tabel.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
CREATE TABLE ingredient (
-- Add PRIMARY KEY for table
___ ___ ___ ___,
name VARCHAR(50) NOT NULL
);
CREATE TABLE meal (
-- Make id a PRIMARY KEY
id ___ ___ ___,
name VARCHAR(50) NOT NULL,
-- Remove the 2 columns (below) that do not satisfy 2NF
ingredients VARCHAR(150), -- comma separated list
avg_student_rating NUMERIC,
date_served DATE,
total_calories SMALLINT NOT NULL
);
CREATE TABLE meal_date (
-- Define a column referencing the meal table
meal_id INTEGER ___ ___(___),
date_served DATE NOT NULL
);
CREATE TABLE meal_ingredient (
meal_id INTEGER REFERENCES meal(id),
-- Define a column referencing the ingredient table
ingredient_id INTEGER ___ ___(___)
);