← Назад к вопросам

Что такое сетевая модель?

1.0 Junior🔥 71 комментариев
#DevOps и инфраструктура#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сетевая модель

Сетевая модель (Network Model) — это модель данных для организации информации в базах данных, разработанная в 1960-1970-х годах как развитие иерархической модели. Она позволяет представлять данные как сеть связанных узлов, где каждый узел может быть связан с несколькими другими узлами.

История и контекст

До появления реляционных БД (SQL), существовали две основные модели:

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

Сегодня сетевая модель в чистом виде используется редко, но её концепции живут в современных БД.

Основные концепции

1. Записи (Records)

Данные представлены в виде записей, похожих на объекты:

Преподаватель
├─ имя
├─ должность
└─ зарплата

Курс
├─ название
├─ код
└─ кредиты

2. Связи (Sets)

Связь между записями называется SET и определяет отношение "один ко многим":

Преподаватель ──(TEACHES)──> Курс
(один преподаватель может вести много курсов)

3. Хозяин и Член (Owner and Member)

В каждой связи есть:

  • Owner (хозяин) — родительская запись
  • Member (член) — дочерняя запись

Пример сетевой модели

Система учебного заведения:

┌─────────────────────────────────────┐
│      ПРЕПОДАВАТЕЛЬ                  │
│  (Owner)                            │
│  - ID                               │
│  - Имя                              │
│  - Должность                        │
└────────────┬────────────────────────┘
             │
        TEACHES (SET)
        один ко многим
             │
             ▼
  ┌──────────────────────┐
  │       КУРС           │
  │    (Member)          │
  │  - ID                │
  │  - Название          │
  │  - Кредиты           │
  └──────┬───────────────┘
         │
    ENROLLS (SET)
         │
         ▼
  ┌──────────────────────┐
  │    СТУДЕНТ           │
  │    (Member)          │
  │  - ID                │
  │  - Имя               │
  │  - Год обучения      │
  └──────────────────────┘

Отличие от иерархии: студент может быть записан на несколько курсов, и каждый курс может иметь несколько студентов. Многие-ко-многим отношения.

Сравнение с реляционной моделью

Те же данные в реляционной модели (SQL):

-- Таблицы
CREATE TABLE teachers (
    teacher_id INT PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(50)
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    title VARCHAR(100),
    credits INT,
    teacher_id INT,
    FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id)
);

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(100),
    year INT
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    grade DECIMAL(3,1),
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

-- Запрос: все курсы преподавателя "John Smith"
SELECT c.title, c.credits
FROM courses c
JOIN teachers t ON c.teacher_id = t.teacher_id
WHERE t.name = 'John Smith';

-- Запрос: все студенты на курсе "Python 101"
SELECT s.name, e.grade
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE c.title = 'Python 101';

Преимущества сетевой модели

  • Гибкость: более сложные отношения между данными, чем в иерархии
  • Эффективность: при правильной организации, быстрый доступ к связанным данным
  • Реалистичность: может представить сложные реальные сценарии

Недостатки сетевой модели

  • Сложность: сложнее проектировать и поддерживать
  • Навигация: нужно знать точный путь к данным (типа ручной навигации)
  • Изменяемость: сложно менять структуру без переписания запросов
  • Отсутствие стандартизации: разные системы используют разный синтаксис

Современные системы, использующие сетевую модель

Несмотря на историческое значение, в чистом виде сетевая модель редко используется. Но её идеи применяются в:

  • Graph Databases (графовые БД): Neo4j, ArangoDB
  • Document Databases: MongoDB (с вложенными документами)
  • Knowledge Graphs: Wikidata, DBpedia

Пример на Python с графовой БД (Neo4j)

# Современный эквивалент сетевой модели — графовая БД
from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7687")

def create_data(driver):
    with driver.session() as session:
        # Создание узлов
        session.run("CREATE (t:Teacher {name: 'John Smith', position: 'Professor'})")
        session.run("CREATE (c:Course {title: 'Python 101', credits: 3})")
        session.run("CREATE (s:Student {name: 'Alice', year: 2})")
        
        # Создание связей
        session.run(
            "MATCH (t:Teacher {name: 'John Smith'}), (c:Course {title: 'Python 101'}) "
            "CREATE (t)-[:TEACHES]->(c)"
        )
        session.run(
            "MATCH (s:Student {name: 'Alice'}), (c:Course {title: 'Python 101'}) "
            "CREATE (s)-[:ENROLLED_IN]->(c)"
        )

def query_example(driver):
    with driver.session() as session:
        # Запрос: найти все курсы преподавателя
        result = session.run(
            "MATCH (t:Teacher {name: 'John Smith'})-[:TEACHES]->(c:Course) "
            "RETURN c.title"
        )
        for record in result:
            print(f"Course: {record['c.title']}")
        
        # Запрос: найти всех студентов на каком-то курсе
        result = session.run(
            "MATCH (s:Student)-[:ENROLLED_IN]->(c:Course {title: 'Python 101'}) "
            "RETURN s.name"
        )
        for record in result:
            print(f"Student: {record['s.name']}")

create_data(driver)
query_example(driver)
driver.close()

Заключение

Сетевая модель — это исторически важная модель БД, которая позволила представлять более сложные отношения между данными, чем иерархическая модель. Хотя сегодня её вытеснила реляционная модель, её идеи продолжают жить в графовых БД и других современных системах. Понимание сетевой модели помогает лучше разобраться в истории БД и в том, как работают современные графовые БД.