# Выбор базы данных --- ## Decision Tree ```mermaid graph TD A[Какую БД?] --> B{Многопользовательская?} B -->|Нет / прототип| C[SQLite] B -->|Да| D{Нужен JSONB?} D -->|Да| E[PostgreSQL] D -->|Нет| F{Нужен full-text search?} F -->|Да| E F -->|Нет| G[SQLite / PostgreSQL] ``` --- ## Варианты ### SQLite | | | |---|---| | **Когда** | Прототип, dev, однопользовательское | | **Плюсы** | Не требует установки, встроенная, ноль конфигурации | | **Минусы** | Нет конкурентной записи, нет JSONB, нет ARRAY, нет полнотекстового поиска | | **Драйвер** | aiosqlite | ### PostgreSQL | | | |---|---| | **Когда** | Production, многопользовательское, аналитика | | **Плюсы** | ACID, JSONB, ARRAY, full-text search, масштабирование | | **Минусы** | Требует установки, настройки, памяти | | **Драйвер** | asyncpg | --- ## Рекомендация **SQLite для разработки, PostgreSQL для production.** Обе БД поддерживаются через SQLAlchemy с минимальными отличиями в моделях. ### Что нужно для портабельности ```python # Вместо PostgreSQL-specific типов используем универсальные: UUID → String(36) JSONB → JSON ARRAY → JSON ``` --- ## [ASK] - Какая БД нужна на старте? (рекомендация: SQLite) - Когда переходить на PostgreSQL? (перед production) - Нужна ли поддержка обеих БД одновременно? (желательно — unit-тесты на SQLite быстрее)