Saya membuat perangkat lunak akuntansi. Saya perlu menegakkan pembukuan entri ganda. Saya memiliki masalah klasik satu baris per transaksi versus dua baris.
Mari kita ambil contoh dan lihat bagaimana penerapannya di kedua skenario.
Pertimbangkan akun Cash
dan akun Rent
. Ketika saya membayar sewa bulanan, saya mentransfer $ 100 dari Cash
akun saya ke Rent
akun saya .
Satu baris per Transaksi
Dalam sistem satu baris, transaksi tersebut akan disimpan sebagai:
transaksi
tx_id | posting_date
1 | 23/05/2015
catatan transaksi
id | tx_id | credit_account | debit_account | amount
1 | 1 | Cash | Rent | 100.00
Dua baris per Transaksi
Dalam sistem dua baris, saya harus mencerminkan catatan transaksi yang sama untuk membuat catatan yang berlawanan bahwa begitu saya jumlahkan keduanya, saya akan mendapatkan saldo nol.
transaksi
tx_id | posting_date
1 | 23/05/2015
catatan transaksi
id | tx_id | type | account | amount
1 | 1 | credit | Cash | 100.00
2 | 1 | debit | Rent | 100.00
Masalah
Pertama-tama saya ingin mencatat: alasan saya memiliki keduanya transactions
dan transaction_records
tabel (bukan satu tabel) adalah untuk dapat menangani transaksi split (kasus di mana saya mentransfer $ 100 dari Cash
akun ke dua atau lebih akun yang berbeda).
Awalnya saya mencoba menerapkan ini dengan satu baris per transaksi, tetapi sulit untuk menghitung saldo akun, dan untuk benar-benar mengambil data.
Saya condong ke skenario kedua; namun, ia juga memiliki beberapa masalah:
- Bagaimana cara memperbarui satu catatan? Dengan asumsi saya telah melakukan kesalahan dan bukannya mencatat $ 100 untuk sewa saya, saya telah mencatat $ 10. Saya sekarang memiliki 2
transaction_records
- satu untuk kredit dan satu untuk debit, keduanya dengan jumlah $ 10. - Sekarang saya melakukan rekonsiliasi saya dan saya ingin memperbaiki kesalahan ketik ini. Bagaimana saya memperbaikinya dalam database? Saya tidak tahu hubungan antara catatan, dan dalam hal pemisahan, satu transaksi dapat memiliki lebih dari 2 catatan. Satu-satunya solusi yang saya buat adalah dengan menambahkan beberapa
ref_id
untuk setiap pasangan rekaman yang secara unik akan mengidentifikasi catatan-catatan itu sebagai "sisi yang berlawanan satu sama lain" di dalam konteks spesifiktx_id
.
Pendekatan mana yang lebih baik / sederhana?
Untuk menyederhanakan pertanyaan saya: Saya ingin mewakili pergerakan dana dari akun A ke akun B. Dua skenario yang saya berikan adalah desain yang valid untuk menyimpan transaksi tersebut. Seperti yang saya tunjukkan, mereka berdua memiliki kontra & pro (pertama: lebih mudah untuk menyimpan, lebih sulit untuk mengambil; yang kedua sebaliknya).
Mereka mungkin memiliki pro / kontra lain yang tidak saya temukan saat ini, maka saya meminta pendapat dari orang yang lebih berpengalaman.