J'ai un problème avec la bonne solution SQL.
Situation actuelle : Ma base de données contient une table avec des transactions bancaires (crédit et débit).
- Les transactions de crédit sont signées comme un montant positif (+), et
- les transactions de débit comme un montant négatif (-).
L'application qui utilise la base de données est une application web multi-utilisateurs, donc la table des transactions contient de nombreuses lignes, qui font référence à différents utilisateurs. Certaines actions de la webapp doivent vérifier le solde réel de l'utilisateur connecté, en utilisant la table des transactions et en enregistrant la transaction de débit (prix de l'action).
Je pense à l'architecture de ce mécanisme et j'ai quelques questions :
-
Est-ce une bonne idée de calculer le solde comme une SOMME des crédits et des débits des transactions à chaque demande de l'utilisateur ? Je sais que cela peut être inefficace pour la base de données. Peut-être devrais-je sauvegarder un instantané quelque part ?
-
Comment assurer la cohésion des données lorsqu'un utilisateur vérifie le ""solde"" en tant que SOMME des transactions de crédit/débit, et qu'un autre utilisateur enregistre en même temps la transaction de débit (parce qu'il/elle a été plus rapide) ? Je pense à un verrou pessimiste mais qu'est-ce que je devrais verrouiller ? Je sais que le verrouillage avec agrégation (SUM) peut être impossible sur Postgresql (base de données que j'utilise)."
Désolé pour mon anglais, j'espère que mon problème est compréhensible :)