Ландшафт курса: от ER-диаграммы до lakehouse
Моделирование данных — это не одна техника, а семейство подходов, каждый из которых придуман под свою задачу. Схема для приложения банка и схема для аналитического хранилища строятся по разным правилам, потому что решают разные задачи. Этот урок — карта всего курса: что мы пройдём, в каком порядке и почему именно так.
Не пытайтесь запомнить здесь всё. Цель урока — чтобы вы видели общую картину и понимали, как очередной модуль встраивается в маршрут.
Две большие половины курса
Весь курс делится на две принципиально разные части, и понимание этого деления — ключ ко всему остальному.
Первая половина — моделирование для систем, которые обслуживают приложения. Это мир OLTP (Online Transaction Processing): интернет-магазин принимает заказ, банк проводит платёж, мессенджер сохраняет сообщение. Здесь много коротких операций, важна целостность данных, и главная техника — нормализация.
Вторая половина — моделирование для аналитики. Это мир OLAP (Online Analytical Processing): построить отчёт о выручке по месяцам, посчитать среднее время доставки за год. Здесь мало запросов, но они тяжёлые, и главная техника — размерное моделирование (dimensional modeling).
Одна и та же компания обычно имеет обе системы: OLTP-базу, в которой работает приложение, и OLAP-хранилище, куда данные регулярно перекладываются для анализа. Курс проведёт вас через обе.
Этап 1: фундамент (модули 2-6)
Сначала — основы, общие для любого моделирования. (Модуль 1 — минимальный SQL и зачем вообще моделировать данные: разминка, после которой остальные модули читаются легче.)
- Что такое моделирование данных (модуль 2). Три уровня модели — conceptual, logical, physical. Workflow от требований к схеме. Кто этим занимается.
- ER-моделирование (модуль 3). Entity-Relationship — универсальный язык для рисования модели. Сущности, атрибуты, связи. Этим вы занимались на бумаге в задании прошлого урока — здесь это станет строгой техникой.
- Реляционная модель (модуль 4). Математическая основа всех SQL-баз: что такое relation, tuple, attribute, как работает NULL и почему он коварен.
- Ключи (модуль 5). Как уникально идентифицировать строку. Natural и surrogate keys, и почему выбор между ними влияет на скорость.
- Связи и кардинальность (модуль 6). Как реализовать «один-ко-многим» и «многие-ко-многим» в реальных таблицах.
После этих модулей вы умеете прочитать любую ER-диаграмму и превратить её в корректные таблицы.
Этап 2: нормализация и OLTP (модули 7-9)
- Нормализация: основы (модуль 7). Функциональные зависимости, аномалии, нормальные формы 1NF, 2NF, 3NF. Это сердце моделирования для приложений.
- Нормализация: углублённо (модуль 8). BCNF, 4NF, 5NF — для случаев, где 3NF недостаточно. И денормализация — когда правила нарушают сознательно.
- Моделирование OLTP-систем (модуль 9). Как модель воплощается в коде базы: ограничения целостности, FK, CHECK, как модель влияет на индексы и блокировки.
Этап 3: переход к аналитике (модуль 10)
- От OLTP к OLAP (модуль 10). Поворотная точка курса. Почему нормализованная схема, идеальная для приложения, плоха для аналитики (запрос с десятками соединений). Здесь же — терминология современных хранилищ: data warehouse, data mart, data lake, lakehouse, и разница между ETL и ELT.
Модуль 10 — мост между двумя половинами курса. До него вы учитесь хранить данные правильно для приложений. После него — правильно для аналитики. Правила меняются почти на противоположные, и это не противоречие, а следствие разных задач.
Этап 4: размерное моделирование (модули 11-14)
Это техника Ральфа Кимбалла (Ralph Kimball) — индустриальный стандарт для аналитических хранилищ.
- Размерное моделирование: основы (модуль 11). Star schema (схема «звезда»): таблица фактов в центре, таблицы измерений вокруг. Четырёхшаговый процесс дизайна и понятие grain (зерно).
- Fact-таблицы детально (модуль 12). Типы таблиц фактов и какие показатели можно суммировать, а какие нет.
- Dimension-таблицы детально (модуль 13). Conformed dimensions, role-playing, junk dimensions, date dimension.
- Slowly Changing Dimensions (модуль 14). Как хранить историю изменений: атрибут клиента поменялся — сохранить новое значение или сохранить и старое тоже? Типы SCD 0-7.
Этап 5: методологии и современность (модули 15-18)
- Методологии DWH (модуль 15). Три школы построения хранилищ: Inmon, Kimball, Data Vault — в чём философская разница.
- Data Vault 2.0 (модуль 16). Подход для аудируемости и параллельной загрузки из многих источников: hubs, links, satellites.
- Современное моделирование (модуль 17). Lakehouse, medallion-архитектура (bronze/silver/gold), One Big Table, semantic layer, роль dbt.
- Моделирование для NoSQL (модуль 18). Когда данные хранятся не в таблицах: документные базы (MongoDB), wide-column (Cassandra), графовые (Neo4j). Здесь правило «query-first»: схема проектируется от запросов.
Этап 6: капстоун (модуль 19)
Финальный модуль — сквозной проект. Вы пройдёте полный путь: бизнес-требования, conceptual-модель, нормализованная OLTP-схема, затем star schema для аналитики, реализация SCD2. Все знания курса собираются в один связный кейс.
Как техники соотносятся друг с другом
Распространённое заблуждение новичка — что новая техника «отменяет» старую: раз есть размерное моделирование, нормализация устарела. Это неверно. Техники не конкурируют — они применяются на разных слоях и для разных задач.
| Техника | Где применяется | Главная цель |
|---|---|---|
| Нормализация (3NF/BCNF) | OLTP-базы приложений, raw/silver-слой хранилища | Целостность, отсутствие аномалий |
| Размерное (star schema) | Аналитический gold-слой, витрины | Скорость и понятность аналитических запросов |
| Data Vault | Интеграционный слой хранилища | Аудируемость, приём из многих источников |
| NoSQL-моделирование | Документные/графовые/wide-column базы | Соответствие конкретным паттернам доступа |
В современном хранилище эти подходы сосуществуют слоями: сырые данные приходят в нормализованном или Data Vault виде, а на витринах превращаются в star schema. Вы научитесь не «единственно правильной» технике, а умению выбирать подходящую под задачу.
Inmon vs Kimball — обзор двух школ DWH Kimball-light в dbt: staging, marts на практикеПочему именно такой порядок модулей
Может возникнуть вопрос: почему курс идёт от ER-моделирования к нормализации, а размерное моделирование оставлено на вторую половину? Порядок не случаен — он отражает зависимости между темами.
Сначала идут понятия, без которых не обойтись нигде: что такое сущность, атрибут, связь, ключ. Это алфавит. На нём строится всё остальное, поэтому он первый. Затем — реляционная модель и нормализация: это техники для OLTP, и они опираются на алфавит из первых модулей. Размерное моделирование стоит после, потому что оно лучше всего понимается в контрасте с нормализацией: чтобы оценить, зачем аналитике денормализованная звезда, надо сначала прочувствовать, что такое нормализованная схема и почему она тяжела для аналитических запросов. Учить размерное моделирование до нормализации — всё равно что объяснять исключение из правила до самого правила.
Методологии хранилищ (Inmon, Kimball, Data Vault) и современные подходы (lakehouse, semantic layer) идут в конце, потому что они комбинируют все предыдущие техники. Понять Data Vault, не зная, что такое ключ, нормализация и хеш, невозможно. Капстоун замыкает курс, потому что он требует уже всего арсенала сразу.
Вывод: порядок модулей — это не произвольная нумерация, а граф зависимостей. Каждый модуль готовит почву для следующего, поэтому курс и нужно проходить последовательно.
Если на каком-то модуле потеряете нить — вернитесь к этой карте. Спросите себя: это OLTP или OLAP? Какой слой хранилища? Какая цель — целостность или скорость чтения? Эти три вопроса почти всегда возвращают понимание контекста.
Попробуй сам
Перерисуйте маршрут курса как простой список из шести этапов по памяти, не подглядывая: фундамент, нормализация и OLTP, переход к аналитике, размерное моделирование, методологии и современность, капстоун. Рядом с каждым этапом одной фразой напишите, какую задачу он решает. Затем честно отметьте, какие два-три понятия из этого урока вам совсем незнакомы — это нормально, именно их курс и объяснит. Возвращайтесь к этому списку каждые несколько модулей и вычёркивайте то, что стало понятным: так вы будете видеть собственный прогресс.