始める無料で始める

給食メニューをすっきり整理する

高校で学校運営の重要なデータを整理する取り組みが進んでいることを聞きつけ、カフェテリアのスタッフも参加したいと考えています。特に、学年を通して提供されるさまざまな給食メニューを記録しておきたいとのことです。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 ___ ___(___)
);
コードを編集して実行