Оптимізація варіантів страв
Працівники кафетерію дізналися про чудову роботу, яку в старшій школі проводять для впорядкування даних важливих процесів. Тепер і вони хочуть долучитися. Зокрема, команда хоче відстежувати різні варіанти страв, доступні протягом навчального року. За допомогою ІТ-відділу для цього створили таку таблицю:
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
);
Спираючись на знання з нормалізації баз даних, запропонуйте кращу структуру таблиці meal.
Ця вправа є частиною курсу
Створення баз даних PostgreSQL
Інструкції до вправи
- Завершіть визначення таблиці
ingredientдля зберігання інгредієнтів. - Зробіть стовпець
idу таблиціmealPRIMARY KEYі вилучіть стовпціingredientsтаdate_served, щоб таблицяmealвідповідала 2NF. - Завершіть визначення
meal_dateдля зберігання дат, коли подаєтьсяmeal. - Завершіть визначення
meal_ingredient, щоб інгредієнти з таблиціingredientможна було посилати з таблиціmeal_ingredient.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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 ___ ___(___)
);