┌─────────────────────────────────────────────────────────────────────────┐
│ КАРТА КУРСА │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ УРОВЕНЬ 1: ОСНОВЫ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SELECT │ → │ WHERE │ → │ JOIN │ → │ GROUP BY│ │
│ │ FROM │ │ ORDER │ │ LEFT │ │ HAVING │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ↓ │
│ УРОВЕНЬ 2: ПРОДВИНУТЫЙ SQL │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Подзапросы│ → │ CTE │ → │ Оконные │ │
│ │ │ │ WITH │ │ функции │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ↓ │
│ УРОВЕНЬ 3: АРХИТЕКТУРА │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Транзакции│ → │ MVCC │ → │Индексы │ → │EXPLAIN │ │
│ │ ACID │ │ │ │ B-Tree │ │ ANALYZE │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ↓ │
│ УРОВЕНЬ 4: ЭКСПЛУАТАЦИЯ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ VACUUM │ → │Партици- │ → │Репликация│ │
│ │ WAL │ │онирование│ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘ | # | Тема | Статус | Материал |
|---|---|---|---|
| 1.1 | Что такое SQL и реляционные БД | Теория 1 | |
| 1.2 | SELECT, FROM — базовая выборка | Теория 1 | |
| 1.3 | WHERE — фильтрация данных | Теория 1 | |
| 1.4 | ORDER BY, LIMIT, OFFSET — сортировка и пагинация | Теория 1 | |
| 1.5 | NULL — понимание трёхзначной логики | Теория 1 | |
| 1.6 | Типы данных PostgreSQL | Теория 1 | |
| 1.7 | INSERT, UPDATE, DELETE — изменение данных | Теория 1 | |
| 1.8 | CREATE TABLE — создание таблиц | Теория 1 | |
| 1.9 | PRIMARY KEY, FOREIGN KEY, UNIQUE | Теория 1 | |
| 1.10 | JOIN — соединение таблиц | Теория 2 | |
| 1.11 | INNER, LEFT, RIGHT, FULL JOIN | Теория 2 | |
| 1.12 | GROUP BY, HAVING — группировка | Теория 2 | |
| 1.13 | COUNT, SUM, AVG, MIN, MAX — агрегации | Теория 2 |
| # | Тема | Статус | Материал |
|---|---|---|---|
| 2.1 | Подзапросы в WHERE, SELECT, FROM | Теория 2 | |
| 2.2 | Коррелированные подзапросы | Теория 2 | |
| 2.3 | EXISTS, NOT EXISTS | Теория 2 | |
| 2.4 | CTE (WITH) — общие табличные выражения | Теория 2 | |
| 2.5 | Рекурсивные CTE | Теория 2 | |
| 2.6 | UNION, INTERSECT, EXCEPT | Теория 2 | |
| 2.7 | CASE WHEN — условная логика | Теория 2 | |
| 2.8 | Оконные функции — ROW_NUMBER, RANK | Теория 3 | |
| 2.9 | Оконные функции — LAG, LEAD, FIRST_VALUE | Теория 3 | |
| 2.10 | Оконные функции — SUM/AVG OVER | Теория 3 | |
| 2.11 | PARTITION BY, ORDER BY в окнах | Теория 3 | |
| 2.12 | Frame specification (ROWS BETWEEN) | Теория 3 |
| # | Тема | Статус | Материал |
|---|---|---|---|
| 3.1 | Что такое индекс и зачем он нужен | Теория 3 | |
| 3.2 | B-Tree индексы — как работают | Теория 3 | |
| 3.3 | Составные индексы и порядок колонок | Теория 3 | |
| 3.4 | Покрывающие индексы (INCLUDE) | Теория 3 | |
| 3.5 | Частичные индексы (WHERE) | Теория 3 | |
| 3.6 | GIN, GiST, BRIN — специальные индексы | Теория 3 | |
| 3.7 | EXPLAIN — чтение плана запроса | Теория 3 | |
| 3.8 | EXPLAIN ANALYZE — реальное выполнение | Теория 3 | |
| 3.9 | Seq Scan vs Index Scan vs Index Only Scan | Теория 3 | |
| 3.10 | Nested Loop, Hash Join, Merge Join | Теория 3 | |
| 3.11 | Статистика и ANALYZE | Теория 3 | |
| 3.12 | Когда индекс не используется | Теория 3, Troubleshooting |
| # | Тема | Статус | Материал |
|---|---|---|---|
| 4.1 | Что такое транзакция, BEGIN/COMMIT/ROLLBACK | Теория 4 | |
| 4.2 | ACID — четыре свойства | Теория 4 | |
| 4.3 | Уровни изоляции — Read Committed | Теория 4 | |
| 4.4 | Уровни изоляции — Repeatable Read | Теория 4 | |
| 4.5 | Уровни изоляции — Serializable | Теория 4 | |
| 4.6 | Аномалии: dirty read, non-repeatable read, phantom | Теория 4 | |
| 4.7 | MVCC — концепция версий строк | Теория 4 | |
| 4.8 | xmin, xmax, snapshot — как работает видимость | Теория 4 | |
| 4.9 | Блокировки — FOR UPDATE, FOR SHARE | Теория 4 | |
| 4.10 | Deadlock — причины и решения | Теория 4, Troubleshooting | |
| 4.11 | SAVEPOINT — точки сохранения | Теория 4 |
| # | Тема | Статус | Материал |
|---|---|---|---|
| 5.1 | Архитектура: процессы и память | Теория 4 | |
| 5.2 | shared_buffers — кэш страниц | Настройка PostgreSQL | |
| 5.3 | WAL — журнал упреждающей записи | Теория 4 | |
| 5.4 | Checkpoint — синхронизация на диск | Теория 4 | |
| 5.5 | VACUUM — очистка мёртвых строк | Теория 4 | |
| 5.6 | Autovacuum — настройка | Настройка PostgreSQL | |
| 5.7 | Bloat — раздувание таблиц/индексов | Теория 4, Troubleshooting | |
| 5.8 | Transaction ID wraparound | Теория 4 | |
| 5.9 | TOAST — хранение больших значений | Теория 4 | |
| 5.10 | pg_stat_statements — анализ запросов | Настройка PostgreSQL |
| # | Тема | Статус | Материал |
|---|---|---|---|
| 6.1 | Партиционирование — концепция | Теория 4 | |
| 6.2 | Range, List, Hash партиционирование | Теория 4 | |
| 6.3 | Partition pruning | Теория 4 | |
| 6.4 | Streaming Replication — master/replica | Теория 4 | |
| 6.5 | Logical Replication | Теория 4 | |
| 6.6 | Connection pooling (PgBouncer) | Настройка PostgreSQL | |
| 6.7 | Read replicas для масштабирования | Теория 4 | |
| 6.8 | Failover и High Availability | Теория 4 |
| Навыки для | Статус |
|---|---|
| Junior SQL Developer | |
| Пишу SELECT/JOIN/GROUP BY без подсказок | |
| Понимаю разницу LEFT/INNER JOIN | |
| Знаю как работает NULL | |
| Умею создавать таблицы с ключами | |
| Понимаю нормализацию (1NF, 2NF, 3NF) | |
| Middle SQL Developer | |
| Использую CTE и оконные функции | |
| Понимаю EXPLAIN и могу оптимизировать запрос | |
| Знаю когда нужен индекс | |
| Понимаю уровни изоляции транзакций | |
| Могу спроектировать схему БД | |
| Senior SQL / DBA | |
| Понимаю MVCC на уровне xmin/xmax | |
| Настраиваю PostgreSQL под нагрузку | |
| Диагностирую bloat и проблемы производительности | |
| Понимаю WAL, checkpoint, VACUUM | |
| Умею настраивать репликацию | |
| Проектирую партиционирование | |
Файл | Содержание |
Теория 1 | Основы SQL, типы данных, DDL/DML |
Теория 2 | JOIN, агрегации, подзапросы, CTE |
Теория 3 | Оконные функции, индексы, EXPLAIN |
Теория 4 | Транзакции, MVCC, архитектура, паттерны |
Файл | Содержание |
Практическая БД (shop).sql | Готовая схема магазина с данными |
Примеры реальных схем БД | Социалка, мессенджер, бронирование, платежи |
Файл | Содержание |
Глоссарий терминов | A-Z термины SQL/PostgreSQL |
Troubleshooting Guide | Решение типичных проблем |
Настройка PostgreSQL | Конфигурация для разных сценариев |
Квизы для самопроверки | 15+ вопросов с ответами |
Неделя 1-2: Основы (Теория 1)
│
├── День 1-2: SELECT, WHERE, ORDER BY
├── День 3-4: NULL, типы данных
├── День 5-6: INSERT, UPDATE, DELETE
└── День 7: CREATE TABLE, ключи
│
Неделя 3-4: JOIN и агрегации (Теория 2)
│
├── День 1-2: INNER/LEFT JOIN
├── День 3-4: GROUP BY, HAVING
├── День 5-6: Подзапросы, CTE
└── День 7: Практика на shop DB
│
Неделя 5-6: Оконные функции и индексы (Теория 3)
│
├── День 1-3: ROW_NUMBER, RANK, LAG/LEAD
├── День 4-5: B-Tree, составные индексы
└── День 6-7: EXPLAIN ANALYZE
│
Неделя 7-8: Транзакции и архитектура (Теория 4)
│
├── День 1-2: ACID, уровни изоляции
├── День 3-4: MVCC глубоко
├── День 5-6: WAL, VACUUM, bloat
└── День 7: Настройка PostgreSQL
│
Неделя 9+: Практика и углубление
│
├── Решение задач из квизов
├── Проектирование своих схем
├── Оптимизация реальных запросов
└── Изучение партиционирования/репликации