Effektivisera måltidsalternativen
Cafeteriapersonalen hör talas om det fina arbete som pågår på gymnasieskolan med att organisera data för viktiga delar av skolverksamheten. Nu vill även de vara med i detta arbete. Personalen vill framför allt hålla koll på de olika måltidsalternativ som finns tillgängliga under skolåret. Med hjälp av IT-personalen definieras följande tabell för detta ändamål:
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
);
Med hjälp av dina kunskaper om databasnormalisering ska du ta fram en bättre design för tabellen meal.
Den här övningen är en del av kursen
Skapa PostgreSQL-databaser
Övningsinstruktioner
- Slutför definitionen av tabellen
ingredientför lagring av ingredienser. - Gör kolumnen
idi tabellenmealtill enPRIMARY KEYoch ta bort kolumnernaingredientsochdate_servedså att tabellenmealuppfyller 2NF. - Slutför definitionen av
meal_dateför att lagra datum då enmealserveras. - Slutför definitionen av
meal_ingredientså att ingredienser i tabelleningredientkan refereras från tabellenmeal_ingredient.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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 ___ ___(___)
);