- 29 сентября 2026
- 8 минут
- 4
Статью подготовили специалисты образовательного сервиса Zaochnik.
Сетевая модель данных: групповые отношения, операции и целостность
Сетевая модель данных: операции и целостность
Когда одни и те же записи нужно связать сразу с несколькими другими, простой древовидной структуры уже не хватает. Именно на такие задачи и рассчитана сетевая модель данных — одна из ранних, но принципиально важных моделей, снявшая часть ограничений иерархического подхода.
Как появилась сетевая модель
Заметный вклад в разработку стандарта сетевой модели внёс американский учёный Ч. Бахман. Работа над основными принципами этой модели началась ещё в середине 1960-х годов, а её эталонный вариант в 1971 году описала рабочая группа по языкам баз данных CODASYL (COnference on DAta SYstem Languages).
Любопытно, что сетевую модель описывают теми же терминами, что и иерархическую. В её основе лежит множество записей, каждая из которых выступает либо владельцем, либо членом группового отношения. Владелец и член связаны между собой отношением типа 1:n.
Групповое отношение — это связь между записью-владельцем и множеством подчинённых ей записей-членов, где одному владельцу может соответствовать несколько членов.
Чем сетевая модель отличается от иерархической
Разница между двумя моделями кроется в одном, но решающем моменте.
Ключевое отличие сетевой модели от иерархической в том, что здесь запись может быть членом сразу нескольких групповых отношений, а не только одного. Именно это превращает жёсткое дерево в гибкую сеть связей.
Каждое групповое отношение имеет собственное имя, а также различается по типу и экземпляру. Тип группового отношения задаёт свойства, общие для всех его экземпляров. Экземпляр же — это конкретная запись-владелец вместе с набором подчинённых записей, причём этот набор может оказаться и пустым.
Есть и важное ограничение: один экземпляр записи не может входить в два экземпляра групповых отношений одного типа. Проще говоря, сотрудник не может числиться работником сразу двух отделов в рамках одной и той же связи.
Разберём это на практике. При организации сетевой структуры запись СОТРУДНИК способна участвовать сразу в двух групповых отношениях. А чтобы отобразить связь типа m:n, вводят вспомогательную запись СОТРУДНИК_КОНТРАКТ. Сама по себе она может не содержать полей и существовать лишь для того, чтобы связать записи КОНТРАКТ и СОТРУДНИК. При этом такая запись способна хранить и полезные сведения — например, долю сотрудника в общем вознаграждении по конкретному контракту.
Признаки экземпляра группового отношения
У каждого экземпляра группового отношения есть определённый набор признаков, которые задают его поведение.
Способ упорядочивания подчинённых записей
Подчинённые записи внутри отношения можно упорядочивать по-разному:
- произвольный — без какого-либо заданного порядка;
- сортированный — по значению какого-либо поля;
- хронологический (очередь) — новые записи добавляются в конец;
- обратный хронологический (стек) — новые записи добавляются в начало.
Если запись подчинена сразу нескольким групповым отношениям, то в каждом из них ей можно назначить свой способ упорядочивания.
Режим включения подчинённых записей
Здесь возможны два варианта:
- ручной — подчинённую запись разрешается сохранить в базе, не включая её сразу в экземпляр группового отношения. Эту операцию пользователь выполнит позже, когда сочтёт нужным;
- автоматический — занести запись в базу, не закрепив её тут же за конкретным владельцем, попросту невозможно.
Режим исключения и классы членства
Отдельно выделяют три класса членства подчинённых записей в групповых отношениях. Именно они определяют, что произойдёт с подчинёнными записями при удалении владельца.
Класс членства — это правило, задающее, насколько жёстко подчинённая запись привязана к своему владельцу и может ли она существовать без него.
- Обязательное. Подчинённую запись разрешено переключить на другого владельца, но существовать без владельца вообще она не может. Чтобы удалить запись-владельца, нужно, чтобы у неё не осталось подчинённых записей с обязательным членством. Такая связь есть между записями СОТРУДНИК и ОТДЕЛ: при расформировании отдела всех его сотрудников придётся либо перевести в другие отделы, либо уволить.
- Необязательное. Запись можно исключить из группового отношения и оставить в базе, не прикрепляя к новому владельцу. Если удаляют владельца, его подчинённые записи (необязательные члены) сохраняются в базе, просто перестают участвовать в отношении этого типа. Пример — отношение ВЫПОЛНЯЕТ между записями СОТРУДНИКИ и КОНТРАКТ: ведь на предприятии могут работать люди, не связанные ни с одним договором.
- Фиксированное. Подчинённая запись жёстко привязана к владельцу, и исключить её из отношения можно только вместе с удалением. При удалении владельца автоматически удаляются и все его подчинённые записи. Пример — отношение ЗАКЛЮЧАЕТ между записями КОНТРАКТ и ЗАКАЗЧИК: контракт не существует без заказчика.
Операции над данными в сетевой модели
Работа с данными в сетевой модели опирается на набор чётко определённых операций.
- Добавление — внесение записи в базу. В зависимости от режима включения запись либо сразу попадает в групповое отношение как подчинённая, либо не включается ни в какое отношение.
- Включение в групповое отношение — связывание уже существующей подчинённой записи с записью-владельцем.
- Переключение — перенос существующей подчинённой записи к другому владельцу в рамках того же группового отношения.
- Обновление — изменение значений элементов предварительно извлечённой записи.
- Извлечение — последовательное получение записи по значению ключа, а также при помощи групповых отношений: от владельца можно перейти к членам, а от подчинённой записи — обратно к владельцу.
- Удаление — удаление записи из базы. Если удаляемая запись является владельцем группового отношения, анализируется класс членства её подчинённых. Обязательных членов предварительно исключают из отношения, фиксированных — удаляют вместе с владельцем, а необязательные остаются в базе.
- Исключение из группового отношения — разрыв связи между записью-владельцем и записью-членом.
Ограничения целостности
В завершение стоит сказать о том, как сетевая модель следит за корректностью связей.
Подобно иерархической модели, сетевая обеспечивает только поддержание целостности по ссылкам — то есть корректность связей «владелец — член». Более сложные виды контроля целостности в рамках самой модели не предусмотрены, и заботиться о них приходится на уровне приложения. Это одновременно и упрощает саму модель, и перекладывает часть ответственности за согласованность данных на разработчика.