Simplificando las opciones de comida
El personal de la cafetería se ha enterado del gran trabajo que se está haciendo en el instituto para organizar datos clave de las operaciones del centro. Ahora quieren sumarse a estos esfuerzos. En particular, quieren llevar un registro de las distintas opciones de comida disponibles a lo largo del curso. Con la ayuda del equipo de TI, se ha definido la siguiente tabla con este 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 tus conocimientos de normalización de bases de datos, vas a proponer un mejor diseño para la tabla meal.
Este ejercicio forma parte del curso
Creación de bases de datos en PostgreSQL
Instrucciones del ejercicio
- Completa la definición de la tabla
ingredientpara almacenar los ingredientes. - Haz que la columna
idde la tablamealseaPRIMARY KEYy elimina las columnasingredientsydate_servedpara que la tablamealcumpla la 2NF. - Completa la definición de
meal_datepara almacenar las fechas en las que se sirve unmeal. - Completa la definición de
meal_ingredientpara que los ingredientes de la tablaingredientpuedan referenciarse desde la tablameal_ingredient.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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 ___ ___(___)
);