diff --git a/Lösung/Aufgabe 5.sql b/Lösung/Aufgabe 5.sql index 3505b77..d9bc380 100644 --- a/Lösung/Aufgabe 5.sql +++ b/Lösung/Aufgabe 5.sql @@ -10,4 +10,52 @@ Wird dabei gegen Vorgaben (Kalorienvorgaben, vegetarisch, Allergene, etc.) verst soll das in der Sicht angezeigt werden. Wenn der Tag „ok“ ist, soll das markiert werden, ansonsten soll angezeigt werden, gegen was verstoßen wurde. ----------------------------------------------------------------------- + +Rechtekonzept: +Als normaler Benutzer sollte man nur Zugriff auf seine eigenen Daten haben. +Als privilegierter Nutzer (z.B. Admin) kann man alle Daten sehen */ +DROP VIEW IF EXISTS Menu_Naehrwerte; +CREATE VIEW Menu_Naehrwerte AS +( +SELECT Menuname, + GROUP_CONCAT(DISTINCT Produktname SEPARATOR ', ') AS 'Produkte', + ROUND(SUM(Fett * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100), 2) AS 'Fett', + ROUND(SUM(Kohlenhydrate * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100), 2) AS 'Kohlenhydrate', + ROUND(SUM(Eiweiss * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100), 2) AS 'Eiweiss', + ROUND(SUM(Brennwert * (SELECT Menge FROM Menge WHERE MengenID = M.MengenID) / 100), 2) AS 'Brennwert', + GROUP_CONCAT(DISTINCT Allergenbezeichnung SEPARATOR ', ') AS 'Allergene', + GROUP_CONCAT(DISTINCT E_Nummer SEPARATOR ', ') AS 'Zusatzstoff' +FROM Menu + JOIN Menucontent M on Menu.MenuID = M.MenuID + JOIN Menge M3 on M.MengenID = M3.MengenID + JOIN Produkt P on M3.ProduktID = P.ProduktID + JOIN Naehrwerte N on P.ProduktID = N.ProduktID + + JOIN enthaeltAllergen eA on P.ProduktID = eA.ProduktID + JOIN Allergen A on A.AllergenID = eA.AllergenID + + LEFT JOIN enthaeltZusatzstoff eZ on P.ProduktID = eZ.ProduktID +GROUP BY Menuname); + + +# TODO Compare Menu_Naehrwerte.Allergene and Menu_Naehrwerte.Zusatzstoff with Allergie and Zusatzstoffunverträglichkeit +DROP VIEW IF EXISTS Aufgabe_5; +CREATE VIEW Aufgabe_5 AS +( +SELECT Personenvorname, + Personenname, + Naehrwertziel, + MN.Brennwert, + CONCAT(MN.Brennwert / Naehrwertziel * 100, '%') AS Naehrwertziel_Prozent, + MN.Fett, + MN.Kohlenhydrate, + MN.Eiweiss, + IF(MN.Brennwert / Naehrwertziel * 100 <= 100, 'OK', 'Naehrwertziel überschritten') AS Naehrwert_OK, + M.Menuname, + Allergene, + Zusatzstoff +FROM konsumiert + JOIN Menu M on M.MenuID = konsumiert.MenuID + JOIN Person P on P.PersonID = konsumiert.PersonID + JOIN Menu_Naehrwerte MN on M.Menuname = MN.Menuname);