M4 A4 SQL Nebenbedingungen

This commit is contained in:
S170H
2023-12-03 17:19:42 +01:00
parent 3206c60ce2
commit b2acdfe783

View File

@@ -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);
````