Моделирование данных и хранение
Данные — самая долгоживущая часть системы: код перепишут, а таблицы и связи останутся. Поэтому аналитик обязан думать о хранении не «как получится», а осознанно: какие сущности, какие ключи, какая модель — реляционная или NoSQL — и какие гарантии даёт СУБД под нагрузкой.
Этот блок собирает всё, что спрашивают про хранение: от реляционной модели и уровней проектирования до индексов, нормализации, транзакций, ACID и аномалий параллелизма. Частые ловушки — путать индекс с первичным ключом, индексировать низкоселективный столбец, считать ACID набором «фич производительности» и менять местами схемы SQL и NoSQL. Полная карта — в слоях ниже.
Карта темы
- Реляционная модель и ключи — таблицы, строки, первичный и внешний ключ, ссылочная целостность.
- Уровни модели данных — концептуальный, логический и физический уровни и что добавляется на каждом.
- Нормализация — нормальные формы, аномалии избыточности и осознанная денормализация.
- Констрейнты — PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK и составная уникальность.
- Индексы — что такое индекс, зачем он нужен и как устроено B-дерево.
- Издержки и селективность индекса — цена записи, уникальный индекс, селективность и рекомендации по проектированию.
- Транзакции — единая логическая задача, COMMIT и ROLLBACK.
- Гарантии ACID — атомарность, консистентность, изолированность, долговечность.
- Аномалии параллельных транзакций — грязное чтение, фантомы и защита уровнями изоляции.
- SQL против NoSQL — фиксированная схема против гибкой, семейства NoSQL и когда что выбрать.
- Партиционирование — разбиение большой таблицы на секции и отличие от шардирования.
Частые ошибки и ловушки
| Ошибка | Последствие |
|---|---|
| Путать индекс с первичным ключом | Неверная модель хранения; лишние или недостающие индексы |
| Индексировать низкоселективный столбец (пол) | Индекс не сужает поиск, только замедляет запись |
| Считать ACID «фичами производительности» | Неверно объясняете гарантии транзакции — грубый провал |
| Менять местами схемы SQL и NoSQL | Выбираете модель под задачу неправильно |
| Строить физическую модель до концептуальной | СУБД-детали протекают в бизнес-уровень; модель нечитаема |
| Думать, что нормализация сливает таблицы | Наоборот — она их разбивает, убирая аномалии |
Значение для собеседований
Хранение данных — самый нагруженный технический раздел собеседования аналитика. Здесь проверяют, понимаете ли вы механику, а не термины: чем внешний ключ отличается от первичного, почему индекс по полу бесполезен, что именно гарантирует каждая буква ACID.
Что обычно проверяют:
- Реляционная модель, первичный и внешний ключ, ссылочная целостность.
- Что такое индекс, его компромисс и почему селективность решает.
- ACID и аномалии параллельных транзакций; как защищают уровни изоляции.
- Отличие SQL от NoSQL, семейства NoSQL и уровни/нормализацию модели данных.
Типичный неверный ответ: «индекс — это чтобы данные не терялись» или «ACID — про скорость». На деле индекс меняет память и скорость записи на скорость чтения, а ACID — это четыре гарантии надёжности транзакции, а не функции производительности.