급식 선택지 간소화
급식실 직원들은 고등학교에서 학교 운영의 중요한 부분을 위해 데이터를 체계화하는 훌륭한 작업이 진행되고 있다는 소식을 들었습니다. 이제 이 팀도 여기에 합류하고자 합니다. 특히, 학년 전체에 걸쳐 제공되는 다양한 급식 선택지를 추적하고 싶어 합니다. 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이 제공되는 날짜를 저장하기 위한meal_date정의를 완성하세요.ingredient테이블의 재료를meal_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 ___ ___(___)
);