ปรับปรุงตารางรายการอาหาร
เจ้าหน้าที่โรงอาหารได้ยินเกี่ยวกับงานที่ดำเนินการอยู่ในโรงเรียนมัธยม เพื่อจัดระเบียบข้อมูลสำหรับด้านต่าง ๆ ของการดำเนินงานในโรงเรียน กลุ่มนี้จึงต้องการเข้าร่วมความพยายามดังกล่าว โดยเฉพาะอย่างยิ่ง เจ้าหน้าที่ต้องการติดตามรายการอาหารที่มีให้บริการตลอดปีการศึกษา ด้วยความช่วยเหลือของทีม 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
);
โดยใช้ความรู้เรื่อง database normalization ให้ออกแบบตาราง meal ใหม่ให้ดีขึ้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การสร้างฐานข้อมูล PostgreSQL
คำแนะนำการฝึกหัด
- กำหนดนิยามของตาราง
ingredientให้ครบสมบูรณ์เพื่อใช้เก็บข้อมูลส่วนผสม - กำหนดให้คอลัมน์
idของตารางmealเป็น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 ___ ___(___)
);