Что такое база данных?
База данных это упорядоченный набор данных, хранящийся на компьютере так, чтобы программы могли быстро и надёжно находить, добавлять, изменять и удалять их. Ею управляет программа, которая называется системой управления базами данных (СУБД), например PostgreSQL, MySQL, SQLite или MongoDB.
Обновлено 24 сентября 2026 г.
Когда ты входишь на сайт, ему нужно найти твою учётную запись среди миллионов других, проверить пароль и загрузить твои настройки, и всё это за несколько миллисекунд. Сайт не открывает текстовый файл и не читает его строка за строкой. Он отправляет в базу данных запрос вроде SELECT * FROM users WHERE email = 'ana@example.com', и база данных сразу переходит к нужной строке с помощью индекса, почти как предметный указатель в конце книги.
Как работает база данных
Вместе работают две части. База данных это данные, упорядоченные в заданную структуру. Система управления базами данных (СУБД) это программа, которая хранит эти данные в файлах, поддерживает их согласованность и отвечает на запросы. PostgreSQL, MySQL и SQLite это СУБД; твой список клиентов это база данных.
В реляционной базе данных данные хранятся в таблицах. У каждой таблицы есть столбцы (имя, страна, баллы) и строки (по одной на пользователя). Запрос проходит такие шаги:
- Твоя программа отправляет запрос, обычно написанный на SQL (Structured Query Language, язык структурированных запросов).
- СУБД разбирает запрос и планирует, как на него ответить: какие таблицы читать и может ли индекс позволить пропустить большую часть строк.
- Она читает данные с диска страницами фиксированного размера (по умолчанию 4 096 байтов в SQLite, 8 КБ в PostgreSQL), а часто используемые страницы держит в памяти.
- Она фильтрует, сортирует и объединяет строки, а затем возвращает результат.
Python поставляется вместе с SQLite, поэтому настоящую базу данных можно запустить прямо здесь:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
Программа нигде не говорит, как искать. Она описывает нужный результат, а СУБД решает, как его получить. В этом главное отличие запроса к базе данных от цикла по списку.
Виды баз данных
| Вид | Как хранит данные | Примеры | Типичное применение |
|---|---|---|---|
| Реляционные (SQL) | Таблицы из строк и столбцов, связанные ключами | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | Пользователи, заказы, платежи: большинство приложений |
| Документные | Документы, похожие на JSON | MongoDB, Firestore, CouchDB | Записи, у которых набор полей меняется от записи к записи |
| Ключ-значение | Значение, которое ищется по одному ключу | Redis, DynamoDB | Кэши, сессии, счётчики |
| Колоночные (wide-column) | Строки с гибким набором столбцов, распределённые по многим серверам | Cassandra, HBase | Очень большие объёмы записи |
| Графовые | Узлы и связи между ними | Neo4j | Социальные сети, рекомендации |
| Временных рядов | Измерения, проиндексированные по времени | InfluxDB, TimescaleDB | Метрики, показания датчиков |
| Векторные | Списки чисел (эмбеддинги) | pgvector, Pinecone, Milvus | Поиск похожего для функций ИИ |
Всё, что не относится к реляционным, часто объединяют под названием NoSQL. Реляционные базы данных остаются выбором по умолчанию для большинства приложений, потому что таблицы, ограничения и SQL хорошо покрывают широкий круг задач. Многие продукты ещё и совмещают виды: PostgreSQL хранит JSON-документы, а pgvector добавляет в него векторный поиск.
Транзакции: всё или ничего
Перевод денег от Аны к Бену требует двух изменений: прибавить Бену и вычесть у Аны. Если программа упадёт между ними, деньги возьмутся из ниоткуда. Транзакция объединяет изменения так, чтобы сохранились либо все, либо ни одного. Здесь второе изменение нарушает правило (баланс не может стать меньше нуля), поэтому база данных отменяет и первое:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
40 были прибавлены Бену, а затем забраны обратно, поэтому итоги по-прежнему сходятся. Реляционные базы данных обещают для транзакций четыре свойства, известные как ACID: атомарность (всё или ничего), согласованность (правила вроде CHECK всегда соблюдаются), изолированность (два пользователя, одновременно выполняющие транзакции, не видят незавершённую работу друг друга) и долговечность (сохранённое изменение переживает сбой или отключение питания).
База данных, электронная таблица или файл
| Текстовый или CSV-файл | Электронная таблица | База данных | |
|---|---|---|---|
| Размер | Сколько может загрузить твоя программа | 1 048 576 строк на лист в Excel | Миллиарды строк |
| Много пишущих одновременно | Нет | Ограниченно | Да, с блокировками и транзакциями |
| Поиск одной записи | Прочитать весь файл | Фильтр или поиск | Поиск по индексу |
| Правила для данных | Нет | Необязательная проверка | Типы, ограничения, внешние ключи |
| Как задавать вопросы | Писать свой код | Формулы | SQL или API запросов |
Электронная таблица хороший инструмент для одного человека, который смотрит на несколько тысяч строк. Когда данные одновременно записывают несколько программ или пользователей или когда данные должны подчиняться правилам, правильный инструмент это база данных.
Как базы данных защищают данные
СУБД записывает каждое изменение в журнал до того, как коснуться файлов данных (журнал упреждающей записи, write-ahead log), поэтому после сбоя она может повторить или отменить незавершённую работу. PostgreSQL умеет хранить контрольную сумму для каждой страницы размером 8 КБ и сообщать об ошибке контрольной суммы, когда выходящий из строя диск возвращает повреждённые данные. Пользователи и права доступа определяют, кто может читать или изменять какие таблицы, а репликация хранит копии на других серверах. Программы к тому же должны передавать ввод пользователя как параметры, как заполнители ? выше, и никогда не вставлять его прямо в текст SQL, потому что именно так происходят атаки SQL-инъекций.
Частые заблуждения
- «SQL это база данных». SQL это язык. PostgreSQL, MySQL и SQLite это базы данных, которые его понимают.
- «NoSQL значит совсем без SQL». Термин обычно читают как «not only SQL» (не только SQL), и у нескольких NoSQL-баз данных есть языки запросов, похожие на SQL, например CQL у Cassandra.
- «База данных это всегда большой сервер». SQLite это один файл, который программа открывает напрямую, вообще без сервера. Она работает внутри каждого телефона на Android и iOS.
- «Данные в базе данных в безопасности навсегда». База данных защищает от сбоев, но не от того, кто по ошибке выполнит
DELETE. Резервные копии всё равно нужны.
Что читать дальше
Курс SQL учит запросам с самого первого SELECT. Документация по SQLite описывает следующие шаги: что такое SQLite, создание таблицы, индексы и защита от SQL-инъекций. Чтобы увидеть, как данные размещаются на диске, прочитай что такое байт, а страница про контрольную сумму объясняет, как обнаруживаются повреждённые страницы.