Tinh gọn các lựa chọn bữa ăn
Nhân viên căn-tin đã nghe về tất cả những nỗ lực tuyệt vời ở trường trung học trong việc tổ chức dữ liệu cho các hoạt động quan trọng của nhà trường. Họ cũng muốn tham gia. Cụ thể, đội ngũ này muốn theo dõi các lựa chọn bữa ăn khác nhau được phục vụ trong suốt năm học. Với sự hỗ trợ của bộ phận IT, bảng sau được định nghĩa cho mục đích này:
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
);
Dựa trên kiến thức về chuẩn hóa cơ sở dữ liệu, bạn sẽ đề xuất một thiết kế tốt hơn cho bảng meal.
Bài tập này là một phần của khóa học
Tạo cơ sở dữ liệu PostgreSQL
Hướng dẫn bài tập
- Hoàn thiện định nghĩa bảng
ingredientđể lưu trữ nguyên liệu. - Đặt cột
idcủa bảngmeallàPRIMARY KEYvà loại bỏ các cộtingredientsvàdate_servedđể bảngmealđáp ứng 2NF. - Hoàn thiện định nghĩa
meal_dateđể lưu các ngày mộtmealđược phục vụ. - Hoàn thiện định nghĩa
meal_ingredientđể các nguyên liệu trong bảngingredientcó thể được tham chiếu từ bảngmeal_ingredient.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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 ___ ___(___)
);