Essensoptionen schlanker gestalten
Das Cafeteria-Team hat von all der großartigen Arbeit an der Highschool gehört, mit der wichtige Daten für den Schulbetrieb organisiert werden. Dieses Team möchte sich nun anschließen. Konkret will das Team die verschiedenen Essensoptionen erfassen, die über das Schuljahr hinweg angeboten werden. Mit Unterstützung der IT wurde dafür folgende Tabelle definiert:
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
);
Mit deinem Wissen zur Normalisierung von Datenbanken entwickelst du ein besseres Design für die Tabelle meal.
Diese Übung ist Teil des Kurses
Erstellen von PostgreSQL-Datenbanken
Anleitung zur Übung
- Vervollständige die Definition der Tabelle
ingredientzur Speicherung von Zutaten. - Mache die Spalte
idder Tabellemealzu einemPRIMARY KEYund entferne die Spalteningredientsunddate_served, sodass die Tabellemealder 2NF entspricht. - Vervollständige die Definition von
meal_date, um die Daten zu speichern, an denen einmealserviert wird. - Vervollständige die Definition von
meal_ingredient, damit auf Zutaten in der Tabelleingredientaus der Tabellemeal_ingredientverwiesen werden kann.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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 ___ ___(___)
);