*** ER als Mail *** *** RM als Mail *** *** FKs als Mail *** *** Baeume als Mail *** ** Antwort und Bewertung bei Frage 2 Nur sehr fragmentarische Abdeckung der Aufgabenstellung Kardinalitäten an den Beziehungen auf der falschen Seite -1 Abgeordnetenmandat als Beziehung/Entität mit Attrs fehlt -2.5 (Kardinalität Bundestag-Abgeordnetenmandat <0,*> am Anfang null) Abgeordnetenmandat reifiziert -> dann muss es weak sein/id-Bez haben -1 Abgeordnetenmandat weak -> dann muss es mindestens eine <>-Bez haben -1/2 Abgeordnetenmandat.LP nicht als Attr sondern Bez zu Legislaturperiode -1/2 Abgeordnetenmandat.name nicht als Attr sondern <> Bez zu Person -1/2 Abgeordnetenmandat Schlüssel fehlt -1/2 Mandat reifiziert, weak und local key "von" ist ok, aber dann müsste es eine <>-Beziehung <1,1> zu (ggf Person) haben -1 Mandat <> über Person+BTWahl geht "naiv", aber dann dürfte niemand zeitweise das Mandat niederlegen. Besser <> nur zur Person, und _Beginn_ als key. Mandat: Attribute und Schlüssel fehlen -1.5 Abgeordnetenmandat: Bundesland fehlt -1/2 Mandat: Bundesland ist nicht key -1/2 Mandat von/bis fehlt, müsste Teil des Schlüssels sein -1 Mandat.von müsste Teil des Schlüssels sein -1/2 Mandat nicht weak zu LP, wenn _von_ Teil des keys ist -1/2 Mandat: Zeitraum in von/bis aufteilen, müsste Teil des Schlüssels sein -1 (Verbindung Mandat->Partei redundant (siehe "Mitglied"), und ggf falsch (wenn jemand aus einer Partei austritt), man kann es als dreistellige Beziehung modellieren, (würde [[Mandat]] dann aber vorzugsweise reifizieren) aber die Kardinalität von Partei->HatMandat muss dann <0,*> sein. -1/2 Kardinalität Person-Abgeordnetenmandat <0,*> -1/2 Kardinalität Person-Abgeordnetenmandat <0,*> -1 (beide falsch) Kardinalität Abgeordnetenmandat-Person <1,1> -1/2 Kardinalität Abgeordnetenmandat-Person <1,1> -1 (beide falsch) Kardinalität Abgeordnetenmandat-Bundestag <1,1> -1/2 Kardinalität Bundestag Abgeordnetenmandat <0/1,*> -1/2 (Mandat->Legislaturperiode kann man aus dem von-Datum ableiten - ok) Regierung Attribute fehlen -1 Regierung Schlüssel fehlt -1/2 Regierung.Periode nicht als Attribut, ist ja in der Beziehung zu Bundestag/LP drin -1/2 Kardinalität Bundestag-Regierung <0,*> -1/2 am Anfang null Kardinalität Bundestag-Regierung <0,*> -1/2 beliebig viele (siehe Schmidt->Kohl in 9.LP) Kardinalität Bundestag-Regierung <0,*> -1 am Anfang null, beliebig viele Kardinalität Regierung-Bundestag <1,1> -1/2 Regierung von/bis (oder von/bis) fehlt -1 Regierung von ist nicht key -1/2 Regierungsparteien fehlen -2 Regierungspartei muss Beziehung zu Partei mit von/bis sein -1.5 Regierungspartei von-bis fehlt -1/2 Kardinalität Partei-Regierungspartei <0,*> -1/2 Kardinalität Regierungspartei-Partei <1,1> -1/2 Kardinalität Regierung-Regierungspartei <0/1,*> -1/2 Bundeskanzler fehlt -1.5 Bundeskanzler weak -> dann muss es mindestens eine <>-Bez haben -1/2 Bundeskanzler muss Beziehung zu Person sein -1 Bundeskanzler.name nicht als Attr sondern <> Bez zu Person -1 Kardinalität Regierung-Kanzler <1,1> -1/2 (der Bundeskanzler muss nicht unbedingt Abgeordneter sein) Kardinalität Person-Kanzler <0,*> -1/2 Kardinalität Person-Kanzler <0,*> -1 (beide falsch) (Kanzler von/bis ist redundant, ist = Regierung von/bis) Kardinalität Kanzler-Person <1,1> -1/2 Ministeramt reifiziert -> muss Schlüssel oder <>+lokalen Schlüssel haben -1 <> reicht als id-Beziehung nicht aus, jemand kann ja 2 Ministerien gleichzeitig oder nacheinander in einer Regierung haben -1/2 <>+<> reichen als id-Beziehungen nicht aus, jemand kann ja 2 Ministerien gleichzeitig oder nacheinander in einer Regierung haben -1/2 Minister.name nicht als Attr sondern Bez zu Person -1/2 (Minister müssen nicht unbedingt Abgeordnete sein) Wenn Minister [[weak]] müsste es eine <>-Beziehung mit <1,1> haben -1/2 Ministeramt: Amt/Bezeichnung muss key sein -1/2 Ministeramt.Bezeichnung fehlt, müsste key sein -1 Ministeramt: von muss key sein -1/2 Ministeramt: bis muss nicht key sein -1/2 Minister von-bis fehlt -1/2 Minister von-bis fehlt, von müsste key sein -1 Minister von-bis an die Beziehung hängen geht nicht, von müsste key sein -1/2 Kardinalität Ministeramt-Person <1,1> -1/2 Kardinalität Ministeramt-Person <1,1> -1 (beide falsch) Kardinalität Ministeramt-Regierung <1,1> -1/2 Kardinalität Ministeramt-Regierung <1,1> -1 (beide falsch) Kardinalität Person-Ministeramt <0,*> -1/2 Kardinalität Partei-bildet <0,*> -1/2 (Ministeramt->Legislaturperiode kann man aus dem von-Datum ableiten - ok) Ministerium: Zeitraum in von/bis aufteilen, müsste Teil des Schlüssels sein -1 (Ministerium: Zeitraum in von/bis aufteilen, müsste Teil des Schlüssels sein WF) <>: nur doppelten Rahmen um eine Beziehung, wenn sie identifizierende Beziehung eines schwachen Entitätstyps ist -1/2 Subklassen mit ungeeigneter Modellierung: 2P Abzug Abgeordnetenmandat (und Bundeskanzler/Minister) als Subklassen ist problematisch: jede Person ist ja ggf "mehrmals" Abgeordneter/Kanzler/Minister, ggf auch mit verschiedenen Wahlkreis/Landesliste-Attributen. Müsste also "Beginn" (oder LPNr) auch key werden, insbesondere wenn <1,1> bei . -2 -> "Abgeordnetenmandat/Kanzler/Minister" reifizieren und in Beziehung setzen, oder nur einfache Beziehung Subklassen "Bundeskanzler" und "Minister" problematisch, siehe oben. *** Relationales Modell ****************************************************** Antwort bei Aufgabe 4 Bewertung siehe Aufgabe 3 Nur sehr fragmentarische Abdeckung der Aufgabenstellung Beispieltupel fehlen -1P PK fehlt -1 PK und FK over/underlined, aber die Referenzen, wohin die FKs gehen, fehlen (zu XX angegebenen FKs -> -XX/4P) Abgeordnetenmandate: Hier ist es jetzt keine Subklasse von person, sondern der Schlüssel durch LP ergänzt Person muss auch FK sein -1/2 Mandat _von_ (oder LPNr) muss Teil des PK sein -1/2 Mandat: Wenn _von_ PK ist, darf LPNr nicht auch PK sein -1/2 Mandat: von alleine reicht als PK nicht aus -1/2 Wahlkreis/Bundesland ist nicht Teil des PK -1/2 Partei bei Mandat/Abgeordneter redundant (siehe "Mitglied"), und ggf falsch (wenn jemand aus einer Partei austritt) -1/2 (Person+LP/Bundestag als PK geht "naiv", aber dann dürfte niemand zeitweise das Mandat niederlegen. Besser Person+von als PK) Person+von als PK ausreichend -1/2 (LPNr folgt logisch aus "von") von/bis fehlt -1/2 Mandat: Zeitraum in von/bis aufteilen, müsste Teil des Schlüssels sein FF Wahlkreis/Bundesland fehlt -1/2 Spalten BTWahl und LP ist redundant - ist ja prinzipiell beides dasselbe -1/2 Regierung: LP/Bundestag nicht Teil des PK (Merkel I kann ja nur zu einer LP gehören) -1/2 Spalte Kanzler fehlt -1/2 FK -1/2 FK Regierung.Kanzler fehlt -1/2 Wenn Spalte LP, dann muss es FK sein -1/2 Spalte "Partei" nicht zu Regierung (mehrere Parteien in einer Regierung, siehe Tab. Koalition) -1/2 (Tabelle Bundeskanzler besser als Spalte zu Regierung) Bundeskanzler: nur Regierung als PK, bei "Merkel I" kann ja nur eine Person BK sein -1/2 Bundeskanzler: Regierung als PK, A.Merkel war in mehreren Regierungen BK -1/2 Bundeskanzler: Regierung und Kanzler müssten FKs sein -1/2 Tabelle "Bundeskanzler" redundant - alles ist schon in "Regierung" -1/2 Regierung.Parteien ("CDU, SPD") nicht als Spalte, sondern separate n:m-Tabelle Regierungsparteien -2P FKRefs -1P Tabelle Regierungsparteien fehlt -2P FKRefs -1P Regierungsparteien: PK fehlt -1 Regierungsparteien: von (oder etwas schlechter "Regierung") muss auch PK sein -1/2 Regierungsparteien: wenn _von_ PK ist, darf LPNr nicht auch PK sein -1/2 Regierungsparteien: wenn _von_ PK ist, darf Regierung nicht auch PK sein -1/2 RegBeginn alleine kann nicht PK sein -1/2 Regierungsparteien: nur Partei+von ist PK -1/2 (Regierungsparteien: PK sicherer (Partei, von) falls eine Partei aus einer Reg aussteigt und später wieder einsteigt) Spalte LP ist redundant, funktional abhängig von Regierung -1/2 Regierungsparteien: Partei muss FK sein -1/2 Regierungsparteien: Regierung muss FK sein -1/2 Regierungsparteien von-bis fehlt -1/2 Koalition: Spalte Bundestag ist redundant -> in Regierung -1/2 Ministerämter: Bezeichnung des Ministeramtes fehlt -1/2 falls Person+Regierung key: Bezeichung/Name + von muss PK sein. Eine Person kann gleichzeitig/nacheinander mehrere Ministerämter in einer Regierung haben. -1/2 falls Person+Ministerium key: Bezeichung/Name + von muss PK sein. Eine Person kann dasselbe Ministeramt in mehreren Regierungen haben. -1/2 falls Regierung+Ministerium key: Bezeichung/Name + von muss PK sein. In einer Regierung kann ein Ministerposten nacheinander von mehreren Personen bekleidet werden -1/2 Minister: nur Amt,von ist PK -1/2 "von" muss auch PK sein -1/2 (und dann die anderen beiden nicht) (PK Person+Regierung+Bezeichnung geht "naiv", aber dann dürfte niemand zeitweise ein Ministerium abgeben. Besser Bezeichung+von als PK) (person,RegBeginn) als PK geht nicht. Eine Person kann in einer Reg mehrere Ministerämter haben (Wissing) oder mehrmals mit Pause -1/2 FK Minister.Person fehlt -1/2 FK Minister.Regierung fehlt -1/2 Spalte LP ist redundant, funktional abhängig von Regierung -1/2 Minister: PK zu umfangreich. -1/2 Wenn zuviele Attrs PK sind, wirkt es nicht mehr stark genug als Unique-Bedingung: bei Ihnen könnte man ein zusätzliches Tupel (Wissing, 8.12.2021, Verkehrsminister, null, Adenauer, IV) eintragen, ohne dass es abgelehnt würde. Notation der FK-Referenzen muss umgekehrt sein: referenzierendeTabelle(=wo es Foreign Key ist)(Spalte)-> referenzierte Tabelle(=wo es PK ist)(Spalte) PK fehlt -1/2 jeweils -1/4 wenn ein FK in der Tabelle overlined ist, aber keine Referenz dafür angegeben FK fehlt ganz -1/2 ### Antwort bei Aufg 4 Mandate: Wahlkreis fehlt -1/2 Person+von als PK ausreichend -1/2 FK Regierung.,Bundeskanzler fehlt -1/2 FK Regierung.LP fehlt-1/2 Tabelle "Bundeskanzler" redundant - alles ist schon in "Regierung" -1/2 (und FK Regierung fehlt) *************** CREATE TABLE *************** Regierung NOT NULL -1/2 Bezeichnung NOT NULL -1/2 Person NOT NULL -1/2 von NOT NULL -1/2 bis kann NULL sein, für alle die aktuell Ministerämter innehaben -1/2 CHECK (von < bis) -1/2 PK fehlt -1 Zusammengesetzter PK muss als Tabellenbedingung angegeben werden -1/2 PK siehe oben, Syntax OK FK Person fehlt -1/2 FK Regierung fehlt -1/2 PK siehe oben, Syntax ok von muss Teil des PK sein -1/2 PK siehe oben muss Tabellenconstraint sein (Vereinfachung) -1/2 die beiden FKs als getrennte Klauseln, gehen ja zu verschiedenen Tabellen -1/2 CHECK SYSDATE +1/2 *************** Queries *************** Algebra als Upload in Aufgabe 15. Bäume zu Anfragen (1), (4), (6), (8) - Bewertungen und Punkte siehe dort Baum zu Anfrage (4) - Bewertung und Punkte siehe dort nicht zielführend 0P jeweils -1/2P wenn Tabellenname/Spaltenname mit dem eigenen Schema in Aufgabe 3 nicht übereinstimmen Anfragen (1) DISTINCT fehlt -1/2 Test auf Überlappung Ministeramt und Parteimitgliedschaft fehlt (Vereinfachung) -1 Test auf Zeitraum unvollständig -1/2 Nutzt die nicht sinnvolle Spalte "Partei" in Minister, daher Vereinfachung (Zeitraum) -1 Nicht die Konstanten Merkel I-IV verwenden, sondern per Anfrage Regierungen herasufinden -1 Tabelle Person hat keine Spalte "Partei" -> Tabelle Mitglied benutzen -1 Algebra: Natural join würde "von" und "bis" in Minister und Mitglied auch joinen -> proj. notwendig -1/2 Natural join würde "von" und "bis" in Minister und Regierung auch joinen -> proj. notwendig -1/2 Natural join von Minister und Kanzler würde über Regierung UND Person joinen -> renaming notwendig -1/2 Regierung hat keine Spalte "Regierung" -> umbenennen nach "Name" -1/2 Test auf Überlappung Ministeramt und Parteimitgliedschaft fehlt (Vereinfachung) -1 Test auf Zeitraum unvollständig -1/2 Die relationale Algebra hat kein Aliasing "table.attr", daher muss man renamings und Projektionen anwenden um die Attribute passend zu machen -1 pi[name] am Ende hat die Wahl zwischen Regierung.Name und Minister.Name -1/2 Test auf Merkel fehlt -1/2 Anfragen (2) COUNT pro Bundesland Test auf dieselbe Legislaturperiode fehlt -1 COUNT DISTINCT macht es hier falsch, denn z.B. Merkel wurde ja 4x gewählt -1/2 Nach der Gruppierung braucht man kein DISTINCT mehr Nach der Gruppierung braucht man keinen Test auf count>0, da alles wo count=0 ist sowieso nicht dabei ist Anfragen (3) NEG <5% Namen, nicht Abkürzungen der Parteien -1 Name vs Abk der Parteien -1 Name, nicht Abk ausgeben -1/2 Das sind alle, die mindestens einmal über 5% bekommen haben (also auch z.B. die FDP, die im richtigen Ergebnis nicht dabei wäre) 1P Das sind alle, die mindestens einmal unter 5% bekommen haben 1P das wären alle (incl Duplikate -1/2) die irgendwann mal mehr als 5% hatten 1P Korrelation der Subquery mit Partei aussen fehlt -1 Renaming vor dem Join, sonst passt es nicht mal -1/2 Anfragen (4) NEG <5% Algebra Minus nur auf zwei Ausdrücke mit denselben Attributen (und Anzahl) anwendbar: Namen, nicht Abkürzungen der Parteien: vor dem Minus passende Projektion und Renaming -1/2 vor dem Join passendes Renaming -1/2 dann dranjoinen und vollen Namen -1 Nach dem minus ist nur [abk] da -> Partei nochmal dranjoinen -1 zuletzt noch pi[name] -1/2 Anfragen (5) DIV Grüne Das Div-Pattern ist richtig, aber was gehört in die Zeilen? Vollständige Namen der Parteien, nicht Abk. -1 Zeile 6 müsste noch "Grüne" dazu -1 -> Grüne muss auf die mittlere Ebene -2 Das wären alle, die irgendwann einmal mit den Grünen gemeinsam regiert haben 1P Es wären dann alle, die NIE mit den Grünen gemeinsam regiert haben 2P (innen auch ein NOT EXISTS und die Grünen dann auf die mittlere Ebene) Die Tabelle "Regierungsparteien" existiert bei Ihnen in Aufg 3 nicht -1 ### beteiligt in der Mitte, Grüne innen: alle Parteien, ohne diejenigen, die irgendwann mal an einer Regierung beteiligt waren, an der die Grünen nicht beteiligt waren. Das gesuchte Ergebnis, die SPD, wäre nicht dabei. 2.5P Es gibt eine Möglichkeit, die hier notwendige "relationale Division" mit COUNT zu machen, die ist aber anders (und etwas hinterhältig, weil man die Bedingung "Grüne" zweimal reinbringen muss). Zeilen 2-Count: Fehler, falls eine Partei zeitweise aus einer solchen Reg, ausgeschieden war und dann wieder reinkam -1/2 (besser hier DISTINCT Regierung zählen) Zeilen 5-6 dort auf jeden Fall Regierungen zählen (sonst zählt die Ampel 3x für SPD+Grüne+FDP mit) -1 Anfrage (6) Dass es eine Division ist, ist richtig, "Partei" nicht links unten dranjoinen (wird ja eh wieder wegprojiziert), sondern nach der Division, um den vollen Namen zu bekommen. -1 div: links<->rechts vertauscht -1/2 Vollständige Namen der Parteien, nicht Abk. -1 Rechts fehlt pi…[Regierung] -1 NOT EXISTS gibt es in der Algebra nicht, und das Innere kann auch P.Abk nicht benutzen 0P Anfragen (7) Kanzler, die nie Minister waren DISTINCT fehlt -1/2 Test auf "Vorher" fehlt - und das macht die Aufgabe erst kompliziert 1P Innere subquery nicht mit der Person aussen korreliert -1 Das sind alle, die irgendwann mal Kanzler und irgendwann (vorher/nachher?) mal Minister waren 1P Fast richtig. Das sind aber alle diejenigen, die NIE Kanzler waren, ohne vorher Minister gewesen zu sein. Gegenbeispiel: LP 17 Kanzler, LP 18 Minister, LP 19 Kanzler. 2P Anstelle des min(b2) in Zeile 7 könnte man einfacher das b aus Zeile 2 verwenden. Anfragen (8) vor dem Join von minister+Regierung "bis" wegprojizieren -1/2 von umbenennen -1/2 vor dem minus passend renamen -1/2 vor dem join passend renamen -1/2 Vergleich, dass Kanzler VORHER nie Minister war, fehlt (macht den Baum erheblich komplizierter) 2P ### Zeile 5: Bundeskanzler hat keine Spalte "von" -1 Die relationale Algebra hat kein Aliasing "table.attr", daher muss man renamings und Projektionen anwenden um die Attribute passend zu machen FF, Vereinfachung -1/2 Die relationale Algebra hat kein MIN und Der Ausdruck "pi[Person,MIN(Von)](Bundeskanzler")" ohne GROUP BY um das MIN der jeweiligen Person herauszufinden wäre auch nicht sinnvoll -> geht gaaaanz anders 1P Fast richtig. Das sind aber alle diejenigen, die NIE Kanzler waren, ohne vorher Minister gewesen zu sein. Gegenbeispiel: LP 17 Kanzler, LP 18 Minister, LP 19 Kanzler. 3P ## wenn die mvon meistens 1.5P Anfragen (9) Top2Parteien man muss noch iw1.partei=iw2.partei ausschliessen -1/2 Das gäbe aber auch nur die Regierungen, an denen die stärkste Partei beteiligt ist. 2P Das View Top2Parteien funktioniert so nicht. Zeile 8 ordnet alles nach LPNr. Man müsste für jede LP die TOP2 ausgeben, und das ist mit LIMIT nicht machbar Das View Top2Parteien funktioniert so nicht. Zeile 8 ordnet ALLE Werte nach Prozent. Man müsste für jede LP die TOP2 ausgeben, und das ist mit LIMIT nicht machbar Auch in Zeilen 16-18 müsste man dann wieder die Top-2 der passenden LP suchen, auch das geht so garnicht. Die Tabelle "Regierungsparteien" existiert bei Ihnen in Aufg 3 nicht. -1 Im Prinzip richtig. LIMIT ist im allgemeinen in Subqueries mit IN nicht erlaubt 3P (Vereinfachung) Tabelle Mitglied: m Parteimitgliedschaften von Personen hat keine Spalte "m.Regierung" nach Aufg 3 müsste es die Tabelle "Koalition" sein Zeile 15: und in derselben Legislaturperiode/BTWahl -1 Das sind alle, bei denen mindestens eine der beiden größten Parteien beteiligt ist. Bei einer Groko würde die Regierung 2x ausgegeben 1P ### UPDATE: Tabelle Minister: bei den Ministern der Ampel "bis" auf "1.4.2025" setzen -1/2 Tabelle Regierungsparteien Ampel-Amtszeit SPD+Grüne beenden (FF, Vereinfachung -1/2) INSERT into Regierung ... Merz I -1/2 Das bringt nur die neue Regierung ins Amt, beendet aber nicht die alte Regierung. 2.5 Behandlung der Regierungsparteien fehlt (FF, aber Vereinfachung) -1P ### Anfrage Sitze im Parlament: Das ist die exakte Variante, die die einzelnen Abgeordneten betrachtet Das ist die Sitzverteilung zu Beginn der Legislaturperiode, nicht zum 31.1. (Parteiwechsel möglich!) -2 Die Struktur ist im Prinzip richtig, aber es sollten ja die Sitze der Regierungsparteien betrachtet werden (FF, da Tabelle Regierungsparteien fehlt, Vereinfachung) -1P Stark vereinfacht 2P Anteil der Parlamentssitze, nicht nur die Stimmen-Prozente aufsummieren. 2P %Nicht die Konstante 20 verwenden, sondern anfragen, zu welcher LP und Wahl %die Regierung gehört, die zum 31.1.2025 amtierte. -2 % MIST, die "20" verwende ich selber in der Aufgabenstellung Regierungsparteien zum 31.1.2025 ebenfalls über Anfrage herausfinden (die FDP gehörte da ja schon nicht mehr dazu) -2 LPNr 20 statt 21. todo: Gesamtsitzzahl der LP berechnen ... 3P ################