Данные в ИС: модели, базы данных и хранилища
Зачем в курсе отдельно говорить о данных
В первых статьях мы определили, что информационная система — это люди, процессы, технологии и правила, а архитектура задаёт, как компоненты взаимодействуют и интегрируются через API. Почти во всех этих вопросах в центре находятся данные:
данные определяют, что именно система «знает» о предметной области
модель данных определяет границы сервисов и контрактов API
качество, целостность и доступность данных определяют надёжность работы ИС
способ хранения данных влияет на производительность, масштабирование и эксплуатациюЭта статья даёт базу, чтобы дальше уверенно обсуждать проектирование, интеграции, отчётность и эксплуатационные практики.
Что такое данные в ИС
Данные в ИС — это формализованное представление объектов и событий предметной области.
объект: клиент, товар, сотрудник, договор
событие: заказ создан, оплата получена, товар отгруженВажно различать:
операционные данные: нужны для выполнения ежедневных действий (оформить заказ, списать остатки)
аналитические данные: нужны для анализа и принятия решений (динамика продаж, маржинальность)
метаданные: данные о данных (описания таблиц, схем, владельцы, источники)Модели данных
Концептуальная модель
Это описание предметной области «человеческим языком», без привязки к СУБД:
какие сущности есть (Клиент, Заказ, Платёж)
какие атрибуты у сущностей (email, дата заказа)
какие связи между сущностями (у Клиента много Заказов)Концептуальная модель помогает согласовать смысл с бизнесом и снижает риск «не те данные храним».
Логическая модель
Это уточнение концептуальной модели до структуры, близкой к таблицам и связям:
ключи и уникальность (например, email уникален)
связи и обязательность (заказ не может существовать без клиента)
домены значений (статусы заказа из фиксированного набора)Логическая модель обычно уже позволяет обсуждать интеграции: какие идентификаторы используются, какие справочники общие.
Физическая модель
Это реализация в конкретной технологии:
конкретные таблицы, индексы, партиции
типы данных (например, timestamp, numeric)
настройки хранения, репликации, шифрованияФизическая модель напрямую связана с эксплуатацией: бэкапы, рост объёма, миграции схемы.
!Три уровня модели данных и связь между ними
Базы данных и СУБД
База данных — организованное хранилище данных.
СУБД (система управления базами данных) — программная система, которая обеспечивает:
чтение и запись
параллельный доступ пользователей
целостность данных (правила, ограничения)
резервное копирование и восстановление
безопасность доступаНа практике выбор СУБД — архитектурное решение: оно влияет на интеграции, SLA, стоимость владения и требования к компетенциям команды.
Реляционные базы данных
Когда они подходят
Реляционные БД полезны, когда:
данные хорошо укладываются в таблицы и связи
нужна строгая целостность (например, финансовые операции)
важны транзакции и согласованностьТипичные примеры: учёт заказов, платежей, складских остатков.
Таблицы, ключи и связи
Базовые элементы:
таблица — набор строк (записей) и столбцов (полей)
первичный ключ — поле (или набор полей), уникально идентифицирующее запись
внешний ключ — ссылка на запись в другой таблицеЦелостность обеспечивается ограничениями:
NOT NULL — поле обязательно
UNIQUE — значение уникально
CHECK — проверка правила (например, сумма не отрицательная)
FOREIGN KEY — запрет «висячих ссылок»Справка по ограничениям на примере PostgreSQL: PostgreSQL: Constraints
Нормализация: идея без углубления в формальные формы
Нормализация — подход к проектированию таблиц, уменьшающий дублирование и аномалии обновления.
Практическая мысль:
если одно и то же значение хранится в десяти местах, вы неизбежно получите рассинхронизацию
справочники (например, Клиенты) обычно выделяют отдельно и связывают с документами (Заказы)При этом нормализация не «религия»: иногда ради производительности часть данных осознанно дублируют, но тогда вводят правила синхронизации.
Индексы
Индекс ускоряет поиск, но замедляет вставку/обновление и увеличивает занимаемое место.
Типовые случаи, когда индекс почти всегда нужен:
поиск по идентификатору
частые фильтры по дате/статусу
внешние ключи (для ускорения соединений)Транзакции и ACID
Транзакция — группа операций, которая должна выполниться как единое целое.
Набор свойств ACID обычно объясняют так:
Atomicity (атомарность): либо выполнится всё, либо ничего
Consistency (согласованность): после транзакции данные удовлетворяют правилам и ограничениям
Isolation (изоляция): параллельные операции не мешают друг другу так, чтобы ломать смысл
Durability (надёжность): после подтверждения результат не пропадает при сбояхДокументация по транзакциям на примере PostgreSQL: PostgreSQL: Transactions
NoSQL: нереляционные хранилища
Термин NoSQL объединяет разные подходы. Общая идея: больше гибкости по модели данных и масштабированию, но часто меньше «строгих гарантий из коробки», чем в классических реляционных БД.
Документные базы
Хранят данные как документы (часто JSON-подобные структуры). Подходят, когда:
у объектов много полей, и они часто меняются
структура может различаться между записями
нужны быстрые чтения «как есть», без сложных соединенийПример: профили пользователей с разным набором атрибутов.
Справка: MongoDB: Documents
Key-value
Модель «ключ → значение». Часто используется для:
кэшей
сессий
быстрых счётчиковКолонночные (wide-column)
Оптимизированы для больших объёмов и распределённого хранения, часто применяются для телеметрии и событий.
Графовые базы
Сильны там, где главное — связи и обход графа:
социальные связи
рекомендации
выявление цепочек зависимостейОперационные и аналитические контуры данных
OLTP и OLAP
Обычно выделяют два типа нагрузок:
OLTP (операционная обработка): много коротких операций, важна скорость и корректность транзакций
OLAP (аналитика): тяжёлые запросы по большим объёмам, агрегации, витриныПрактический вывод для архитектуры:
одна и та же база редко одинаково хорошо обслуживает и OLTP, и OLAP
поэтому часто строят разделение: операционная БД для работы, отдельные решения для аналитикиDWH и витрины данных
DWH (data warehouse, хранилище данных) — централизованное хранилище для аналитики, куда данные поступают из разных источников.
Витрина данных — набор подготовленных таблиц/представлений под конкретные отчёты или подразделение.
Типовой конвейер:
источники (CRM, ERP, сайт)
загрузка и преобразования (ETL/ELT)
DWH
витрины и BI-отчётыПолезная отправная точка по терминам: Data warehouse
Data lake
Data lake — хранилище, где данные могут сохраняться в «сыром» виде (файлы, логи, события), часто для последующей обработки.
Риск подхода без дисциплины: «болото данных», когда непонятно, что где лежит и чему можно доверять. Поэтому для озёр особенно важны метаданные, каталог и правила качества.
Интеграция данных: идентификаторы, справочники, контракты
Связь с архитектурой и API из предыдущей статьи прямая: интеграция — это обмен данными, а значит нужны правила.
Идентификаторы
В интеграциях критично договориться:
какой идентификатор считается основным (внутренний, внешний, оба)
как передаётся связь объектов между системами
что делать при дублях и слиянии записейMaster data и справочники
Master data — «основные данные», которыми пользуются многие системы: клиенты, товары, контрагенты, филиалы.
Если нет владельца и правил, возникают типовые проблемы:
в разных системах один и тот же клиент представлен по-разному
отчётность «не бьётся»
интеграции превращаются в постоянные ручные сверкиКонтракт данных и версии
Так же как API нужно версионировать, нужно управлять и изменениями данных:
добавили новое поле — старые потребители должны не ломаться
поменяли смысл поля — это уже потенциально ломающая смена
изменили справочник статусов — нужно синхронизировать правилаСпособ фиксации контрактов зависит от интеграционного стиля:
для HTTP API часто используют OpenAPI: OpenAPI Specification
для событийных интеграций часто применяют AsyncAPI: AsyncAPIКачество данных и управление
Даже идеально выбранная СУБД не спасёт, если данные некорректны или неуправляемы.
Измерения качества данных
Чаще всего обсуждают:
точность: соответствует ли значение реальности
полнота: заполнены ли обязательные поля
согласованность: нет ли противоречий между источниками
актуальность: не устарели ли данные
уникальность: нет ли дублей там, где их быть не должноПравила и ответственность
Практики, которые стоит заложить заранее:
владелец данных (кто отвечает за смысл и правила)
описания полей и справочников (минимальный словарь данных)
контрольные проверки при вводе и интеграцияхЭксплуатация данных: бэкапы, миграции, рост объёма
С точки зрения эксплуатации данные обычно дороже кода: код можно восстановить из репозитория, а данные — нет.
Резервное копирование и восстановление
Минимальные вопросы, на которые должна быть ответная практика:
что именно бэкапится (БД, файлы, объектные хранилища)
как часто делаются копии
как проверяется восстановление (тестовый restore)
как защищаются бэкапы (доступы, шифрование)Миграции схемы
Схема данных будет меняться. Важно уметь делать изменения управляемо:
миграции должны быть воспроизводимыми
изменения должны учитывать обратную совместимость (особенно при нескольких сервисах)
для критичных систем нужно планировать окна, откаты и наблюдаемостьРост данных
По мере роста системы обычно приходят:
партиционирование по датам/ключам
архивирование исторических данных
раздельное хранение «горячих» и «холодных» данныхКак выбрать тип хранилища под задачу
Ниже — практическая шпаргалка. В реальном проекте часто используется несколько типов одновременно.
| Задача | Что важно | Частый выбор |
|---|---|---|
| Транзакции (заказы, деньги) | строгая целостность, транзакции | реляционная БД |
| Гибкие профили, меняющаяся структура | быстрые изменения модели | документная БД |
| Кэш, сессии, быстрый доступ по ключу | скорость, простота | key-value |
| Отчётность по большим объёмам | агрегации, тяжёлые запросы | DWH/колонночные решения |
| Сырые события, логи, файлы | дешёвое хранение, масштаб | data lake |
| Сложные связи и обходы графа | связи важнее атрибутов | графовая БД |
Итоги
Данные в ИС описываются моделями трёх уровней: концептуальной, логической и физической.
Реляционные БД сильны транзакциями и целостностью; NoSQL даёт альтернативы под разные нагрузки и модели.
Операционный контур (OLTP) и аналитический контур (OLAP, DWH, витрины) часто разделяют.
Интеграции и API невозможно сделать надёжными без договорённостей об идентификаторах, справочниках и версиях данных.
Эксплуатация данных — это бэкапы, восстановление, миграции схемы и управление ростом объёма.