У меня есть нормализованная база данных, и мне нужно часто создавать веб-отчеты, которые включают в себя объединения нескольких таблиц. Эти запросы занимают слишком много времени, поэтому я бы хотел, чтобы результаты вычислялись так, чтобы я мог быстро загружать страницы. Я часто обновляю таблицы, которые я обобщаю, и мне нужно, чтобы сводка отражала все обновления.
Все таблицы имеют автоинкрементные первичные целочисленные ключи, и я почти всегда добавляю новые строки и могу организовать очистку вычисленных результатов при их изменении.
Я подошел к аналогичной проблеме, когда мне потребовалась сводка по одной таблице, организовав итерацию по каждой строке в таблице и отслеживая состояние итератора и наивысшую начальную остроту (то есть "highwater"), которую видели. Это хорошо для одной таблицы, но для нескольких таблиц я бы в итоге оставил одно значение highwater на таблицу, и это кажется сложным. В качестве альтернативы я мог бы денормализовать до одной таблицы (с довольно обширными изменениями приложения), которая чувствует шаг назад и, вероятно, изменила бы размер моей базы данных с примерно 5 ГБ до примерно 20 ГБ.
(на данный момент я использую sqlite3, но MySQL также является опцией).