Основные понятия теории БД
Данные и информация: Фундаментальное различие
В инженерной практике критически важно различать форму фиксации и смысловое содержание.
Данные (Data)
Зарегистрированные формализованные факты, числа, символы или сигналы на физическом носителе. Сами по себе не несут прикладного контекста и не снимают неопределенности. Пример: строка "Иванов, 38.8, 120/80".
Информация (Information)
Результат интерпретации данных в контексте решаемой задачи. Снимает неопределенность знаний пользователя и служит основой для принятия решений. Пример: "У пациента Иванова жар (38.8 °C), требуется срочный осмотр".
Знания (Knowledge)
Закономерности предметной области, правила и модели логического вывода, позволяющие решать новые задачи на основе имеющейся информации. Пример: "Клинический протокол терапии при гипертермии".
Метаданные (Metadata)
Данные о данных: структура таблиц, типы полей, ограничения целостности, индексы, права доступа и статистика использования. Пример: "Таблица Patients, колонка temp DECIMAL(3,1) CHECK(temp > 34)".
Почему файловые системы и Excel не заменяют СУБД
Попытки использовать файлы ОС для многопользовательских учетных задач приводят к системным авариям.
Избыточность и рассинхронизация
Дублирование сущностей в разных файлах ведет к нарушению консистентности: адрес клиента обновился в отделе продаж, но остался старым в бухгалтерии.
Сцепленность формата и программ
Добавление хотя бы одного поля в структуру файла делает неработоспособными все прикладные программы, считывающие этот файл с фиксированным смещением байт.
Аномалии параллелизма (Lost Update)
Файловая система ОС блокирует файл целиком либо допускает слепую перезапись. При одновременном сохранении двух менеджеров правки одного теряются.
Уязвимость при сбоях питания
В файловой системе нет транзакционного журнала опережающей записи (WAL). Обрыв питания в момент записи разрушает структуру файла без возможности отката.
База данных и СУБД: Система и Хранилище
Четкое разграничение программного сервера и физического содержимого.
База данных (Database)
Поименованная, структурированная и взаимосвязанная совокупность данных на электронном носителе, отражающая актуальное состояние предметной области и законы взаимодействия ее объектов.
СУБД (DBMS)
Программный комплекс общего назначения, управляющий созданием, модификацией, поддержанием целостности, физическим размещением и параллельным доступом к базе данных со стороны клиентов.
Прикладное приложение (Client App)
Клиентская программа (веб-сайт, мобильное приложение, 1С), взаимодействующая с СУБД через сетевой протокол или API, отправляя декларативные запросы.
Метафора: «Библиотека и Библиотекарь»
БД — книги на полках и стеллажах. СУБД — библиотекарь: принимает запрос, находит книги по каталогу, выдает копии и следит за сохранностью оригинала.
Шесть ключевых функций промышленной СУБД
Что именно делает СУБД «под капотом» для гарантии непрерывности бизнеса:
| Функция СУБД | Назначение и механизм реализации | Преимущество для бизнеса |
|---|---|---|
| 1. Управление хранилищем | Разбиение на дисковые страницы (8 КБ), кэширование в Shared Buffers ОЗУ. | Быстродействие при объемах данных в терабайты. |
| 2. Транзакции (ACID) | Опережающая запись в журнал WAL (Write-Ahead Logging), фиксация (COMMIT) и откат (ROLLBACK). | Защита от сбоев питания и половинчатых проводок. |
| 3. Конкурентный доступ | Блокировки строк, многоверсионность (MVCC), изоляция транзакций. | Одновременная работа тысяч клиентов без задержек. |
| 4. Целостность данных | Автоматическая проверка ограничений (PK, FK, UNIQUE, CHECK). | Исключение ошибок человеческого фактора на уровне ядра. |
| 5. Безопасность | Аутентификация, ролевая модель (RBAC), шифрование и аудит запросов. | Соответствие законодательству о защите ПДн (152-ФЗ). |
| 6. Резервное копирование | Снапшоты, инкрементальные бэкапы, восстановление на точку во времени (PITR). | Гарантированное восстановление после катастроф. |
Трехуровневая архитектура ANSI/SPARC (1975 г.)
Классический стандарт абстракции, разделивший физическую структуру и пользовательское видение.
1. Внешний уровень (External Level / Views)
Множество индивидуальных пользовательских представлений. Скрывает избыточные или секретные данные от конкретных ролей (врач, регистратор, студент, кассир).
2. Концептуальный уровень (Conceptual Level)
Единое логическое описание всей структуры базы данных: сущности, атрибуты, связи и правила целостности. Абстрагирован от аппаратной реализации.
3. Внутренний уровень (Internal / Physical Level)
Физическое хранение на диске: разметка страниц, структура индексов (B-Tree, GiST), выравнивание байтов, сжатие, размещение файлов по дисковым пулам.
Главный эффект ANSI/SPARC
Разрыв жесткой связи между интерфейсом приложения и способом размещения байтов на физическом накопителе.
Два вида независимости данных
Архитектурная устойчивость информационной системы к изменениям бизнес-требований и оборудования.
Логическая независимость (Logical Independence)
Возможность изменять концептуальную схему БД (добавлять новые сущности, таблицы, связи или столбцы) без необходимости переделывать существующие внешние представления и прикладной код.
Пример: Добавление таблицы бонусных карт не нарушает работу кассового аппарата, считывающего только цены и чеки.
Физическая независимость (Physical Independence)
Возможность изменять физическую структуру хранения (перенос таблиц на скоростные NVMe SSD, перестроение B-Tree индексов, настройка компрессии) без изменения концептуальной схемы и текста SQL-запросов.
Пример: Создание индекса по СНИЛС ускоряет поиск в 100 раз, но SQL-запрос SELECT * FROM patients WHERE snils = ... остается неизменным.
Реляционные СУБД (RDBMS / SQL)
Фундамент корпоративного сектора с 1970 года по сей день (модель Эдгара Кодда).
Табличная парадигма
Данные организованы в виде нормализованных таблиц (отношений). Каждая строка — кортеж (запись), каждый столбец — строго типизированный атрибут.
Связи и целостность
Связи между сущностями строятся через первичные (PK) и внешние (FK) ключи. Каскадные правила гарантируют отсутствие «висячих» данных.
Строгая схема (Schema-on-Write)
Структура таблиц определяется до записи данных. СУБД жестко блокирует попытку записать текст в числовое поле или пропустить обязательный параметр.
Лидеры индустрии
PostgreSQL (open-source стандарт энтерпрайза), MySQL / MariaDB (веб-разработка), Oracle DB, MS SQL Server, SQLite (встраиваемая СУБД).
Семейство NoSQL (Not Only SQL)
Эволюционный ответ на вызовы эпохи Web 2.0: петабайты неструктурированных данных и горизонтальное масштабирование.
Документные (Document)
Хранят полуструктурированные JSON/BSON документы. Гибкая схема (Schema-on-Read). Идеальны для каталогов и CMS.
Системы: MongoDB, CouchDB.
Ключ-значение (Key-Value)
Быстрейшие хеш-хранилища в оперативной памяти. Используются для кэширования, хранения сессий и счетчиков.
Системы: Redis, Memcached, DynamoDB.
Графовые (Graph)
Узлы и направленные связи с атрибутами. Мгновенный обход глубоких связей без тяжелых JOIN-запросов.
Системы: Neo4j, Amazon Neptune.
Колоночные (Wide-Column)
Хранение данных по колонкам для высокоскоростной аналитической обработки больших данных (OLAP).
Системы: Apache Cassandra, ClickHouse.
Сравнительный выбор: Реляционная СУБД vs NoSQL
В реальной разработке выбирают не «модную технологию», а соответствие архитектурным ограничениям задачи.
| Характеристика | Реляционные СУБД (PostgreSQL) | Документные NoSQL (MongoDB) |
|---|---|---|
| Схема данных | Фиксированная, строгая типизация (Schema-on-write). | Динамическая, произвольные поля в документе (Schema-on-read). |
| Сложные связи (JOIN) | Высокоэффективная реляционная алгебра, внешние ключи. | Связи не приветствуются, данные денормализуются внутрь документа. |
| Транзакции | Строгий ACID на уровне нескольких таблиц и базы. | Гарантия атомарности на уровне одного документа (BASE-модель). |
| Масштабирование | Преимущественно вертикальное (CPU/RAM/SSD) + репликация. | Горизонтальное шардирование из коробки на кластер серверов. |
| Применение | Банкинг, биллинг, ERP, госуслуги, медицина. | Каталоги товаров с десятками свойств, соцсети, логи, мобильные бэкенды. |
Клиент-серверное взаимодействие в СУБД
Как распределяются роли между пользовательским интерфейсом и сервером данных.
Клиентская часть (Frontend / Client)
Обеспечивает графический интерфейс (GUI), формулирует пользовательские запросы и визуализирует полученные выборки. Не имеет прямого физического доступа к файлам БД на сервере.
Серверная часть (Database Server)
Принимает сетевой запрос, парсит синтаксис SQL, проверяет права пользователя, строит оптимальный план выполнения (Query Planner) и извлекает строки из дисковых буферов.
Сетевой протокол
Передает только текст запроса и результирующий набор строк, минимизируя трафик локальной сети (в отличие от файл-серверных систем, где по сети гоняются гигабайтные файлы).
Файл-серверные СУБД (MS Access, DBF)
Устаревшая архитектура: клиент сам читает и блокирует файлы по сети. При обрыве соединения или аварии одного клиента файл базы данных полностью разрушается.
Аномалии параллельного доступа: Почему нужны транзакции
Что происходит без механизмов сериализации и блокировок при одновременной работе пользователей.
Потерянное обновление (Lost Update)
Два пользователя читают остаток счета (1000 ₽). Первый переводит 200 ₽ и записывает 800 ₽. Второй параллельно переводит 300 ₽ и записывает 700 ₽. Итог: списание 200 ₽ первого бесследно стерто!
«Грязное» чтение (Dirty Read)
Транзакция А изменила данные, но еще не зафиксировала (не выполнила COMMIT). Транзакция Б читает эти промежуточные данные. Транзакция А откатывается (ROLLBACK). Транзакция Б работала с фантомными данными.
Решение: Уровни изоляции транзакций
Стандарт SQL определяет 4 уровня: Read Uncommitted, Read Committed (дефолт в PostgreSQL), Repeatable Read и Serializable (полная эмуляция последовательного выполнения).
Механизм MVCC
Multi-Version Concurrency Control: пишущие транзакции создают новые версии строк, благодаря чему читающие транзакции никогда не блокируют пишущие, и наоборот.
Администратор баз данных (DBA): Роль и ответственность
Ключевой инженер, гарантирующий доступность и сохранность критических корпоративных активов.
Тюнинг и масштабирование
Настройка параметров конфигурации ядра (shared_buffers, work_mem, max_connections), балансировка дискового ввода-вывода, секционирование таблиц (partitioning).
Disaster Recovery и бэкапы
Построение отказоустойчивых кластеров высокой доступности (High Availability), настройка потоковой репликации и регулярное тестовое восстановление из резервных копий.
Оптимизация запросов
Анализ планов выполнения тяжелых запросов через EXPLAIN ANALYZE, подбор оптимальных индексов, выявление узких мест и предотвращение блокировок (deadlocks).
Информационная безопасность
Управление ролями и правами пользователей (GRANT/REVOKE), внедрение политик Row-Level Security, шифрование каналов (SSL/TLS) и аудит подозрительной активности.
Контрольные вопросы для самопроверки
Проверьте свое понимание пройденного материала перед выполнением практического листа:
Вопрос 1: Сущность СУБД
В чем заключается ошибка фразы: «Я скачал с флешки базу данных PostgreSQL и запустил ее на компьютере»?
Подсказка: разделяйте файл базы и серверное программное обеспечение.
Вопрос 2: Модели хранения
Для какой задачи — ведение счетов в онлайн-банке или хранение каталога одежды с сотнями параметров — лучше подойдет документная СУБД MongoDB?
Подсказка: сопоставьте требования к жестким транзакциям и динамической структуре.
Вопрос 3: ANSI/SPARC
К какому уровню модели ANSI/SPARC относится создание представления (VIEW), исключающего показ поля «Заработная плата» для рядовых менеджеров?
Подсказка: это уровень пользовательских представлений.
Вопрос 4: Риски файлового доступа
Почему при одновременном редактировании файла Excel в общей папке двумя сотрудниками возникает риск аномалии Lost Update?
Подсказка: вспомните отсутствие механизма изоляции и журналов транзакций в файловой системе.
Популярный мем индустрии баз данных: «Bobby Tables»
Комикс xkcd №327: «Exploits of a Mom» (автор Рэндалл Манро) — самый известный в мировой индустрии IT мем о базах данных и SQL-инъекциях.
Мама называет сына именем:
Robert'); DROP TABLE Students;--
Когда школьная система попыталась вставить имя ученика не экранированным конкатенированным запросом, база данных выполнила команду DROP TABLE и стерла данные об успеваемости всех студентов за год.
Комикс: xkcd #327 "Exploits of a Mom" (Рэндалл Манро).
Лицензия: Creative Commons Attribution-NonCommercial 2.5 License (CC BY-NC 2.5).
Методический вывод: разделение уровней абстракции ANSI/SPARC, валидация входных данных и использование параметризованных запросов СУБД — непреложный закон надежности систем.