Hilfe zur Klausuraufgabe Alte Klausuren besprechen

Bin gerade etwas dabei einige Klausuren der letzten Semester zu bearbeiten.
Es gibt leider keine Lösungen dazu, daher frage ich einfach mal, ob sich hier einige Leute finden, die Interesse daran haben, die Lösungen zu vergleichen bzw. Besonderheiten oder Unklarheiten der Klausuren zu besprechen.

Frage zu Klausur SoSe2018:

Zu der Aufgabe 3b aus der Klausur SoSe 2018, kann ich mir keine richtige Lösung zusammen grübeln, weil ich die Kurseinheiten in dem Bereich der Relationenalgebra recht kurz formuliert finde.

Mein Lösungsansatz ist dahingehend, dass ich die beiden Datensätze in eine neue Datenbank über eine Projektion integriere und anschließend über eine Restriktion die gesuchten Daten heraus filtere.

Aufgabe 3b i)
Projektion:
NeueDatenbank = ZuordnungTierarten[ZuordnungTierarten.Name = Fördermitglieder.Name]Fördermitglieder

Restriktion:
NeueDatenbank[NeueDatenbank.Tierart = Empty]
( Dies soll die Mitglieder mit dem leeren Feld Tierart, also die reinen Fördermitglieder herausfiltern )
( = Empty konnte ich leider nirgends als Notation finden, vielleicht muss man dort auch = 0 setzen )

Aufgabe 3b ii)
Dies ist nicht in einem Schritt möglich, da zuerst die Daten in einer neuen Datenbank zusammengeführt werden müssen.

Wäre interessant zu sehen, ob es hier geschicktere Lösungsansätze gibt bzw. meiner überhaupt richtig ist.
Die Zeit scheint relativ knapp bemessen zu sein, ich muss zugeben, dass ich deutlich länger als 4 Minuten (Aufgabe 3b i und ii bringen gerade mal 4 Punkte) gebraucht habe, um diesen Lösungsansatz so zu formulieren.
 
Jessica: ich bin dabei - ab nächste Woche allerdings, die Woche habe ich noch größere Sorgen :-( mit EOOP .
Wollte nur Bescheid geben, du bist nicht allein beim Modellieren :allsmiles:
 
Hast du inzwischen schon ein paar Aufgaben zeichnen können?
Bei mir geht es etwas schleppend voran, das Leben kam mal wieder dazwischen.
Einige generelle Fragen haben sich aber angehäuft.
 
Naja, also generell denke ich, das davon auszugehen ist, das eine Datenbank existiert bzw. diese für die Aufgabenstellung erst mal keine Rolle spielt.

Dich interessiert hierbei ja nicht die Struktur der Datenbank, ob du einen MySQL-Server oder Oracle verwendest, welche Infrastruktur, wie viele Nutzer, usw. Du hast hier nur einen Ausschnitt von ein paar Daten gegeben, aus denen du erstens erkennen sollst, wie diese Daten zusammen hängen und zweitens, wie du diese Daten so manipulieren kannst, das du die Darstellung bekommst, die in der Aufgabenstellung verlangt ist - mittels der Mittel, die dir gegeben sind, also die Mittel der Relationenalgebra. Diese sind Vereinigung, Durchschnitt, Differenz und symmetrische Differenz, außerdem Projektion, Verbund und Restriktion. Das ist - um übrigens mal das am praktischen Beispiel zu erklären - der Schritt, bevor du irgendwas in SQL schreibst, das du dir überlegst, was du eigentlich mit deinen Daten anstellen willst.

Auf die Aufgabe bezogen: Das Thema ist einfach die grundlegende Frage, was zu tun wäre, um alle aktiven Mitglieder herauszubekommen.

Dazu folgende Tatsachen:
- Mitglieder sind Fördermitglieder als auch jene, die nur ein Tier besitzen.
- Mitglieder können beides sein; ein Tierhalter kann gleichzeitig auch Fördermitglied sein.
- Außerdem gibt es welche, die nur Tierhalter sind oder welche, die nur Fördermitglieder sind.
- Beide Tabellen hängen hier über die Namen ihrer Mitglieder zusammen.
Ergo: Es gibt welche, die nur in der oberen Relation vorkommen, welche, die nur in der unteren Relation vorkommen, und welche, die in beiden vorkommen.
Bei denen, die in beiden vorkommen soll sichergestellt werden, das diese nicht doppelt vorkommen.

Zuerst mal interessieren uns die Einträge aus beiden Tabellen, und nicht nur einer.
Da wir hierbei nicht nur die beachten, die in beiden Relationen vorkommen sondern es auch welche gibt, die jeweils in nur einer vorkommen können, müssen wir hierbei erst mal die beiden miteinander vereinen. Also Vereinigung.
Dadurch kriegen wir jetzt erst mal alle Einträge. Um das mal zu zeigen:

Name Adresse Tierart
_________________________________
Bauer Feldweg 1 --
Jäger Jagdweg 5 Hunde
Jäger Jagdweg 5 Katzen
Wolff Waldrand 7 Hunde
Krebs An den Teichen 9 --
Fischer An den Teichen 3 Reptilien
Vogelsang Sperlingsweg 4 Vögel
Vogelsang Sperlingsweg 4 Kleintiere
Haase Feldweg 3 --
Hirschmann Waldrand 10 Katzen
Hirschmann Waldrand 10 Vögel
Schäfer An der Weide 12 --

(keine Garantie auf die Richtigkeit der Reihenfolge, jedoch sind die Einträge richtig)

Wieso steht nun bei einigen nix drin unter Tierart? Weil sie keine Tiere besitzen, sondern nur Fördermitglieder sind.
Jetzt haben wir jedoch zwei Probleme übrig:
1. Wir verschicken vielleicht an die Adresse oder den Namen, nicht jedoch an irgendwelche Tierarten Post.
2. Wir haben z.b. Hirschmann, Jäger und Vogelsang die mehr als eine Tierart haben.

Uns interessieren jedoch nur die Namen. Und zwar ohne Duplikate.
Hier müssen wir nun die Projektion betreiben: Wir wählen nur die Namen aus.

Somit kommen wir dann zu folgendem Ergebnis:

Name
_________
Bauer
Jäger
Wolff
Krebs
Fischer
Vogelsang
Haase
Hirschmann
Schäfer

WICHTIG: Die Projektion wählt Attribute aus und eliminiert Duplikate. Sie ist also nicht gleichzusetzen mit z.B. einem einfachen Select aus der SQL, dieser würde nämlich Duplikate beinhalten können, dafür kann man entweder gruppieren oder ein distinct verwenden. Das nur so als kleiner Diskurs über SQL, für die Aufgabe jedoch ist der erste Satz nur relevant.

Damit kommen wir zur zweiten Frage, was nun offensichtlich sein sollte: Wir müssen so oder so erst mal die Einträge beider Relationen bekommen. Wir können nicht im selben Schritt Duplikate eliminieren und die Vereinigungsmenge der Relationen erstellen.

Die dritte Aufgabe habe ich bereits oben beantwortet.

Ich denke, es sollte damit etwas klarer sein, was hier eigentlich gemeint ist.

Die Mittel der Relationenalgebra und die Beispiele dazu sind in KE 3: Datenbankbenutzung vom Kurs Datenmodellierung und Datenbanksysteme auf Seite 25 ff zu finden.
 
Name Adresse Tierart
_________________________________
Bauer Feldweg 1 --
Jäger Jagdweg 5 Hunde
Jäger Jagdweg 5 Katzen
Wolff Waldrand 7 Hunde
Krebs An den Teichen 9 --
Fischer An den Teichen 3 Reptilien
Vogelsang Sperlingsweg 4 Vögel
Vogelsang Sperlingsweg 4 Kleintiere
Haase Feldweg 3 --
Hirschmann Waldrand 10 Katzen
Hirschmann Waldrand 10 Vögel
Schäfer An der Weide 12 --

Wenn man dies allerdings dann als die Lösung zu 3 iii) ansieht, hat man dort in der vorgegebenen Tabelle weniger Zeilen als benötigt.
Dort sind lediglich 9 Zeilen vorgegeben, diese Lösung würde allerdings 12 Zeilen benötigen.

Nachvollziehbar ist die Lösung soweit, das erst alles in einer Tabelle zusammengeführt wird.

Der zweite Schritt:
Name
_________
Bauer
Jäger
Wolff
Krebs
Fischer
Vogelsang
Haase
Hirschmann
Schäfer

liefert uns doch aber nun lediglich eine Tabelle mit Namen aller Mitglieder.
Wie soll nun rein am Namen der Status, aktives Mitglied oder Fördermitglied ermittelt werden?
Die Ermittlung aktives Mitglied oder Fördermitglied, kann doch nur über die Tierart geschehen.
 
Wenn man dies allerdings dann als die Lösung zu 3 iii) ansieht, hat man dort in der vorgegebenen Tabelle weniger Zeilen als benötigt.
Dort sind lediglich 9 Zeilen vorgegeben, diese Lösung würde allerdings 12 Zeilen benötigen.

Nachvollziehbar ist die Lösung soweit, das erst alles in einer Tabelle zusammengeführt wird.

Der zweite Schritt:
Name
_________
Bauer
Jäger
Wolff
Krebs
Fischer
Vogelsang
Haase
Hirschmann
Schäfer

liefert uns doch aber nun lediglich eine Tabelle mit Namen aller Mitglieder.
Wie soll nun rein am Namen der Status, aktives Mitglied oder Fördermitglied ermittelt werden?
Die Ermittlung aktives Mitglied oder Fördermitglied, kann doch nur über die Tierart geschehen.

Du kriegst bei einer Vereinigung alle Einträge, das heißt inklusive Duplikate. Von denen gibt es drei doppelt, dementsprechend hast du 12 Einträge.Wendest du nun die Projektion an, das du dir nur die Namen geben lässt, werden Duplikate automatisch eliminiert. Dementsprechend kommst du im zweiten Schritt auf 9 Zeilen.

Der Status ist für die Aufgabe übrigens nicht gefragt worden, jedoch nur, das alle, egal ob Fördermitglied oder nicht, ausgegeben werden sollen, wobei niemand doppelt ausgegeben werden soll.
 
Du kriegst bei einer Vereinigung alle Einträge, das heißt inklusive Duplikate. Von denen gibt es drei doppelt, dementsprechend hast du 12 Einträge.Wendest du nun die Projektion an, das du dir nur die Namen geben lässt, werden Duplikate automatisch eliminiert. Dementsprechend kommst du im zweiten Schritt auf 9 Zeilen.

Der Status ist für die Aufgabe übrigens nicht gefragt worden, jedoch nur, das alle, egal ob Fördermitglied oder nicht, ausgegeben werden sollen, wobei niemand doppelt ausgegeben werden soll.

Schau mal in der Aufgabenstellung unterhalb der beiden Tabellen "Zuordnung Tierarten" und "Fördermitglieder" ganz unten auf dem Blatt.
Für mich geht aus dem Absatz dort hervor, das hier eine Unterscheidung zwischen aktiven Mitglieder und Fördermitgliedern stattfinden soll.
Ansonsten wäre das sehr irreführend formuliert.
 
"Es wurden zu einer Mitgliederversammlung versehentlich nur die aktiven Mitglieder eingeladen. Die restlichen Mitglieder sollen nun auch Einladungen erhalten, dabei soll jedoch vermieden werden, dass diejenigen, die sowohl aktive als auch Fördermitglieder sind, zwei Einladungen enthalten."

Da steht nicht drin, das du nun unterscheiden sollst. Du sollst aber Duplikate verhindern. Somit wäre meine Lösung durchaus möglich. Andere Interpretation: Nur reine Fördermitglieder sollen noch zusätzlich eine Einladung erhalten.
Daraus folgt, dass du alle aus der unteren Tabelle nimmst und die eliminierst, die auch in der oberen Tabelle vorkommen, somit also eine Nachricht nur an die Fördermitglieder ausgibst, die reine Fördermitglieder sind und nicht als Mitglieder auftauchen.
Dafür müsstest du die symmetrische Differenz bilden, womit du dann eine Tabelle hättest, in der reine Mitglieder und reine Fördermitglieder, jedoch nicht beides vorkommen kann. Mit diesem Zwischenergebnis müsstest du wieder die symmetrische Differenz bilden mit der oberen Table, womit du schließlich auch die eliminierst, die reine Mitglieder sind. Ginge auch, wäre jedoch keine saubere Lösung. Du hättest am Ende aufgrund der symmetrischen Differenz nämlich eine Table des Typs Name - Adresse - Tierart wobei in Tierart immer NULL drin steht. Daher kann ich mir nicht vorstellen, das diese Interpretation richtig wäre.
 
Hallo Stefan,

Bist du dir sicher das man hier die Vereinigung anwenden kann?
Meiner Meinung nach sind die 2 Tabellen nicht vereinigungsverträglich, da die erste Tabelle noch die Spalte "Tierart" beinhaltet?
 
Stimmt, habe aus SQL-Sicht zu sehr nachgedacht, und da ginge das durchaus, wenn du die Attribute wählst und dann bei einem Table, wo das Attribut nicht vorkommt, stattdessen NULL mit reinnimmst...ich überleg mir nachher oder morgen nochmal ne andere Lösung bzw. ob das so funktioniert.
 
Ja, ich habe es auch so am Anfang wie du gemacht
Aber später wurde mir klar das es leider nicht klappt
 
Nachdem die Aufgabe 3 so anscheinend nicht richtig aufgeht, habe ich mich da nochmals dran gesetzt.

i)
Projektion "Zuordnung Tierarten" anhand [Name, Adresse]
Differenz "Fördermitglieder" - ( Projektion "Zuordnung Tierarten" )

ii)
Es müssen zuerst Duplikate in "Zuordnung Tierarten" eliminiert werden und die unrelevante Spalte Tierart.

iii)
Projektion "Zuordnung Tierarten" anhand [Name, Adresse]:
Jäger Jagdweg 5
Wolff Waldrand 7
Fischer An den Teichen 3
Vogelsang Sperlingsweg 4
Hirschmann Waldrand 10

iv)
Reine Fördermitglieder:
Schäfer An der Weide 12
Bauer Feldweg 1
Krebs An den Teichen 9
Haase Feldweg 3
 
Meine Handskizze zu Aufgabe 4 war leider total unübersichtlich, habe jetzt aber mal alles digital übertragen, so das man es auch nachvollziehen kann.
Hier mal meine Idee zu Aufgabe4:
Aufgabe-digi.jpg
 
Nachdem die Aufgabe 3 so anscheinend nicht richtig aufgeht, habe ich mich da nochmals dran gesetzt.

i)
Projektion "Zuordnung Tierarten" anhand [Name, Adresse]
Differenz "Fördermitglieder" - ( Projektion "Zuordnung Tierarten" )

ii)
Es müssen zuerst Duplikate in "Zuordnung Tierarten" eliminiert werden und die unrelevante Spalte Tierart.

iii)
Projektion "Zuordnung Tierarten" anhand [Name, Adresse]:
Jäger Jagdweg 5
Wolff Waldrand 7
Fischer An den Teichen 3
Vogelsang Sperlingsweg 4
Hirschmann Waldrand 10

iv)
Reine Fördermitglieder:
Schäfer An der Weide 12
Bauer Feldweg 1
Krebs An den Teichen 9
Haase Feldweg 3

yop, scheint die richtige Lösung zu sein. Zumindest wenn man die Aufgabenstellung wirklich so interpretiert.
 
Ich habe die Aufgabe 4 nochmal bearbeitet

Und ich bin mir nicht kann sicher ob dein Vorschlag ganz richtig ist

Beim XOR "Neukunde" glaube ich das es anders gezeichnet werden muss

Wenn ein Kunde Neukunde ist und wenn er eine Bestellung von über 50 Euro hat bekommt er laut der Zeichnung keine Probierportion
Sondern nur Altkunden bekommen sie

Vielleicht liege ich auch falsch
 
Meiner Meinung nach sollte als erstes Erfragt werden ob die Bestellung größer als 50 Euro ist, wenn ja dann GPS " Probierportion" modellieren, dann XOR "Neukunde?"
Wenn ja noch GPS "Gutschein" hinzufügen
Am Ende alle verbinden, GPS "Versenden" und dann endet der Prozess
 
Ich habe die Aufgabe 4 nochmal bearbeitet

Und ich bin mir nicht kann sicher ob dein Vorschlag ganz richtig ist

Beim XOR "Neukunde" glaube ich das es anders gezeichnet werden muss

Wenn ein Kunde Neukunde ist und wenn er eine Bestellung von über 50 Euro hat bekommt er laut der Zeichnung keine Probierportion
Sondern nur Altkunden bekommen sie

Vielleicht liege ich auch falsch

Das müsste wohl wirklich andersrum. Das passiert mir leider öfters, wenn ich versuche die Aufgaben in der vorgegebenen Zeit zu bearbeiten.
Da fehlt dann am Ende Zeit alles nochmal auf Sinnhaftigkeit zu prüfen.
 
Schafft es eigentlich irgendjemand die Aufgabe 4 der Klausur WiSe17/18 in der gegebenen Zeit von 30 Minuten zu lösen?
Ich komme dort auf 15 Geschäftsprozesse und 7 oder 8 Konnektoren.
Finde das ist eigentlich unmöglich halbwegs sauber hinzubekommen mit sinnvollen Beschriftungen zeitlich.
 
Ich habe es noch nicht versucht die Aufgaben auf Zeit zu lösen
Aber ich glaube wirklich das es schwer gehen wird.
In der Klausur vielleicht lieber erstmal mit den Datenbanken und OO Systemanalyse zu starten und dan die GP Aufgabe
 
EA WS2018/2019 Kurs 818

Kardinalitäten Haus:
Gibt es wohl einen expliziten Grund weshalb der Lehrstuhl in der Musterlösung die Kardinalitäten so definiert hat?
Haus 1...* > Hausangestellte 1...*
Haus 1...* > Fahrer 0...*
Haus 1...1 > Rezeptionist 1...* (Unklar weshalb hier auf Haus 1...1 ausgewichen wurde)
(Normal könnte man doch hier für Haus entweder alle 3 auf 1...* oder 1...1 setzen, der Einheitlichkeit halber. Oder entgeht mir etwas?)
 
Zurück
Oben