Оптимизация вариантов питания
Сотрудники столовой узнали о масштабной работе по организации данных, которая ведётся в школе. Они тоже хотят присоединиться к этим усилиям. В частности, персонал хочет отслеживать различные варианты питания, доступные в течение учебного года. При помощи ИТ-отдела для этой цели была определена следующая таблица:
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таблицыmealпервичным ключом (PRIMARY KEY) и удалите столбцыingredientsиdate_served, чтобы таблицаmealсоответствовала 2НФ. - Завершите определение таблицы
meal_dateдля хранения дат, в которые подаётся то или иное блюдо (meal). - Завершите определение таблицы
meal_ingredient, чтобы можно было ссылаться на ингредиенты из таблицы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 ___ ___(___)
);