\documentclass{bschlangaul-aufgabe}
\bLadePakete{er,rmodell,syntax}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 1},
  Thematik = {Einwohnermeldeamt},
  Referenz = 66116-2020-F.T1-TA2-A1,
  RelativerPfad = Examen/66116/2020/03/Thema-1/Teilaufgabe-2/Aufgabe-1.tex,
  ZitatSchluessel = examen:66116:2020:03,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Entity-Relation-Modell},
  EinzelpruefungsNr = 66116,
  Jahr = 2020,
  Monat = 03,
  ThemaNr = 1,
  TeilaufgabeNr = 2,
  AufgabeNr = 1,
}

Gegeben sei folgendes ER-Diagramm:
\index{Entity-Relation-Modell}
\footcite{examen:66116:2020:03}

\begin{enumerate}

%%
% a)
%%

\item Übernehmen Sie das ER-Diagramm auf Ihre Bearbeitung und ergänzen
Sie die Funktionalitätsangaben im Diagramm.

\begin{center}
\begin{tikzpicture}[er2,scale=0.7,transform shape]
% Menschen
\node[entity] (Menschen) {Menschen};
\node[attribute,above left=1cm of Menschen] {\key{Steuernummer}} edge (Menschen);
\node[attribute,above right=1cm of Menschen] {Vorname} edge (Menschen);
\node[attribute,above=1cm of Menschen] {Name} edge (Menschen);

\node[relationship,left=1cm of Menschen] (verheiratet) {verheiratet\_mit};
\node[relationship,right=1cm of Menschen] (befreundet) {befreundet\_mit};

\draw (verheiratet.north) edge[auto] node{$\bigcirc$} (Menschen);
\draw (verheiratet.south) edge[auto,swap] node{$\bigcirc$} (Menschen);

\draw (befreundet.north) edge[auto,swap] node{$\bigcirc$} (Menschen);
\draw (befreundet.south) edge[auto] node{$\bigcirc$} (Menschen);

\node[relationship,below=1cm of Menschen] (geboren) {geboren}
  edge[auto] node{$\bigcirc$} (Menschen);
\node[attribute,right=1cm of geboren] {Datum}
  edge (geboren);

% Orte
\node[entity,below=3cm of Menschen] (Orte) {Orte}
 edge[auto] node{$\bigcirc$} (geboren);
\node[attribute,below left=1cm of Orte] {Einwohneranzahl} edge (Orte);
\node[attribute,left=1cm of Orte] {\key{Bundesland}} edge (Orte);
\node[attribute,above left=1cm of Orte] {\key{Name}} edge (Orte);
\end{tikzpicture}
\end{center}

\begin{bAntwort}
\begin{center}
\begin{tikzpicture}[er2,scale=0.7,transform shape]
% Menschen
\node[entity] (Menschen) {Menschen};
\node[attribute,above left=1cm of Menschen] {\key{Steuernummer}} edge (Menschen);
\node[attribute,above=1cm of Menschen] {Vornamen} edge (Menschen);
\node[attribute,above right=1cm of Menschen] {Name} edge (Menschen);

\node[relationship,left=1cm of Menschen] (verheiratet) {verheiratet\_mit};
\node[relationship,right=1cm of Menschen] (befreundet) {befreundet\_mit};

\draw (verheiratet.north) edge[auto] node{1} (Menschen);
\draw (verheiratet.south) edge[auto,swap] node{1} (Menschen);

\draw (befreundet.north) edge[auto,swap] node{n} (Menschen);
\draw (befreundet.south) edge[auto] node{m} (Menschen);

\node[relationship,below=1cm of Menschen] (geboren) {geboren}
  edge[auto] node{n} (Menschen);
\node[attribute,right=1cm of geboren] {Datum}
  edge (geboren);

% Orte
\node[entity,below=3cm of Menschen] (Orte) {Orte}
 edge[auto] node{1} (geboren);
\node[attribute,below left=1cm of Orte] {Einwohneranzahl} edge (Orte);
\node[attribute,left=1cm of Orte] {\key{Bundesland}} edge (Orte);
\node[attribute,above left=1cm of Orte] {\key{Name}} edge (Orte);
\end{tikzpicture}
\end{center}
\end{bAntwort}

%%
% b)
%%

\item Übersetzen Sie das ER-Diagramm in ein relationales Schema. -
Datentypen müssen nicht angegeben werden.

\begin{bAntwort}

\begin{bRelationenModell}
Menschen(\bPrimaer{Steuernummer}, Name, Vorname)

Orte(\bPrimaer{Name}, \bPrimaer{Bundesland}, Einwohneranzahl)

verheiratet\_mit(\bFremd{Mensch[Menschen]}, \bFremd{Ehepartner[Menschen]})

befreundet\_mit(\bFremd{Mensch[Menschen]}, \bFremd{Freund[Menschen]})

geboren(Datum, \bFremd{Steuernummer}, \bFremd{Geburtsort[Orte]}, \bFremd{Geburtsbundesland[Orte]})

\end{bRelationenModell}
\end{bAntwort}

%%
% c)
%%

\item Verfeinern Sie das Schema aus Teilaufgabe b) indem Sie die
Relationen zusammenfassen.

\begin{bAntwort}
\begin{bRelationenModell}
Menschen(%
  \bPrimaer{Steuernummer},
  Name,
  Vorname,
  \bFremd{Ehepartner[Menschen]},
  Geburtsdatum,
  \bFremd{Geburtsort[Orte]},
  \bFremd{Geburtsbundesland[Orte]}%
)

Orte(\bPrimaer{Name}, \bPrimaer{Bundesland}, Einwohneranzahl)

befreundet\_mit(\bFremd{Mensch[Menschen]}, \bFremd{Freund[Menschen]})
\end{bRelationenModell}
\end{bAntwort}

%%
% d)
%%

\item Geben Sie sinnvolle SQL Datentypen für Ihr verfeinertes Schema an.

\begin{bAntwort}
\begin{minted}{sql}
CREATE TABLE Menschen (
  Steuernummer BIGINT PRIMARY KEY,
  Name VARCHAR(30),
  Vorname VARCHAR(30),
  Ehepartner BIGINT REFERENCES Steuernummer,
  Geburtsdatum DATE,
  Geburtsort VARCHAR(30) REFERENCES Orte(Name),
  Geburtsbundesland VARCHAR(30) REFERENCES Orte(Bundesland)
);

CREATE TABLE Orte (
  Name VARCHAR(30),
  Bundesland VARCHAR(30),
  Einwohneranzahl INTEGER,
  PRIMARY KEY (Name, Bundesland)
);

CREATE TABLE befreundet_mit (
  Mensch BIGINT REFERENCES Mensch(Steuernummer),
  Freund BIGINT REFERENCES Mensch(Steuernummer),
  PRIMARY KEY (Mensch, Freund)
);
\end{minted}
\end{bAntwort}

\end{enumerate}
\end{document}
