database
Работа с БД: схемы, миграции (Alembic/Prisma), SQL/ORM, индексы, нормализация, выбор СУБД
SKILL.mdskills/database/SKILL.md
GitHubDatabase
Гайд по проектированию и работе с базами данных.
Выбор СУБД
| Сценарий | СУБД |
|---|---|
| Реляционные данные, транзакции | PostgreSQL (рекомендуется) |
| Простая встраиваемая | SQLite (dev/малые проекты) |
| Кэш/очереди/счётчики | Redis |
| Документы/гибкая схема | MongoDB |
| Поиск | Elasticsearch / встроенный полнотекстовый |
Чек-лист
Схема
- Нормализуй до 3НФ (без избыточности), денормализуй осознанно
- Первичные/внешние ключи, ограничения (
UNIQUE,NOT NULL,CHECK) - Индексы под реальные запросы (
WHERE,JOIN, сортировки) - Не индексируй всё подряд — лишние индексы замедляют запись
- Типы данных оптимальные (integer/timestamp/uuid/text)
Миграции
- Версионируй схему (Alembic для SQLAlchemy, Prisma migrate)
- Миграции обратимы (up + down)
- Генерируй миграции, не правь прод-схему вручную
- Проверяй миграции на staging перед продом
Запросы
- Параметризованные запросы (защита от SQL-инъекций)
-
EXPLAIN ANALYZEдля тяжёлых запросов - Избегай N+1 (eager loading / joins)
- Пагинация через
LIMIT/OFFSETили cursor (keyset) - Транзакции для связанных изменений
Безопасность
- Минимальные привилегии для пользователя БД
- Пароль/доступ — через env/secret-manager
- Бэкапы и стратегия восстановления
- Не храни пароли в открытом виде (хэш)
Правила
- Схема проектируется под запросы, а не «на будущее».
- Миграции — часть кода, версионируются в git.
- Индекс — осознанное решение, верифицируй планом запроса.
- Всегда параметризуй запросы.