27 votes

Conception de la base de données: calcul du solde du compte

Comment puis-je concevoir la base de données pour calculer le solde du compte?

1) Actuellement, je calculer le solde du compte de la table de transactions Dans ma transaction table, j'ai "description" et "montant", etc..

Je puis ajouter tous "montant" des valeurs et qui travaillerait à l'utilisateur le solde de son compte.


J'ai montré ça à mon ami et il dit que c'est pas une bonne solution, quand ma base de données augmente sa va ralentir???? Il a dit que je devrais créer des tableau pour stocker le calcul de solde de compte. Si fait, je vais avoir à maintenir deux tables, et de ses risqué, le solde du compte de la table pourrait sortir de la synchronisation.

Toute suggestion?

EDIT: OPTION 2: dois-je ajouter une colonne supplémentaire pour mes tables de transactions "Équilibre". maintenant, je n'ai pas besoin de passer par de nombreuses lignes de données pour effectuer mes calculs.

Exemple Jean achète à crédit de 100$, il a de la dette de 60$, il ajoute ensuite 200 $de crédit.

Montant De 100$, Solde De 100$.

Montant De 60$, Solde De 40$.

Montant De 200$, Solde De 240$.

29voto

smirkingman Points 3117

Un vieux problème qui n'a jamais été élégamment résolu.

Tous les packages bancaires, j'ai travaillé avec le solde du compte de l'entité. Calcul à la volée à partir de l'histoire du mouvement est impensable.

Le droit chemin est:

  • Le mouvement de la table a une ouverture le solde de transaction pour chaque compte. Vous aurez besoin dans quelques année, quand vous besoin de déplacer les anciens mouvements de la mouvement actif de la table pour l'histoire table.
  • L'entité compte a un solde champ
  • Il y a un déclencheur sur le mouvement le tableau qui met à jour le compte soldes pour la crédités et débités des comptes. Évidemment, il a l'engagement de contrôle. Si vous ne pouvez pas avoir un déclencheur, alors il doit y avoir un unique module qui enregistre les mouvements sous le contrôle des engagements
  • Vous avez un "filet de sécurité" programme vous peut s'exécuter en mode hors connexion, ce qui re-calcule tous les soldes et l'affiche (et éventuellement corrige) erronée soldes. Ceci est très utile pour les tests.

Certains systèmes de stocker la totalité des mouvements de nombres positifs, et d'exprimer le crédit/débit par inversion de la de/vers les champs ou avec un drapeau. Personnellement, je préfère un domaine du crédit, une carte de débit champ et signé montant, cela fait des reprises beaucoup plus facile à suivre.

Notez que ces méthodes s'applique à la fois à l'encaisse et des valeurs mobilières.

Les opérations sur titres peuvent être beaucoup plus délicat, en particulier pour les actions de l'entreprise, vous aurez besoin de prendre en charge une seule transaction qui met à jour un ou plusieurs acheteur et le vendeur, les soldes de trésorerie, la sécurité de leur position de soldes et, éventuellement, du courtier ou de dépôt.

3voto

Marcelo Cantos Points 91211

Vous devez conserver le solde du compte courant et de le maintenir à jour en tout temps. La table de transactions est juste un enregistrement de ce qui s'est passé dans le passé et ne doit pas être utilisé à une fréquence élevée pour extraire la balance courante. Tenez compte du fait que les requêtes ne veulent pas seulement les soldes, ils veulent de filtre, de tri et de groupe par eux, etc. Les performances de la sommation de toutes les transactions que vous avez créées au moyen de requêtes complexes serait d'anéantir même une base de données de taille modeste.

Toutes les mises à jour de cette paire de tables doivent être dans une transaction et doit s'assurer que tout reste dans la synchro (et le compte jamais overdraws-delà de ses limites) ou la transaction est annulée. Comme mesure supplémentaire, vous pouvez exécuter l'outil de vérification des requêtes vérifier périodiquement cette.

2voto

Une solution commune à ce problème est de maintenir une (dis) mensuel de la solde d'ouverture dans un schéma de capture instantanée. Le calcul de la balance courante peut être fait par l'ajout des données de transaction pour le mois le mois le solde d'ouverture. Cette approche est souvent prise en comptes des paquets, en particulier lorsque vous pourriez avoir de la conversion des devises et de réévaluations.

Si vous avez des problèmes avec le volume de données que vous pouvez archiver hors les anciens équilibres.

Aussi, les soldes peuvent être utiles pour rendre compte si vous ne disposez pas d'un externe dédié entrepôt de données ou de rapports de gestion sur le système.

0voto

iDevlop Points 9770

Votre ami a tort et vous avez raison, et je vous conseillerais de ne pas changer les choses maintenant.
Si votre base de données devient lente à cause de cela, et après avoir vérifié tout le reste (indexation appropriée), une dénormalisation peut être utile.
Vous pouvez ensuite placer un champ BalanceAtStartOfYear dans le tableau Comptes et résumer uniquement les enregistrements de cette année (ou toute approche similaire).
Mais je ne recommanderais certainement pas cette approche dès le départ.

0voto

AlexKuznetsov Points 9555

Bien sûr, vous devez stocker votre solde actuel avec chaque ligne, sinon il est trop lent. Pour simplifier le développement, vous pouvez utiliser des contraintes, de sorte que vous n'ayez pas besoin de déclencheurs et de contrôles périodiques de l'intégrité des données. Je l'ai décrit ici Dénormalisation pour appliquer les règles métier: Exécution des totaux

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X