diff --git a/M4/Dossier/M4.md b/M4/Dossier/M4.md index 534d5da..c19c731 100644 --- a/M4/Dossier/M4.md +++ b/M4/Dossier/M4.md @@ -84,3 +84,60 @@ echo $ausgabe["COUNT(id)"]; echo htmlspecialchars($ausgabe["COUNT(id)"]); ```` Bei der Newsletteranmeldung sollte man sich auch ggf. überlegen, wie man die Eingaben prüft un zu vermeiden, das schadhafter Code gespeichert und später abgerufen wird. + +# Aufgabe 4 +1. Eindeutigkeit für die Kombination aus Gericht und Kategorie sicherstellen + ````sql + ALTER TABLE gericht_hat_kategorie + ADD CONSTRAINT gericht_kategorie_unique UNIQUE (gericht_id, kategorie_id); + ```` +2. In der Tabelle gericht soll eine Abfrage nach Name beschleunigt werden. + ````sql + ALTER TABLE gericht + ADD INDEX idx_name (name); + ```` +3. Bei Löschung eines Gerichts sollen + 1) die zugehörigen Zuordnungen zu einer Kategorie sowie + ````sql + ALTER TABLE gericht_hat_kategorie + DROP FOREIGN KEY gericht_hat_kategorie_ibfk_1, -- (gericht_id) -> gericht(id) + ADD CONSTRAINT gericht_hat_kategorie_ibfk_1_new + FOREIGN KEY (gericht_id) REFERENCES gericht(id) + ON DELETE CASCADE; + ```` + 2) die zugehörigen Zuordnungen zu Allergenen automatisch mit gelöscht werden. + ````sql + ALTER TABLE gericht_hat_allergen + DROP FOREIGN KEY gericht_hat_allergen_ibfk_2, -- (gericht_id) -> gericht(id) + ADD CONSTRAINT gericht_hat_allergen_ibfk_2_new + FOREIGN KEY (gericht_id) REFERENCES gericht(id) + ON DELETE CASCADE; + ```` +4. Eine Kategorie kann nur dann gelöscht werden, wenn + 1) dieser keine Gerichte zugeordnet sind und + ````sql + ALTER TABLE gericht_hat_kategorie + ADD CONSTRAINT fk_gericht_hat_kategorie_kategorie_id + FOREIGN KEY (kategorie_id) REFERENCES kategorie(id) + ON DELETE RESTRICT; + ```` + 2) diese keine Kindkategorien besitzt. + ````sql + ALTER TABLE kategorie + ADD CONSTRAINT fk_kategorie_eltern_id + FOREIGN KEY (eltern_id) REFERENCES kategorie(id) + ON DELETE RESTRICT; + ```` +5. Wird der Code eines Allergens verändert, so ändert sich dieser Code automatisch in den referenzierenden Datensätzen. + ````sql + ALTER TABLE gericht_hat_allergen + DROP FOREIGN KEY gericht_hat_allergen_ibfk_1, -- (code) -> allergen(code) + ADD CONSTRAINT gericht_hat_allergen_ibfk_1_new + FOREIGN KEY (code) REFERENCES allergen(code) + ON UPDATE CASCADE; + ```` +6. Eine Kombination aus ``gericht_id`` und ``kategorie_id`` in ``gericht_hat_kategorie`` soll als Primärschlüssel dienen. + ````sql + ALTER TABLE gericht_hat_kategorie + ADD PRIMARY KEY (gericht_id, kategorie_id); + ```` \ No newline at end of file