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


1. Разница между данными, базой данных и СУБД

Часто в разговорной речи термины «база данных» и «СУБД» используют как синонимы, однако между ними существует строгое техническое различие:

  • Данные (Data) — это необработанные факты, значения или наблюдения, зафиксированные на каком-либо носителе (например: число 45.50, строка "Баку", дата "2026-03-15").
  • База данных (Database, BD) — это структурированная совокупность взаимосвязанных данных, организованная по определённым правилам и схеме для долговременного хранения.
  • СУБД (Система управления базами данных, DBMS — Database Management System) — это комплекс программного обеспечения, который предоставляет сервисы для создания базы данных, управления структурой, выполнения запросов на чтение и запись, обеспечения безопасности, резервного копирования и контроля параллельного доступа.
text
+-----------------------+         SQL-запрос         +-----------------------------+
|  Клиент / Приложение  | -------------------------> |            СУБД             |
| (Node.js, PHP, Python)| <------------------------- | (PostgreSQL, MySQL, SQLite) |
+-----------------------+      Результат / Строки    +--------------+--------------+
                                                                    |
                                                            Чтение / Запись файлов
                                                                    v
                                                     +-----------------------------+
                                                     |    Файловая система / Диск  |
                                                     |  (Таблицы, журналы WAL, WAL)|
                                                     +-----------------------------+

Когда мы говорим: «Мы перенесли данные в PostgreSQL», строго говоря, мы сохранили нашу базу данных под управлением СУБД PostgreSQL.


2. Почему не обычные файлы: Excel, CSV и JSON

На этапе прототипирования проекта у начинающих разработчиков часто возникает мысль: «Зачем поднимать сервер базы данных, если можно сохранять JSON-файл или таблицу Excel на диске сервера?»

Файловый подход неизбежно терпит крах при переходе в реальную эксплуатацию по следующим причинам:

ПроблемаХранение в файлах (JSON, CSV, Excel)Хранение в СУБД (PostgreSQL, MySQL)
Конкурентный доступПри одновременной записи двумя процессами файл повреждается или перезаписывается целикомПоддерживает тысячи параллельных читателей и писателей благодаря блокировкам и MVCC
Целостность данныхЛюбая строка может содержать повреждённый формат, случайный текст вместо числа или дублирующийся IDОграничения схем (PRIMARY KEY, NOT NULL, CHECK, FOREIGN KEY) гарантируют корректность
Скорость выборкиЧтобы найти одну запись среди 5 миллионов строк, файл нужно прочитать в память целиком (O(N))B-Tree индексы находят запись за 3-4 дисковых чтения (O(log N)) за доли миллисекунды
Безопасность и праваДоступ регулируется только правами на уровне ОС (всё или ничего)Гибкая ролевая модель: права на уровне баз, схем, отдельных таблиц и даже колонок
ОтказоустойчивостьЕсли сервер отключится во время перезаписи файла, файл окажется пустым или повреждённымЖурналирование упреждающей записи (WAL / Redo Log) обеспечивает восстановление после сбоя

Пример сценария конкурентной записи: два покупателя одновременно нажимают кнопку «Купить последний товар на складе». Если остаток хранится в stock.json, оба процесса прочитают количество 1, уменьшат его до 0 и перезапишут файл. В результате товар будет продан дважды, а бизнес понесёт убытки. Реляционная СУБД предотвращает такие аномалии на уровне механизма транзакций.

sql
-- Пример атомарного обновления остатка в СУБД с защитой от оверселла
UPDATE products
SET stock_quantity = stock_quantity - 1
WHERE id = 42 AND stock_quantity >= 1;

3. Гарантии надёжности: свойства ACID на пальцах

Ключевое преимущество зрелых реляционных СУБД — гарантия надежности транзакций, выраженная акронимом ACID:

  1. Atomicity (Атомарность) — принцип «всё или ничего». Транзакция не может выполниться наполовину. Если при переводе 100 AZN с баланса покупателя на счёт магазина деньги списались, но сервер упал до их зачисления на счёт магазина, вся операция автоматически откатывается (ROLLBACK).
  2. Consistency (Согласованность) — транзакция переводит базу данных из одного корректного состояния в другое. Никакие правила и ограничения целостности (например, запрет отрицательного баланса через CHECK) не могут быть нарушены.
  3. Isolation (Изолированность) — параллельно выполняющиеся транзакции не должны влиять друг на друга непредсказуемым образом. Промежуточные состояния незавершённой транзакции не видны другим клиентам.
  4. Durability (Долговечность / Стойкость) — если транзакция успешно зафиксирована (COMMIT), её результат сохранится на диске даже в случае внезапного отключения электропитания сервера в следующую миллисекунду.

4. Клиент-серверная архитектура СУБД

Большинство промышленных баз данных работают по классической клиент-серверной модели:

  • Сервер базы данных — фоновый процесс (демон или служба), запущенный на сервере (например, порт 5432 для PostgreSQL, 3306 для MySQL). Сервер напрямую взаимодействует с дисковой подсистемой, оперативной памятью и кэшем.
  • Клиент — приложение (бэкенд на Node.js, Go, Python, PHP), консольная утилита (psql, mysql) или графический редактор (DBeaver, DataGrip). Клиент подключается к серверу по сетевому сокету (TCP/IP) с указанием учётных данных.
bash
# Пример подключения к серверу PostgreSQL через консольный клиент psql
psql -h 127.0.0.1 -p 5432 -U shop_admin -d shop_db

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


5. Классификация СУБД: реляционные и нереляционные

В зависимости от модели организации данных и профиля нагрузки СУБД делятся на несколько основных классов:

  • Реляционные СУБД (RDBMS / OLTP — Online Transaction Processing):
    Хранят данные в виде связанных двумерных таблиц с жёсткой схемой и строгой поддержкой ACID. Ориентированы на миллионы быстрых операций чтения и обновления отдельных строк.
    Представители: PostgreSQL, MySQL, MariaDB, SQLite, Oracle, Microsoft SQL Server.
  • Аналитические СУБД (OLAP — Online Analytical Processing / Колоночные):
    Оптимизированы для сканирования миллиардов строк и вычисления агрегатов (суммы, средние, группировки). Данные хранятся на диске не построчно, а по колонкам с сильным сжатием.
    Представители: ClickHouse, Snowflake, Google BigQuery, DuckDB.
  • Документоориентированные (NoSQL):
    Хранят данные в виде иерархических документов (JSON, BSON) без строгой фиксации схемы на уровне таблиц.
    Представители: MongoDB, CouchDB.
  • Ключ-значение (Key-Value / In-Memory):
    Хранят данные в оперативной памяти в виде пар «ключ — значение». Обеспечивают субмиллисекундный отклик, идеальны для кэширования и сессий.
    Представители: Redis, Valkey, Memcached.

6. Три СУБД этого курса: PostgreSQL, MySQL и SQLite

В рамках данного курса мы будем изучать реляционный стандарт SQL на трёх самых востребованных в веб-разработке системах:

  1. PostgreSQL — мощнейшая объектно-реляционная СУБД с открытым исходным кодом. Известна безупречным соблюдением стандартов SQL, богатейшей системой типов (JSONB, массивы, геометрические типы, полнотекстовый поиск), высокой расширяемостью и надёжностью. Это стандарт де-факто для сложных бэкендов и финтех-проектов.
  2. MySQL — самая популярная СУБД веб-интернета. На ней работают WordPress, Facebook, Booking.com и миллионы веб-сайтов. Отличается высокой скоростью простых операций чтения и широчайшей поддержкой на всех хостинг-платформах.
  3. SQLite — самая распространённая СУБД в мире по количеству установок. Встроена в каждый смартфон (iOS, Android), браузеры (Google Chrome), операционные системы и локальные инструменты разработчика. Идеальна для быстрого старта, тестирования и встроенных приложений.

Итоги

  • Данные — это отдельные значения; база данных — их структурированная совокупность; СУБД — программа для управления ими.
  • Файлы (JSON, CSV) не обеспечивают параллельности, целостности и быстрого поиска по миллионам записей.
  • ACID гарантирует надёжность: атомарность, согласованность, изолированность и долговечность изменений.
  • В промышленной веб-разработке доминируют реляционные СУБД (PostgreSQL, MySQL, SQLite), объединяющие универсальный язык SQL и проверенные временем гарантии сохранности данных.