Типы моделей данных
Что такое модель данных?
Модель данных определяет абстрактный математический каркас организации и управления данными в СУБД.
Структурная часть
Набор правил, определяющих допустимые формы представления данных: плоские двумерные таблицы, ориентированные деревья, сетевые графы, иерархические документы или пары «ключ-значение».
Манипуляционная часть
Формальный язык и набор допустимых операций: проекция, фильтрация, объединение множеств, навигационный обход связей или декларативный язык предикатов (SQL, Cypher, MQL).
Целостная часть
Декларативные правила поддержания корректности: первичные ключи (уникальность кортежей), внешние ключи (ссылочная целостность), доменные ограничения и предикаты CHECK.
Эволюция моделей данных: от файлов к NoSQL
Развитие моделей определялось ростом объемов данных, требованиями к скорости и гибкостью архитектур.
Иерархическая
IBM IMS (Apollo). Древовидная структура сегментов. Жесткая связь 1:N. Навигационный доступ по физическим смещениям.
Сетевая (CODASYL)
IDMS, IDS. Произвольные графы записей-владельцев и членов. Поддержка M:N через наборы. Ручная навигация курсором.
Реляционная (SQL)
Э. Кодд. Теория множеств, связанные таблицы, кортежи, домены, декларативный язык SQL, строгий ACID.
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» (автор Рэндалл Манро) — самый цитируемый в мировой 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).
Методический вывод: разделение структурных уровней, типизация данных и валидация запросов ядром СУБД — фундаментальный закон проектирования надежных информационных систем.