Otimizando as opções de refeição
A equipe da cafeteria ficou sabendo do ótimo trabalho que está acontecendo no ensino médio para organizar dados de aspectos importantes das operações da escola. Esse grupo agora quer participar desses esforços. Em particular, a equipe quer acompanhar as diferentes opções de refeição disponíveis ao longo do ano letivo. Com a ajuda da equipe de TI, a seguinte tabela foi definida para esse propósito:
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
);
Usando seu conhecimento de normalização de bancos de dados, você vai propor um design melhor para a tabela meal.
Este exercício faz parte do curso
Criando bancos de dados PostgreSQL
Instruções do exercício
- Complete a definição da tabela
ingredientpara armazenar ingredientes. - Torne a coluna
idda tabelamealumaPRIMARY KEYe remova as colunasingredientsedate_servedpara que a tabelamealatenda à 2NF. - Complete a definição de
meal_datepara armazenar as datas em que umamealé servida. - Complete a definição de
meal_ingredientpara que os ingredientes na tabelaingredientpossam ser referenciados a partir da tabelameal_ingredient.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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 ___ ___(___)
);