J'ai une base de données qui contient un historique des ventes de produits. Par exemple, la table suivante
CREATE TABLE SalesHistoryTable (
OrderID, // Order Number Unique to all orders
ProductID, // Product ID can be used as a Key to look up product info in another table
Price, // Price of the product per unit at the time of the order
Quantity, // quantity of the product for the order
Total, // total cost of the order for the product. (Price * Quantity)
Date, // Date of the order
StoreID, // The store that created the Order
PRIMARY KEY(OrderID));
Le tableau comportera à terme des millions de transactions. À partir de là, des profils peuvent être créés pour les produits dans différentes régions géographiques (sur la base du numéro d'identification du magasin). La création de ces profils peut prendre beaucoup de temps en tant que requête de base de données. En voici un exemple.
SELECT ProductID, StoreID,
SUM(Total) AS Total,
SUM(Quantity) QTY,
SUM(Total)/SUM(Quantity) AS AvgPrice
FROM SalesHistoryTable
GROUP BY ProductID, StoreID;
La requête ci-dessus peut être utilisée pour obtenir des informations sur les produits d'un magasin particulier. Il serait alors possible de déterminer quel magasin a vendu le plus grand nombre de produits, a gagné le plus d'argent et, en moyenne, vend le plus ou le moins cher. Il serait très coûteux de l'utiliser comme une requête normale exécutée à tout moment. Quelles sont les décisions de conception à prendre pour que ces types de requêtes s'exécutent plus rapidement, en supposant que la taille du stockage ne soit pas un problème. Par exemple, je pourrais créer une autre table avec des informations dupliquées. ID du magasin (clé), ID du produit, coût total, quantité, prix moyen. Et fournir un déclencheur de sorte que lorsqu'une nouvelle commande est reçue, l'entrée pour ce magasin est mise à jour dans une nouvelle table. Le coût de la mise à jour est pratiquement nul.
Quels sont les éléments à prendre en compte dans le scénario ci-dessus ?