\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}