Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

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 id của bảng mealPRIMARY KEY và loại bỏ các cột ingredientsdate_served để bảng meal đáp ứng 2NF.
  • Hoàn thiện định nghĩa meal_date để lưu các ngày một meal được phục vụ.
  • Hoàn thiện định nghĩa meal_ingredient để các nguyên liệu trong bảng ingredient có thể được tham chiếu từ bảng meal_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 ___ ___(___)
);
Chỉnh sửa và Chạy Mã