Ответ
При разработке архитектуры БД в Go я придерживаюсь подхода Domain-Driven Design (DDD) с акцентом на:
- Анализ требований – выделяю сущности, их связи и бизнес-правила
- Нормализация – минимум до 3NF, но иногда допускаю денормализацию для производительности
- Миграции – использую инструменты вроде Goose или встроенный migrate пакет
Пример структуры для сервиса блога:
type Post struct {
ID uuid.UUID `db:"id"`
Title string `db:"title"`
Content string `db:"content"`
AuthorID uuid.UUID `db:"author_id"`
CreatedAt time.Time `db:"created_at"`
}
type Comment struct {
ID uuid.UUID `db:"id"`
PostID uuid.UUID `db:"post_id"`
AuthorID uuid.UUID `db:"author_id"`
Text string `db:"text"`
CreatedAt time.Time `db:"created_at"`
}
Ключевые принципы:
- Четкие границы агрегатов
- Индексы для частых запросов
- Подготовка к шардингу с первых дней