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)"]); 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. 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);
````