Simplificarea opțiunilor de meniu
Personalul cantinei află despre toate eforturile depuse la liceu pentru organizarea datelor legate de aspecte importante ale activității școlare. Acesta dorește acum să se alăture acestor inițiative. În special, personalul vrea să țină evidența diferitelor opțiuni de meniu disponibile pe parcursul anului școlar. Cu ajutorul echipei IT, a fost definit următorul tabel în acest scop:
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
);
Folosind cunoștințele tale despre normalizarea bazelor de date, vei propune un design mai bun pentru tabelul meal.
Acest exercițiu face parte din cursul
Crearea bazelor de date PostgreSQL
Instrucțiuni pentru exercițiu
- Completează definiția tabelului
ingredientpentru stocarea ingredientelor. - Transformă coloana
iddin tabelulmealînPRIMARY KEYși elimină coloaneleingredientsșidate_served, astfel încât tabelulmealsă respecte 2NF. - Completează definiția tabelului
meal_datepentru a stoca datele la care este servit unmeal. - Completează definiția tabelului
meal_ingredientastfel încât ingredientele din tabelulingredientsă poată fi referențiate din tabelulmeal_ingredient.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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 ___ ___(___)
);