Upraszczanie opcji posiłków
Pracownicy stołówki słyszą o świetnych postępach w porządkowaniu danych w szkole średniej. Chcą dołączyć do tych działań – w szczególności zależy im na śledzeniu różnych opcji posiłków dostępnych w ciągu roku szkolnego. Przy wsparciu działu IT zdefiniowano w tym celu następującą tabelę:
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
);
Wykorzystując wiedzę o normalizacji baz danych, zaprojektujesz lepszą strukturę tabeli meal.
To ćwiczenie jest częścią kursu
Tworzenie baz danych w PostgreSQL
Instrukcje do ćwiczenia
- Uzupełnij definicję tabeli
ingredientsłużącej do przechowywania składników. - Nadaj kolumnie
idtabelimealatrybutPRIMARY KEYi usuń kolumnyingredientsorazdate_served, tak aby tabelamealspełniała wymogi 2NF. - Uzupełnij definicję tabeli
meal_date, która będzie przechowywać daty serwowania poszczególnych posiłków (meal). - Uzupełnij definicję tabeli
meal_ingredienttak, aby składniki z tabeliingredientmogły być do niej odwoływane.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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 ___ ___(___)
);