精简餐食选项
学校食堂工作人员听说高中正在为学校运营中的重要事项整理数据,进展非常出色,他们也想加入这项工作。具体来说,食堂想跟踪整个学年可提供的不同餐食选项。在 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,并移除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 ___ ___(___)
);