Cách phổ biến để lưu thông tin 'ghi nợ' và 'tín dụng' là gì?


9

Tôi đang làm việc trên một hệ thống kế toán và đối với mỗi giao dịch tôi cần lưu nếu đây là ghi nợ hoặc tín dụng. Tôi có thể nghĩ về hai cách (cơ sở dữ liệu MySQL):

PHƯƠNG PHÁP 1

  • Số tiền (thập phân)
  • Loại (enum, ghi nợ / tín dụng)

PHƯƠNG PHÁP 2

  • Nợ (thập phân)
  • tín dụng

Trong thiết lập đầu tiên, tôi lưu loại giao dịch, nhưng theo cách thứ hai, tôi thay vì lưu số tiền trong cột ghi nợ hoặc tín dụng. Ưu điểm của phương pháp này là tôi có thể dễ dàng tổng hợp cả tổng nợ và tín dụng hơn so với phương pháp 1. Nhưng tôi tự hỏi liệu có cách nào phổ biến để làm điều này không?

Câu trả lời:


7

Phương pháp 1 của bạn là chính xác. Đây là cách tôi thực hiện trong một hệ thống kế toán. Mô hình này là từ "Sách tài nguyên mô hình dữ liệu". Cách bạn lưu trữ dữ liệu rất khác với cách thuật ngữ kế toán mô hình hóa phương pháp nhập kép. Tín dụng có thể có nghĩa tích cực hoặc tiêu cực tùy thuộc vào việc bạn đang làm việc trên một tài khoản tài sản hoặc nợ. Lược đồ này sẽ cho phép bạn duy trì dữ liệu cho dù bạn đang đăng loại tài khoản nào.

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

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

7

Một cách khác để làm điều này (không biết điều này có phổ biến hay không!):

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

Và sau đó trong transactiontypesbạn có:

select * from transactiontypes;

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

Và có thể nhiều hàng hơn.

Sau đó, tất cả số tiền trong transactionssẽ là số dương và tham gia transactiontypesnhân + bằng cách multiplierlấy số tiền "thực" (dương / âm).


Cảm ơn, nhưng điều này cũng hướng đến những ý tưởng tiêu cực / tích cực, trong khi chúng tôi thực sự cần phân biệt giữa ghi nợ / tín dụng
User402841

1
@user Tôi ngạc nhiên bởi nhận xét của bạn. Như tôi đã nêu trong câu trả lời, tất cả số tiền đều dương. Chỉ khi bạn chạy các truy vấn cụ thể cũng có tiêu cực. Nếu bạn không muốn phủ định, thì bạn không nên chạy các truy vấn cụ thể đó. Nếu bạn không thích transactiontypes.multipliercột thêm , bạn bỏ nó; nó không phải là cốt lõi của mô hình, vì vậy không có hại gì.
Matt Fenwick

4

Cách phổ biến nhất để làm điều đó là sử dụng số tiền dương cho các khoản nợ và số tiền âm cho các khoản tín dụng (hoặc theo cách khác, tùy thuộc vào việc số tiền của bạn thường được coi là tài sản hay nợ phải trả).

Điều này dễ hơn một trong các phương pháp của bạn khi tổng hợp tổng số vì bạn chỉ phải tính tổng trên một cột.


1
Cảm ơn nhưng đối với các hệ thống kế toán phức tạp, số "dương" và "âm" không thuận tiện. Tôi thực sự thích làm việc với các nhận dạng tín dụng và ghi nợ ...
User402841
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.