Сетевая модель данных
Остановимся на понятии сетевой структуры, положенной в основу сетевой модели данных. Рассмотрим отношение между следующими объектами: Студенческий коллектив, Студенческая группа, Комната в общежитии и Студент. Взаимосвязь между этими объектами не является иерархической, так как порожденный элемент Студент имеет два исходных - Студенческая группа и Комната в общежитии. Такие отношения, когда порожденный элемент имеет более одного исходного, описываются в виде сетевой структуры. В такой структуре любой элемент может быть связан с любым другим элементом.
Как и в случае иерархической модели, сетевую структуру можно описать в терминах исходных и порождаемых узлов, а также представить ее таким образом, чтобы порожденные узлы располагались ниже исходных. При рассмотрении некоторых сетевых структур можно говорить об уровнях. Так, рассмотренная выше сетевая структура имеет три уровня.
Рассмотрим, как в сетевой модели будут представлены взаимосвязи между объектами. В нашем примере присутствуют два вида взаимосвязей: 1:M (Учебная группа - Студент) и M:1 (Студент - Комната в общежитии). Сетевые структуры, которые имеют такие связи между исходными и порожденными узлами, порожденными и исходными узлами, относят к простым сетевым структурам. Сложной сетевой структурой называют такую структуру, в которой присутствует хотя бы одна связь типа N:M. Примером такой связи является отношение Студент - Преподаватель. Такое разделение сетевых структур обусловлено технологическими сложностями реализации взаимосвязи N:M. Причем некоторые СУБД не обрабатывают сложных сетевых структур (СЕТОР, DNS, DBMS).
База данных с сетевой структурой состоит из нескольких областей. Каждая область состоит из записей, которые состоят из полей. Объединение записей в логическую структуру возможно не только по областям, но и с помощью наборов данных. По существу набор данных - это поименованное двухуровневое дерево, которое является основой для построения многоуровневых деревьев. Сама база данных состоит из некоторой совокупности наборов данных.
Набор данных - это экземпляр поименованной совокупности записей. Каждый тип набора представляет собой отношение между двумя или несколькими типами записей. Для каждого набора данных один тип записи может быть объявлен владельцем, а один или несколько типов других записей - членами набора. Набор данных, например, можно использовать для объединения записей о студентах одной группы. Тогда тип набора можно определить как состав группы с типом записи владельца. Например, Учебная группа с типом записей членов Студент: Учебная группа (запись-владельца) - Студент (совокупность записей о сту дентах в данной группе).
Набор данных имеет следующие свойства:
- Набор данных есть поименованная совокупность связанных записей.
- В каждом экземпляре набора данных имеется только один экземпляр записи владельца.
- Экземпляр набора может содержать 0,1 или несколько записей-членов.
- Набор данных считается пустым, если ни один экземпляр записи-члена не связан с соответствующим экземпляром записи владельца.
- Экземпляр набора данных связан с записью владельца.
- Тип набора предполагает логическую взаимосвязь 1:M между владельцем и членом набора.
- Каждому типу набора данных присваивается имя, которое позволяет одной и той же паре типов объектов участвовать в нескольких взаимосвязях.
Необходимо различать тип и экземпляр набора. Предварительно поясним различие между понятиями "тип" и "экземпляр" записи. Например, Студент является типом записи, а строка, содержащая информацию о конкретном студенте, является экземпляром типа записи Студент. Аналогичное различие существует между типом и экземпляром набора данных. Например, тип набора Состав группы, а его экземпляр содержит один экземпляр типа записи владельца Учебная группа и N экземпляров типа записи-члена Студент. Определенный экземпляр типа записи-члена не может одновременно принадлежать более чем одному экземпляру типа записи-владельца. Уникальность владельца типа набора является обязательным элементом сетевой модели данных. С этой точки зрения иерархическая модель является частным случаем сетевой модели данных.
Концепция сетевой модели данных связана с именем Ч. Бахмана, известного специалиста в области обработки данных, который оказал определяющее влияние на создание проекта DBTG CODASYL (1971 год). Сетевая модель данных является моделью объектов-связей, где допускаются только бинарные связи типа "многие-к-одному", что позволяет использовать для представления данных простую модель ориентированных графов. В некоторых определениях сетевой модели допускаются связи типа "многие-ко-многим", но требование бинарности связи остается в силе.
Для сетевой модели не существует общепринятой терминологии. Далее используется сложившая к настоящему времени группа понятий и терминов, которые используются для описания элементов сетевой модели.
Для моделирования представления данных в сетевой модели используются следующие элементы данных:
- простое поле (элемент данных, итем) - наименьшая единица структуры данных, имеет уникальное имя, размер и тип: (табельный номер служащего);
- множественное поле (агрегат данных, периодическая группа) - поименованная совокупность простых полей или агрегатов; (простой агрегат: Дата = (день, месяц, год)), (составной агрегат: Организация = (наименование, адрес = (почтовый_индекс, город, улица, дома_номер))), (повторяющаяся группа: зарплата (12) = (ФИО, оклад));
- запись (группа данных) - поименованный агрегат, который не входит в состав никакого другого агрегата и представляет сущность ПО БД (тип записи);
- групповое отношение (связь, набор) - иерархическое отношение между различными записями (графическое представление группового отношения в сетевой модели называется диаграммой Бахмана);
- БД - совокупность записей различного типа, объединенная системой групповых отношений различной направленности.
На рис. 1.9 приведен фрагмент описания схемы БД (описание статьи записи) на примере записи из БД "Кадры", предназначенной для автоматизации работы отдела кадров организации. Для описания записи используется язык описания данных СODASYL. Описание схемы БД в CODASYL состоит из четырех статей:
- статья схемы: SCHEMA NAME IS Имя_схемы;
- статья областей: AREA NAME IS Имя_области (файла);
- статья записи: RECORD NAME IS Имя_записи - способ выборки;
- статья выбора: SET NAME IS Имя_набора; способ включения экземпляров записей (устанавливает групповые отношения в БД).
Рис. 1.9. Описание записис в сетевой модели данных
Элементы данных сетевой модели допускают обработку следующими операциями, множество которых составляет язык манипулирования данными:
- ЗАПОМНИТЬ - заносит экземпляр записи в БД и включает его в существующее отношение;
- ПРИСОЕДИНИТЬ - связывает существующие записи в групповое отношение и определяет подчинение записей (родитель-потомок);
- ПЕРЕКЛЮЧИТЬ - связывает экземпляр подчиненной записи с другим экземпляром записи-родителя;
- МОДИФИЦИРОВАТЬ - изменяет значение полей в существующих записях БД, перед выполнением этой операции запись должна быть извлечена из БД;
- НАЙТИ - находит записи из БД согласно критерию поиска;
- УДАЛИТЬ - удаляет из БД ненужную запись;
- ОТДЕЛИТЬ - разрывает существующую связь между записями в групповом отношении;
- ПОЛУЧИТЬ - извлекает записи из БД.
В модели CODASYL существует набор дополнительных операций по обслуживанию БД, который здесь не рассматривается.
Очень часто к недостаткам сетевого подхода в БД относят как сложность самой модели данных, так и сложность освоения средств манипулирования данными в ней. Практически, при анализе ПО БД и программировании особенно тщательно приходится отлеживать цепочки связанных групповыми отношениями данных при операциях вставки, обновления и удаления. Однако действительный источник сложности сетевой модели данных состоит в диапазоне предоставляемых моделью конструкций для представления информации и набора операции для манипулирования этими конструкциями.