ฉันกำลังสร้างซอฟต์แวร์บัญชี ฉันต้องบังคับใช้การบันทึกบัญชีสองครั้ง ฉันมีปัญหาคลาสสิกของหนึ่งแถวต่อการทำธุรกรรมเทียบกับสองแถว
ลองมาเป็นตัวอย่างและดูว่าจะมีการนำไปใช้อย่างไรในทั้งสองสถานการณ์
พิจารณาบัญชีและบัญชีCash
Rent
เมื่อฉันจ่ายค่าเช่ารายเดือนฉันจะโอน $ 100 จากCash
บัญชีของฉันไปยังRent
บัญชีของฉัน
หนึ่งแถวต่อธุรกรรม
ในระบบแถวเดียวธุรกรรมดังกล่าวจะถูกจัดเก็บเป็น:
การทำธุรกรรม
tx_id | posting_date
1 | 23/05/2015
transaction_records
id | tx_id | credit_account | debit_account | amount
1 | 1 | Cash | Rent | 100.00
สองแถวต่อธุรกรรม
ในระบบสองแถวฉันจะต้องทำรายการบันทึกเดียวกันเพื่อสร้างระเบียนตรงกันข้ามที่เมื่อฉันสรุปผลรวมทั้งสองฉันจะได้ยอดเงินเป็นศูนย์
การทำธุรกรรม
tx_id | posting_date
1 | 23/05/2015
transaction_records
id | tx_id | type | account | amount
1 | 1 | credit | Cash | 100.00
2 | 1 | debit | Rent | 100.00
ปัญหา
ก่อนอื่นฉันต้องการทราบ: เหตุผลที่ฉันมีทั้งสองtransactions
และtransaction_records
ตาราง (แทนที่จะเป็นหนึ่งตาราง) คือเพื่อให้สามารถจัดการธุรกรรมแยก (กรณีที่ฉันโอนเงิน $ 100 จากCash
บัญชีไปยังบัญชีสองบัญชีหรือมากกว่า)
ตอนแรกฉันพยายามที่จะใช้สิ่งนี้กับหนึ่งแถวต่อการทำธุรกรรม แต่มันเจ็บปวดในการคำนวณยอดเงินในบัญชีและการดึงข้อมูลจริง
ฉันเอนตัวไปยังสถานการณ์ที่สอง อย่างไรก็ตามมีปัญหาบางประการเช่น:
- ฉันจะอัปเดตระเบียนเดียวได้อย่างไร สมมติว่าฉันทำผิดและแทนที่จะบันทึก 100 ดอลลาร์สำหรับค่าเช่าของฉันฉันได้บันทึก $ 10 ตอนนี้ฉันมี 2
transaction_records
- หนึ่งสำหรับเครดิตและอีกหนึ่งสำหรับเดบิตทั้งสองมีจำนวน $ 10 - ตอนนี้ฉันจะคืนดีและฉันต้องการแก้ไขพิมพ์ผิดนี้ ฉันจะแก้ไขปัญหานี้ในฐานข้อมูลได้อย่างไร ฉันไม่ทราบการเชื่อมต่อระหว่างบันทึกและในกรณีที่มีการแยกธุรกรรมหนึ่งรายการอาจมีมากกว่า 2 รายการ ทางออกเดียวที่ฉันมาด้วยคือการเพิ่มบาง
ref_id
สำหรับแต่ละคู่ระเบียนที่ไม่ซ้ำกันจะระบุระเบียนเหล่านั้นเป็น "ด้านตรงข้ามของกันและกัน"tx_id
ในบริบทของการที่เฉพาะเจาะจงได้
วิธีใดดีกว่า / ง่ายกว่า?
หากต้องการทำให้คำถามของฉันง่ายขึ้น: ฉันต้องการแสดงการเคลื่อนไหวของเงินทุนจากบัญชี A ไปยังบัญชี B สถานการณ์สมมติทั้งสองที่ฉันได้รับนั้นเป็นทั้งการออกแบบที่ถูกต้องในการจัดเก็บธุรกรรมดังกล่าว ขณะที่ฉันยังชี้ให้เห็นว่าพวกเขาทั้งสองมีข้อเสีย & ข้อดี (อันแรก: ง่ายกว่าที่จะบันทึกและยากที่จะเรียกคืน; อันที่สองตรงกันข้าม)
พวกเขาอาจมีข้อดี / ข้อเสียอื่น ๆ ที่ฉันไม่ได้เห็นในตอนนี้ดังนั้นฉันจึงขอความเห็นจากคนที่มีประสบการณ์มากกว่า