Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
новое пособие.doc
Скачиваний:
62
Добавлен:
25.09.2019
Размер:
20.48 Mб
Скачать

Нотация Баркера

Дальнейшее развитие диаграммы «сущность-связь» получили в работах Баркера, предложившего оригинальную нотацию (см. рис. 3.15), которая позволила интегрировать средства описания моделей Чена.

Рис. 3.15. - Символы ERD-диаграмм в нотации Баркера.

В нотации Баркера используется только один тип диаграмм: собственно ERD-диаграммы. Сущность на ERD-диаграмме представляется прямоугольником любого размера, содержащим внутри себя имя сущности, список имен атрибутов (возможно, неполный) и указатели ключевых атрибутов (знак «#» перед именем атрибута). Понятия категории и общей сущности Чена заменяются Баркером на эквивалентные понятия подтипа и супертипа соответственно. Атрибуты сущностей могут быть обязательными и необязательными. Кроме того, атрибуты могут быть описательными (дескрипторами сущности) или входить в состав первичного ключа (уникального идентификатора сущности). Сущность, как правило, может быть полностью идентифицирована своим первичным ключом. Однако, могут быть случаи, когда в идентификации данной сущности участвуют также атрибуты другой сущности-родителя. Кроме первичных ключей могут использоваться альтернативные (возможные) ключи.

Все связи являются бинарными и представляются линиями, соединяющими родительскую сущность с одной или несколькими сущностями-потомками. Для связей должно быть определено имя (выражаемое грамматическим оборотом глагола), степень множественности (один или много объектов участвуют в связи) и степень обязательности (т.е. обязательная или необязательная связь между сущностями). Для множественной связи линия присоединяется к прямоугольнику сущности в трех точках, а для одиночной связи – в одной точке. При обязательной связи рисуется непрерывная линия до середины связи, при необязательной – пунктирная линия. Могут иметь место ситуации, при которых связи данной сущности рассматриваются как взаимоисключающие. Кроме того, связь может быть рекурсивной, а также неперемещаемой, если экземпляр сущности не может быть перенесен из одной связи в другую.

На рис. 3.16 приведен пример ERD-диаграммы, моделирующей отношения между сущностями, содержащимися в хранилищах системы управления лифтом (см. рис. 3.12), в нотации Баркера.

Рис. 3.16. - ERD-диаграмма в нотации Баркера.

Построение модели

Разработка ERD-диаграммы включает следующие основные этапы [20]:

  • Идентификация сущностей, их атрибутов, а также первичных и альтернативных ключей.

  • Идентификация отношений между сущностями и указание типов отношений.

  • Разрешение неспецифических отношений (отношений n*m).

Рассмотрим эти этапы в соответствии с работой [20] более подробно.

1-й этап построения ERD-диаграммы (или модели данных) является определяющим. Исходной информацией для данного этапа служит содержимое хранилищ данных, зависящее от входящих и выходящих потоков данных, представленных на DFD-диаграмме.

Таким образом, для построения ERD-диаграммы необходимо иметь предварительно построенную DFD-диаграмму. На рисунке 3.17 приведен фрагмент DFD-диаграммы, моделирующей деятельность бухгалтерии предприятия по ведению данных о персонале и начислению зарплаты.

Рис. 3.17. - DFD-диаграмма деятельности бухгалтерии.

ERD-диаграмма является результатом анализа DFD-диаграммы. При этом первоначально осуществляется анализ хранилища, включающий сравнение содержимого входных и выходных потоков и создание на основе этого сравнения варианта схемы хранилища. Из диаграммы на рис. 3.17 следует, что хранилище должно содержать информацию о всех сотрудниках: имена, адреса, должности, оклады и т.д. Рассмотрим данные и их структуры, содержащиеся во входных и выходных потоках:

Таблица 3.4. Структуры данных для работы бухгалтерии.

ВХОДНЫЕ

СТРУКТУРЫ ДАННЫХ

Нанятые

Дата_найма

Фамилия

таб_номер

адрес

должность

начальная_зарплата

Уволенные

Фамилия

таб_номер

Изменение_адреса

Фамилия

таб_номер

старый_адрес

новый_адрес

Изменение_зарплаты

Фамилия

таб_номер

старая_зарплата

новая_зарплата

дата_изменения

ВЫХОДНЫЕ

СТРУКТУРЫ ДАННЫХ

Адрес_служащего

фамилия

адрес

Подробности_з/пл

фамилия

таб_номер

текущая_зарплата

История_занятости

фамилия

таб_номер

дата_наима

история_карьеры *

должность

дата_изменения

история_зарплаты *

зарплата

Сравнивая входные и выходные структуры данных, отметим следующее:

  • Поле «адрес» (элемент структуры входного потока «Нанятые») хранит текущий адрес сотрудника, а структура входного потока «Изменение адреса» хранит еще и старый адрес, что не является необходимым, с точки зрения выходных потоков.

  • Для формирования структуры «История зарплаты» (составной части выходного потока «История занятости»), наоборот, требуется перечислить все оклады сотрудника, поэтому необходимо иметь набор, состоящий из пар («зарплата, дата»), а не просто «старая_зарплата» и «новая_зарплата» (как в структуре входного потока «Изменение зарплаты»).

  • Аналогичная ситуация и со структурой «Историей карьеры» (другой составной части структуры выходного потока «История занятости»). Отметим, что на диаграмме вообще отсутствует входной поток со структурой данных, определяющей изменения в должности, что является серьезным упущением функциональной модели.

  • Отметим, что изменение в должности обычно (но не всегда) соответствует изменению в зарплате.

С учётом этих моментов первый вариант схемы хранилища (базы данных) может выглядеть следующим образом:

фамилия

таб_номер

адрес

текущая_зарплата

дата_найма

история_карьеры *

должность

дата_изменения

история_зарплаты *

зарплата

дата_изменения

На следующем шаге осуществляется упрощение схемы за счет устранения избыточности.

Действительно, «текущая_зарплата» всегда является последней записью в «история_зарплата», а «дата_найма» по сути дела всегда содержится в разделах «история_зарплаты» и «история_карьеры». Кроме того, несколько дат в последних разделах одни и те же, поэтому целесообразно создать на их основе единую структуру «история_зарплаты_карьеры» и вводить в нее данные при изменении должности и/или зарплаты. Результатом приведенного рассуждения может быть схема:

фамилия

таб_номер

адрес

история_зарплаты_карьеры *

зарплата

должность

дата_изменения

Следующий шаг – упрощение схемы при помощи нормализации (удаления повторяющихся элементов). Основным способом нормализации является расщепление данной схемы на две схемы, являющиеся более простыми. Первая схема будет содержать фамилию и адрес (которые, как правило, не меняются), вторая – каждое изменение зарплаты и должности. Кроме того, каждая схема должна содержать «таб_номер» – единственный элемент данных, уникально идентифицирующий каждого сотрудника. Данные схемы и представляют те сущности, которые должны быть представлены в хранилище данных о персонале с учетом их связей и отношений.

Для идентификации сущностей определим ключевые атрибуты. Для первой схемы ключевым атрибутом является «таб_номер», для второй – ключом является совокупность атрибутов «таб_номер» и «дата_изменения», т.к. для каждого сотрудника возможно несколько записей в разделе «история_зарплаты_карьеры». Таким образом, хранилище данных о персонале содержит две сущности (рис. 3.18), которые в общепринятом виде могут быть представлены следующим образом:

сотрудник (таб_номер, фамилия, адрес)

история_зарплаты_карьеры (таб_номер, дата_изменения, должность, зарплата)

Рис. 3.18. – Сущности модели данных бухгалтерии.

Концепции и методы нормализации были разработаны Коддом (Codd), установившим существование трех типов нормализованных схем, названных в порядке уменьшения сложности первой, второй и третьей нормальной формой (соответственно, 1НФ, 2НФ и ЗНФ). Рассмотрим, как преобразовывать схемы к наиболее простой ЗНФ.

Для примера построения ЗНФ предварительно рассмотрим схему, ключ которой выбран в предположении, что заказчик не заказывает одну и ту же книгу дважды в один и тот же день [20]:

заказ_на книгу (имя_заказчика, дата_заказа, ISBN, название, автор, количество, цена, сумма_заказа)

Согласно Кодду, любая нормализованная схема (схема без повторяющихся элементов) автоматически находится в 1НФ независимо от того, насколько сложен ее ключ и какая взаимосвязь существует между ее элементами.

В последней схеме атрибуты «название», «автор», «цена» зависят от части ключа (а именно, от «ISBN»), тогда как атрибут «количество» зависит от всего ключа. Это называется, соответственно, частичной и полной функциональной зависимостью от ключа. По определению схема находится в 2НФ, если она находится в 1НФ и все ее неключевые атрибуты полностью функционально зависят от ключа. Таким образом, для приведения схемы в 2НФ, необходимо избавится от частичной функциональной зависимости. После избавления от нее последняя схема будет выглядеть следующим образом:

заказ_на_книгу (имя заказчика, дата заказа, ISBN, количество, сумма_заказа)

книга (ISBN, автор, название, цена)

Заметим, что возможно упростить ситуацию и дальше: атрибуты «количество» и «сумма_заказа» являются взаимно-зависимыми. По определению схема находится в ЗНФ если она находится в 2НФ и никакой из ее неключевых атрибутов не является зависимым ни от какого другого неключевого атрибута. Поскольку в нашем примере атрибут «сумма_заказа» фактически является избыточным то, для получения ЗНФ, его можно просто удалить.

Иногда для построения ЗНФ необходимо выразить зависимость между неключевыми атрибутами в виде отдельной схемы. Так для сотрудников, работающих по различным проектам, возможна следующая схема [20]:

сотрудник (таб_номер, телефон, почасовая_оплата, N_npoeктa, дата_окончания)

Очевидно, что данная схема находится в 2НФ. Однако «N_npoeктa» и «дата_окончания» являются зависимыми атрибутами. После расщепления схемы получим ЗНФ:

участник проекта (таб_номер, телефон, почасовая_оплата, N_пpoeктa)

проект (N_проекта, дата_окончания)

На практике схемы в форме 1НФ и 2НФ имеют тенденцию возникать при попытке описать несколько реальных сущностей в одной схеме (заказ и книга, проект и сотрудник). ЗНФ является наиболее простым способом представления данных, отражающим здравый смысл. Построив ЗНФ, мы фактически выделяем базовые сущности предметной области.

В завершении данного этапа зафиксируем алгоритм приведения ненормализованных схем в третью нормальную форму [20] (рис. 3.19).

Рис. 3.19. – Алгоритм приведения к 3НФ.

2-й этап построения ERD-диаграммы (модели данных) служит для выявления и определения отношений между сущностями, а также для идентификации типов отношений. На данном этапе некоторые отношения могут быть неспецифическими (n*m – многие-ко-многим). Такие отношения потребуют дальнейшей детализации на этапе 3.

Определение отношений включает выявление связей. Для этого отношение должно быть проверено в обоих направлениях следующим образом: выбирается экземпляр одной из сущностей и определяется, сколько различных экземпляров второй сущности может быть с ним связано, и наоборот. Для примера рассмотрим отношение между сущностями Сотрудник и История_зарплаты_карьеры. У отдельного сотрудника должность и/или зарплата может меняться ноль, один или много раз, порождая соответствующее число экземпляров сущности История_зарплаты_карьеры. Анализируя в другом направлении, видим, что каждый экземпляр сущности История_зарплаты_карьеры соответствует ровно одному конкретному сотруднику. Поэтому между этими двумя сущностями имеется отношение типа 1*n (один ко многим) со связью «один» на конце отношения у сущности Сотрудник и со связью «ноль, один или много» на конце у сущности История_зарплаты_карьеры, что и показано на рис. 3.18.

3-й этап построения ERD-диаграммы (модели данных) предназначен для разрешения неспецифических (многие ко многим) отношений. Для этого каждое неспецифическое отношение преобразуется в два специфических отношения с введением новых (а именно, ассоциативных) сущностей. Рассмотрим пример из работы [20], представленный на рисунке 3.20.

Рис. 3.20. – Разрешение неспецифического отношения.

Неспецифическое отношение на рис 3.20 указывает, что Студент может изучать много Предметов, а Предмет может изучаться многими Студентами. Однако мы не можем определить, какой студент изучает какой предмет, пока не введем для разрешения этого неспецифического отношения третью (ассоциативную) сущность Изучение_предмета. Каждый экземпляр введенной сущности связан с одним Студентом и с одним Предметом.

Таким образом, ассоциативные сущности по своей природе являются представлениями пар реальных объектов и обычно появляются на этапе 3.

В заключении отметим, что нотация Баркера являются самой распространенной при построении ERD-диаграмм и используется в Сase-средстве Oracle Designer.