НачатьНачать бесплатно

Оптимизация вариантов питания

Сотрудники столовой узнали о масштабной работе по организации данных, которая ведётся в школе. Они тоже хотят присоединиться к этим усилиям. В частности, персонал хочет отслеживать различные варианты питания, доступные в течение учебного года. При помощи ИТ-отдела для этой цели была определена следующая таблица:

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 ___ ___(___)
);
Редактировать и запускать код