給食メニューをすっきり整理する
高校で学校運営の重要なデータを整理する取り組みが進んでいることを聞きつけ、カフェテリアのスタッフも参加したいと考えています。特に、学年を通して提供されるさまざまな給食メニューを記録しておきたいとのことです。IT スタッフの協力により、次のテーブルがその目的で定義されました。
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テーブル定義を完成させてください。 mealテーブルのid列をPRIMARY KEYにし、2NF を満たすようにingredients列とdate_served列を削除してください。mealが提供される日付を保存するためにmeal_dateの定義を完成させてください。ingredientテーブル内の食材をmeal_ingredientテーブルから参照できるように、meal_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 ___ ___(___)
);