Введение в базы данных и СУБД

Ключевые тезисы

  • Данные — это формализованное представление информации, пригодное для хранения и обработки.
  • База данных (БД) — упорядоченный набор структурированной информации.
  • Система управления базами данных (СУБД) — программный комплекс для создания, ведения и совместного использования БД.
  • Существуют два основных типа БД: реляционные (SQL) и нереляционные (NoSQL), каждый со своими подтипами и сценариями использования.
  • Выбор БД для проекта зависит от конкретных задач, требований, бюджета и компетенций команды.

📊 Данные и их типы

Данные — формализованное представление информации в виде, пригодном для передачи, хранения и обработки.

Основные типы данных:

  • Числовые
  • Текстовые
  • Даты и время (часто хранятся как timestamp — количество секунд с 1 января 1970 года)
  • Логические (булевые)
  • Бинарные

Классификация по структуре:

  • Структурированные: данные с чёткой схемой (например, таблицы).
  • Полуструктурированные: данные с гибкой, но прослеживаемой схемой (например, JSON, словари "ключ-значение").
  • Неструктурированные: данные без явной схемы (например, изображения, текст).

🗃️ Что такое база данных (БД)?

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

Основные характеристики БД:

  • Структурированность: данные организованы в логические структуры (таблицы) со связями между ними.
  • Независимость: данные хранятся отдельно от приложений, которые их используют.
  • Разделяемость: несколько пользователей могут одновременно получать доступ к одной БД (с разными правами).
  • Целостность: БД обеспечивает точность и непротиворечивость данных с помощью связей и ограничений.
  • Безопасность: наличие механизмов защиты и управления доступом.
  • Масштабируемость: способность работать с растущими объёмами данных и запросов.
    • Вертикальная: увеличение мощности одного сервера (железа).
    • Горизонтальная: добавление новых серверов в систему.

⚙️ Система управления базами данных (СУБД)

СУБД — комплекс программных средств для создания, ведения и совместного использования БД.

Аналогия: Если БД — это склад с полками и стеллажами, то СУБД — это администрация и служба логистики этого склада.

Ключевые функции СУБД:

  • Управление операциями (транзакциями).
  • Обеспечение целостности данных.
  • Управление доступом.
  • Резервное копирование.
  • Оптимизация выполнения запросов.

Клиентские приложения для работы с СУБД:

  • Узкоспециализированные: MS SQL Server Management Studio, MySQL Workbench.
  • Универсальные: DBeaver, DataGrip (поддерживают множество типов БД).

🔷 Реляционные (SQL) базы данных

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

Принцип ACID (гарантии транзакций):

  • A (Atomicity) — Атомарность: транзакция выполняется как единое целое (всё или ничего).
  • C (Consistency) — Согласованность: транзакция переводит БД из одного корректного состояния в другое.
  • I (Isolation) — Изоляция: параллельные транзакции не мешают друг другу.
  • D (Durability) — Долговечность: результаты завершённой транзакции сохраняются даже после сбоев.

Преимущества:

  • Гарантированная согласованность данных.
  • Поддержка сложных запросов (JOIN, вложенные запросы).
  • Предсказуемость и надёжность.

Недостатки:

  • Сложность горизонтального масштабирования.
  • Жёсткая схема данных.
  • Неэффективны для некоторых типов информации (логи, иерархические данные).

Популярные СУБД и их особенности:

1. Microsoft SQL Server (MSSQL)

  • Плюсы: Единая экосистема Microsoft (Power BI, SSIS, SSAS), мощный язык T-SQL, безопасность (в т.ч. на уровне строк), гибкое управление индексами, исчерпывающая документация.
  • Минусы: Проприетарная (требует лицензий), вертикальная масштабируемость, стоимость.
  • Использование: ERP, CRM, хранилища данных (DWH), финансовые системы.

2. PostgreSQL

  • Плюсы: Open-source, большое и активное сообщество, гибкая архитектура (поддержка JSON, геоданных), расширяемость, кроссплатформенность, мощный SQL.
  • Минусы: Документация менее структурирована, чем у MSSQL.
  • Использование: Веб-приложения, микросервисы, геоаналитика, аналитические системы, основа для специализированных СУБД (например, Greenplum).

3. MySQL

  • Плюсы: Open-source (есть Enterprise-версия), простота и скорость, низкий порог входа, широкое распространение в вебе (стек LAMP).
  • Минусы: Более бедный функционал языка по сравнению с MSSQL и PostgreSQL.
  • Использование: Веб-приложения, интернет-магазины, системы управления контентом (CMS).

🔶 Нереляционные (NoSQL) базы данных

NoSQL — Not Only SQL (не только SQL). Специализированные модели хранения, оптимизированные под конкретные типы данных и операций.

Принцип BASE (альтернатива ACID):

  • BA (Basic Availability) — Базовая доступность: система отвечает всегда, даже если часть данных устарела.
  • S (Soft state) — Неустойчивое состояние: данные могут быть временно несогласованными.
  • E (Eventual consistency) — Согласованность в конечном счёте: если нет новых изменений, данные со временем станут согласованными.

Преимущества:

  • Горизонтальная масштабируемость.
  • Гибкая схема данных.
  • Высокая производительность на операциях чтения/записи.

Недостатки:

  • Ослабленная согласованность (BASE).
  • Слабая поддержка JOIN и сложных транзакций.
  • Меньшая предсказуемость.

Основные типы NoSQL БД:

1. Документные (MongoDB, Couchbase)

  • Хранение данных в виде документов (JSON, BSON).
  • Плюсы: Гибкая схема, высокая производительность чтения, простота масштабирования.
  • Минусы: Возможное дублирование и избыточность данных, ограниченная поддержка транзакций.
  • Использование: Каталоги товаров, пользовательские профили, контент-менеджеры.

2. «Ключ-значение» (Redis, Amazon DynamoDB)

  • Простое хранение пар «ключ-значение».
  • Плюсы: Максимальная производительность, предельная простота, горизонтальное масштабирование.
  • Минусы: Нет сложных запросов, ограниченная функциональность.
  • Использование: Кэширование, хранение сессий, логи, очереди задач.

3. Колоночные (ClickHouse, Cassandra)

  • Хранение данных по колонкам, а не по строкам.
  • Плюсы: Очень высокая скорость аналитических запросов, эффективное сжатие, быстрые агрегации.
  • Минусы: Неэффективны для OLTP-нагрузки (оперативный учёт), операции UPDATE/DELETE проблематичны.
  • Использование: Аналитика в реальном времени, большие дашборды, DWH (для "горячих" данных).

4. Графовые (Neo4j)

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

🤔 Как выбрать БД для проекта?

Выбор зависит от конкретной задачи. Критерии:

  • Тип и структура данных (структурированные, документы, графы).
  • Требования к согласованности (ACID vs BASE).
  • Объём данных и нагрузка (необходимость масштабирования).
  • Бюджет (open-source vs проприетарные решения).
  • Компетенции команды.
  • Архитектурные и политические требования (экосистема, импортозамещение).

На практике в крупных проектах часто используется гибридный подход, сочетающий разные типы БД для разных задач (например, PostgreSQL для транзакций + ClickHouse для аналитики).

📐 Связь с моделью данных

Модель данных напрямую соотносится со структурой реляционной БД:

  • Сущность → Таблица
  • Атрибут → Столбец
  • Экземпляр → Строка
  • Связь → Первичный/Внешний ключ
    На практике одна сущность бизнес-логики может быть представлена несколькими связанными таблицами.

🧩 Теорема CAP (CAP-теорема)

В любой распределённой системе невозможно одновременно гарантировать все три свойства:

  • C (Consistency) — Согласованность: каждое чтение возвращает самую актуальную запись.
  • A (Availability) — Доступность: каждый узел всегда успешно отвечает на запросы.
  • P (Partition tolerance) — Устойчивость к разделению: система работает даже при потере связи между узлами.

Можно гарантировать только два из трёх свойств. Например:

  • CA-системы: классические реляционные БД (жертвуют устойчивостью к разделению).
  • AP-системы: многие NoSQL БД (жертвуют строгой согласованностью).

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

Выводы

  • Мир БД разнообразен: нет "лучшей" базы данных, есть наиболее подходящая для конкретной задачи.
  • Реляционные БД обеспечивают надёжность и согласованность, NoSQL — гибкость и масштабируемость.
  • Выбор технологии — это комплексное решение, учитывающее технические требования, бизнес-ограничения и человеческий фактор (компетенции команды).