|
Программирование >> Проектирование баз данных
обязательна, то в результате получается бесконечная иерархия. Например, отношение, изображенное на рис. 3.18, подразумевает, что у служащего должен быть только один начальник. Если это верно, то кто начальник президента или иного высшего должностного лица компании? В равной степени недопустимо делать другую сторону отношения обязателыюй - в этом cлyrae каждый должен кем-то руководить, что порождает проблемы в нижней части иерархии, где находится большинство из нас! Таким образом, свиные уши , имеющие сторону с обязательным участием, всегда некорректны. подчиняется... руководит... СЛУЖАЩИЙ Рис. 3 18. Свиное ухо , имеющее сторону с обязательным участием Пенсилючающне подтипы п певключаюпще супертипы Как мы уже говорили, некоторые сущности при анализе разбиваются на подтипы. В этом случае довольно просто спутать подтипы с членством в классах. Подтипами называются атомарные сущности более сложной сущности (называемой супертипом). Подтипы должны быть разделены между собой и в совокупности образовывать супертип. Другими словами, подтипы должны быть взаимоисключающими, и не может существовать экземпляр подтипа, не принадлежащий супертипу. На рис. 3.19 приведен пример, взятый из агрохимической промышленности, который нарушает эти правила. Пестицид, Фунгицид Гербицид Инсектицид РоДвНТИЦИД!] Рис 3 19. Неправильно созданные подтипы и супертип Верно, что подавляющее большинство пестипидов можно отнести к следующим классам: фунгициды (для борьбы с заболеваниями растений), гербициды (для борьбы с сорняками), инсектициды (для уничтожения насекомых) или родентициды (для убиения несчастных грызунов). Однако существуют пестициды, имеющие двойное назначение, они, например, служат и фунгицидами, и гербицидами. Далее, некоторые пестициды не являются ни фунгицидами, ни гербицидами, ни инсектицидами, ни родентицидами - это, например, регуляторы роста растений. Таким образом, приведенная модель некорректна, потому что она не соответствует ни одному из установленных нами правил: подтипы здесь не являются взаимоисключающими, а супертип - не включающий. Ясно, что для выполнения проверки необходимы определенные знания в данной области. Если вас терзают сомнения, обратитесь к аналитику или пользователю (желательно получить независимые мнения из обоих лагерей). Задайте им соответствующие вопросы, например: Есть ли сейчас или может на рынке в будущем появиться пестицид для борьбы с двумя и более категориями вредителей? или Предлагаются ли на рынке разные продукты в одинаковой упаковке? Остерегайтесь относить сущность более чем к одной несвязанной категории. Давайте рассмотрим модель, описывающую пациентов в больнице (рис. 3.20). Мы можем разделить их на стационарных и амбулаторных (медицинский персонал особенно заинтересован в таком делении!). С другой стороны, финансовый отдел делит пациентов по-иному: на частных (оплачивающих свое лечение) и государственных (которых лечат бесплатно). ЧАСТНЫЙ ПАЦИЕНТ СТАЦИОНАРНЫЙ ПАЦИЕНТ ГОСУДАРСТВЕННЫЙ пДИЕНТ *АМВУЛАТОРНЫЙ ПАЦИЕНТ Рис 3 20. Супертип с подтипами двух категорий Такое разделение пациентов на две группы вызывает ряд проблем, если попытаться реализовать одну или обе эти категории в виде отдельных таблиц. Попытка скомбинировать несвязанные категории, как на рис. 3.21, лишь усугубит проблемы, опять-таки особенно при попытке реализовать эти сущности в виде отдельных таблиц. Скажем только, что в конце концов вам, скорее всего, придется решить, какая из категорий менее важна, и сделать ее атрибутом. Итак, кто победит - медицинский персонал или финансовый отдел? Давайте начнем сражение! ЧАСТНЫЙ СТАЦИОНАРНЫЙ ПАЦИЕНТ ЧАСТНЫЙ АМБУЛАТОРНЫЙ ПАЦИЕНТ ПАЦИЕНТ ГОСУДАРСТВЕННЫЙ СТАЦИДРНЫЙ ПАЦИЕНТ г ГОСУДАРСТВЕННЫЙДМБУЛАТОРНЫЙ ПАЦИЕНТ Рис. 3 21. Комбинирование несвязанных подтипов - город кошмаров Разрешение подтипа В предыдущем разделе мы говорили о существовании различных вариантов реализации подтипов. По сути дела, задача сводится к выбору: объединить подтипы в одну таблицу или сделать их отдельными таблицами в базе данных Oracle? Чтобы выбор стал очевидным, выполните следующие операции: установите, имеют ли все подтипы одинаковый первичный ключ; определите количества общих и индивидуальных атрибутов; определите количество отношений с подтипами и количество отношений с супертипом. Давайте возьмем случай с пациентами из рис. 3.21 и рассмотрим типы стационарный пациент и амбулаторный пациент . Весьма вероятно, что большинство атрибутов пациента будут регистрироваться независимо от того, какой он - стационарный или амбулаторный. Могут иметь место отнощения, которые касаются только стационарных пациентов, например, место в палате. Предположим, что нашей задачей является создание одной таблицы. Что же нужно для этого сделать? Мы добавляем в таблицу Patients ( Пациенты ) столбец Patient Туре ( Тип пациента ) для указания того, какой это пациент - стационарный или амбулаторный. Чтобы в этом столбце стояло только одно из этих двух значений, мы используем ограничение. Для всех обязательных столбцов и внешних ключей, относящихся к одному из данных подтипов, установила следующие ограничения: они не должны быть неопределенными (NOT NULL). Кроме того, мы должны ввести ограничения, обеспечивающие, пoбы столбцы, относящиеся к определенному подтипу, для других подтипов
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |