database

Работа с БД: схемы, миграции (Alembic/Prisma), SQL/ORM, индексы, нормализация, выбор СУБД

SKILL.md

GitHub

Database

Гайд по проектированию и работе с базами данных.

Выбор СУБД

Сценарий СУБД
Реляционные данные, транзакции 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
  • Бэкапы и стратегия восстановления
  • Не храни пароли в открытом виде (хэш)

Правила

  1. Схема проектируется под запросы, а не «на будущее».
  2. Миграции — часть кода, версионируются в git.
  3. Индекс — осознанное решение, верифицируй планом запроса.
  4. Всегда параметризуй запросы.