Слайд 1 из 15

Типы моделей данных

Что такое модель данных?

Модель данных определяет абстрактный математический каркас организации и управления данными в СУБД.

Компонент 1

Структурная часть

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

Компонент 2

Манипуляционная часть

Формальный язык и набор допустимых операций: проекция, фильтрация, объединение множеств, навигационный обход связей или декларативный язык предикатов (SQL, Cypher, MQL).

Компонент 3

Целостная часть

Декларативные правила поддержания корректности: первичные ключи (уникальность кортежей), внешние ключи (ссылочная целостность), доменные ограничения и предикаты CHECK.

Эволюция моделей данных: от файлов к NoSQL

Развитие моделей определялось ростом объемов данных, требованиями к скорости и гибкостью архитектур.

1960-е

Иерархическая

IBM IMS (Apollo). Древовидная структура сегментов. Жесткая связь 1:N. Навигационный доступ по физическим смещениям.

1970-е

Сетевая (CODASYL)

IDMS, IDS. Произвольные графы записей-владельцев и членов. Поддержка M:N через наборы. Ручная навигация курсором.

1970–настоящее время

Реляционная (SQL)

Э. Кодд. Теория множеств, связанные таблицы, кортежи, домены, декларативный язык SQL, строгий ACID.

2010-е–настоящее время

NoSQL & NewSQL

MongoDB, ClickHouse, Neo4j, Redis. Горизонтальное масштабирование, гибкие схемы, полиглот-персистентность.

Иерархическая модель: структура корневого дерева

Естественная организация подчинения, скованная жесткими ограничениями топологии.

Принцип организации

Данные представляются в виде дерева сегментов. На верхнем уровне расположен единственный корневой сегмент (Root). Каждый подчиненный сегмент (Child) может иметь строго одного родителя (Parent).

Пример: Каталог файловой системы (Диск → Папка → Файл) или организационная структура предприятия.

Критические ограничения

  • Проблема M:N: Отношение «многие-ко-многим» (Студент ↔ Курсы) невозможно без грубого дублирования ветвей дерева.
  • Аномалия удаления: Удаление узла-родителя автоматически влечет за собой безвозвратное уничтожение всех связанных дочерних данных.
  • Сложность реорганизации: Любое изменение бизнес-иерархии требует полного перестроения физической базы.

Сетевая модель: граф связей CODASYL

Преодоление ограничений дерева путем перехода к графовым наборам взаимосвязей.

Архитектурная схема

Узлы сети представляют собой типы записей, а ребра — именованные наборы связей (Sets). Дочерняя запись-член (Member) может входить одновременно в несколько наборов разных типов записей-владельцев (Owner).

Решение проблемы M:N достигается введением связующей записи-члена (аналог таблицы-связки в РМД).

Слабое место: навигационный доступ

Запросы к сетевой базе требовали от программиста явного императивного обхода структуры с помощью физических курсоров:

FIND FIRST Student WITHIN Faculty-Students.
WHILE DB-STATUS = 0 DO
    GET Student;
    FIND NEXT Student WITHIN Faculty-Students;
END-WHILE;

Прикладной код оказывался жестко связан с физическими указателями на диске.

Реляционная революция Эдгара Кодда (1970)

Переход от физической навигации к строгой математической логике предикатов и теории множеств.

Математический фундамент

База данных состоит из нормализованных отношений (Relations) — математических подмножеств декартова произведения доменов. На физическом уровне они воспринимаются пользователем как простые двумерные таблицы.

Строка таблицы называется кортежем (Tuple), столбец — атрибутом (Attribute), диапазон допустимых значений — доменом (Domain).

Декларативный принцип SQL

Разработчик описывает что именно нужно получить, а СУБД сама решает, как оптимально это вычислить:

SELECT s.name, c.title
FROM students s
JOIN enrollments e ON s.id = e.student_id
JOIN courses c ON e.course_id = c.id
WHERE s.course_year = 2;

Оптимизатор запросов СУБД строит план выполнения с учетом дисковых B-Tree индексов.

12 правил Кодда: критерии истинной реляционности

Свод базовых законов, гарантирующих независимость логики от физической среды.

Правила независимости (8 и 9)

Физическая независимость: Перенос файлов с HDD на SSD, изменение размера блока или смена структуры индексов не требует переписывания ни единой строчки прикладного SQL-кода.

Логическая независимость: Добавление столбцов или декомпозиция таблиц не нарушают работу существующих программ при условии создания представлений (View).

Правила доступа и целостности (2 и 10)

Гарантированный доступ: Каждое атомарное значение адресуется тройкой: (Имя Таблицы, Первичный Ключ, Имя Столбца).

Независимость целостности: Правила валидации (PRIMARY KEY, FOREIGN KEY, CHECK) хранятся в реляционном каталоге СУБД, а не рассеяны по коду клиентских приложений.

Документная модель: JSON/BSON и гибкая схема

Естественное соответствие структур данных формату объектов современных языков программирования.

Суть и особенности

Данные хранятся в виде самоописываемых иерархических документов (BSON/JSON), сгруппированных в коллекции. Поддерживается гибкая схема (Schema-on-read): разные документы одной коллекции могут иметь разный набор атрибутов.

Типичные СУБД: MongoDB, Couchbase, Amazon DocumentDB.

Пример документа в MongoDB

{
  "_id": ObjectId("651e0f..."),
  "item_code": "LAP-X1",
  "category": "Электроника",
  "price": 89990.00,
  "specs": {
    "ram_gb": 16,
    "cpu": "Intel Core i7",
    "ssd_gb": 1024
  },
  "tags": ["учеба", "разработка", "4k"]
}

Графовая модель: узлы, ребра и безындексная смежность

Идеальное решение для сложных многосвязных предметных областей с глубокими цепочками зависимостей.

Концепция Property Graph

Модель состоит из трех базовых примитивов:

  • Вершины (Nodes): сущности реального мира с набором меток (Labels).
  • Ребра (Relationships): направленные типизированные связи между узлами.
  • Свойства (Properties): пары ключ-значение у узлов и связей.

Типичные СУБД: Neo4j, Memgraph, Amazon Neptune.

Безындексная смежность (Index-free adjacency)

Каждый узел физически хранит прямые указатели на соседние связанные узлы в оперативной памяти. Сложность обхода связей составляет O(1) на один шаг.

В реляционной СУБД запрос «друзья друзей до 4 уровня» требует каскада тяжелых JOIN с резким падением скорости; в графовой СУБД он выполняется за миллисекунды.

Колоночная модель: OLAP и обработка кликстрима

Физическое размещение данных по колонкам для молниеносной аналитической агрегации.

Строчное vs Колоночное хранение

Строчные СУБД (PostgreSQL, OLTP): строка хранится целиком на дисковой странице. Идеально для вставки и точечного чтения единичных записей по ключу.

Колоночные СУБД (ClickHouse, OLAP): каждый столбец пишется в отдельный файл. Однотипные данные сжимаются алгоритмами LZ4/ZSTD в 5–10 раз.

Почему ClickHouse выигрывает в аналитике?

При запросе агрегации SELECT event_type, count(*) FROM clickstream GROUP BY event_type колоночная СУБД считывает с диска только один столбец event_type, полностью игнорируя остальные 50 столбцов таблицы.

Результат: сканирование сотен миллионов событий за доли секунды.

Модель Ключ-Значение (Key-Value): In-Memory кэширование

Простейшая и самая быстродействующая парадигма с доступом за константное время O(1).

Принцип ассоциативного массива

Данные хранятся в виде пар Key → Value. Доступ возможен исключительно по известному ключу через хэш-таблицу. СУБД хранит весь набор данных в оперативной памяти (In-Memory) с асинхронным сбросом на диск (RDB/AOF).

Типичные СУБД: Redis, KeyDB, Memcached.

Сценарии применения в архитектуре

  • Кэширование результатов тяжелых SQL-запросов (снижение нагрузки на PostgreSQL).
  • Хранение пользовательских HTTP-сессий и токенов авторизации (JWT / Redis Sessions).
  • Счетчики кликов, лайков и просмотров в реальном времени (команда INCR).
  • Лидерборды и очереди задач (структуры данных Sorted Sets, Lists, Streams).

CAP-теорема: фундаментальный компромисс распределенных систем

Нельзя получить все и сразу: законы физики сетей диктуют жесткий выбор.

C (Consistency)

Согласованность: Каждый запрос на чтение гарантированно возвращает самые последние записанные данные либо ошибку. Все узлы видят одинаковые данные.

A (Availability)

Доступность: Каждый запрос к любому работающему узлу кластера гарантированно завершается успешным ответом без гарантии его актуальности.

P (Partition Tolerance)

Устойчивость к разделению: Система продолжает функционировать при потере связности или задержках между серверами по сети.

Инженерный вывод: В распределенной среде обрыв сети (P) неизбежен. Поэтому реальный выбор архитектора идет строго между CP (жертвуем доступностью ради точности) и AP (жертвуем синхронной точностью ради бесперебойного отклика).

ACID vs BASE: две противоположные философии надежности

Пессимистическая строгость транзакций против оптимистической согласованности в конечном счете.

Парадигма ACID (Реляционные СУБД) Парадигма BASE (Распределенные NoSQL)
Atomicity (Атомарность): транзакция выполняется «все или ничего». Basically Available (Базовая доступность): отказ узлов не останавливает работу сервиса.
Consistency (Согласованность): переход только между валидными состояниями БД. Soft state (Неустойчивое состояние): данные на узлах могут изменяться фоновыми процессами.
Isolation (Изоляция): параллельные транзакции изолированы друг от друга. Eventual consistency (Согласованность в конечном счете): через время все реплики синхронизируются.
Durability (Долговечность): коммит гарантированно сохранен на диске. Фокус: максимальная производительность и глобальное масштабирование.

Инженерная матрица: критерии выбора модели данных

Как архитектор принимает решение о выборе технологического стека хранения.

Выбирайте реляционную модель (PostgreSQL)

  • Критическая важность целостности балансов и денег (финансовые транзакции).
  • Сложные бизнес-правила с множеством внешних ключей и ограничений целостности.
  • Предсказуемая, структурированная схема сущностей.

Выбирайте документную модель (MongoDB)

  • Каталоги товаров с сильно различающимися атрибутами (электроника, одежда).
  • Быстро меняющиеся требования к структуре и прототипирование стартапов.
  • Агрегация в единый JSON для мобильных и веб-приложений.

Выбирайте графовую модель (Neo4j)

  • Социальные графы, анализ взаимодействий и цепочек рекомендаций.
  • Антифрод-мониторинг подозрительных переводов по кольцевым схемам счетов.
  • Поиск кратчайших логистических маршрутов и зависимостей в сетях.

Выбирайте колоночную модель (ClickHouse)

  • Сбор сырых логов, кликстрима, метрик посещаемости и телеметрии IoT.
  • Аналитические дашборды (OLAP) с агрегациями по миллиардам строк.
  • Поток событий пишется только на вставку (Append-only), без точечных UPDATE.

Популярный мем индустрии баз данных: «Bobby Tables»

xkcd #327: Exploits of a Mom (Bobby Tables)

Комикс xkcd №327: «Exploits of a Mom» (автор Рэндалл Манро) — самый цитируемый в мировой IT-индустрии мем об архитектуре баз данных и инъекциях.

Мама называет сына именем:
Robert'); DROP TABLE Students;--

Когда школьная система попыталась сохранить имя ученика не экранированным конкатенированным запросом, реляционная СУБД выполнила команду удаления таблицы и стерла успеваемость за целый год.

Атрибуция и лицензия первоисточника:
Комикс: xkcd #327 "Exploits of a Mom" (автор Randall Munroe).
Лицензия: Creative Commons Attribution-NonCommercial 2.5 License (CC BY-NC 2.5).
Методический вывод: разделение структурных уровней, типизация данных и валидация запросов ядром СУБД — фундаментальный закон проектирования надежных информационных систем.