Являются ли агрегатные функции антипаттернами

«Являются ли агрегатные функции антипаттернами» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, агрегатные функции сами по себе не являются антипаттернами. Они полезны для выполнения операций над наборами данных (суммирование, подсчёт, среднее и т.д.). Однако их неоптимальное использование может привести к проблемам:

  1. Производительность: агрегация больших таблиц без индексов может быть медленной.
  2. Читаемость: сложные агрегации в коде могут ухудшить понимание логики.

Пример правильного использования в SQL-запросе:

SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;

В Go можно использовать агрегацию в коде, если это упрощает логику:

func averageAge(users []User) float64 {
    sum := 0
    for _, u := range users {
        sum += u.Age
    }
    return float64(sum) / float64(len(users))
}

Ключевое правило: используйте агрегатные функции осознанно, когда они решают задачу оптимально.