Автор работы: Пользователь скрыл имя, 09 Декабря 2012 в 10:21, курс лекций
Временем появления на Земле вида «человек разумный» вполне можно считать тот момент, когда представители этого вида стали собирать, осмысливать, обрабатывать, хранить и передавать разнообразную информацию. Таким образом, человечество (социум) постоянно имеет дело с информацией.
Строгого научного определения понятия «информация» нет. Существует более 300 толкований этого термина.
Рис. 6.11. Другая структура иерархической БД
Рис. 6.12. Экземпляр иерархической БД. Запись содержит сведения о хирурге Егорове Е.Е.
Иерархические модели, отличаются друг от друга, являясь при этом моделями одной предметной области. Различия между ними определяются способами представления взаимосвязей между объектами. Это означает, что в данном случае разработчик диктует подчинённость отношений в БД. Можно предложить и другие структуры иерархической БД для данной предметной области.
В первой иерархической модели исходным узлом является ПАЦИЕНТ, а порождённым, в котором хранятся сведения о лечении пациента, - ХИРУРГ. Если один хирург оперирует более одного пациента, то сведения дублируются для каждого пациента. Таким образом, возникает избыточность информации.
Включение данных. Экземпляр порождённого узла не может существовать в отсутствие экземпляра исходного узла. В такую БД невозможно добавить сведения о хирурге, который не оперировал ни одного пациента.
Удаление данных. При удалении экземпляра исходного узла также удаляются все экземпляры порождённых узлов, что приводит к потере информации.
Аномалии запоминания и удаления связаны с тем, что в иерархической модели данных взаимосвязи «многие ко многим» непосредственно не поддерживаются, а реализуется только взаимосвязь «один ко многим». Эти аномалии могут быть частично устранены за счёт введения двух иерархических моделей, связанных между собой.
Рис. 6.13. Представление данных в БД ПАЦИЕНТ и ХИРУРГ с помощью двух иерархических моделей данных.
В первой модели корневым узлом является ПАЦИЕНТ, а на втором уровне расположен узел ОПЕРАЦИЯ. Во второй модели корневым узлом является ХИРУРГ, а на втором уровне расположен узел ОПЕРАЦИЯ. Узел ОПЕРАЦИЯ первой модели связан с корневым узлом ХИРУРГ, аналогично Узел ОПЕРАЦИЯ второй модели связан с корневым узлом ПАЦИЕНТ. В такой комбинированной модели информация об операции хранится с избыточностью, однако таким путём удаётся устранить аномалии включения и удаления сведений о пациенте и о хирурге.
В сетевой модели данных понятия главного и подчинённых объектов несколько расширены. Любой объект может быть и главным и подчинённым (в сетевой модели главный объект называется «владелец набора», а подчинённый – «член набора»). Один и тот же объект может одновременно выступать и в роли владельца, и в роли владельца, и в роли члена набора. Это означает, что каждый объект может участвовать в любом числе взаимосвязей.
Основными компонентами сетевой модели данных являются записи и объекты. В этой модели объекты предметной области объединяются в «сеть». Каждый тип записи может содержать нуль, один или несколько атрибутов (полей).
Рис. 6.14. Различные типы объектов изображаются различными фигурами, а связи «владелец - член» - стрелками
Вся БД логически разделяется на области – так будем называть поименованную часть БД, в которой могут содержаться экземпляры записей и наборов или частей наборов. Каждая область может обладать собственными уникальными физическими характеристиками. Области могут обрабатываться как по отдельности, так и вместе с дру гими областями.
Рис. 6.15. Пример разбиения на области в сетевой модели данных
Поясним различие между типом и экземпляром записи. ПАЦИЕНТ является типом записи, а строка символов «1111, Иванов И.И., Вишнёвая 10 – 10» - экземпляром типа записи ПАЦИЕНТ. Т.о. в БД может иметься нуль, одна или несколько экземпляров записи некоторого типа. Между записями разных типов устанавливаются связи для описания и изображения типов наборов.
В приведённом ранее примере мы должны организовать набор ПАЦИЕНТ-ПЕРЕНЁС-ОПЕРАЦИЮ. В этом наборе будет
Рис. 6.17. Пример набора в сетевой модели данных
Т.о. тип набора представляет логическую взаимосвязь «один ко многим» между владельцем и членом набора. Каждому типу наборов присваивается имя, что позволяет каждому типу объектов участвовать в нескольких взаимосвязях.
Для приведённого на рис. 6.17. типа набора экземпляром набора будет являться например:
Рис. 6.18. Экземпляр набора ПАЦИЕНТ-ПЕРЕНЁС-ОПЕРАЦИЮ
Как видно на рисунке экземпляр набора состоит из одного экземпляра типа «запись-владелец» ПАЦИЕНТ и двух экземпляров типа «запись-член» ОПЕРАЦИЯ. Между экземпляром типа записи-владельца и экземплярами типа записи-члена существует взаимосвязь «один ко многим». Определённый экземпляр типа записи-члена в экземпляре данного типа набора не может одновременно принадлежать более чем одному экземпляру типа записи-владельца. Иными словами уникальность владельца типа набора обязательна.
Рассмотрим, как будет реализована взаимосвязи «многие ко многим» т.е. взаимосвязь между объектами ПАЦИЕНТ и ХИРУРГ, которую мы уже рассмотрели в иерархической модели. Эти данные в сетевой модели будут представлены так:
Рис. 6.19. Представление данных с помощью сетевой модели
ПАЦИЕНТ
Рис. 6.20. Экземпляры наборов ПАЦИЕНТ-ПЕРЕНЁС-
Следует обратить внимание, что набор ПАЦИЕНТ-ПЕРЕНЁС-ОПЕРАЦИЮ – является иерархическим. Аналогично, набор ОПЕРАЦИЯ-И-ПАЦИЕНТ – также иерархический. Однако, из приведённого экземпляра сетевой модели данных видно, что объект ОПЕРАЦИЯ не дублируется, как иерархической модели данных.
В этом коренное отличие между сетевой и иерархической моделями данных: в сетевой модели каждая запись может участвовать в любом числе наборов.
Одни и те же два типа записей могу входить в разные наборы. Это называется первым классом наборов.
Рис. 6.21. Два набора «Выполненная операция» и «Планируемая операция», в которых участвуют одни и те же типы записей. Это даёт возможность отразить два аспекта взаимосвязей между объектами.
Второй класс включает в себя три или более типа записей. Такие наборы называются многочленными
Рис. 6.22. Набор ПАЦИЕНТ-ОПЕРАЦИЯ-ЗАБОЛЕВАНИЕ является многочленным.
Рис. 6.23. Экземпляр набора ПАЦИЕНТ-ОПЕРАЦИЯ-ЗАБОЛЕВАНИЕ. (один экземпляр записи-владельца и пять экземпляров записей-членов).
Третий класс называется сингулярным набором. Он также определяется в терминах записи-владельца и записи-члена. Однако в БД может содержаться только один экземпляр сингулярного набора.
Рис. 6.24. Сингулярный тип набора
Такой класс записей используется для:
Включение. Допускается добавление новой записи ХИРУРГ в качестве экземпляра владельца в экземпляр набора ОПЕРАЦИЯ-ПАЦИЕНТА, в котором экземпляр операция отсутствует. Т.о. можно в БД ввести сведения о хирурге, не прооперировавшем ни одного пациента.
Удаление. При удалении экземпляра владельца ХИРУРГ удаляются все указателли, связывающие операции, выполненные в экземплярах набора ОПЕРАЦИЯ-ПАЦИЕНТА. Информация же о пациентах, которых прооперировал данных хирург не уничтожается. Удаляется только информация о хирурге.
Использование реляционной модели данных в СУБД было предложено в 1970 г. доктором Э.Ф. Коддом. В реляционной модели данных объекты и взаимосвязи между ними представляются в виде таблиц.
Любой фрагмент предметной области может быть представлен как множество сущностей, между которыми существует некоторое множество связей. Дадим определения:
Сущность (entity) - это объект, который может быть идентифицирован неким способом, отличающим его от других объектов.
Примеры: конкретный человек, предприятие, событие и т.д.
Набор сущностей (entity set) - множество сущностей одного типа (обладающих одинаковыми свойствами).
Примеры: все люди, предприятия, праздники и т.д. Наборы сущностей не обязательно должны быть непересекающимися. Например, сущность, принадлежащая к набору МУЖЧИНЫ, также принадлежит набору ЛЮДИ.
Сущность фактически представляет из себя множество атрибутов, которые описывают свойства всех членов данного набора сущностей.
Пример:
рассмотрим множество работников некого
предприятия. Каждого из них можно описать
с помощью характеристик табельный номер,
имя, возраст. Поэтому, сущность СОТРУДНИК
имеет атрибуты ТАБЕЛЬНЫЙ_НОМЕР, ИМЯ, ВОЗРАСТ.
Используя нотацию языка Pascal этот факт
можно представить как:
type employe = record
number : string[6];
name : string[50];
age : integer;
end;
В дальнейшем для определения сущности и её атрибутов будем использовать обозначение вида
СОТРУДНИК (ТАБЕЛЬНЫЙ_НОМЕР, ИМЯ, ВОЗРАСТ).
Например отделы, на которые подразделяется предприятие, и в которых работают сотрудники, можно описать как ОТДЕЛ(НОМЕР_ОТДЕЛА, НАИМЕНОВАНИЕ).
Множество значений (область определения) атрибута называется доменом.
Например, для атрибута ВОЗРАСТ домен (назовём его ЧИСЛО_ЛЕТ) задаётся интервалом целых чисел больших нуля, поскольку людей с отрицательным возрастом не бывает.
В статье П.Чена атрибут определяется как функция, отображающая набор сущностей в набор значений или в декартово произведение наборов значений. Так атрибут ВОЗРАСТ производит отображение в набор значений (домен) ЧИСЛО_ЛЕТ. Атрибут ИМЯ производит отображение в декартово произведение наборов значений ИМЯ, ФАМИЛИЯ и ОТЧЕСТВО.
Отсюда определяется ключ сущности - группа атрибутов, такая, что отображение набора сущностей в соответствующую группу наборов значений является взаимнооднозначным отображением. Другими словами: ключ сущности - это один или более атрибутов уникально определяющих данную сущность. В нашем примере ключом сущности СОТРУДНИК является атрибут ТАБЕЛЬНЫЙ_НОМЕР (конечно, только в том случае, если все табельные номера на предприятии уникальны).
Связь (relationship) - это ассоциация, установленная между несколькими сущностями.
Примеры:
поскольку каждый сотрудник работает в каком-либо отделе, между сущностями СОТРУДНИК и ОТДЕЛ существует связь «работает в» или ОТДЕЛ-РАБОТНИК; так как один из работников отдела является его руководителем, то между сущностями СОТРУДНИК и ОТДЕЛ имеется связь «руководит» или ОТДЕЛ-РУКОВОДИТЕЛЬ; могут существовать и связи между сущностями одного типа, например связь РОДИТЕЛЬ - ПОТОМОК между двумя сущностями ЧЕЛОВЕК; (В скобках здесь следует отметить, что в методике проектирования данных есть своеобразное правило хорошего тона, согласно которому сущности обозначаются с помощью имен существительных, а связи - глагольными формами. Данное правило, однако, не является обязательным).
К сожалению, не существует общих правил определения, что считать сущностью, а что связью. В рассмотренном выше примере мы положили, что «руководит» - это связь. Однако, можно рассматривать сущность «руководитель», которая имеет связи «руководит» с сущностью «отдел» и «является» с сущностью «сотрудник».
Связь также может иметь атрибуты. Например, для связи ОТДЕЛ-РАБОТНИК можно задать атрибут СТАЖ_РАБОТЫ_В_ОТДЕЛЕ.
Роль сущности в связи - функция, которую выполняет сущность в данной связи. Например, в связи РОДИТЕЛЬ-ПОТОМОК сущности ЧЕЛОВЕК могут иметь роли «родитель» и «потомок». Указание ролей в модели «сущность-связь» не является обязательным и служит для уточнения семантики связи.
Набор связей (relationship set) - это отношение между n (причём n не меньше 2) сущностями, каждая из которых относится к некоторому набору сущностей.
В случае n=2, т.е. когда связь объединяет две сущности, она называется бинарной. Доказано, что n - арный набор связей (n>2) всегда можно заменить множеством бинарных, однако первые лучше отображают семантику предметной области.
Взаимосвязи также рассматриваются в качестве объектов. Каждая таблица представляет один объект и состоит из строк и столбцов.
Столбцы в реляционной модели таблицы часто называют атрибутами, строки – кортежами. Значения в столбце выделяются из домена. Так для атрибута «Код пациента» домен составляют все четырёхзначные числа (0000,…,9999), хотя в настоящий момент таблица ПАЦИЕНТЫ содержит только значения 1111, 1234,2345, 5432, 2468.