Was ist ein üblicher Weg, um Debit- und Kreditinformationen zu speichern?

9

Ich arbeite an einem Buchhaltungssystem und muss für jede Transaktion speichern, wenn es sich entweder um Lastschrift oder Gutschrift handelt. Ich kann mir zwei Möglichkeiten vorstellen (MySQL-Datenbank):

METHODE 1

  • Betrag (dezimal)
  • Typ (Aufzählung, Lastschrift / Gutschrift)

Methode 2

  • Lastschrift (dezimal)
  • Anerkennung

Im ersten Setup speichere ich die Art der Transaktion, aber im zweiten Fall speichere ich lieber die Beträge in der Spalte Lastschrift oder Gutschrift. Die Vorteile dieser Methode sind, dass ich sowohl Debit- als auch Kreditsummen leichter summieren kann als in Methode 1. Aber ich frage mich, ob es einen gemeinsamen Weg gibt, dies zu tun?

User402841
quelle

Antworten:

7

Ihre Methode 1 ist korrekt. So habe ich in einem Buchhaltungssystem implementiert. Dieses Modell stammt aus "The Data Model Resource Book". Die Art und Weise, wie Sie die Daten speichern, unterscheidet sich stark von der Art und Weise, wie die Buchhaltungsterminologie die Methode der doppelten Eingabe modelliert. Kredit kann positiv oder negativ sein, je nachdem, ob Sie auf einem Aktiv- oder Passivkonto arbeiten. Mit diesem Schema können Sie die Daten unabhängig von der Art des Kontos, auf das Sie buchen, beibehalten.

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

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

Ein anderer Weg, dies zu tun (keine Ahnung, ob dies üblich ist oder nicht!):

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
);

Und dann transactiontypeshaben Sie:

select * from transactiontypes;

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

Und möglicherweise mehr Zeilen.

Dann sind alle Beträge in transactionspositiv, und eine Verknüpfung mit transactiontypes+ Multiplikation durch multiplierergibt den "realen" (positiven / negativen) Betrag.

Matt Fenwick
quelle
Vielen Dank, aber dies geht auch in Richtung negativer / positiver Ideen, während wir wirklich zwischen Lastschrift / Gutschrift unterscheiden müssen
User402841
1
@user Ich bin überrascht von Ihrem Kommentar. Wie ich in der Antwort angegeben habe, sind alle Beträge positiv. Nur wenn Sie bestimmte Abfragen ausführen, gibt es auch Negative. Wenn Sie keine Negative möchten, führen Sie diese speziellen Abfragen einfach nicht aus. Wenn Ihnen die zusätzliche transactiontypes.multiplierSpalte nicht gefällt , lassen Sie sie fallen. Es ist nicht der Kern des Modells, also kein Schaden angerichtet.
Matt Fenwick
4

Am häufigsten werden positive Beträge für Belastungen und negative Beträge für Gutschriften verwendet (oder umgekehrt, je nachdem, ob Ihre Beträge im Allgemeinen als Vermögenswerte oder Verbindlichkeiten betrachtet werden).

Dies ist einfacher als jede Ihrer Methoden, wenn es darum geht, eine Summe zu aggregieren, da Sie nur über eine Spalte summieren müssen.

Joel Brown
quelle
1
Vielen Dank, aber für komplexe Buchhaltungssysteme sind "positive" und "negative" Zahlen nicht bequem. Ich arbeite wirklich lieber mit Debit- und
Kreditidentifikationen