\documentclass{bschlangaul-aufgabe} \bLadePakete{syntax,mathe} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 3: Staatsexamen Herbst 1996, Aufgabe 4}, Thematik = {Gebrauchtwagen}, Referenz = 66111-1996-H.A4, RelativerPfad = Examen/66111/1996/09/Aufgabe-4.tex, ZitatSchluessel = db:ab:7, ZitatBeschreibung = {Aufgabe 3}, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Dritte Normalform, Relationale Algebra, SQL, GROUP BY}, EinzelpruefungsNr = 66111, Jahr = 1996, Monat = 09, AufgabeNr = 4, } Gegeben\footcite[Aufgabe 3]{db:ab:7} sei die folgende, in dritter Normalform\index{Dritte Normalform} vorliegende relationale Datenbank zur Modellierung des Gebrauchtwagenparks eines Autohändlers. \footcite[Aufgabe 4 Seite 3-4]{examen:66111:1996:09} Die Relation Modelle beinhaltet alle Fahrzeugtypen, die der Händler im Gebrauchtwagenprogramm führt. Die Modelle sind über das Attribut „mnr“ über alle Hersteller hinweg eindeutig nummeriert. „mnr“ ist daher Primärschlüssel in der Relation Modelle. Über das Attribut „hnr“ wird von Modelle auf die Relation Hersteller verwiesen. In der Relation Fahrzeuge werden alle tatsächlich beim Händler am Lager befindlichen Fahrzeuge geführt. Über „mnr“ wird von Fahrzeuge auf Modelle verwiesen. Bei gegebener Modellnummer ist die vergebene Fahrgestellnummer („fgnr“) eindeutig. Darum bilden „mnr“ und „fgnr“ zusammen den Primärschlüssel der Relation Fahrzeuge. \begin{itemize} %% % %% \item Formulieren Sie folgende Anfragen jeweils in relationaler Algebra\index{Relationale Algebra} und SQL\index{SQL}! \begin{enumerate} %% % (a) %% \item Bestimmen Sie alle Modelle mit mehr als 60 PS \begin{bAntwort} \bPseudoUeberschrift{Relationale Algebra} $\pi_{mnr}(\sigma_{ps > 60}(Modelle))$ \bPseudoUeberschrift{SQL} \begin{minted}{sql} SELECT mnr FROM Modelle WHERE ps > 60; \end{minted} \end{bAntwort} %% % (b) %% \item Bestimmen Sie die Typen aller Modelle des Herstellers VW. \begin{bAntwort} \bPseudoUeberschrift{Relationale Algebra} $\pi_{typ}(Modelle \bowtie \sigma_{hersteller = \mlq vw \mrq} (Hersteller))$ oder $\pi_{typ}(\sigma_{hersteller = \mlq vw \mrq}(Modelle \bowtie Hersteller))$ \bPseudoUeberschrift{SQL} \begin{minted}{sql} SELECT m.typ FROM Modelle m, Hersteller h WHERE h.hnr = m.hnr AND h.hersteller = 'VV'; \end{minted} \end{bAntwort} %% % (c) %% \item Bestimmen Sie die Nummern aller Modelle des Herstellers Opel, von denen tatsächlich Fahrzeuge auf Lager sind \begin{bAntwort} \bPseudoUeberschrift{Relationale Algebra} $\pi_{mnr}( Fahrzeuge \bowtie ( Modelle \bowtie \sigma_{hersteller = \mlq Opel \mrq}(Hersteller) ) )$ \bPseudoUeberschrift{SQL} \begin{minted}{sql} SELECT DISTINCT m.mnr FROM Modelle m, Hersteller h, Fahrzeuge f WHERE f.mnr = m.mnr AND m.hnr = h.hnr AND h.hersteller = 'Opel'; \end{minted} \end{bAntwort} \end{enumerate} %% % %% \item Formulieren Sie folgende Anfrage nur in SQL! Bestimmen Sie die Namen der Hersteller, für deren sämtliche Modelle mindestens ein Fahrzeug im aktuellern Bestand vorhanden ist. %% % %% \item Formulieren Sie folgende SQL-Anfrage umgangssprachlich, aber exakt!\index{GROUP BY} \begin{minted}{sql} SELECT AVG(neupreis), hnr FROM Modelle GROUP BY hnr; \end{minted} \end{itemize} \end{document}