Einsendeaufgaben EA-Besprechung WS 2016/17 EA1 00817 (01.12.2016)

Dann will ich mal loslegen. Habe mich vor allem an den Musterlösungen des LS orientiert.

Aufgabe 2a)
SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Mitarbeiter.Gehalt FROM Mitarbeiter, Filiale, Adresse, Fortbildung
WHERE Mitarbeiter.Nachname = Mitarbeiter.Nachname
AND Mitarbeiter.Vorname = Mitarbeiter.Vorname
AND FilialNummer = „58097“
AND FortbildungName = „Carving Ski“
ORDER BY Mitarbeiter.Gehalt DESC

Aufgabe 2b)
SELECT Mitarbeiter.MitarbeiterNummer, Mitarbeiter.Nachname, Mitarbeiter.Vorname, Mitarbeiter.Gehalt, Filiale.FilialBezeichnung, Fortbildung.FortbildungName,
FROM Mitarbeiter, Filiale, Fortbildung
WHERE Mitarbeiter.Gehalt >= 2000
AND Mitarbeiter.Nachname = Mitarbeiter.Nachname
AND Mitarbeiter.Vorname = Mitarbeiter.Vorname
AND FortbildungName = „SkiFein“
AND FilialBezeichnung = „Sporty Hagen“
ORDER BY Mitarbeiter.MitarbeiterNummer ASC
 
Und hier die erste Aufgabe, wobei ich mir da völlig unsicher bin, ob ich das System verstanden habe....
 

Anhänge

  • 1.EA-Aufgabe 1.pdf
    38,6 KB · Aufrufe: 150
Hi Cris,

Aufgabe 1 habe ich auch so.

Jedoch habe ich Buchung - Rechnung die Kardinalität 1:1 angegeben weil: "Dabei bezieht sich eine Rechnung stets auf eine Buchung" angegeben ist.
Und ich habe unter Ausrüstungsgegenstand noch eine Ebene mit Filiale eingebaut. Keine Ahnung aber, ob das notwendig ist.
 
Ich teile dann hiermit auch meine Lösung. Im Vergleich zu euren Lösung habe ich noch folgende Unterschiede:

- die Beziehung Dienstleistung <-> Buchung habe ich als mc zu m Relation modelliert weil: Zu einer Buchung können keine, eine oder mehrere Dienstleistungen gebucht werden; eine Dienstleistung kann zu einer oder mehr Buchungen gehören (so zumindest mein Verständnis)
- die Relation Kunde <-> Rechnung habe ich nicht explizit hergestellt, ist das wirklich notwendig?
- die Relation Ausrüstungsgegenstand <-> Filiale habe ich auch hergestellt
- ich habe noch eine Relation Hersteller definiert, ich hielt das für sinnvoll weil laut Aufgabenstellung "für alle zu buchenden Gegenstände" der Hersteller vermerkt werden soll (auch wenn es m. E. sinniger wäre dies direkt an den Artikel zu hängen)
 

Anhänge

  • 00817 EA1 - ERM.png
    00817 EA1 - ERM.png
    19,3 KB · Aufrufe: 94
WHERE Mitarbeiter.Nachname = Mitarbeiter.Nachname
AND Mitarbeiter.Vorname = Mitarbeiter.Vorname

könnte mir jmd mal erklären wie und warum ich diese Bedingungen bilde?

Die Auswahl :

WHERE Filiale.FilialNummer = "58097"
AND Fortbildung.FortbildungName = "Carving-Ski"

ist mir klar. Aber was mache ich "davor". Ich weiß nicht wie ich meine Frage korrekt formulieren soll ohne dabei völlig planlos zu klingen aber ich hoffe ihr wisst was ich meine. Im Skript und in den letzten EA´s wird mir das auch nicht klar. Warum und nach welchen Schema wird zum Beginn der WHERE Bedingung immer wieder z. Bsp. WHERE Student.MatrikelNr = Teilnehmerliste.MatrikelNr festgelegt ???

Ich würde mich sehr über erklärende Hilfe freuen denn meine "WHERE" Bedingungen sehen immer ganz anders aus :O(

Ganz liebe Grüße Sophia
 
Ich poste einmal meine Lösung zu den Abfragen:

Aufgabe 2a)
SELECT Mitarbeiter.Gehalt, Mitarbeiter.Nachname, Mitarbeiter.Vorname
FROM Mitarbeiter, Filiale, Adresse, Fortbildung
WHERE Filiale.AdressNummer = Adresse.Adressnummer
AND Adresse.PLZ = '58097'
AND Mitarbeiter.Fortbildungnummer = Fortbildung.FortbildungNummer
AND Fortbildung.FortbildungName = 'Carving-Ski'
ORDER BY Mitarbeiter.Gehalt DESC


Aufgabe 2b)
SELECT Mitarbeiter.MitarbeiterNummer, Mitarbeiter.Nachname, Mitarbeiter.Vorname, Fortbildung.FortbildungName
FROM Mitarbeiter, Filiale, Fortbildung
WHERE Mitarbeiter.FilialNummer = Filiale.Filialnummer
AND Filiale.FilialBezeichnung = 'Sporty Hagen'
AND Mitarbeiter.FortbildungNummer = Fortbildung.FortbildungNummer
AND Fortbildung.FortbildungName = 'SkiFein'
AND Mitarbeiter.Gehalt > 2000
ORDER BY Mitarbeiter.MitarbeiterNummer ASC


Ich persönlich bin zwar ein Freund von Theorie aber umso ein Fan von Praxis. Ich habe mir einfach eine Datenbank erstellt und mit den Abfragen herumgespielt.

@Sophia85 : Im Prinzip geht es darum die Beziehungen zwischen den Relationen korrekt herzustellen. Die notwendigen Relationen ergeben sich aus der Aufgabenstellung.

Ich versuche mal mein Vorgehen anhand der Aufgabe 2b zu erläutern:
Das Ergebnis soll folgende Attribute anzeigen: Mitarbeiternummer, Vorname, Nachname, Fortbildungsname

Bedingungen:
- der Mitarbeiter arbeitet in einer Filiale mit der Bezeichnung "Sporty Hagen"
- der Mitarbeiter hat an der Fortbildung mit dem Namen "SkiFein" teilgenommen
- die Liste soll nur Mitarbeiter beinhalten, die mehr als 2000€ verdienen

Alle relevanten Informationen finden wir in den Relationen Mitarbeiter, Fililale sowie Fortbildung. Der SELECT und FROM Teil sieht ergibt sich daher zu:
SELECT Mitarbeiter.MitarbeiterNummer, Mitarbeiter.Nachname, Mitarbeiter.Vorname, Fortbildung.FortbildungName
FROM Mitarbeiter, Filiale, Fortbildung

Jetzt muss man die Relation Mitarbeiter mit der Relation Filiale "verknüpfen", dies geschieht über das Attribut "FilialNummer" da man nicht direkt an den gewünschten Datensatz erhält:
WHERE Mitarbeiter.FilialNummer = Filiale.Filialnummer

Jetzt schränkt man die Ergebnisse auf die Filiale mit Bezeichnung "Sporty Hagen" ein:
AND Filiale.FilialBezeichnung = 'Sporty Hagen'

Jetzt muss man noch die Relation Mitarbeiter mit der Relation "Fortbildung" verknüpfen, dies geschieht über das gemeinsame Attribut "FortbildungNummer":
AND Mitarbeiter.Fortbildungnummer = Fortbildung.FortbildungNummer

Und man schränkt die Suche wieder ein:
AND Fortbildung.FortbildungName = 'SkiFein'

Den Rest spar ich mir. Also es geht im Prinzip darum zu überlegen, über welche Relationen und Attribute man zu dem gewünschten Ergebnis kommt. Am besten finde ich immer noch etwas Praxis. Also am besten nen SQL-Server Express herunterladen, die paar Tabellen anlegen, mit ein paar Daten füllen und schauen was herauskommt, wenn man die Abfragen formuliert.
 
Super erklärt Dirk! Vielen Dank! Dein Tipp mit dem SQL-Server werde ich auch noch ausprobieren...
 
@dirk_s ich habe die Aufgabe 2a) genauso wie du.
Bei der Aufgabe 2b) stimme ich dir auch zu. Nur im SELECT habe ich die Mitarbeiternummer nicht mit aufgenommen, da zwar hiernach sortiert wird, aber diese nicht für die auszugebene Liste mit aufgeführt wird. Ich weiß aber nicht, ob man nach einem Spaltenwert sortieren kann, wenn dieser nicht Teil der Ausgabe ist.
Für Aufgabe 1 habe ich auch die Filiale und den Herstellern als Relation mit aufgenommen. Ich bin mir wegen der Konstellation und der Kardinalitäten noch nicht ganz sicher. Werde mein Ergebnis dann mit euch teilen.
 
Aufgabe 1 sieht bei mir wie im Anhang aus, ich habe die 1:1 Beziehung zwischen Kunde und Rechnung zusätzlich dargestellt.

Aufgabe 2a und 2b) Habe ich fast genauso wie ihr, nur habe ich in der ersten Zeile erst den Vor- und dann den Nachnamen. Ist aber sicherlich nicht kriegsentscheidend :-D
SELECT Mitarbeiter.Gehalt, Mitarbeiter.Vorname, Mitarbeiter.Nachname bzw.
SELECT Mitarbeiter.MitarbeiterNummer, Mitarbeiter.Vorname, Mitarbeiter.Nachname, Fortbildung.FortbildungName

PS: In der EA für den Lehrstuhl habe ich es nochmal in "schön" gemalt :-D

bab22198bfb101afc57224c7e4422a68.jpg
 
Ich habe bei Aufgabe 2a) eine kleine Abweichung zu Euren Lösungen, die ich kurz mit Euch klären möchte. Ich habe nämlich den Verbund Adressnummer aus den Tabellen "Filiale" und "Adresse" und zusätzlich den Verbund Filialnummer der Tabellen "Mitarbeiter" und "Filiale". Die Adressnummer hat doch keine Verknüpfung zur Tabelle Mitarbeiter. Diesen Verbund kriege ich m. E. nur über die Filialnummer hin.

Meine Lösung sieht dann so aus:

SELECT Mitarbeiter.Gehalt, Mitarbeiter.Nachname, Mitarbeiter.Vorname
FROM Mitarbeiter, Filiale, Adresse, Fortbildung
WHERE Mitarbeiter.FilialNummer = Filiale.FilialNummer
AND Filiale.AdressNummer = Adresse.Adressnummer
AND Adresse.PLZ = '58097'
AND Mitarbeiter.Fortbildungnummer = Fortbildung.FortbildungNummer
AND Fortbildung.FortbildungName = 'Carving-Ski'
ORDER BY Mitarbeiter.Gehalt DESC

Oder habe ich nen Denkfehler? Wenn ja, bitte kurze Erläuterung, warum ich nur die Verknüpfung Adresse und Filiale herstellen muss und die Verknüpfung Mitarbeiter und Filiale weglassen kann. Danke schon mal!
 
Ich habe bei Aufgabe 2a) eine kleine Abweichung zu Euren Lösungen, die ich kurz mit Euch klären möchte. Ich habe nämlich den Verbund Adressnummer aus den Tabellen "Filiale" und "Adresse" und zusätzlich den Verbund Filialnummer der Tabellen "Mitarbeiter" und "Filiale". Die Adressnummer hat doch keine Verknüpfung zur Tabelle Mitarbeiter. Diesen Verbund kriege ich m. E. nur über die Filialnummer hin.

Meine Lösung sieht dann so aus:

SELECT Mitarbeiter.Gehalt, Mitarbeiter.Nachname, Mitarbeiter.Vorname
FROM Mitarbeiter, Filiale, Adresse, Fortbildung
WHERE Mitarbeiter.FilialNummer = Filiale.FilialNummer
AND Filiale.AdressNummer = Adresse.Adressnummer
AND Adresse.PLZ = '58097'
AND Mitarbeiter.Fortbildungnummer = Fortbildung.FortbildungNummer
AND Fortbildung.FortbildungName = 'Carving-Ski'
ORDER BY Mitarbeiter.Gehalt DESC

Oder habe ich nen Denkfehler? Wenn ja, bitte kurze Erläuterung, warum ich nur die Verknüpfung Adresse und Filiale herstellen muss und die Verknüpfung Mitarbeiter und Filiale weglassen kann. Danke schon mal!

Ich komme auf die gleiche Lösung wie Du. Die einzige Abweichung zu Deiner Lösung - ich habe als Wert CARVING und nicht Carving-Ski beim Fortbildungsnamen verwendet.
 
Zuletzt bearbeitet:
Hi,

Zu 1.) habe ich eine Anmerkung: In der Aufgabenstellung heißt es man soll Beziehungstypen durch Bezeichner benennen.

2a.) habe ich genauso wie KaRenn und zbled.
Bei 2b.) ist meines Erachtens keine Mitgliedsnummer auszugeben. Die Liste soll nur aus (nach Mitarbeiternummer aufsteigend sortiert) Vorname, Nachname und Fortbildung bestehen. Ansonsten ist es bei mir fast identisch.

Beste Grüße

B.G.
 
Zuletzt bearbeitet:
Servus,

ich bin etwas anders an die Aufgabe 2b herangegangen. Nach meinem Verständnis soll eine Liste mit Namen und ALLEN Fortbildungen von Personen ausgegeben werden, die auch die Fortbildung „SkiFein“ besucht haben. Also zum Beispiel:

Vorname1 Nachname1 Fortbildung1
Vorname1 Nachname1 Fortbildung2
Vorname2 Nachname2 Fortbildung2
Vorname3 Nachname3 Fortbildung1
Vorname3 Nachname3 Fortbildung2
Vorname3 Nachname3 Fortbildung4​

Die bis jetzt geposteten Lösungen würden m.E. aber nur die Namen aller Personen ausgeben, die „SkiFein“ besucht haben, jedoch nicht die weiteren Fortbildungen der Personen, da Einschränkung AND Fortbildung.FortbildungName = 'SkiFein'. Folglich also

Vorname1 Nachname1 SkiFein
Vorname2 Nachname2 SkiFein
Vorname3 Nachname3 SkiFein​

Meine Lösung sieht folgendermaßen aus.
SELECT m.Vorname, m.Nachname, m.Fortbildungsname
FROM Mitarbeiter m
INNER JOIN Filiale fi ON m.FilialNummer = fi.Filialnummer
INNER JOIN Fortbildung fo ON m.FortbildungNummer = fo.FortbildungNummer
WHERE fi.FilialBezeichnung = 'Sporty Hagen'
AND m.MitarbeiterNummer IN (
SELECT m.Mitarbeiternummer
FROM m
INNER JOIN fo ON m.FortbildungNummer = fo.FortbildungNummer
WHERE fo.FortbildungName = 'SkiFein')​
AND m.Gehalt > 2000​
SORT BY m.Mitarbeiternummer ASC;​


In meiner Lösung wird ein Select ausgeführt, welcher zuerst alle Mitarbeiternummern heraussucht, die auch die Fortbildung SkiFein besucht haben. Danach wird in der eigentlichen Abfrage verglichen, ob die Mitarbeiter in der zuerst ausgeführten Liste vorhanden sind und gleichzeitig die weiteren Kriterien erfüllen.

Ergänzend noch zu Aufgabe 2a

SELECT m.Gehalt, m.Vorname, m.Nachname
FROM Mitarbeiter m
INNER JOIN Filiale fi ON m.FilialNummer = fi.Filialnummer
INNER JOIN Adresse a ON fi.AdressNummer = a.Adressnummer
INNER JOIN Fortbildung fo ON m.FortbildungNummer = fo.FortbildungNummer
WHERE a.PLZ = 58097 AND fo.Fortbildungsname = 'Carving-Ski' --> Bzw a.PLZ = '58097' wenn als Text formatiert (üblich bei PLZ)
SORT BY Gehalt DESC;​

Gibt's gegenteilige Meinungen zu meiner Lösung?

Schönen Gruß!
 
Zuletzt bearbeitet:
in der KE kommen keine left, right, outer, usw. joins vor (zumindest konnte ich keine finden) - deshalb gehe ich mal davon aus, dass Deine Lösung etwas über das Ziel hinausgeschossen ist :)... Aber mit der Vermutung, dass alle Fortbildungen angedruckt werden sollen, hast Du wahrscheinlich recht, denn in der Aufgabenstellung steht ja auch "Fortbildungen". Das sollte mit einem Union machbar sein - aber egal, ich hab meine EA bereits eingeschickt.
 
Oh...ich hätte die KE wohl genau anschauen sollen - danke für den Hinweis! :whistling:
 
Ich habe meine Version zur Aufgabe 1 nochmal überarbeitet und werde sie dann so einsenden.

@KaRenn : Du hast auch Recht mit der Aufgabe 2a. Die zusätzliche Bedingung AND Mitarbeiter.FilialNummer = Filiale.Filialnummer ist notwendig, da ansonsten alle Mitarbeiter angezeigt werden, die an der Fortbildung teilgenommen haben (und nicht nur die, welche in der Filiale mit PLZ = 58097 arbeiten).
 

Anhänge

  • 00817 EA1 - ERM.png
    00817 EA1 - ERM.png
    254,6 KB · Aufrufe: 54
Zuletzt bearbeitet:
f9912c1f32ddaa1465b4487b80efcfb2.jpg


Das ist meine Lösung zur Aufgabe 1.
Ich habe nicht den Entitätstyp Buchung sonder den Beziehungstyp bucht als Bindeglied gewählt. Meinungen dazu?
 
@Curly: Das wird so meines Erachtens nicht funktionieren. Mein Verständnis ist: Die Bezeichner haben keine wirkliche Funktion sondern sollen die Beziehung zwischen zwei Entitäten sprechender gestalten (wenn man die Kardinalitäten mal außen vor lässt). Daher wirst du für jede Entität eine Beziehung benötigen.
 
Zurück
Oben