- •Введение в базы данных
- •Отношения между прикладными программами и субд
- •Системы обработки баз данных
- •История баз данных
- •Организационный контекст
- •Реляционная модель
- •Коммерческие субд для микрокомпьютеров
- •Клиент-серверные приложения баз данных
- •Базы данных с использованием Интернет-технологий
- •Распределенные базы данных
- •Объектно-ориентированные субд
- •Банк данных
- •Основные понятия и определения
- •Пользователи банков данных
- •База данных
- •Архитектура базы данных. Физическая и логическая независимость
- •Схемы и отображения
- •Независимость от данных
- •Система управления базами данных – субд
- •Процесс прохождения пользовательского запроса
- •Введение в разработку баз данных
- •Метаданные
- •Индексы
- •Метаданные приложений
- •Подсистема средств проектирования
- •Подсистема обработки
- •Ядро субд
- •Создание базы данных
- •Процесс разработки базы данных
- •Моделирование данных
- •Функции субд
- •Модели данных
- •Объектные или инфологические модели данных
- •Модели данных на основе записей или даталогические
- •Реляционная модель данных
- •Преподаватели
- •Сетевая модель данных
- •. Физические модели данных
- •Концептуальное моделирование
- •Реляционная модель
- •Структура реляционных данных
- •Кортежи
- •Внешний ключ
- •Альтернативная терминология
- •Математические отношения
- •Отношения в базе данных
- •Реляционные ключи
- •Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Реляционные языки
- •Реляционная алгебра
- •Учебный проект DreamHome
- •Реляционная алгебра (продолжение)
- •Выборка (или ограничение)
- •Проекция
- •Декартово произведение
- •Объединение
- •Разность
- •Операции соединения
- •Tema-соединение (θ-join)
- •Естественное соединение
- •Внешнее соединение
- •Полусоединение
- •Пересечение
- •Деление
- •Другие языки
- •Примеры применения реляционной алгебры
- •Обзор жизненного цикла информационных систем
- •Жизненный цикл приложения баз данных
- •Проектирование базы данных
- •Проектирование баз данных на основе восходящего подхода (Метод нормализации или декомпозиции)
- •Цель нормализации
- •Проблемы, вызываемые использованием единственного отношения (аномалии обновления)
- •Проблема вставки
- •Проблема обновления
- •Проблемы удаления
- •Функциональные зависимости
- •Процесс нормализации
- •Декомпозиция без потерь и функциональные зависимости
- •Первая нормальная форма (1 нф) (из Коннолли)
- •Вторая нормальная форма (2нф)
- •Третья нормальная форма (знф)
- •Нормальная форма Бойса-Кодда (нфбк)
- •4 И 5 нормальные формы (4нф и 5нф)
- •Пример нормализации
- •. Другая декомпозиция отношения консультант
- •Некоторые комментарии к декомпозиционному алгоритму проектирования
- •Некоторые модификации алгоритма проектирования Избыточные функциональные зависимости
- •Транзитивные зависимости
- •Добавление атрибутов в фз
- •Правила вывода
- •Алгоритм проектирования бд методом декомпозиции (восходящий метод)
- •Проверка отношений на завершающей фазе их проектирования
- •Задачи к текущему материалу
- •Пример аномалий для 2нф
- •Нормальная форма Бойса—Кодда (нфбк) с примером аномалий для 3 формы
- •Язык sql
- •Запрос одиночной таблицы
- •Проектирование в sql
- •Выборка в sql
- •Сортировка
- •Встроенные функции sql
- •Встроенные функции и группировка
- •Запрос нескольких таблиц
- •Вложенные запросы
- •Соединение с помощью sql
- •Сравнение вложенного запроса и соединения
- •Внешнее соединение
- •Операторы exists и not exists
- •Изменение данных
- •Insert into запись
- •Insert into запись
- •Insert into третьекурсник
- •Удаление данных
- •Модификация данных
- •Запрос на sql с exist и not exist (реализация реляционной операции Деления)
- •Операция внешнего соединения таблиц в access (Мои замечания)
- •Псевдонимы столбцов и таблиц
- •Уточнения запроса
- •Теоретико-множественные операции
- •Декартово произведение наборов записей
- •Объединение наборов записей (union)
- •Пересечение наборов записей (intersect)
- •Intersect corresponding (id_компонента, Тип_компонента)
- •Вычитание наборов записей (except)
- •Операции соединения
- •Естественное соединение (natural join)
- •Условное соединение (join... On)
- •Соединение по именам столбцов (join... Using)
- •Внешние соединения
- •Левое соединение {left outer join)
- •Правое соединение {right outer join)
- •Внешнее соединение Преподаватель-Изучение-Предмет. Создание в access. Пример
- •Операторы exists и not exists
- •Низходящее проектирование бд на основе er-модели Модель «сущность—связь» и ее варианты
- •Реализация низходящего проектирования бд на основе er-модели
- •Типы сущностей
- •Способы представления сущностей на диаграмме
- •Атрибуты
- •Типы связей
- •Представление связей на диаграммах
- •Атрибуты связей
- •. Структурные ограничения
- •Показатель кардинальности
- •Степень участия
- •Примеры er-проектирования
- •Модель «сущность—связь» в другом рассмотрении
- •Элементы модели «сущность—связь»
- •Сущности
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность—связь»
- •Изображение атрибутов в диаграммах «сущность—связь»
- •Слабые сущности
- •Представление многозначных атрибутов при помощи слабых сущностей
- •Подтипы сущностей
- •Пример er-диаграммы
- •Документирование делового регламента
- •Модель «сущность—связь» и case-средства
- •Диаграммы «сущность—связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Роль uml в базах данных на сегодняшний день
- •Примеры
- •Вопросы группы I
- •Вопросы группы II
- •Литература по курсу «базы и банки данных»
Роль uml в базах данных на сегодняшний день
Идеи, которые иллюстрирует рис. 3.16, представляются довольно туманными в том, что касается применимости объектного мышления к построению и функционированию баз данных. Такая объектно-ориентированная нотация не согласуется с обычаями и процедурами, принятыми в коммерческих базах данных сегодняшнего дня. Понятие о том, что атрибут сущности может быть скрыт внутри объекта, не имеет смысла, если только база данных не обрабатывается исключительно объектно-ориентированными программами; но даже если так, эти программы должны
обрабатывать данные в соответствии с этой политикой. За исключением специализированных объектно-ориентированных СУБД (ООСУБД) и их приложений, так никогда не делается.
Напротив, большинство коммерческих СУБД позволяют всем видам программ обращаться к базе данных и обрабатывать любые данные, в отношении которых у этих программ имеются соответствующие полномочия. Более того, с такими средствами, как генератор запросов в Microsoft Access 2002 (см. рис. 2.6), просто не существует способов ограничить доступ к значениям атрибутов отдельного объекта.
Итак, все сводится к необходимости знания о том, как интерпретировать диаграммы «сущность—связь», выполненные в стиле UML. Они точно так же пригодны для проектирования баз данных, как и традиционные ER-диаграммы. Однако на текущий момент объектно-ориентированная нотация, которая в них вводится, имеет весьма ограниченную практическую ценность. Дальнейшую информацию по этой теме вы найдете в главе 18.
Примеры
Лучший способ приобрести навыки работы с любым средством для моделирования — изучать примеры и использовать это средство для создания своих собственных моделей. В оставшейся части этой главы описаны два примера, которые помогут вам справиться с вашей первой задачей. Проработав эти примеры, займитесь решением задач, приведенных в конце главы.
Пример 1: танцевальный клуб Джефферсона
Танцевальный клуб Джефферсона производит обучение танцам и предлагает индивидуальные и групповые занятия. Плата составляет $45 в час с человека или пары при индивидуальных занятиях и $6 в час с человека при групповых занятиях. Индивидуальные занятия проводятся на протяжении всего дня, с полудня до 22 часов, шесть дней в неделю. Групповые занятия проводятся по вечерам.
В танцевальном клубе работают два вида инструкторов: постоянные и приходящие. Постоянные инструкторы еженедельно получают фиксированную зарплату, а приходящие получают установленную сумму либо за вечер, либо за работу с конкретным классом.
Кроме занятий, танцевальный клуб Джефферсона два раза в неделю организует танцевальные вечеринки с музыкальными записями. Входная плата составляет $5 с человека. Танцевальный вечер в пятницу пользуется большей популярностью и собирает в среднем около 80 человек; воскресный вечер собирает около 30 посетителей. Цель этих танцевальных вечеров — предоставить ученикам место для практики. Еда и напитки не предусматриваются.
Танцевальный клуб хотел бы разработать информационную систему, которая позволяла бы вести учет проведенных занятий и учеников. Помимо того, менеджеры клуба хотели бы знать количество и типы занятий, проведенных каждым
инструктором, а также иметь возможность подсчитать среднюю стоимость занятия у каждого инструктора.
Сущности
Лучше всего начать построение модели «сущность—связь» с определения потенциальных сущностей. В документах или беседах сущности обычно представляются существительными (места, люди, концепции, события, оборудование и т. п.). Исследовав предыдущий пример на предмет важных словосочетаний, относящихся к информационной системе, мы получим следующий список:
- индивидуальное занятие;
- групповое занятие;
- инструктор;
- постоянный инструктор;
- приходящий инструктор;
- вечер танцев;
- клиент.
Ясно, что словосочетания индивидуальное занятие и групповое занятие имеют между собой нечто общее, как и словосочетания постоянный инструктор и приходящий инструктор. Одним из возможных решений будет определить сущность под названием ЗАНЯТИЕ с подтипами ИНДИВИДУАЛЬНОЕ_ЗАНЯТИЕ и ГРУППОВОЕ,. ЗАНЯТИЕ, а также сущность ИНСТРУКТОР с подтипами ПОСТОЯННЫЙ_ИНСТРУКТОР и ПРИХОДЯЩИЙ_ИНСТРУКТОР. Кроме этих сущностей, в модели будут присутствовать сущности ВЕЧЕР_ТАНЦЕВ и КЛИЕНТ.
Как было отмечено в главе 2, в моделировании данных есть столько же от искусства, сколько от науки. Решение, описанное только что, является лишь одним из возможных. Второе решение состоит в том, чтобы исключить сущности ЗАНЯТИЕ и ИНСТРУКТОР из списка, приведенного в предыдущем абзаце, и удалить все подтипы. Третье возможное решение — это исключить сущность ЗАНЯТИЕ (поскольку занятие нигде не упоминается само по себе как словосочетание), но оставить сущность ИНСТРУКТОР и ее подтипы. В данном случае мы выберем третий вариант, так как он представляется наиболее подходящим с точки зрения имеющейся у нас информации. Таким образом, список сущностей будет выглядеть следующим образом: ИНДИВИДУАЛЬНОЕ_ЗАНЯТИЕ, ГРУППОВОЕ_ЗАНЯТИЕ, ИНСТРУКТОР, ПОСТОЯННЫЙ_ИНСТРУКТОР, ПРИХОДЯЩИЙ_ИНСТРУКТОР, ВЕЧЕР_ТАНЦЕВи КЛИЕНТ.
Чтобы сделать правильный выбор среди этих альтернатив, необходимо проанализировать требования и выяснить, каким образом данные требования отразятся на структуре системы. Иногда полезно рассмотреть атрибуты сущностей. Если, например, сущность ЗАНЯТИЕ не имеет никаких атрибутов, кроме идентификатора, то вводить такую сущность нет необходимости.
Связи
Начнем с того, что сущность ИНСТРУКТОР имеет два подтипа: ПОСТОЯННЫЙ_ИНС-ТРУКТОР и ПРИХОДЯЩИЙ_ИНСТРУКТОР. Любой инструктор должен быть либо постоянным, либо приходящим, значит, подтипы являются взаимоисключающими.
Далее рассмотрим связи между сущностями ИНСТРУКТОР и ИНДИВИДУАЛЬНОЕ_ ЗАНЯТИЕ или ГРУППОВОЕ_ЗАНЯТИЕ. Инструктор может проводить много индивидуальных занятий и, как правило, индивидуальное занятие проводится одним инструктором. Но в ходе дальнейшего разговора с менеджерами танцевального клуба выясняется, что для продвинутых танцоров, особенно тех, кто готовится к соревнованиям, к индивидуальным занятиям иногда привлекается два инструктора. Поэтому связь между сущностями ИНСТРУКТОР и ИНДИВИДУАЛЬНОЕ_ ЗАНЯТИЕ должна иметь тип «один ко многим». По поводу групповых занятий мы, однако, будем полагать, что каждое из них ведет только один инструктор. Связи, описанные нами только что, изображены на рис. 3.17.
Клиенты могут посещать как индивидуальные, так и групповые занятия. Иногда индивидуальное занятие проводится с одним человеком, а иногда — с парой. Есть два способа моделирования этой ситуации. Можно определить сущность ПАРА как имеющую связь 1:2 с сущностью КЛИЕНТ, а можно допустить, что обе сущности, КЛИЕНТ и ПАРА, могут иметь связь с сущностью ИНДИВИДУАЛЬНОЕ_ ЗАНЯТИЕ. Мы предполагаем, что пары не посещают групповые занятия, а если и посещают, то этот факт не настолько важен, чтобы записывать его в базу данных. Эта альтернатива показана на рис. 3.18, а.
Существование сущности ИНДИВИДУАЛЬНОЕ_ЗАНЯТИЕ зависит от сущностей КЛИЕНТ и ПАРА. То есть занятие не может существовать, если оно не проводится с каким-либо клиентом или парой. Число 1 рядом с горизонтальной линией, проведенной на рисунке под сущностями КЛИЕНТ и ПАРА, показывает, что в индивидуальном занятии должны участвовать как минимум один клиент или одна пара, что разумно, поскольку индивидуальное занятие зависит от них.
Альтернатива заключается в том, чтобы не вводить пары, а указать тип связи между сущностями КЛИЕНТ и ИНДИВИДУАЛЬНОЕ_ЗАНЯТИЕ как «многие ко многим». Если быть более точным, эта связь должна иметь тип «один или два ко многим», как показано на рис. 3.18, б. Хотя эта модель является не такой подробной, как модель на рис. 3.18, а, ее может быть вполне достаточно для нужд танцевального клуба Джефферсона.
Осталось рассмотреть возможные связи сущности ВЕЧЕР_ТАНЦЕВ с другими сущностями. Вечера танцев посещают как инструкторы, так и клиенты, и разработчики должны решить, важно ли показывать эти связи в структуре базы данных. Действительно ли для танцевального клуба важно знать, какие клиенты посетили какие танцевальные вечера? Так ли уж хотят менеджеры клуба вести запись посетителей в компьютерную информационную систему при входе в танцзал? И захочется ли посетителям, чтобы эти данные записывались? Скорее всего, эти связи не принадлежат к числу тех, которые требуется или следует хранить в базе данных.
Иначе обстоит дело со связью между сущностями ВЕЧЕР_ТАНЦЕВ и ИНСТРУКТОР. Хозяин клуба любит, когда на танцевальных вечерах присутствуют несколько клубных инструкторов. В связи с этим требованием правление клуба составило расписание посещения вечеров инструкторами. Составление и запись этого расписания требуют, чтобы в базе данных присутствовала связь ВЕЧЕР_ТАНЦЕВ-ИНСТРУКТОР, которая имеет тип «многие ко многим».
Окончательный вид ER-диаграммы для танцевального клуба Джефферсона
На рис. 3.19 показан окончательный вид ER-диаграммы для модели, описанной в этом разделе. Мы не стали приводить на ней имена связей: хотя это сделало бы диаграмму более правильной по форме, при имеющихся у нас данных указание имен связей мало что прибавило бы.
Существование сущности ИНДИВИДУАЛЫНОЕ_ЗАНЯТИЕ зависит от сущности КЛИЕНТ, а ГРУППОВОЕ_ЗАНЯТИЕ — нет, потому что расписание групповых занятий составляется задолго до того, как на них записывается какой-либо клиент, и эти занятия будут проводиться даже в том случае, если ни один клиент не придет. Для индивидуальных занятий, однако, дело обстоит не так — они назначаются только по запросу клиента. Обратите также внимание, что в этой модели не представлены пары.
Разработав модель, подобную этой, следует проверить, насколько она точна и полна по отношению к требованиям пользователей. Обычно это делается с помощью самих пользователей.
Проверка созданной ER-модели данных
Ошибки проще и дешевле исправлять на ранних стадиях процесса разработки базы данных, чем на поздних. Например, изменение максимального кардинального числа связи с 1:N на N:M на стадии моделирования данных сводится просто к внесению соответствующего исправления в ER-диаграмму. Но когда база данных уже разработана и наполнена данными и написаны прикладные программы для ее обработки, такое изменение потребует значительной переделки, возможно, даже недель труда. Поэтому важно определить, какая модель данных требуется, прежде чем начинать ее воплощать.
Один из способов сделать это — рассмотреть ER-модель в контексте того, на какого рода запросы может ответить база данных со структурой, описываемой данной моделью. Взгляните, к примеру, на диаграмму, изображенную на рис. 3.19. На какие вопросы может дать ответ база данных, реализованная на основе данного проекта?
- Какие и кем были проведены индивидуальные занятия?
- Какие клиенты посещали индивидуальные занятия у Джека?
- Кто является постоянным инструктором клуба?
- Какие инструкторы должны прийти на танцевальный вечер в пятницу?
При проверке модели данных вы можете формулировать такие вопросы и задавать их пользователям, которых затем можно попросить составить свой список вопросов. Они могут задавать вопросы, касающиеся структуры базы данных, чтобы проверить ее соответствие поставленным требованиям. Например, представьте, что пользователи спрашивают, какие клиенты посетили вечер танцев в прошлую пятницу. Разработчики модели данных, изображенной на рис. 3.19, должны прийти к заключению, что их структура неверна, поскольку на поставленный вопрос с помощью данной ER-модели ответить невозможно. Если требуется ответ на этот вопрос, необходимо ввести связь между сущностями КЛИЕНТ и ВЕЧЕР_ТАНЦЕВ.
Очевидно, что посредством такого неформального и нечетко структурированного процесса невозможно доказать, что структура является правильной. Тем не менее, это прагматичный метод, пригодный для определения потенциальной правильности структуры. И даже такой метод все же лучше, чем отсутствие проверки вообще!
Пример 2: бюро проката парусных яхт Сан-Хуана
Бюро проката яхт Сан-Хуана — это посредническая фирма, занимающаяся прокатом парусных яхт. Яхты не являются собственностью фирмы — она сдает их от имени владельцев, которые хотят получать доход от своих яхт, когда не пользуются ими. За свои услуги фирма Сан-Хуана берет плату. Фирма специализируется на яхтах, которые могут использоваться для многодневных или недельных походов: самая маленькая из яхт имеет длину 28 футов, а самая большая — 51 фут.
Каждая яхта полностью экипирована на момент сдачи в аренду. Большая часть оборудования предоставляется владельцами, но некоторое оборудование добавляется фирмой. Оборудование, предоставляемое владельцами, включает в себя предметы, закрепленные на яхте, то есть радиостанции, компасы, глубиномеры и прочий инструмент, плиты и холодильники. Есть и другое оборудование, предоставляемое владельцами, но не являющееся частью яхты. Это могут быть паруса, лини, якоря, спасательные шлюпки, спасательные жилеты, а также то, что находится в каютах: блюда, столовое серебро, кухонные принадлежности, постельные принадлежности и т. д. Фирма Сан-Хуана предоставляет также расходуемый инвентарь и припасы — карты, навигационные книги, таблицы приливов и течений, мыло, полотенца для посуды, туалетную бумагу и тому подобные предметы.
Важной составляющей обязанностей фирмы Сан-Хуана является учет оборудования, имеющегося на яхтах. Многое оборудование является дорогим, а некоторое, в частности то, которое не закреплено на яхте, может легко потеряться или быть украдено. В течение срока проката яхты ответственными за оборудование являются клиенты.
Фирма Сан-Хуана ведет подробный учет клиентов и истории проката яхт. Это требуется не только для маркетинговых целей, но и для того, чтобы иметь
записи о путешествиях клиентов. Некоторые маршруты и погодные условия более опасны, чем другие, поэтому фирма желает знать об опыте своих клиентов.
По большей части фирма занимается прокатом только яхт, то есть капитан или команда не предоставляется. В некоторых случаях, однако, клиенты заказывают услуги капитана или каких-либо других членов команды, и тогда фирма нанимает соответствующий персонал на договорной основе.
Яхты часто требуют обслуживания. Контракты, заключенные фирмой Сан-Хуана с владельцами лодок, требуют от фирмы ведения тщательной записи всех операций по обслуживанию и связанных с этим расходов, включая обычные операции, такие как мойка или замена масла, а также внеплановые ремонты. Иногда ремонт может потребоваться во время рейса. Например, у яхты может отказать двигатель, когда она будет находиться далеко от доков Сан-Хуана. В этом случае клиенты вызывают по радио диспетчера фирмы, который определяет наиболее подходящее место для проведения ремонта и направляет персонал оттуда на аварийную яхту. Чтобы принимать все эти решения, диспетчерам требуется информация об имеющихся ремонтных доках, а также сведения о качестве и стоимости предыдущих ремонтов.
Прежде чем продолжить чтение, постарайтесь составить диаграмму «сущность—связь» для этого случая самостоятельно. Проанализируйте приведенный выше текст и найдите в нем существительные, которые, на ваш взгляд, являются важными для проекта. После этого определите возможные связи между сущностями. Наконец, перечислите возможные атрибуты каждой сущности и связи.
Сущности
Модель данных, требуемая для бюро аренды Сан-Хуана, более сложна, чем модель для танцевального клуба Джефферсона. Потенциальные сущности показаны на рис. 3.20, а.
Рассмотрим сначала сущности, относящиеся к оборудованию. Есть много различных типов оборудования, и это наводит нас на мысль о введении подтипов. Однако спросим себя: почему фирму Сан-Хуана должно интересовать оборудование? Фирме вовсе не нужно знать характеристики каждого предмета — например, длину цепи каждого якоря. В задачи фирмы скорее входит учет элементов оборудования и их типов, чтобы можно было определить, что из оборудования потеряно или повреждено. Таким образом, для данного случая мы отнесем все типы оборудования к одной сущности — ОБОРУДОВАНИЕ. Принадлежность оборудования указывается путем введения связи между сущностями ОБОРУДОВАНИЕ и ВЛАДЕЛЕЦ. Если фирма Сан-Хуана может быть экземпляром сущности ВЛАДЕЛЕЦ, то все оборудование, являющееся собственностью фирмы, может быть отнесено к этой сущности. Аналогичным образом, исходя из описанной ситуации, представляется безосновательным разделение оборудования на закрепленное и не закрепленное на яхте. Точный список может быть составлен и без такого разделения. Окончательный список сущностей приведен на рис. 3.20, б.
Обратите внимание, что АРЕНДА и РЕЙС являются синонимами: они относятся к одной и той же транзакции. Мы приводим здесь оба имени, чтобы можно было соотнести их с описанием ситуации.
Возможно, что сущности ПЛАНОВОЕ_ТЕХОБСЛУЖИВАНИЕ и ВНЕПЛАНОВОЕ_ТЕХ-ОБСЛУЖИВАНИЕ следует объединить. Один из способов определить, необходимо это или нет, — проанализировать атрибуты обеих сущностей. Если они одинаковы, то два класса сущностей могут быть объединены. Заметьте также, что сущности РЕМОНТ и ВНЕПЛАНОВОЕ_ТЕХОБСЛУЖИВАНИЕ определены как синонимы.
Связи
На рис. 3.21 изображена диаграмма «сущность—связь» для бюро аренды Сан-Хуана. По большей части представленные на этой диаграмме связи являются очевидными, но связь между сущностями ОБОРУДОВАНИЕ и АРЕНДА может быть предметом спора. Можно было бы сказать, что определенная часть оборудования должна быть отнесена к яхте (сущность ЯХТА), а не к аренде, или что часть оборудования (а именно оборудование, которое закреплено на яхте) следует отнести к яхте, а оставшуюся часть — к аренде. Эти изменения представляют собой возможные альтернативы для структуры, показанной на рис. 3.21.
Кроме того, обратите внимание, что сущность ПЛАНОВОЕ_ТЕХОБСЛУЖИВАНИЕ связана с сущностью ЯХТА, в то время как сущность РЕМОНТ, или ВНЕПЛАНОВОЕ_ ТЕХОБСЛУЖИВАНИЕ, связана с сущностью АРЕНДА. Это подразумевает, что когда яхта не находится в аренде, никакого ремонта для нее не требуется. Может быть, это не соответствует действительности.
Наконец, сущности АРЕНДА и ПОГОДА_И_МАРШРУТ имеют связь 1:1, и они также имеют одинаковые идентифицирующие атрибуты. В связи с этим можно, а может быть, даже нужно объединить их в один класс сущностей.
Базы данных как модели моделей
Как вы можете видеть, есть множество различных способов моделирования конкретной ситуации в деловом мире, и это множество становится все обширнее по мере того, как моделируемая ситуация усложняется. Зачастую количество возможных моделей оказывается огромным, и выбрать среди них одну может быть нелегко.
Иногда при выявлении альтернатив команда, занимающаяся проектом, углубляется в дискуссии по поводу того, какая модель данных наилучшим образом представляет реальный мир. Эти дискуссии исходят из ложных посылок. Базы данных не моделируют реальный мир, хотя распространено ошибочное мнение, согласно которому именно в этом и состоит их назначение. Базы данных являются моделями пользовательских моделей мира (или, точнее, делового мира). Вопрос, задаваемый при выявлении альтернативных моделей данных, состоит не в том, насколько точно данная модель отражает реальный мир, а в том, насколько точно она отражает имеющуюся в воображении пользователя модель среды, которая его окружает. Цель заключается в том, чтобы разработать структуру, которая будет соответствовать представлениям пользователей.
Иммануил Кант и другие философы могли бы возразить, что людям не дано построить модель того, что существует на самом деле, и заявили бы, что суть вещей навсегда останется тайной для человечества5. Распространяя эту аргументацию на компьютерные системы, Виноград (Winograd) и Флоре (Flores) высказали идею, что в обществах индивидуумы конструируют системы символов, которые позволяют им успешно действовать в мире. Последовательность символов не является моделью бесконечности реального мира, а скорее представляет собой просто социальную систему, позволяющую пользователям успешно координировать свои действия; ничего более по этому поводу сказать нельзя (Terry Winograd and F Flores, Understanding Computers and Cognition (Reading, MA: Addison-Wesley, 1986).
Таким образом, компьютерные системы должны моделировать и представлять взаимоотношения между своими пользователями. Они не моделируют ничего, кроме системы символов и связей. Поэтому научитесь задавать себе следующие вопросы: «Насколько точно данная модель отражает восприятие пользователей и имеющуюся в их воображении модель мира? Поможет ли эта модель пользователям согласованно и успешно взаимодействовать друг с другом и с клиентами?» Для аналитика бессмысленно заявлять, что его модель является лучшим представлением реальности. Суть в том, чтобы разработать модель, которая адекватно отражает модель деловой среды в представлении пользователя.
Резюме
Модель «сущность—связь» была разработана Питером Ченом. В этой модели определяются сущности — идентифицируемые объекты, представляющие важность для пользователя. Все сущности данного типа образуют класс сущностей. Отдельная сущность называется экземпляром. Сущности имеют атрибуты, которые описывают их характеристики; один или несколько атрибутов определяют сущность.
Связи отражают взаимоотношения между сущностями. В ER-модели связи определяются явным образом; у каждой связи есть имя; существуют также классы связей и экземпляры связей. У связей могут быть атрибуты.
Степень связи — это число сущностей, которые в ней участвуют. Большинство связей являются бинарными. Имеется три типа бинарных связей: 1:1, 1:N и N:M.
На диаграммах «сущность—связь» сущности изображаются прямоугольниками, а связи — ромбами. Максимальное кардинальное число связи указывается внутри ромба. Минимальное кардинальное число указывается с помощью перпендикулярной черты или овала. Связи, соединяющие сущности одного класса, называются рекурсивными. Атрибуты могут быть показаны на ER-диаграмме в эллипсах или в отдельной таблице.
Слабая сущность — это сущность, существование которой зависит от другой сущности; сущность, не являющаяся слабой, называется сильной сущностью. Слабые сущности изображаются с помощью прямоугольников со скругленными углами. Далее в этой книге мы определяем слабую сущность как сущность, логически зависящую от другой сущности. Сущность может иметь минимальное кардинальное число 1 в связи с другой сущностью, но при этом не быть слабой. Многозначные атрибуты представляются с помощью слабых сущностей.
Некоторые сущности имеют подтипы, которые определяют подмножества подобных сущностей. Подтипы наследуют атрибуты от своего родителя, или надти-па. Связи типа «ИМЕЕТ» соединяют сущности разных типов, и идентификаторы у этих сущностей различны. Связи типа «ЕСТЬ» — это связи подтипов с их родителями, и идентификаторы у сущностей, участвующих в такой связи, одинаковы.
Разработав модель данных, необходимо определить деловой регламент, который будет накладывать ограничения на возможные действия с сущностями. Каждая сущность в модели должна быть проанализирована на предмет возможного добавления, изменения и удаления данных. Удаления, в частности, зачастую являются источником важных ограничений на обработку. Сформулированные правила делового регламента необходимо документировать в модели данных.
Модель «сущность—связь» является важной частью многих CASE-продук-тов. Эти продукты предоставляют средства для конструирования и хранения ER-диаграмм. Некоторые из CASE-инструментов объединяют конструкции ER-модели с данными репозитория CASE. Унифицированный язык моделирования (UML) вводит новый стиль построения диаграмм «сущность—связь». Вам следует иметь представление о диаграммах, выполненных в этом стиле; однако нужно понимать, что при проектировании базы данных не существует фундаментальных различий между традиционным стилем и UML-стилем.
Завершив создание ER-модели, следует ее испытать. Один из способов это сделать — составить перечень вопросов, на которые можно ответить с помощью разработанной модели данных. Далее этот перечень показывается пользователям, которым предлагают подумать насчет дополнительных вопросов. Затем проверяется способность ER-модели ответить на эги дополнительные вопросы.
Базы данных моделируют не реальный мир, а модель делового мира, присутствующую в воображении пользователя. Правильным критерием для оценки модели данных является то, насколько эта модель соответствует пользовательской модели. Спор о том, какая модель наилучшим образом отражает реальный мир, не имеет смысла.
