Существует таблица 'team_sector' со следующими полями: Id, team_id, sect_id, size, level
Он содержит несколько записей для каждой сущности 'team' (на которую ссылается поле 'team_id'). Каждая запись представляет сектор стадиона команды (всего 8 секторов).
Теперь необходимо реализовать несколько поисков:
- от общего размера стадиона (SUM (размер));
- лучшее качество (СУММА (уровень) / СЧЕТ (*)).
Я мог бы создать запрос примерно так:
SELECT TS.team_id, SUM(TS.size) as OverallSize, SUM(TS.Level)/COUNT(TS.Id) AS QualityLevel
FROM team_sector
GROUP BY team_id
ORDER BY OverallSize DESC / ORDER BY QualityLevel DESC
Но меня беспокоит то, что расчет для каждой команды будет выполняться каждый раз при выполнении запроса. Это не слишком большие накладные расходы (по крайней мере сейчас), но я бы хотел избежать проблем с производительностью позже.
Здесь я вижу 2 варианта.
Первое - создать 2 дополнительных поля в таблице «команда» (например) и сохранить там поля «Общий размер» и «Уровень качества». Если информация об изменении таблицы 'секторов' изменилась, обновите и эти таблицы (вероятно, было бы хорошо сделать это с помощью триггеров, поскольку таблица секторов меняется не слишком часто).
Второй вариант - создать представление, которое предоставит необходимые данные.
Второй вариант мне кажется намного проще, но у меня нет большого опыта / знаний по работе с представлениями.
Q1: Каков наилучший вариант с вашей точки зрения и почему? Возможно, вы могли бы предложить другие варианты?
Q2: Могу ли я создать представление таким образом, чтобы оно выполняло вычисления редко (хотя бы раз в день)? Если да - как?
Q3: Разумно ли использовать триггеры для этой цели (1-й вариант).
P.S. Используется MySql 5.1, общее количество команд составляет около 1-2 тысяч, общее количество записей в таблице секторов - всего 6-8 тысяч. Я понимаю, что эти цифры довольно малы, но я хотел бы применить здесь лучшие практики.