\chapter{ \label{p1} Описание практического примера}

Перед непосредственным рассмотрением языка SQL и системы
управления базами данных Oracle~10g необходимо определиться с теми
исходными данными, которые будем применять в примерах учебного
пособия. 

В качестве примера рассматривается база данных небольшой художественной галереи~\cite{kre2005}.
Перечень требований к приложению для галереи:
\begin{itemize}
\item Вести учет покупателей и их художественных интересов.
\item Отслеживать приобретения, которые делает галерея.
\item Отслеживать покупки клиентов.
\item Вести список художников и произведений, когда-либо появлявшихся в галерее.
\item Генерировать отчет о том, насколько быстро и с какой прибылью продаются произведения
конкретного художника.
\item Отображать на веб-странице список произведений, выставленных на продажу.
\end{itemize}

Когда галерея покупает произведение, сведения о нем, его авторе, дате и стоимости приобретения
записываются в базу данных. В отдельных случаях галерея может выкупить произведение у клиента
и вновь выставить его на продажу, так что одно и то же произведение может появляться в галерее
неоднократно. При повторном приобретении информация о работе и ее авторе не вводится заново: 
записывается только дата и стоимость последнего приобретения. Когда работа продается, 
записываются дата совершения сделки, уплаченная сумма и сведения о покупателе.

Данные о предыдущих продажах необходимы продавцам для того, чтобы они могли уделять
больше времени наиболее активным покупателям. Иногда эти записи используются для определения
местонахождения ранее проданных произведений.

Для маркетинговых целей требуется, чтобы приложение базы данных выдавало список всех
произведений, которые когда-либо появлялись в галерее, и их авторов. Владелец хотел бы также иметь
возможность определять, насколько быстро продаются произведения каждого из художников
и какова прибыль от их продажи. Наконец, приложение должно отображать список работ, имеющихся 
в наличии.

\begin{figure}[ht]
\psfig{figure=pic_1.eps,angle=0,width=1\textwidth} \vspace{1ex}
\noindent \copy1 \caption{Модель данных для практического примера}
\label{pic1}
\end{figure}

Модель данных такого примера приведена на рис.~\ref{pic1}. В ней есть две сильных сущностей~--- 
CUSTOMER (клиент) и ARTIST (художник). Кроме того, имеется cущность WORK (произведение), 
идентификационно-зависимая от сущности ARTIST, и сущность TRANSACTION (транзакция),
идентификационно-зависимая от сущности WORK. Между сущностями CUSTOMER и WORK имеется
неидентифицирующая связь принадлежности.

Сведения о художнике могут присутствовать в базе данных, даже если ни одна из его работ не 
появлялась в галерее. Это сделано для того, чтобы можно было регистрировать интерес клиентов 
к художникам, чьи работы галерея может приобрести в будущем. Таким образом, с художником 
может быть связано любое количество произведений, в том числе ноль.

Идентификатором сущности WORK является группа (Title, Copy) (название, номер копии), поскольку 
в случае литографий и фотографий произведение может существовать в нескольких экземплярах.
Кроме того, в требованиях к приложению указано, что одно и тоже произведение может неоднократно
появляться в галерее, поэтому с каждым произведением потенциально может быть связано много
транзакций. Каждый раз, когда произведение появляется в галерее, необходимо записывать 
дату и стоимость приобретения. Таким образом, каждой работе должна соответствовать по меньшей
мере одна транзакция.

Клиент может приобрести множество работ; этот факт обозначен связью вида 1:N между сущностями 
CUSTOMER и TRANSACTION. Кроме того, между сущностями CUSTOMER и ARTIST существует связь
вида N:M.

Удаление строк в таблицах CUSTOMER и ARTIST вызывает каскадное удаление в таблице 
CUSTOMER\_ARTIST\_INT. Это имеет смысл, поскольку когда сведения о клиенте или художнике удаляются из базы данных, нет 
нужды сохранять информацию о предпочтениях данного клиента или интересе к данному художнику. Если 
с клиентом связана хотя бы одна транзакция, этот клиент не может быть удален из базы данных. Аналогично,
если с художником связана хотя бы одна картина, удалить его будет нельзя. Кроме того, записи о работах, 
по которым имели место какие-либо транзакции, удалению также не подлежат.

Данные для рассматриваемого примера приведены в табл.~\ref{ta}~-\ref{tc}.

\begin{table}[!ht]
\caption{Данные для таблицы ARTIST}\label{ta}
\begin{tabular}{p{0.15\textwidth} p{0.15\textwidth} p{0.2\textwidth} p{0.2\textwidth} p{0.2\textwidth}}
\hline \bf{ArtistID} & \bf{Name} & \bf{Nationality} & \bf{BirthDate} & \bf{DeceasedDate} \\ \hline 
3 & Miro & Spanish & 1870 & 1950\\
4 & Kandinsky & Russian & 1854 & 1900\\
5 & Frings & US & 1700 & 1800\\
6 & Klee & German & 1900 &  <NULL>\\
8 & Moos & US & <NULL> & <NULL>\\
14 & Tobey & US & <NULL> & <NULL>\\
15 & Matisse & French & <NULL> & <NULL>\\
16 & Chagall & French & <NULL> & <NULL>\\
\hline
\end{tabular}
\end{table}

\begin{table}[!ht]
\caption{Данные для таблицы WORK}\label{tb}
\begin{tabular}{p{0.15\textwidth} p{0.25\textwidth} p{0.3\textwidth} p{0.1\textwidth} p{0.1\textwidth}}
\hline \bf{WorkID} & \bf{Title} & \bf{Description} & \bf{Copy} & \bf{ArtistID} \\ \hline 
505 & Mystic Fabric & One of the only pr & 99/135 & 14\\
506 & Mi Vida & Very black, but ve & 7/100 & 3\\
507 & Slow Embers & From the artist's & HC & 14\\
525 & Mystic Farbic & Some water damage & 105/135 & 14\\
530 & Northwest by Night & Wonderful, moody & 37/50 & 16\\
\hline
\end{tabular}
\end{table}

\begin{table}[!ht]
\caption{Данные для таблицы CUSTOMER\_ARTIST\_INT}\label{tc}
\begin{tabular}{p{0.2\textwidth} p{0.25\textwidth} p{0.2\textwidth} p{0.25\textwidth}}
\hline \bf{ArtistID} & \bf{CustomerID} & \bf{ArtistID} & \bf{CustomerID} \\ \hline 
3 & 1036 & 14 & 1015 \\
5 & 1015 & 14 & 1033 \\
5 & 1034 & 14 & 1034 \\
5 & 1041 & 14 & 1036 \\
5 & 1051 & 14 & 1040 \\
8 & 1034 & 14 & 1041 \\
8 & 1041 & 14 & 1051 \\
14 & 1001 & 16 & 1015 \\
\hline
\end{tabular}
\end{table}