Используя модель Дамира в качестве примера. Я бы изменил порядок MovieID и CalID ... вы захотите запросить другой CalendarID для одного и того же хода больше, чем наоборот.
Его таблица MovieVotes уже агрегирована по дням. Добавление 7 значений вместе для итоговых значений за последние недели НЕ является проблемой для базы данных и делает таблицу MovieRating как агрегирование ненужным. Если бы у MovieVotes был столбец datetime для хранения точного времени каждого голосования, тогда было бы необходимо использовать MovieRating в качестве ежедневной агрегации ... нет необходимости просматривать тысячи записей каждый раз, когда вам нужно показать общее количество. Вот где сияет преагрегирующий.
Теперь, если вы кластеризуете данные на этом ПК MovieID, DateID у вас золотой. Чтобы вычислить любой диапазон дат для любого фильма, ваша БД будет обходить b-дерево, чтобы добраться до этого идентификатора фильма, а затем обойти оставшуюся часть дерева, чтобы добраться до начальной даты, теперь вы находитесь в листовом блоке с первой датой и есть все шансы, что ВСЕ ваши даты в любом случае находятся в этом блоке. Таким образом, вы будете знать, что ввод-вывод сложен для суммирования за 7 дней, просто немного больше ЦП для чтения строк из блока, а затем суммирования значений.