Что такое СУБД: функции, устройство и примеры систем
Что такое СУБД простыми словами: чем система управления базами данных отличается от базы, что она делает, из чего состоит и какие СУБД встречает аналитик.
Содержание статьи
В вакансии аналитика написано «опыт работы с реляционными СУБД», на собеседовании спрашивают, чем PostgreSQL отличается от ClickHouse, а коллега говорит «положи выгрузку в базу». За всеми тремя фразами стоит одно понятие. СУБД — это программа, которая хранит данные и отвечает на запросы к ним так, чтобы ничего не терялось, когда с ними одновременно работают сотни людей и приложений. Ниже разберём, что такое СУБД, что она делает за вас, из каких частей состоит, какие бывают и почему один и тот же SQL-запрос в разных СУБД иногда даёт разный ответ.
Коротко
- СУБД (система управления базами данных) — программа, которая хранит данные, принимает запросы и возвращает результат. База данных — сами данные внутри неё.
- Главная работа СУБД незаметна: транзакции, одновременный доступ, восстановление после сбоя, права доступа и выбор быстрого способа выполнить запрос.
- Реляционная СУБД хранит таблицы и понимает SQL: PostgreSQL, MySQL, Microsoft SQL Server, Oracle, SQLite.
- Аналитику чаще всего достаются PostgreSQL в продукте и колоночная СУБД вроде ClickHouse в хранилище.
- SQL у всех похож, но диалекты расходятся в датах, делении чисел и ограничении числа строк.
Что такое СУБД простыми словами
Представьте склад. Товары на полках — это данные. Кладовщик, который знает, где что лежит, выдаёт товар по накладной, не пускает посторонних и ведёт журнал, чтобы после пожара восстановить учёт, — это СУБД. Сам по себе склад без кладовщика превращается в кучу коробок, где двое одновременно берут последнюю упаковку и оба уверены, что она их.
Формально СУБД — это программное обеспечение для создания баз данных, записи и чтения данных, контроля их целостности и доступа к ним. Вы не открываете файл с данными напрямую. Вы отправляете СУБД запрос, обычно на SQL, а она решает, какие файлы прочитать, в каком порядке и как сделать это быстро.
База данных и СУБД: в чём разница
В разговоре слова смешивают: «наша база — PostgreSQL». Точнее сказать так: PostgreSQL — это СУБД, а база данных — конкретный набор таблиц, который она обслуживает. Одна СУБД держит десятки баз: рабочую базу продукта, тестовую копию, базу для отчётов. У каждой свои таблицы и свои права доступа.
Учебная база симулятора SQL-аналитика «Маяк» — тоже база данных. В ней пять таблиц: пользователи, события, оплаты, подписки и участие в экспериментах. Работает она внутри двух разных СУБД: в песочнице курса её обслуживает DuckDB, а в проверках статей — PostgreSQL. Данные одни и те же, программы разные, и запрос ниже возвращает в обеих одинаковый ответ.
Запрос читает не данные, а каталог — служебные таблицы, где СУБД сама описывает, какие таблицы и столбцы у неё есть. Каталог information_schema описан в стандарте SQL и есть в PostgreSQL, MySQL, SQL Server и DuckDB.
| table_name | columns |
|---|---|
| events | 4 |
| experiment_exposures | 6 |
| payments | 6 |
| subscriptions | 6 |
| users | 5 |
select
table_name,
count(*) as columns
from information_schema.columns
where table_name in ('users', 'events', 'payments', 'subscriptions', 'experiment_exposures')
group by table_name
order by table_name;Функции СУБД: что она делает за вас
Если бы СУБД только хранила данные, хватило бы папки с CSV-файлами. Её ценность в том, что происходит вокруг хранения. Каждую из этих функций легко не замечать, пока она работает, и очень дорого восстанавливать вручную, когда её нет.
| Функция | Что делает | Где аналитик это видит |
|---|---|---|
| Определение данных | создаёт таблицы, столбцы, типы и ограничения (DDL: CREATE, ALTER, DROP) | типы столбцов и ошибка при попытке записать текст в число |
| Работа с данными | выполняет SELECT, INSERT, UPDATE, DELETE | любой запрос в отчёте |
| Транзакции | выполняет группу изменений целиком или не выполняет совсем | оплата не может списаться без записи о заказе |
| Одновременный доступ | даёт сотням клиентов читать и писать без взаимных помех | ваш отчёт не видит наполовину записанную оплату |
| Журнал и восстановление | пишет изменения в журнал до записи в таблицы и после сбоя восстанавливает состояние | данные не пропадают после аварийной перезагрузки сервера |
| Права доступа | решает, кто может читать и менять каждую таблицу | доступ «только на чтение» к реплике |
| Оптимизация запросов | выбирает план: какой индекс взять, в каком порядке соединять таблицы | один и тот же запрос то летает, то идёт десять минут |
| Резервные копии и репликация | делает копии и поддерживает реплики для чтения | вы пишете отчёты в реплику, а не в рабочую базу |
Транзакция: функция, которую стоит увидеть руками
Транзакция — группа команд, которую СУБД выполняет как одно целое. Пока транзакция не подтверждена командой commit, её изменения видит только тот, кто её открыл. Команда rollback отменяет всё, как будто ничего не было.
Блок ниже меняет статус подписки пользователя 8 на «ушёл», показывает изменение внутри транзакции и откатывает его. В песочнице курса команды записи не выполняются, поэтому повторить блок можно в своём PostgreSQL. После rollback подписка снова активна: тариф pro, 29 в месяц, с 10 июня 2026 года.
Свойства, которые СУБД гарантирует транзакциям, называют ACID: атомарность, согласованность, изолированность и долговечность. Подробно о каждом и об уровнях изоляции — в статье про ACID и в разборе транзакций в SQL.
begin;
update subscriptions
set status = 'churned'
where user_id = 8;
select user_id, plan, status
from subscriptions
where user_id = 8; -- внутри транзакции: churned
rollback;
select user_id, plan, status
from subscriptions
where user_id = 8; -- после отката: activeИз чего состоит СУБД
Запрос проходит через несколько частей СУБД, прежде чем вы увидите результат. Знать их по именам не обязательно, но схема объясняет многое из того, что аналитик видит на практике: почему запрос с опечаткой падает мгновенно, а медленный запрос ускоряется от индекса.
Медленный запрос почти всегда означает, что планировщик выбрал полный проход по большой таблице. Посмотрите план через EXPLAIN, прежде чем переписывать запрос наугад. Как читать план — в статье про EXPLAIN ANALYZE в PostgreSQL.
- Парсер разбирает текст запроса и проверяет синтаксис. Ошибка «syntax error at or near» приходит отсюда, ещё до чтения данных.
- Планировщик, или оптимизатор, перебирает способы выполнить запрос и выбирает самый дешёвый по своей оценке. Его решение показывает команда EXPLAIN.
- Исполнитель проходит по выбранному плану: читает таблицы, соединяет, группирует, сортирует.
- Менеджер хранения читает страницы с диска и держит часто нужные в памяти. Поэтому второй запуск того же запроса нередко быстрее первого.
- Менеджер транзакций и журнал следят за изоляцией и пишут каждое изменение в журнал до того, как оно попадёт в таблицу. В PostgreSQL этот журнал называется WAL.
- Каталог хранит описание всех объектов: таблиц, столбцов, индексов, прав. Мы читали его запросом выше.
Виды СУБД
СУБД делят по нескольким признакам сразу, и одна система может попадать в разные группы. Самое важное деление — по модели данных: таблицы со связями или что-то другое. Подробная классификация с примерами — в статье о типах баз данных. Здесь — признаки, по которым о СУБД говорят чаще всего.
| Признак | Варианты | Примеры |
|---|---|---|
| Модель данных | реляционные (таблицы и SQL) и нереляционные (документы, ключ — значение, графы) | PostgreSQL, MySQL; MongoDB, Redis, Neo4j |
| Основная нагрузка | OLTP — много коротких операций продукта; OLAP — тяжёлые аналитические запросы | PostgreSQL для заказов; ClickHouse для отчётов |
| Способ хранения | строковое и колоночное | MySQL хранит строки; ClickHouse и DuckDB — столбцы |
| Архитектура | клиент-сервер, встраиваемая, распределённая | PostgreSQL — сервер; SQLite и DuckDB — внутри приложения; Greenplum — кластер |
| Где работает | на своём сервере или облачный сервис, который обслуживает провайдер | PostgreSQL на своём сервере или в Yandex Cloud; BigQuery |
Реляционная СУБД
Реляционная СУБД хранит данные в таблицах, где у каждой строки одинаковый набор столбцов, а таблицы связаны ключами. Связь «оплата принадлежит пользователю» — это столбец user_id в таблице payments, который ссылается на user_id в users. Запрос собирает связанные строки через JOIN.
Название идёт от слова relation, «отношение» — так в математике называют таблицу. Модель описал Эдгар Кодд в 1970 году, и почти все массовые СУБД с тех пор реляционные. Если в вакансии написано «опыт работы с реляционными СУБД», от вас ждут уверенного SQL и понимания ключей, связей и транзакций. Об устройстве связей — в статье о первичном и внешнем ключе, о том, как раскладывать данные по таблицам, — в материале о нормализации.
Примеры СУБД, которые встречает аналитик
Список популярных СУБД длинный, но в работе продуктового аналитика повторяется один и тот же десяток. Ниже — где каждая обычно стоит и что вы с ней делаете.
В российских компаниях часто встречаются СУБД на основе PostgreSQL: Postgres Pro, Tantor. Для аналитика они почти не отличаются от PostgreSQL: тот же SQL, те же функции, тот же psql. Arenadata DB построена на Greenplum — распределённой СУБД, тоже выросшей из PostgreSQL, — и работает как хранилище для больших объёмов.
| СУБД | Модель и хранение | Где обычно стоит | Что делает аналитик |
|---|---|---|---|
| PostgreSQL | реляционная, строковая, сервер | рабочая база продукта, небольшие хранилища | запросы к реплике, первые отчёты |
| MySQL | реляционная, строковая, сервер | рабочая база веб-сервисов и интернет-магазинов | то же, что с PostgreSQL, с поправкой на диалект |
| Microsoft SQL Server | реляционная, сервер | корпоративные системы, учёт, банки | отчёты на T-SQL |
| Oracle Database | реляционная, сервер | крупные банки и телеком | отчёты на диалекте Oracle |
| ClickHouse | колоночная аналитическая, сервер или кластер | хранилище событий и витрин | большая часть аналитических запросов |
| Greenplum и Arenadata DB | реляционная, распределённая | корпоративное хранилище | запросы к витринам на диалекте PostgreSQL |
| SQLite | реляционная, встраиваемая, один файл | мобильные и настольные приложения | открыть файл из выгрузки |
| DuckDB | колоночная, встраиваемая | ноутбук аналитика, песочница курса | SQL к CSV и Parquet без сервера |
| MongoDB | документная | сервисы с гибкой структурой данных | чаще через выгрузку в хранилище |
| Redis | ключ — значение, в памяти | кэш и сессии | почти не встречает |
Один язык, разные диалекты
SQL — стандарт, но каждая СУБД реализует его со своими расширениями и привычками. Базовые SELECT, WHERE, JOIN и GROUP BY переносятся без правок. Запрос ниже возвращает одинаковые числа в PostgreSQL и в DuckDB песочницы: 167 оплат на 3983 в июне, 442 на 10 868 в июле и 642 на 15 788 в августе.
Расхождения начинаются на функциях. Таблица под запросом показывает три места, где запрос при переезде из одной СУБД в другую ломается или, хуже, молча меняет ответ. Последняя строка опаснее всех: доля, посчитанная делением целых чисел, в PostgreSQL превратится в ноль, а в ClickHouse или DuckDB останется дробью.
| Задача | PostgreSQL | MySQL | SQL Server | ClickHouse |
|---|---|---|---|---|
| Первое число месяца | date_trunc('month', paid_at)::date | date_format(paid_at, '%Y-%m-01') | datetrunc(month, paid_at) — с версии 2022 | toStartOfMonth(paid_at) |
| Первые 10 строк | limit 10 | limit 10 | select top 10 … | limit 10 |
| Результат 7 / 2 | 3 — деление целых | 3.5000 | 3 — деление целых | 3.5 |
select
cast(date_trunc('month', paid_at) as date) as month,
count(*) as payments,
sum(amount) as revenue
from payments
group by 1
order by 1;Делите на число с дробной частью или приводите тип явно: count(*) * 1.0 / total даёт одинаковую долю во всех СУБД. Даты сравнивайте с явными границами, а функции дат проверяйте по документации той СУБД, где запрос будет работать.
Какую СУБД изучать начинающему аналитику
Если выбирать одну, берите PostgreSQL. Его диалект ближе всего к стандарту, он бесплатный, его используют рабочие базы большинства продуктов, а знания переносятся на Greenplum, Postgres Pro и облачные сервисы. Курс «SQL с нуля» и симулятор SQL-аналитика учат именно PostgreSQL-совместимому SQL, а места, где песочница на DuckDB ведёт себя иначе, проверка отмечает отдельно.
Вторым шагом обычно становится ClickHouse: на нём во многих компаниях лежат события и витрины. Переход несложный, если понимать, что колоночная СУБД дорого читает лишние столбцы и плохо переносит частые изменения отдельных строк. MySQL, SQL Server и Oracle учат по необходимости, когда они стоят у работодателя: за неделю практики разница в диалекте перестаёт мешать.
Частые вопросы
Как расшифровывается СУБД?
Система управления базами данных. В английском — DBMS, database management system; реляционную называют RDBMS.
Excel — это СУБД?
Нет. В Excel можно хранить таблицы, но в нём нет транзакций, одновременной записи многими пользователями, контроля типов и прав на уровне строк и столбцов. Для отчёта на тысячу строк его хватает, для данных продукта — нет.
Чем СУБД отличается от SQL?
SQL — язык запросов, СУБД — программа, которая эти запросы выполняет. Один и тот же язык понимают PostgreSQL, MySQL, ClickHouse и десятки других СУБД, каждая со своим диалектом.
PostgreSQL и MySQL — это СУБД или базы данных?
СУБД. Базы данных — наборы таблиц, которые они обслуживают. В разговоре это различие обычно опускают.
Нужно ли аналитику администрировать СУБД?
Как правило, нет: установка, резервные копии и настройка производительности — работа администраторов и дата-инженеров. От аналитика ждут уверенного SQL, понимания транзакций и умения прочитать план медленного запроса.
Попробуйте запросы из статьи в песочнице на той же учебной базе: каталог и выручка по месяцам выполняются там без изменений.
Материалы по теме

Типы баз данных: реляционные, NoSQL, колоночные и другие
Типы баз данных: реляционные, NoSQL, колоночные, графовые и другие. Чем SQL отличается от NoSQL и где аналитик встречает каждую базу.

ACID в базах данных: принципы транзакций и уровни изоляции
Что такое ACID-транзакции простыми словами: атомарность, согласованность, изоляция и долговечность на примерах перевода денег и оплаты подписки. BEGIN, COMMIT, ROLLBACK, уровни изоляции и аномалии в PostgreSQL с реальными выводами и что всё это значит для аналитика.

Транзакции в SQL: BEGIN, COMMIT и ROLLBACK на примерах
Транзакции в SQL на примерах PostgreSQL: BEGIN, COMMIT, ROLLBACK, SAVEPOINT, автокоммит, ошибка внутри транзакции, блокировки и проверка UPDATE до фиксации.