Сетевая модель базы данных: структура, отличия и примеры

Сетевая модель базы данных: структура, отличия и примеры Полезное

Сетевая модель данных — это способ организации базы данных, в котором записи связаны отношениями «многие-ко-многим»: у одной записи может быть несколько родительских и несколько дочерних. Это отличает ее от иерархической модели, где у записи только один родитель.

Сразу разведем частую путаницу. Сетевая модель БД — это не про компьютерные сети и передачу данных. «Сеть» здесь — метафора структуры: записи и связи между ними образуют граф. Речь об организации данных, а не о протоколах и каналах связи.

Ниже разберем, как устроена модель (записи, наборы, связи), в чем ее плюсы и минусы, чем она отличается от иерархической и реляционной, и на каких системах она реально работала — CODASYL, IDS, IDMS.

Как устроена: записи, наборы, связи

В основе модели два понятия.

Запись (record) — единица данных об объекте: студент, курс, деталь, поставщик. Записи одного вида образуют тип записи (аналог сущности).

Набор (set) — именованная связь «один-ко-многим» между записью-владельцем (owner) и записями-членами (member). Именно наборы соединяют записи в структуру.

Связь «многие-ко-многим» в чистом виде набор не выражает — набор всегда «один владелец -> много членов». Поэтому M:N собирают из двух наборов через промежуточную запись-связку. Это ключевой прием модели.

Возьмем сквозной пример: студенты и курсы. Один студент ходит на много курсов, один курс слушает много студентов — это связь «многие-ко-многим». Ее раскладывают через запись-связку «Запись на курс»:

Студент "Иванов"                 Курс "Базы данных"
     | набор "записи студента"        | набор "записи курса"
     +----> [Запись на курс] <--------+
     +----> [Запись на курс] <-- Курс "Алгоритмы"

Здесь запись «Запись на курс» — член сразу двух наборов: набора со владельцем-студентом и набора со владельцем-курсом. Пройдя по первому набору, мы получим все курсы студента; пройдя по второму — всех студентов курса.

Обращение к данным — навигационное. Программа явно перемещается по связям: взять владельца, перейти к первому члену набора, к следующему, подняться к владельцу другого набора. Такой обход задает сам разработчик, а не декларативный запрос вроде SQL.

Особенности: плюсы и минусы

Сетевая модель сильна там, где связей много и они сложные, но расплачивается за это жесткостью и трудоемкостью.

Плюсы Минусы
Прямое выражение связей «многие-ко-многим» через наборы Навигационный доступ: обход связей пишет программист вручную
Быстрый обход по заранее проложенным связям (указателям) Жесткая схема: изменить структуру связей в работающей базе трудно
Контроль целостности через членство записи в наборе Нет единого декларативного языка запросов уровня SQL
Экономия на дублировании: связка вместо повторения данных Код приложения тесно привязан к физической структуре хранения

Важная оговорка: «быстро» здесь означает быстрый проход по уже существующей связи. Если нужен запрос, под который связь не проложена, модель проигрывает реляционной — произвольную выборку по условию она делает плохо.

Сетевая, иерархическая и реляционная модели: сравнение

Три классические модели удобно сравнить по тому, как они выражают связи и как к данным обращаются.

Признак Иерархическая Сетевая Реляционная
Структура Дерево Граф (записи и наборы) Таблицы (отношения)
Родители у записи Один Несколько Задается через ключи, не фиксирована
Связь «многие-ко-многим» Напрямую нельзя, только через дублирование Через запись-связку и два набора Через отдельную таблицу и внешние ключи
Доступ к данным Навигационный, по дереву Навигационный, по связям Декларативный (SQL), по значениям
Пример СУБД IBM IMS IDS, IDMS (CODASYL) Oracle, PostgreSQL, MySQL
Когда уместна Строго древовидные данные Много жестких связей M:N, критична скорость обхода Большинство прикладных задач сегодня

Коротко: иерархическая модель — частный случай (дерево, один родитель), сетевая снимает ограничение на одного родителя, а реляционная меняет сам принцип — от ручной навигации по связям к запросам по значениям в таблицах.

Отдельно про графовые СУБД (например Neo4j). Они возвращают интуицию «узлы и связи», но это не та же самая сетевая модель CODASYL: у них декларативный язык запросов и гибкая схема, а не жесткие наборы и ручная навигация. Родство здесь идейное, а не техническое.

Примеры: CODASYL, IDS, IDMS

IDS (Integrated Data Store). Первую систему на основе сетевой модели создал Чарльз Бахман в General Electric в начале 1960-х. За вклад в технологии баз данных Бахман получил премию Тьюринга в 1973 году.

CODASYL / DBTG. CODASYL — это Conference on Data Systems Languages, та же организация, что стандартизировала язык COBOL. Ее рабочая группа по базам данных (Data Base Task Group, DBTG) в 1971 году выпустила отчет, который зафиксировал сетевую модель как стандарт: понятия записи, набора, схемы и языка манипулирования данными.

IDMS (Integrated Database Management System). Промышленная реализация сетевой модели CODASYL. Появилась в начале 1970-х, работала на мейнфреймах IBM и, что важно, поддерживается до сих пор — сейчас под маркой Broadcom (ранее Computer Associates, CA IDMS). Это редкий случай, когда сетевая СУБД пережила эпоху и осталась в эксплуатации в крупных legacy-системах.

Почему модель уступила место реляционной. После статьи Эдгара Кодда о реляционной модели (1970) и появления SQL промышленный стандарт сместился к таблицам и декларативным запросам: их проще сопровождать и не нужно вручную прокладывать пути доступа. Сетевые СУБД остались в узкой нише — там, где системы работают десятилетиями и переписывать их дороже, чем поддерживать.

Выводы

  • Сетевая модель данных организует базу как граф записей и наборов, где у записи может быть несколько родителей и несколько потомков.
  • «Сетевая» относится к структуре связей внутри базы, а не к компьютерным сетям и передаче данных — это разные темы.
  • Связь «многие-ко-многим» модель выражает через запись-связку и два набора; в этом ее главное отличие от иерархической модели с единственным родителем.
  • Доступ навигационный: пути обхода задает программист, единого декларативного языка уровня SQL в модели нет.
  • Реляционная модель вытеснила сетевую за счет простоты сопровождения и запросов по значениям; сетевые СУБД остались в legacy-нише (IDMS на мейнфреймах).

Где применяется / связь с практикой

На практике сетевую модель сегодня чаще встречают не как выбор для нового проекта, а как наследие: legacy-системы на IDMS, миграции с мейнфреймов, задачи, где нужно понять и перенести структуру связей в реляционную или графовую базу. Понимание модели помогает читать такие системы и грамотно их переносить.

Освойте тему на практике

Если вы разбираетесь в моделях данных предметно — от иерархической и сетевой до реляционной и проектирования схем, — системно это дают на курсе subd. Посмотреть формат и темы вживую можно на бесплатных вебинарах — без оплаты и с разбором практических задач.

Смежные темы: Иерархическая база данных: модель, структура и примеры, Все о сетях в компьютерах и передаче данных.

FAQ

Сетевая модель БД и графовая база данных — это одно и то же?
Нет. Идея «узлы и связи» общая, но графовые СУБД (Neo4j и подобные) используют декларативные запросы и гибкую схему, а классическая сетевая модель CODASYL опирается на жесткие наборы и ручную навигацию по связям.

Сетевые базы данных еще используют или это только история?
В новых проектах почти нет, но эксплуатируемые системы остались: IDMS до сих пор работает на мейнфреймах в крупных организациях, поэтому модель встречается при сопровождении и миграции legacy.

Чем набор (set) отличается от таблицы связей в реляционной БД?
Набор — это заранее проложенная связь с указателями от владельца к членам, обход задает программа. Таблица связей в реляционной базе соединяет строки по значениям ключей, а выборку описывает декларативный SQL-запрос.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)