J'ai une base de données normalisée et j'ai besoin de produire fréquemment des rapports basés sur le Web qui impliquent des jointures entre plusieurs tables. Ces requêtes prennent trop de temps, j'aimerais donc que les résultats soient calculés afin de pouvoir charger les pages rapidement. Les tables que je résume sont fréquemment mises à jour, et j'ai besoin que le résumé reflète toutes les mises à jour effectuées jusqu'à présent.
Toutes les tables ont des clés primaires entières à incrémentation automatique, et j'ajoute presque toujours de nouvelles lignes et je peux m'arranger pour effacer les résultats calculés lorsqu'ils changent.
J'ai abordé un problème similaire où j'avais besoin d'un résumé d'une seule table en faisant en sorte d'itérer sur chaque ligne de la table, et de garder une trace de l'état de l'itérateur et de l'indice primaire le plus élevé (i.e. "highwater") vu. C'est bien pour une seule table, mais pour plusieurs tables, je finirais par garder une valeur highwater par table, et cela semble compliqué. Je pourrais aussi dénormaliser jusqu'à une seule table (avec des changements d'application assez importants), ce qui constitue un pas en arrière et ferait probablement passer la taille de ma base de données d'environ 5 Go à environ 20 Go.
(J'utilise sqlite3 pour le moment, mais MySQL est également une option).