\begin{frame}
\frametitle{Denormalization}
\begin{goal}{}
Since there is still the separate table \sql{Instructors},
\emph{insertion and deletion anomalies are avoided.}
\medskip
But there will be \alert{\emph{update anomalies}}
(changing a single phone number requires the update of many rows).
\end{goal}
\pause\medskip
The performance gain is thus paid for with
\begin{itemize}
\item a more complicated application logic\\ (e.g., the need for triggers)
\item risk that a faulty application turns the DB inconsistent
\end{itemize}
\pause%
\smallskip
\begin{goal}{}
Denormalization may not only be used to avoid joins:
\begin{itemize}
\item
Complete \emph{separate, redundant tables} may be created (increasing
the potential for parallel operations).
\item
Columns may be added which \emph{aggregate} information in other columns/rows.
% (\emph{e.g.}, store the current \sql{BALANCE} in
% a \sql{CUSTOMER} table that also records \sql{PAYMENT}s and \sql{INVOICE}s).
\end{itemize}
\end{goal}
\end{frame}