286/291
\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}