Теория и практика построения баз данных (1088289), страница 21
Текст из файла (страница 21)
3.13, а сущность РЕЦЕПТ является слабой сущностью, а сущность ПАЦИЕНТ вЂ” ее родителем. Все слабые сущности имеют родителя, поэтому их кардинальность в связи с родителем всегда 1..1. Исходя из этого, кардинальность на родительской стороне обозначается просто как 1. ПРОЕКТ-НАЗНАЧЕНИЕ <идентифицирующая> Названиезадачи НачалоРаботы Предпола~аемоеКоличествоЧасов ДвйствигвпьноеКоличествоЧасов б Рис, 3.13.
Представление слабых сущностей в ОМЦ а — слабая сущность, нв являющаяся идентификационно-зависимой; б — идентификационно-зависимая слабая сущность На рис. 3.13, а показана слабая сущность, не являющаяся идентификационнозависимой. Это обозначается выражением <поп-Ыеп11(у1пд> (не идентифицирующая) на связи ПАЦИЕНТ-РЕЦЕПТ. На рис. 3.13, б изображена идептификационнозависимая слабая сущность. На зто указывает ярлык «Ыепй(у1 пВ> (идентифицируюцгая).
Диаграммы сущность — связь» в стиле ЦМС 99 Представление подтипов Способ представления подтипов в (ТМ1. показан на рис. 3.14. На этом рисунке допустимыми подтипами сущности КЛИЕНТ являются ФИЗИЧЕСКОЕ ЛИЦО, ТОВАРИЩЕСТВО и КОРПОРАЦИЯ. В соответствии с рисунком, каждый клиент может иметь один, два или все три указанных подтипа. Для данной ситуации это не имеет смысла: клиент должен быть одного и только одного типа. Текущая версия ()М1 не предоставляет способов для документирования взаимоисключаемости.
Можно, однако, добавить в диаграмму соответствующее обозначение. На рис. 3.15 представлена ()МЕ-версия диаграммы «супгность — связьь, показанной ранее на рпс, 3.11, Поскольку связь между суцпюстями РАБОТА и КЛИЕНТ имеет атрибут Плата, для несения этого атрибута выделена специальная сущность РАБОТА ДЛЯ КЛИЕНТА. Такова стандартная практика при использовании средств ()М(.. Обратите также внимание на представление рекурсивной связи КЕН ПРИВЕДЕН.
Конструкции ООП„введенные языком 0М1. Так как 1'М1 является обьектно-ориентированной технологией, к классам сущностей ПМ1 были добавлены некоторые конструкции ООП. Здесь мы только коснемся этих идей, а развитие им дадим в главе 18, Во-первых, классы всех сущностей, которые должны храниться в базе данных, помечаются стереотипом «Перманентный» ПАЦИЕНТ «Перманентный» РЕЦЕПТ №ЧислоПвциентов №ИсточникПоступления ... атрибутов класса ПАЦИЕНТ-РЕЦЕПТ <не идентифицирующая> №Номерцациентв №Имя №Телефон №Страховвяхомпвния №НомерСтрвховки ..список атрибутов +Первичный ключ: НомерПвциентв +ПолучитьИмяО: Имя +ВвестиИмяй: Имя +ПолучитьРецепт(перечислитель) «Иегпоч«Ргевспр(опО ., список методов 100 Глава 3. Модель «сущность — связь» «РегзЫеп1» (устойчивый).
Это означает, что существование данных должно продолжаться даже после того, как будет разрушен объект, их обрабатывавший. Проще говоря, это значит, что класс сущности должен храниться в базе данных. Л Рис. 3.1б. ЦМС-версия диаграммы сущность — связь» с рис. 3.11 Далее, Т)МТ. допускает назначение атрибутов классам сущностей. Атрибуты класса (с)авв аыПЬщгез) отличаются от атрибутов сущностей тем, что они принадлежат всему классу сущностей данного типа.
Так, на рис. 3.16 атрибут Число- Пациентов сущности ПАЦИЕНТ является атрибутом всей совокупности сущностей этого типа, имеющихся в базе данных. ИсточникПоступления — это атрибут, документируюший источник поступления всех пациентов, присутствующих в базе данных. Как вы позже узнаете, в рамках реляционной модели такие атрибуты классов просто негде хранить. Вместо того чтобы хранить атрибуты вроде ЧислоПациентов в базе данных, они иногда вычисляются на этапе выполнения программы.
В других случаях для хранения этих атрибутов выделяется специальный класс сущностей. Для класса сущностей ПАЦИЕНТ, изображенного на рис. 3.16, можно создать новую сущность тюд названием ИСТОЧНИК ПОСТУПЛЕНИЯ ПАЦИЕНТА, имеющую атрибуты ЧислоПацнентов и ИсточникПоступленив. В таком случае все сущности класса ПАЦИЕНТ будут связаны с сущностью ИСТОЧНИК ПОСТУПЛЕНИЯ ПАЦИЕНТА. Диаграммы «сущность — связь» в стиле ЦМС 101 Рис. 3.16. Представление классов сущностей в ЦМС с помощью конструкций ООП Третьей новой особенностью является то, что НМ(. использует объектно-ориентированную нотацию для обозначения видимости атрибутов и методов.
Атрибуты, именам которых предшествует знак «+гь являются открытьгми, атрибуты со знаком «№» являются защищенными, а со знаком «-» — закрытыми. На рис. 3.16 атрибут Имя сущности ПАЦИЕНТ является защищенным. Эти термины имеют корни в объектно-ориентированном программировании. Оглкрыглым (рцЫ(с) называется такой атрибут, который может читаться и изменяться любым методом любого объекта. Термин зал(ии(еггггьгй (рго(естег)) означает, что атрибут или метод доступен только для методов данного класса и его подклассон, а термин закрытый (рйча(е) указывает на то, что соответствующий атрибут или метод доступен только для методов дашюго класса. Наконец, в С)М1.
задаются ограничения и методы, для чего служит третий сегмент прямоугольника, изображающего класс сущностей. На рис. 3.16 на значение атрибута НомерПациента налагается ограничение первичного ключа. Это означает просто, что НонерПациента является уникальным пдептификатором. Кроме того, рпс. 3.16 указывает, что должны быть созданы следующие методы: ПолучитьИня() — для открытого доступа к атрибуту Иня (обратите внимание на знак ««» перед ПолучитьИня(), ВвестиИмя() — для установки значения этого атрибута, и Получитьрецепт() — для перебора совокупности сущностей класса РЕЦЕПТ, связанных с данной сущностью ПАЦИЕНТ. Роль 0М~ в базах данных на сегодняшний день Идеи, которые иллюстрирует рис. 3.1Гь представляются довольно туманными в том, что касается применимости объектного мьппления к построению и функционированию баз данных. Такая объектно-ориентированная нотация не согласуется с обычаями и процедурами, принятыми в коммерческих базах данных сегодняшнего дня.
Понятие о том, что атрибут сущности может быть скрыт внутри объекта, не имеет смысла, если только база данных не обрабатывается исключительно объектно-ориентированными программами; но даже если так, зти программы должны 102 Глава 3. Модель «сущность — связь» Примеры 103 обрабатывать данные в соответствии с этой политикой, За исключением специализированных объектно-ориентированных СУБД (ООСУБД) и их приложений, так никогда не делается. Напротив, большинство коммерческих СУБД позволяют всем видам программ обращаться к базе данных и обрабатывать лгобые данные, в отношении которых у этих программ имеются соответствующие полномочия.
Более того, с такими средствами, как генератор запросов в М(сгозой Ассеьв 2002 (см. рис. 2.6), просто не существует способов ограничить доступ к значениям атрибутов отдельного объекта. Итак, все сводится к необходимости знания о том, как интерпретировать диаграммы «сущность — связь», выполненные в стиле ПМЦ Они точно так же пригодны для проектирования баз данных, как и традиционные БК-диаграммьь Однако на текущий момент объектно-ориентированная нотация, которая в них вводится, имеет весьма ограниченную практическую ценность.
Дальнейшую информацию по этой теме вы найдете в главе 18. Примеры Лучший способ приобрести навыки работы с любым средством для моделирования — изучать примеры и использовать это средство для создания своих собственных моделей, В оставшейся части этой главы описаны два примера, которые помогут вам справиться с вашей первой задачей. Проработав эти примеры, займитесь решением задач, приведенных в конце главы. Пример 1: танцевальный клуб Джефферсона Танцевальный клуб Джефферсона производит обучение танцам и предлагает индивидуальные и групповые занятия. Плата составляет 345 в час с человека или пары при индивидуальных занятиях и 36 в час с человека при групповых занятиях.
Индивидуальные занятия проводятся на протяжении всего дня, с полудня до 22 часов, шесть дней в неделю. Групповые занятия проводятся по вечерам. В танцевальном клубе работают два вида инструкторов; постоянные и приходящие. Постоянные инструкторы еженедельно получают фиксированную зарплату, а приходящие получают установленную сумму либо за вечер, либо за работу с конкретным классом. Кроме занятий, танцевальный клуб Джефферсона лва раза в неделю организует танцевальные вечеринки с музыкальными записями.
Входная плата составляет 35 с человека. Танцевальный вечер в пятницу пользуется большей популярностью и собирает в среднем около 80 человек; воскресный вечер собирает около 30 посетителей. Цель этих танцевальных вечеров — предоставить ученикам место для практики. Еда и напитки не предусматриваются. Танцевальный клуб хотел бы разработать информационную систему, которая позволяла бы вести учет проведенных занятий и учеников. Помимо того, менеджеры клуба хотели бы знать количество и типы занятий, проведенных каждым инструктором, а также иметь возможность подсчитать среднюю стоимость заня- тия у каждого инструктора.
Сущности Лучше всего начать построение модели «сущность — связь» с определения потенциальных сущностей. В документах или беседах сущности обычно представляются существительными (места, люди, концепции, события, оборудование и т. п.). Исследовав предыдущий пример на предмет важных словосочетаний, относящихся к информационной системе, мы получим следующий список: + индивидуальное занятие; + групповое занятие; + инструктор; + постоянный инструктор; + приходящий инструктор; + вечер танцев; + клиент. Ясно, что словосочетания индивидуальное занятие и групповое занятие имеют между собой нечто общее, как и словосочетания постоянный ипструктор и прихадяигий инструктор. Одним из возможных решений будет определить сущность под названием ЗАНЯТИЕ с подтппами ИНДИВИДУАЛЬНОЕ ЗАНЯТИЕ и ГРУППОВОЕ ЗАНЯТИЕ, а также сущность ИНСТРУКТОР с подтипами ПОСТОЯННЫЙ ИНСТРУКТОР и ПРИХОДЯЩИЙ ИНСТРУКТОР.
Кроме этих сущностей, в модели будут присутствовать сущности ВЕЧЕР ТАНЦЕВ и КЛИЕНТ. Как было отмечено в главе 2, в моделировании данных есть столько же от искусства, сколько от науки. Решение, описанное только что, является лишь одним из возможных. Второе решение состоит в том, чтобы исключить сущности ЗАНЯТИЕ и ИНСТРУКТОР из списка, приведенного в предыдущем абзаце, и удалить все подтипы.
Третье возможное решение — это исключить сущность ЗАНЯТИЕ (поскольку занятие нигде не упоминается само по себе как словосочетание), но оставить сущность ИНСТРУКТОР и ее подтипы. В данном случае мы выберем третий вариант, так как он представляется наиболее подходящим с точки зрения имеющейся у нас информации.