\begin{frame} \frametitle{Foreign Keys} \begin{goal}{} A foreign key implements a \textbf{one-to-many relationship}. \end{goal} \begin{exampleblock}{} In table \sql{Results}, \sql{sid} is a foreign key referencing \sql{Students} {\fontsize{7.5}{9}\ttfamily \parbox[b]{.5\textwidth}{ \medskip \colorbox{rellight}{% \begin{tabular}[t]{|r|r|r|c|} \multicolumn{4}{c}{Students} \\ \hline \hd{\underline{sid}} & \hd{first} & \hd{last} & \hd{\normalfont$\cdots$} \\ \hline 101 & George & Orwell & \normalfont$\cdots$\anchor{row-101}\\ 102 & Elvis & Presley & \normalfont$\cdots$\anchor{row-102}\\ 103 & Lisa & Simpson & \normalfont$\cdots$\anchor{row-103}\\ 104 & Bart & Simpson & \normalfont$\cdots$\anchor{row-104}\\ 105 & George & Washington & \normalfont$\cdots$\anchor{row-105}\\ \hline \end{tabular}% }}\hfill \colorbox{rellight}{% \begin{tabular}[t]{|r|r|r|r|} \multicolumn{4}{c}{Results} \\ \hline \hd{\underline{sid}} & \hd{\underline{category}} & \hd{\underline{number}} & \hd{points} \\ \hline \anchor{from-101a}101 & exam & 1 & 12 \\ \anchor{from-101b}101 & homework & 1 & 10 \\ \anchor{from-102a}102 & exam & 1 & 10 \\ \anchor{from-102b}102 & homework & 1 & 9 \\ \anchor{from-105}105 & exam & 1 & 7 \\ \anchor{from-107}107 & homework & 1 & 5 \\ \hline \end{tabular}% }} \begin{tikzpicture}[remember picture,overlay] \begin{scope}[very thick,dblue] \draw [->] ($(from-101a)+(-3mm,0mm)$) to[out=180,in=0] ($(row-101)+(2.5mm,0mm)$); \draw ($(from-101b)+(-3mm,0mm)$) to[out=180,in=0] ($(row-101)+(2.5mm,0mm)$); \draw [->] ($(from-102a)+(-3mm,0mm)$) to[out=180,in=0] ($(row-102)+(2.5mm,0mm)$); \draw ($(from-102b)+(-3mm,0mm)$) to[out=180,in=0] ($(row-102)+(2.5mm,0mm)$); \draw [->] ($(from-105)+(-3mm,0mm)$) to[out=180,in=0] ($(row-105)+(2.5mm,0mm)$); \only<3->{ \draw [->,red] ($(from-107)+(-3mm,0mm)$) to[out=180,in=0] node [at end,xshift=-2mm] {?} ($(from-107)+(-15mm,-3mm)$); } \end{scope} \end{tikzpicture}\vspace{1.5ex} \end{exampleblock} \pause \begin{goal}{} \textdbend \quad \parbox[b]{.7\textwidth}{ \textbf{Foreign keys are not themselves keys.}\\ Here \sql{sid} is not a key of \sql{Results}. } \end{goal} \pause\pause \begin{alertblock}{} We need an \textbf{existence guarantee} for key values in \sql{Students}. \end{alertblock} The set of \sql{sid} values appearing in \sql{Students} forms a \textbf{dynamic domain} for the attribute \sql{Results.sid}. \vspace{10cm} \end{frame}