J'ai un accord et une table transaction, où la table d'opération a une colonne agrégée, « TotalSales », ce qui est tout simplement un nombre de transactions par transaction.Mise à jour de la colonne d'agrégat Dans l'isolement Question
Avec la commande suivante, est-il jamais une chance que le nombre de lignes de transactions et le nombre total des ventes ne seraient pas synchronisés (non compris la suppression de lignes)? Le niveau d'isolation par défaut fonctionne-t-il pour cela? Nous avons de nombreux utilisateurs effectuant des achats potentiellement en même temps, alors j'essaie de trouver la meilleure façon de gérer cela.
BEGIN TRANSACTION
INSERT INTO [transaction] ...
UPDATE deal
SET TotalSales = (select count(*) from [transaction] where dealid = @dealId)
WHERE dealId = @dealId
COMMIT TRANSACTION
L'une des raisons qui me conduisent vers une colonne agrégée est pour les vues historiques des transactions, montrant les ventes totales. Les offres ne durent qu'un jour, donc l'exécution d'un agrégat pour toutes les offres pour une période donnée, par exemple, semble un peu inutile. – Marco
@Marco: Pourquoi pensez-vous que les fonctions agrégées sont un gaspillage? –
Je pense que pour des raisons de performance, l'exécution d'un agrégat sur une table transactionnelle avec des milliers d'enregistrements (regardant les données historiques) semble être un peu dénormalisation peut être nécessaire. Peut-être que je fais un peu * pré optimisation * ici. Quelles sont vos pensées sur la performance pour ce scénario. Fondamentalement, la page d'accueil doit toujours montrer le total des ventes pour l'affaire et une page d'historique montrant toutes les offres précédentes et les ventes totales. – Marco