精簡餐點選項
學校餐廳的同仁聽說高中正在為多項校務建立有條理的資料管理,他們也想加入這項工作。特別是,他們想紀錄整個學年可提供的各種餐點選項。在資訊人員的協助下,為此目的先定義了下列表格:
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,並移除ingredients與date_served欄位,讓meal資料表符合 2NF。 - 完成
meal_date的定義,用來儲存供應某個meal的日期。 - 完成
meal_ingredient的定義,讓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 ___ ___(___)
);