Современные веб-приложения, мобильные сервисы, корпоративные платформы и аналитические системы оперируют колоссальными объёмами информации. Пользовательские профили, финансовые транзакции, каталоги товаров, логи действий и аналитические метрики требуют надёжного, быстрого и структурированного хранения. Понимание фундаментальных концепций баз данных и систем управления базами данных (СУБД) — базовый навык любого разработчика и инженера данных.
1. Разница между данными, базой данных и СУБД
Часто в разговорной речи термины «база данных» и «СУБД» используют как синонимы, однако между ними существует строгое техническое различие:
- Данные (Data) — это необработанные факты, значения или наблюдения, зафиксированные на каком-либо носителе (например: число
45.50, строка"Баку", дата"2026-03-15"). - База данных (Database, BD) — это структурированная совокупность взаимосвязанных данных, организованная по определённым правилам и схеме для долговременного хранения.
- СУБД (Система управления базами данных, DBMS — Database Management System) — это комплекс программного обеспечения, который предоставляет сервисы для создания базы данных, управления структурой, выполнения запросов на чтение и запись, обеспечения безопасности, резервного копирования и контроля параллельного доступа.
+-----------------------+ 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 и перезапишут файл. В результате товар будет продан дважды, а бизнес понесёт убытки. Реляционная СУБД предотвращает такие аномалии на уровне механизма транзакций.
-- Пример атомарного обновления остатка в СУБД с защитой от оверселла
UPDATE products
SET stock_quantity = stock_quantity - 1
WHERE id = 42 AND stock_quantity >= 1;3. Гарантии надёжности: свойства ACID на пальцах
Ключевое преимущество зрелых реляционных СУБД — гарантия надежности транзакций, выраженная акронимом ACID:
- Atomicity (Атомарность) — принцип «всё или ничего». Транзакция не может выполниться наполовину. Если при переводе 100 AZN с баланса покупателя на счёт магазина деньги списались, но сервер упал до их зачисления на счёт магазина, вся операция автоматически откатывается (ROLLBACK).
- Consistency (Согласованность) — транзакция переводит базу данных из одного корректного состояния в другое. Никакие правила и ограничения целостности (например, запрет отрицательного баланса через
CHECK) не могут быть нарушены. - Isolation (Изолированность) — параллельно выполняющиеся транзакции не должны влиять друг на друга непредсказуемым образом. Промежуточные состояния незавершённой транзакции не видны другим клиентам.
- Durability (Долговечность / Стойкость) — если транзакция успешно зафиксирована (COMMIT), её результат сохранится на диске даже в случае внезапного отключения электропитания сервера в следующую миллисекунду.
4. Клиент-серверная архитектура СУБД
Большинство промышленных баз данных работают по классической клиент-серверной модели:
- Сервер базы данных — фоновый процесс (демон или служба), запущенный на сервере (например, порт
5432для PostgreSQL,3306для MySQL). Сервер напрямую взаимодействует с дисковой подсистемой, оперативной памятью и кэшем. - Клиент — приложение (бэкенд на Node.js, Go, Python, PHP), консольная утилита (
psql,mysql) или графический редактор (DBeaver, DataGrip). Клиент подключается к серверу по сетевому сокету (TCP/IP) с указанием учётных данных.
# Пример подключения к серверу 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 на трёх самых востребованных в веб-разработке системах:
- PostgreSQL — мощнейшая объектно-реляционная СУБД с открытым исходным кодом. Известна безупречным соблюдением стандартов SQL, богатейшей системой типов (JSONB, массивы, геометрические типы, полнотекстовый поиск), высокой расширяемостью и надёжностью. Это стандарт де-факто для сложных бэкендов и финтех-проектов.
- MySQL — самая популярная СУБД веб-интернета. На ней работают WordPress, Facebook, Booking.com и миллионы веб-сайтов. Отличается высокой скоростью простых операций чтения и широчайшей поддержкой на всех хостинг-платформах.
- SQLite — самая распространённая СУБД в мире по количеству установок. Встроена в каждый смартфон (iOS, Android), браузеры (Google Chrome), операционные системы и локальные инструменты разработчика. Идеальна для быстрого старта, тестирования и встроенных приложений.
Итоги
- Данные — это отдельные значения; база данных — их структурированная совокупность; СУБД — программа для управления ими.
- Файлы (JSON, CSV) не обеспечивают параллельности, целостности и быстрого поиска по миллионам записей.
- ACID гарантирует надёжность: атомарность, согласованность, изолированность и долговечность изменений.
- В промышленной веб-разработке доминируют реляционные СУБД (PostgreSQL, MySQL, SQLite), объединяющие универсальный язык SQL и проверенные временем гарантии сохранности данных.