Программирование >>  Проектирование баз данных 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 184


обязательна, то в результате получается бесконечная иерархия. Например, отношение, изображенное на рис. 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бы столбцы, относящиеся к определенному подтипу, для других подтипов



1 ... 28 29 30 [ 31 ] 32 33 34 ... 184

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика