web-dev-qa-db-fra.com

Qu'est-ce qu'un moyen courant de sauver des informations de «débit» et de «crédit»?

Je travaille sur un système de comptabilité et, pour chaque transaction, je dois enregistrer s'il s'agit de débit ou de crédit. Je peux penser à deux manières (base de données MySQL):

Méthode 1

  • Montant (décimal)
  • Type (Enum, Débit/Crédit)

Méthode 2

  • Débit (décimal)
  • Crédit

Dans la première configuration, je sauvegarde le type de transaction, mais dans la deuxième manière, je préfère enregistrer les montants dans la colonne de débit ou de crédit. Les avantages de cette méthode sont que je peux plus facilement résumer les totaux de débit et de crédit que dans la méthode 1. Mais je me demande s'il y a un moyen courant de faire cela?

9
User402841

Votre méthode 1 est correcte. Voici comment j'ai mis en œuvre dans un système de comptabilité. Ce modèle provient de "le modèle de ressources de modèle de données". La manière dont vous stockez les données est très différente de la structure de la terminologie de la comptabilité la méthode de double entrée. Le crédit peut signifier positif ou négatif selon que vous travaillez sur un compte d'actif ou de responsabilité. Ce schéma vous permettra de persister les données, quel que soit le type de compte que vous postez.

+----+-----------------------+------------+    
| PK | TransactionID         | int        |
+----+-----------------------+------------+
|    | Description           | varchar    |
|    | Date                  | datetime   |
+----+---------------+--------------------+

+----+-----------------------+------------+
| PK | TransactionID         | int        |
| PK | TransactionSequenceID | smallint   |
+----+-----------------------+------------+
|    | Amount                | decimal    |
|    | CreditDebitFlag       | char(1)    |
+----+---------------+--------------------+
7
Chris

Une autre façon de le faire (aucune idée si cela est courant ou non!):

create table `transactions` (
  ... some columns ...
  amount decimal(10,2),
  ttype int,
  foreign key (ttype) references transactiontypes (id)
  ...
);

create table transactiontypes (
  id int primary key,
  description varchar(30),
  multiplier int
);

Et puis dans transactiontypes vous avez:

select * from transactiontypes;

+----+---------------+------------+
| id | description   | multiplier |
+----+---------------+------------+
|  1 | deposit       |          1 |
|  2 | withdrawal    |         -1 |
+----+---------------+------------+

Et éventuellement plus de lignes.

Ensuite, tous les montants en transactions seront positifs et une jointure à transactiontypes + multiplication par multiplier obtient le montant "réel" (positif/négatif).

7
Matt Fenwick

Le moyen le plus courant de le faire serait d'utiliser des quantités positives pour les débits et les montants négatifs pour les crédits (ou dans l'inverse, selon que vos montants soient généralement considérés comme des actifs ou des passifs).

C'est plus facile que l'une ou l'autre de vos méthodes lorsqu'il s'agit d'agréger un total, car vous n'avez qu'à résumer sur une colonne.

4
Joel Brown