Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Maak de definitie van de ingredient-tabel af om ingrediënten op te slaan.
  • Maak van de kolom id in de meal-tabel een PRIMARY KEY en verwijder de kolommen ingredients en date_served zodat de meal-tabel voldoet aan 2NF.
  • Maak de definitie van meal_date af om data op te slaan waarop een meal wordt geserveerd.
  • Maak de definitie van meal_ingredient af zodat ingrediënten in de ingredient-tabel kunnen worden verwezen vanuit de meal_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 ___ ___(___)
);
Code bewerken en uitvoeren