Braindump Klausur 2009-07-29

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Braindump Klausur 2009-07-29
Mein (relativ grober und sehr unvollständiger) Braindump befindet sich im Anhang als LaTeX-Datei (hier als PDF). Wer was verbessern kann, möge die neue Version einfach an seinen Post anhängen oder anderweitig hier zur Verfügung stellen. Enthaltene Wertungen zur Aufgabenschwierigkeit stellen die subjektive Empfindung des Autors dar ;).

Attachment:
klausur_braindump_2009-07-29.tex: https://fsi.cs.fau.de/unb-attachments/post_69730/klausur_braindump_2009-07-29.tex


Wir haben vorhin in der FSI auch einen Braindump erstellt, angua wird den TeXen und dann reinstellen.


Genau, wird spätestens Freitag Abend online stehen, oder vielleicht schon früher, wenn ich was brauch um mich vom lernen für die nächste klausur abzuhalten :slight_smile:


ER (sry kann noch kein Tex):

Es gibt Rennen, diese werden auf Rennstrecken ausgetragen. Fahrer nehmen mit Fahrzeugen an Rennen teil. Fahrzeuge gehören Teams.

Rennen finden zu einem bestimmten Datum statt. Rennstecken haben einen eindeutigen Namen. Auf einer Rennstecke können beliebig viele Rennen ausgetragen werden.
Fraglich: Ein Rennen kann an unterschiedlichen Tagen auf unterschiedlichen Strecken ausgetragen werden (???)

Fahrer haben eine eindeutige Sozialversicherungsnummer, einen Namen (bestehend aus Vor- und Nachname), ein Geburtsdatum und ein Alter (welches aus dem Geburtsdatum errechnet wird).
Fahrzeuge haben eine eindeutige Seriennummer (o.ä.), einen Hersteller, Beschleunigung und Maximalgeschwindigkeit.
Teams haben einen eindeutigen Namen. Jedes Team kann beliebig viele Fahrzeuge haben, aber jedes Fahrzeug gehört genau einem Team.

Ein Fahrzeug wird von einem Fahrer gefahren. Ein Fahrer fährt ein Fahrzeug. Beide können aber an beliebig vielen Rennen teilnehmen. Ein Rennen ohne Fahrer existiert nicht.
Zu jeder Teilnahme an einem Rennen wird die Platzierung und Punkte (für Gesamtwettbewerb) gespeichert.

Hoffe mal ich hab nix vergessen :wink:

PS: ja, Rennen haben keinen Primärschlussen, der ist nicht vergessen worden!


Hm, bevor hier jetzt noch mehr Braindumps kommen, die wir schon hatten stell ich mal rein, was wir heute nachmittag zusammengefasst haben.
Wie gesagt, angua wird das noch abTeXen und Freitag hier veröffentlichen.

Attachment:
konzModBraindump.tar.bz2: https://fsi.cs.fau.de/unb-attachments/post_69744/konzModBraindump.tar.bz2


Braindumps! daumenhoch


bei der einsichtnahme dann dran denken dass noch weiter zu vervollstaendigen, die genauen angaben beim sql zeug zB. finden sicher dankbare abnehmer fuers naechste mal

einfach vor der einsicht kucken was noch fehlt und das gezielt merken


f t o k
u t s k
u ? x c
u ? x k
f ? t c
f ? o c

die vier “?” müssten (nicht 100%-tig) “htht” sein…

f t o k
u t s k
u h x c
u t x k
f h t c
f t o c

PS: sieht doch schon super aus :wink: daumen hoch


So hier haben wir mal den BrainDump so weit, es fehlen nur grad noch die Bilder (also die E/R Diagramme) und das Sequenzdiagramm. Das wird dann Sonntag oder Montag nachgeliefert :slight_smile:

Attachment:
konzModKlasurSS09.pdf: https://fsi.cs.fau.de/unb-attachments/post_69830/konzModKlasurSS09.pdf


also die lösung von sql ist falsch.

Denn die Einstellungszeit wurde in Sekunden von 1970 ab gespeichert. Das heisst, derjenige der am längsten Angestellt ist, hat die geringste Zeit
Es müsste also heissen p1.anstellungszeit > p2.anstellungszeit


p1.anstellungszeit >= p2.anstellungszeit

War vllt ein Tippfehler, aber das = braucht man in jedem Fall, sonst wäre Platz 1 ja der zweite!

Meines Erachtens war hier: onair(persnr[reporter], titel[livereportage], (beginn, ende, beginn)[sendeplatz])
sendeplatz war kein Primärschlüssel!
Außerdem ist hier ein Fehler: (beginn, ende, beginn)

EDIT: war das nicht Datum?


Mir kam im Schlaf nach der Prüfung, dass man wohl hätte DAY(Anstellungsbeginn) hätte ausgeben (= projektieren) sollen. → menschen lesbar.
Kann mir jemand was über die Kompatibilität von LIMIT sagen?
Kenne dieses Konstrukt von MySQL. Stelle nun mit Entsetzten fest, dass dies wohl nicht SQL-89 konform ist… ;(
Die Abfrage war so einfach: … ORDER BY Anstellungsbeginn ASC LIMIT 0,4;


Das wäre zu einfach gewesen. :wink:
In einer Klausur wollen sie immer das bekannte Konstrukt aus Self-Join, GROUP BY, HAVING und ORDER BY sehen.

LIMIT gibt’s in MySQL und PostgreSQL, aber das ist eine nicht standardisierte Erweiterung. In Oracle könnte man sich eine Top-N-Abfrage mit der Oracle-spezifischen Erweiterung ROWNUM basteln.


So ich hab jetzt mal die Sachen ausgebessert die Michi angemerkt hat.

Aber bei der Sql-lösung bin ich mir eigentlich relativ sicher, dass <= stimmt… weil wenn man den möchte der am längsten angestellt ist (also rang 1 hat), braucht man denjenigen, der den “kleinsten anstellungsbeginn” hat (in sekunden seit 1970) muss man a1 <= a2 machen (Dann ist a1 derjeniger, der länger da is)

(Also quasi wie: suchen sie den Mitarbeiter, der das kleinste gehalt hat… da würde man ja auch <= machen)
lg
Franzi

Attachment:
braindump.pdf: https://fsi.cs.fau.de/unb-attachments/post_69840/braindump.pdf


Ne, du hast das noch nicht so richtig kapiert, das ist nämlich genau umgekehrt, wenn man nämlich wie in der übung eine Firma mit dem größten Umsatz möchte dann muss man f1.umsatz <= f2.umsatz

f1<=f2   20   15   10
20       +      -    - 
15       +      +    -
10       +      +    +

Die Firma mit dem größten Umsatz wird also nur mit sich selbst gejoined, deshalb hat sie Zeillenanzahl 1 und damit Rang1

bei >= wär es genau umgekehrt, die kleinste Zahl hat die wenigsten verknüpfungen und damit den Rang1.

f1>=f2   20   15   10
20       +     +     + 
15       -     +     +
10       -     -     +

Und es müsste auch HAVING COUNT(*) <=4 sein


ah stimmt du hast recht


HAVING COUNT(*) < 4 funktioniert dann, wenn man bei der Join-Bedingung als Vergleichsoperator > statt >= nimmt. Dann ist der Rang ab 0 durchnummeriert.

P.S. Wenn du das PDF korrigierst, könntest du dabei gleich noch schnell alle “sie” (bis auf zwei) in “Sie” umwandeln. :smiley:


Zum Thema “LIMIT”:

es stand extra drüber, dass man keine speziellen Konstrukte nehmen darf :wink:

Ich hatte mir auch überlegt, ob man nicht noch das Datum umändern soll, aber das würde den Rahmen sprengen (wenn man es ohne Konstrukte macht) und außerdem hieß es ja sinngemäß “Hinweis: da Anstellungsdatum als INT gespeichert ist, muss man also keine Konversion machen!”

Deshalb dachte ich es ist nur nach den TOP N gefragt…


Kann sich eigentlich in so einem UML-Sequenzdiagramm das “a” wie in [a > 1] zwischen den Fragmenten ändern / ist das überhaupt “das selbe” a?
Daran hängen sich so n bissl die Antworten auf, und in den Folien steht nix definitives zu.

Ach ja:
Wird ein loop durchlaufen, solange [XXX] wahr ist oder solange, bis [XXX] wahr wird?
Abbruchbedingung hört sich so nach letzterem an… im Netz steht’s aber zT anders.
Danke schon mal :slight_smile: