Слайд 1 из 15

Основные понятия теории БД

Данные и информация: Фундаментальное различие

В инженерной практике критически важно различать форму фиксации и смысловое содержание.

Данные (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 (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, валидация входных данных и использование параметризованных запросов СУБД — непреложный закон надежности систем.