Rationaliser les options de repas
Le personnel de la cafétéria a entendu parler de tout l’excellent travail réalisé au lycée pour organiser les données liées à des aspects clés du fonctionnement de l’établissement. Il souhaite désormais rejoindre ces efforts. En particulier, l’équipe veut suivre les différentes options de repas proposées tout au long de l’année scolaire. Avec l’aide de l’équipe informatique, la table suivante a été définie à cet effet :
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
);
En vous appuyant sur vos connaissances de la normalisation des bases de données, vous allez proposer une meilleure conception pour la table meal.
Cet exercice fait partie du cours
Créer des bases de données PostgreSQL
Instructions
- Complétez la définition de la table
ingredientpour stocker les ingrédients. - Transformez la colonne
idde la tablemealenPRIMARY KEYet supprimez les colonnesingredientsetdate_servedafin que la tablemealrespecte la 2NF. - Complétez la définition de
meal_datepour stocker les dates auxquelles unmealest servi. - Complétez la définition de
meal_ingredientafin que les ingrédients de la tableingredientpuissent être référencés depuis la tablemeal_ingredient.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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 ___ ___(___)
);