Система управления базами данных: что это и как работает СУБД

СУБД — программа, через которую создают базу данных, записывают, ищут и меняют данные.

В статье: чем база отличается от СУБД, какие у неё функции и объекты, семь видов по модели данных и три опыта на SQLite с реальным выводом, которые можно повторить за пять минут.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3267 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3921 экспертное мнение Подписаться на Телеграм-канал
Обложка: Система управления базами данных: что это и как работает СУБД

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

Примеры СУБД: PostgreSQL, MySQL, Microsoft SQL Server, Oracle, SQLite, MongoDB. С большинством из них говорят на языке запросов SQL, его основы я разбирал в статье о языке SQL и зачем его учить. Ниже: чем СУБД отличается от базы данных, какие у неё функции и объекты, какие бывают виды и как всё это потрогать руками за пять минут.

CheckroiCheckroiПодборка курсов по SQL430 курсов • 41 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Что такое СУБД простыми словами

Рой-хранитель данных у стеллажа с аккуратными ящиками картотеки

Термин закреплён ещё в советском ГОСТ 20886-85 «Организация данных в системах обработки данных. Термины и определения». Он до сих пор лучше многих учебников разводит два понятия, которые путают чаще всего.

«Совокупность программ и языковых средств, предназначенных для управления данными в базе данных, ведения базы данных и обеспечения взаимодействия ее с прикладными программами» — так ГОСТ 20886-85 определяет систему управления базами данных (термин 46).

База данных в том же стандарте (термин 6) — совокупность данных, организованных по общим правилам описания и хранения и независимая от прикладных программ. Последние слова важнее всего: данные живут отдельно от сайта или бухгалтерской программы, а доступ к ним идёт только через СУБД.

База данных СУБД
Что это Сами данные и их структура Программа, которая этими данными управляет
Где лежит Файлы на диске сервера или телефона Процесс на сервере или библиотека внутри приложения
Пример Таблицы clients и orders интернет-магазина PostgreSQL, который их хранит и отдаёт
Можно ли открыть без другой части Формально да, но без СУБД это нечитаемые байты Да, СУБД без баз просто ждёт команд

Одна СУБД обычно обслуживает сразу несколько баз. На одном сервере PostgreSQL может жить база магазина, база блога и тестовая копия. Как такую базу завести командой, показано в инструкции «Как создать базу данных в SQL».

Зачем нужна СУБД, если есть Excel и обычные файлы

Пока данных мало и с ними работает один человек, таблица Excel справляется. Проблемы начинаются, когда растёт хотя бы одно из трёх: объём, число пользователей или цена ошибки.

  • Двое правят одновременно. Менеджер и бухгалтер открыли один файл, оба сохранили. Чьи правки остались? В СУБД каждый запрос встаёт в очередь по правилам блокировок, и ничего не теряется молча.
  • Сбой посреди записи. Деньги списали с одного счёта, а до второго не дошли, потому что пропало питание. СУБД ведёт журнал изменений и после перезапуска откатывает недописанную операцию целиком.
  • Поиск в миллионах строк. Файл приходится читать от начала до конца. СУБД строит индексы и находит нужную строку, не перебирая остальные.
  • Разные права. Оператору можно смотреть заказы, но не зарплаты. В СУБД права выдаются на уровне таблиц, а иногда и отдельных строк.

Отсюда главный ответ на вопрос «для чего нужна СУБД»: чтобы данные оставались целыми и согласованными, когда с ними одновременно работают сотни программ и людей.

Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Основные функции СУБД

Набор функций у PostgreSQL и у SQLite разный по масштабу, но обязательная часть одна и та же. Её спрашивают и в школьной информатике, и на собеседовании на младшего разработчика.

  1. Хранение данных во внешней памяти. СУБД сама раскладывает таблицы по файлам и страницам на диске. Пользователь думает строками и столбцами, а не байтами.
  2. Работа с оперативной памятью. Часто нужные страницы хранятся в буфере, чтобы не читать их с диска при каждом запросе.
  3. Язык определения и обработки данных. Через SQL создают таблицы и меняют записи. Команды делятся на группы, подробности в статье про DDL, DML, DCL и TCL.
  4. Транзакции и журнал. Несколько изменений выполняются как одно: либо все, либо ни одного. Журнал хранит, что именно менялось, на случай сбоя.
  5. Целостность. Ограничения не дают записать заказ несуществующему клиенту или отрицательный остаток на складе.
  6. Безопасность и права доступа. Пользователи, роли, пароли, кто что может читать и менять.
  7. Резервное копирование и восстановление. Встроенные утилиты снимают копию базы и поднимают её на другом сервере.

Транзакции и ACID

Четвёртый пункт стоит разобрать отдельно: именно он отличает СУБД от папки с файлами. В документации PostgreSQL суть транзакции сформулирована так: она объединяет несколько шагов в одну операцию по принципу «всё или ничего» (раздел Transactions, версия документации 18). Если на полпути передумать и выполнить ROLLBACK, все сделанные изменения отменяются.

Требования к надёжной транзакции обычно описывают четырьмя буквами ACID:

Буква Свойство Что значит на практике
A Atomicity, атомарность Перевод денег проходит целиком или не проходит совсем
C Consistency, согласованность После транзакции все ограничения базы соблюдены
I Isolation, изоляция Параллельные транзакции не видят недописанных изменений друг друга
D Durability, долговечность Подтверждённое изменение переживёт перезагрузку сервера

Реляционные СУБД поддерживают ACID полностью. Многие NoSQL-системы ради скорости ослабляют часть гарантий, и это нужно знать заранее, а не узнавать по пропавшим заказам.

Как устроена СУБД изнутри

Путь запроса внутри СУБД: проверка, план, исполнение и хранилище

Когда приложение отправляет запрос SELECT * FROM orders WHERE client_id = 1, внутри СУБД он проходит несколько компонентов по очереди:

  1. Парсер проверяет синтаксис и то, что таблица и столбец существуют. Сведения о них он берёт из каталога метаданных, по сути базы данных о самой базе.
  2. Оптимизатор выбирает план: прочитать таблицу целиком или пойти по индексу, в каком порядке соединять таблицы.
  3. Исполнитель выполняет план и собирает результат.
  4. Подсистема хранения достаёт нужные страницы из буфера в памяти или с диска.
  5. Менеджер блокировок и журнал следят, чтобы параллельные запросы не мешали друг другу, и записывают изменения до того, как они попадут в основные файлы.

Пользователь видит только первый и последний шаг: отправил запрос, получил строки. Но когда запрос «вдруг стал медленным», разбираться приходится как раз с планом оптимизатора. Пример такого разбора будет ниже, в практической части.

Объекты базы данных

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

Объект Что это Пример
Таблица Набор строк одного вида clients — клиенты магазина
Столбец (поле) Одно свойство с типом данных balance INTEGER
Строка (запись) Один объект реального мира Клиент Анна с балансом 5000
Первичный ключ Столбец, по которому строку можно найти однозначно id
Внешний ключ Ссылка на строку другой таблицы orders.client_id → clients.id
Ограничение Правило, которое СУБД не даст нарушить CHECK (balance >= 0)
Индекс Отдельная структура для быстрого поиска Индекс по client_id
Представление (view) Сохранённый запрос, который выглядит как таблица Сумма покупок по клиентам
Триггер Код, который срабатывает при вставке, изменении или удалении Записать в журнал, кто поменял цену
Хранимая процедура или функция Программа внутри СУБД Пересчёт скидки по истории заказов
Схема Папка, в которой лежат объекты public, sales, archive
Пользователь и роль Кто подключается и что ему разрешено Роль «только чтение» для аналитика

Какие типы бывают у столбцов и чем INTEGER отличается от NUMERIC, разобрано в таблице типов данных SQL. А как разложить данные по таблицам, чтобы одно и то же не хранилось в пяти местах, объясняет статья о нормализации данных.

Проверьте сами: СУБД за пять минут на SQLite

Определения запоминаются хуже, чем то, что сделал руками. Для опыта не нужен сервер: SQLite встроена в Python. Её разработчики описывают SQLite как встраиваемый, бессерверный SQL-движок с транзакциями, а полную базу с таблицами, индексами, триггерами и представлениями хранят в одном файле на диске (страница About SQLite).

Все три примера ниже я запускал подряд на Python 3.14 с SQLite 3.54, вывод вставлен из терминала.

Шаг 1: таблицы, ключи и первый запрос

import sqlite3

con = sqlite3.connect("shop.db")
con.execute("PRAGMA foreign_keys = ON")
con.executescript("""
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS clients;
CREATE TABLE clients (
    id      INTEGER PRIMARY KEY,
    name    TEXT NOT NULL,
    balance INTEGER NOT NULL CHECK (balance >= 0)
);
CREATE TABLE orders (
    id        INTEGER PRIMARY KEY,
    client_id INTEGER NOT NULL REFERENCES clients(id),
    total     INTEGER NOT NULL
);
INSERT INTO clients (name, balance) VALUES ('Анна', 5000), ('Борис', 1200);
INSERT INTO orders (client_id, total) VALUES (1, 3200), (1, 900), (2, 1500);
""")
con.commit()

rows = con.execute("""
    SELECT c.name, COUNT(o.id), SUM(o.total)
    FROM clients c JOIN orders o ON o.client_id = c.id
    GROUP BY c.name ORDER BY c.name
""").fetchall()
print(rows)
[('Анна', 2, 4100), ('Борис', 1, 1500)]

Рядом с файлом скрипта появился shop.db. Это и есть база данных, а SQLite в этом примере сыграла роль СУБД. Запрос соединил две таблицы, подробнее о соединениях — в статье про JOIN в SQL.

Шаг 2: целостность и откат транзакции

import sqlite3

con = sqlite3.connect("shop.db")
con.execute("PRAGMA foreign_keys = ON")

# 1. Ограничение: баланс не может уйти в минус
try:
    con.execute("UPDATE clients SET balance = balance - 9000 WHERE id = 2")
except sqlite3.IntegrityError as e:
    print("CHECK:", e)

# 2. Внешний ключ: заказ несуществующему клиенту
try:
    con.execute("INSERT INTO orders (client_id, total) VALUES (99, 500)")
except sqlite3.IntegrityError as e:
    print("FK:", e)

# 3. Транзакция: перевод 1000 от Анны Борису, второй шаг падает
try:
    with con:
        con.execute("UPDATE clients SET balance = balance - 1000 WHERE id = 1")
        con.execute("UPDATE clients SET balance = balance + 1000 WHERE id = 3")
        if con.execute("SELECT changes()").fetchone()[0] == 0:
            raise ValueError("получатель не найден")
except ValueError as e:
    print("ROLLBACK:", e)

print(con.execute("SELECT name, balance FROM clients").fetchall())
CHECK: CHECK constraint failed: balance >= 0
FK: FOREIGN KEY constraint failed
ROLLBACK: получатель не найден
[('Анна', 5000), ('Борис', 1200)]

Три функции СУБД в одном выводе. Ограничение CHECK не пустило минус на счёт. Внешний ключ не дал создать заказ клиенту с id 99. А в третьем блоке ошибка в id получателя откатила и уже выполненное списание: у Анны по-прежнему 5000.

Важная деталь SQLite: проверка внешних ключей в ней по умолчанию выключена ради обратной совместимости, и включать её нужно на каждом подключении (документация SQLite о внешних ключах). Без строки PRAGMA foreign_keys = ON заказ клиенту 99 записался бы без ошибки.

Шаг 3: индекс, представление и каталог

import sqlite3

con = sqlite3.connect("shop.db")
q = "SELECT * FROM orders WHERE client_id = 1"

print(con.execute("EXPLAIN QUERY PLAN " + q).fetchall())
con.execute("CREATE INDEX IF NOT EXISTS idx_orders_client ON orders(client_id)")
print(con.execute("EXPLAIN QUERY PLAN " + q).fetchall())

con.execute("""CREATE VIEW IF NOT EXISTS client_totals AS
    SELECT client_id, SUM(total) AS spent FROM orders GROUP BY client_id""")
print(con.execute("SELECT * FROM client_totals").fetchall())

print(con.execute(
    "SELECT type, name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' ORDER BY type, name"
).fetchall())
[(2, 0, 216, 'SCAN orders')]
[(3, 0, 62, 'SEARCH orders USING INDEX idx_orders_client (client_id=?)')]
[(1, 4100), (2, 1500)]
[('index', 'idx_orders_client'), ('table', 'clients'), ('table', 'orders'), ('view', 'client_totals')]

До индекса оптимизатор читал таблицу целиком (SCAN), после — пошёл по индексу (SEARCH … USING INDEX). На трёх строках разницы не заметно, на трёх миллионах это секунды против миллисекунд. Последняя строка вывода — каталог метаданных: СУБД сама помнит, какие объекты в базе есть.

Те же опыты можно повторить мышью: к SQLite, PostgreSQL и MySQL удобно подключаться через универсальный клиент, инструкция — «Как подключиться к базе данных в DBeaver». Для PostgreSQL есть свой графический клиент, в нём можно создать таблицу в pgAdmin 4 без единой строки SQL.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 800 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Виды СУБД

Классификаций несколько, и они не исключают друг друга. PostgreSQL одновременно реляционная, клиент-серверная и открытая.

По модели данных

Главная ось. Она определяет, как данные лежат и какими запросами их достают.

Вид Как хранит данные Примеры Когда подходит
Реляционные Таблицы со связями через ключи, язык SQL PostgreSQL, MySQL, Oracle, SQL Server, SQLite Учёт, заказы, деньги, почти любое приложение
Документные Документы в формате, похожем на JSON MongoDB, Couchbase Каталоги с разной структурой карточек, прототипы
Ключ-значение Пары «ключ → значение» в памяти Redis, Memcached Кэш, сессии, счётчики
Колоночные Данные лежат по столбцам, а не по строкам ClickHouse, Vertica Аналитика по миллиардам событий
Графовые Узлы и связи между ними Neo4j Социальные связи, рекомендации, антифрод
Временных рядов Значения с меткой времени InfluxDB, TimescaleDB Метрики серверов, датчики
Векторные Числовые векторы для поиска похожих Milvus, Qdrant, pgvector в PostgreSQL Поиск по смыслу, работа с нейросетями

В ГОСТ 20886-85 кроме реляционной базы названы ещё иерархическая, сетевая и распределённая. Иерархические и сетевые модели появились раньше реляционной, в новых проектах они почти не встречаются.

Всё, что не реляционное, обычно объединяют словом NoSQL. В нём нет единого языка запросов: у MongoDB свой синтаксис, у Redis — набор команд. Поэтому навыки SQL на них не переносятся напрямую, и для MongoDB в каталоге есть отдельные курсы по MongoDB.

По архитектуре

  • Встраиваемые. СУБД работает как библиотека внутри приложения, отдельного сервера нет. Пример — SQLite в смартфонах и браузерах.
  • Клиент-серверные. СУБД — отдельный процесс, приложения подключаются к нему по сети. Так работают PostgreSQL, MySQL, Oracle.
  • Распределённые. Одна логическая база разложена по нескольким серверам, чтобы пережить отказ любого из них и выдержать нагрузку.
  • Облачные. СУБД разворачивает и обслуживает провайдер, клиент получает адрес для подключения.

По лицензии

Открытые СУБД (PostgreSQL, SQLite, MySQL Community) можно ставить бесплатно. Коммерческие (Oracle, Microsoft SQL Server, российские корпоративные сборки) продаются с поддержкой и дополнительными функциями.

Новичку проще начать с PostgreSQL: она бесплатна и стоит в первой четвёрке рейтинга популярности ниже. Программы, где её разбирают с нуля, собраны в подборке курсов по PostgreSQL.

Популярные СУБД и российские решения

Популярность СУБД каждый месяц считает сайт DB-Engines: по описанию методики он учитывает упоминания на сайтах, частоту поиска, вопросы на Stack Overflow, вакансии и профили в LinkedIn. В его рейтинге за ноябрь 2026 года 442 системы, первая пятёрка выглядит так (из России сайт DB-Engines открывается нестабильно, поэтому цифры привожу полностью):

  1. Oracle — 1096,15 балла;
  2. MySQL — 823,23;
  3. Microsoft SQL Server — 693,53;
  4. PostgreSQL — 689,69;
  5. MongoDB — 366,14.

Четыре из пяти — реляционные. PostgreSQL за год прибавил 38,32 балла, а у трёх лидеров баллы снизились: Oracle потерял 143,63, MySQL 42,59, SQL Server 25,34.

По числу установок рейтинг выглядел бы иначе. Разработчики SQLite оценивают, что в активном использовании больше триллиона её баз, потому что она есть в каждом смартфоне на Android и iOS (Most Widely Deployed).

Двое из первой тройки рейтинга в 2022 году перестали работать с новыми клиентами в России. Oracle, по её годовому отчёту за 2022 финансовый год, свернула работу в стране в марте 2022 года. Microsoft тогда же приостановила все новые продажи продуктов и сервисов в России.

Для проектов, где требуется российское ПО, есть отечественные сборки. Три известных построены на открытом коде:

  • Postgres Pro Enterprise — на ядре PostgreSQL, на сайте разработчика указан номер 104 в Едином реестре российского ПО;
  • Tantor — тоже на основе PostgreSQL;
  • РЕД База Данных — на основе открытой СУБД Firebird.

Для новичка из этого следует простой вывод: навыки PostgreSQL переносятся на две из трёх российских СУБД почти без переучивания.

Как выбрать СУБД под задачу

Универсального ответа нет, но для типовых случаев выбор почти очевиден:

Задача С чего начать Почему
Учебные запросы, первые шаги в SQL SQLite или PostgreSQL SQLite не требует установки, PostgreSQL ближе к работе
Веб-приложение, интернет-магазин PostgreSQL или MySQL Транзакции, связи, большое сообщество
Мобильное приложение, хранение на устройстве SQLite Одна библиотека, база в одном файле
Кэш и сессии Redis Данные хранятся в оперативной памяти, а не на диске
Отчёты по миллиардам строк ClickHouse Колоночное хранение быстрее считает агрегаты
Заказчик требует российское ПО Сборки из реестра российского ПО Это условие самого заказчика

Совет из практики: если сомневаетесь, берите реляционную СУБД. Перейти с PostgreSQL на что-то специализированное, когда появится реальная нагрузка, проще, чем потом собирать связи между документами MongoDB руками.

Частые ошибки новичков при работе с СУБД

Рой с чек-листом уверенно перешагивает через грабли
  1. Путать базу данных и СУБД. «Установил базу MySQL» на деле значит «установил СУБД MySQL», а база появится после CREATE DATABASE. На собеседовании эту разницу спрашивают первой.
  2. Работать без транзакций. Симптом: после ошибки в середине скрипта половина данных изменилась, половина нет. Решение: связанные изменения обернуть в BEGIN … COMMIT, как в шаге 2.
  3. Не ставить индексы или ставить их на всё. Без индекса запрос по фильтру читает всю таблицу. С индексом на каждом столбце медленнее идёт запись: каждый индекс надо обновить. Сначала смотрите план запроса через EXPLAIN, потом решайте.
  4. Удалять данные без резервной копии. DELETE без WHERE очищает всю таблицу. Чем DELETE отличается от TRUNCATE и как не потерять лишнее, разобрано в статье про TRUNCATE и DELETE.
  5. Выбирать NoSQL «потому что модно». Для заказов и денег нужны связи и транзакции, и реляционная СУБД даёт их из коробки.

Где научиться работать с СУБД

Чтобы понять, что такое СУБД, хватит этой статьи и часа экспериментов с SQLite. Работать с ней профессионально — другая задача: проектирование схемы, оптимизация запросов, резервное копирование, права. Этим занимаются администраторы баз данных и SQL-разработчики, а основы нужны любому аналитику и бэкенд-разработчику.

Ниже пять программ из раздела курсов по базам данных нашего каталога: от основ SQL до администрирования.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Базы данных для разработчиков
Перейти на сайт курса
SkillboxSkillbox24 908 ₽4151 ₽/мес.4 месяцаОбзор курса
Базы данных. Интерактивный курс
Перейти на сайт курса
GeekBrainsGeekBrains15 000 ₽417 ₽/мес.1 месяцОбзор курса
Базы данных с нуля
Перейти на сайт курса
MerionMerion9680 ₽767 ₽/мес.2 месяцаОбзор курса
PostgreSQL для начинающих
Перейти на сайт курса
SkillboxSkillbox24 813 ₽ - 1 месяцОбзор курса
Основы MySQL
Перейти на сайт курса
SkillboxSkillbox30 000 ₽ - 1 месяцОбзор курса

Больше программ — в полном каталоге курсов по базам данных

Часто задаваемые вопросы

Что такое СУБД простыми словами?

Это программа, через которую создают базу данных, записывают в неё данные, ищут и меняют их. Сама база — файлы на диске, а СУБД решает, как они устроены, кто к ним допущен и как восстановить данные после сбоя. Примеры: PostgreSQL, MySQL, SQLite.

Чем база данных отличается от СУБД?

База данных — сами данные и их структура, СУБД — программа, которая ими управляет. Одна СУБД может обслуживать несколько баз: «установить MySQL» значит поставить СУБД, а база появится после команды CREATE DATABASE.

Какие основные функции СУБД?

Хранение данных на диске и в буфере памяти, язык определения и обработки данных (обычно SQL), транзакции с журналом изменений, проверка целостности, права доступа, резервное копирование и восстановление.

Какие бывают виды СУБД?

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

Что относится к объектам базы данных?

Основной объект — таблица со столбцами и строками. Вокруг неё строятся первичные и внешние ключи, ограничения, индексы, представления, триггеры, хранимые процедуры, схемы, а также пользователи и роли.

Excel — это СУБД?

Нет. В Excel можно хранить таблицу, но в нём нет транзакций, журнала для восстановления после сбоя, ограничений целостности и раздельных прав на уровне таблиц. Для одного пользователя и небольших данных этого хватает, для приложения — нет.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!