หมวดหมู่: Financial Systems

หลักการบันทึกบัญชีคู่ (Double-Entry Bookkeeping – การลงบัญชีเดบิต Debit และเครดิต Credit)หลักการบันทึกบัญชีคู่ (Double-Entry Bookkeeping – การลงบัญชีเดบิต Debit และเครดิต Credit)

“>

ในฐานะ System Architect ที่ต้องออกแบบระบบที่จัดการข้อมูลทางการเงิน ความถูกต้องแม่นยำของข้อมูล (Data Integrity) คือหัวใจสำคัญที่สุด ระบบบัญชีที่เชื่อถือได้จะต้องไม่เพียงแต่สะท้อนภาพความเป็นจริงทางเศรษฐกิจเท่านั้น แต่ยังต้องสามารถรับประกันความสมดุลของทุกรายการได้อย่างสมบูรณ์

“>

สำหรับนักพัฒนาระบบและสถาปนิกข้อมูล การทำความเข้าใจหลักการบันทึกบัญชีคู่ (Double-Entry Bookkeeping) จึงเป็นรากฐานทางตรรกะที่สำคัญ หลักการนี้คือกลไกที่รับประกันว่าทุกรายการค้าจะต้องส่งผลกระทบต่อบัญชีอย่างน้อยสองบัญชีเสมอ โดยยอดรวมของเดบิต (Debit) และเครดิต (Credit) จะต้องเท่ากันเสมอ (Debit = Credit)

💡 Double-Entry: หลักการความสมดุลทางข้อมูล (Data Balance)

“>

แก่นแท้ของระบบบัญชีคือสมการบัญชี: สินทรัพย์ (Assets) = หนี้สิน (Liabilities) + ส่วนของผู้ถือหุ้น (Equity) หลักการบัญชีคู่ระบุว่า ทุกรายการจะต้องมีการบันทึกที่เพิ่มขึ้นในด้านหนึ่ง (Debit) และลดลงในอีกด้านหนึ่ง (Credit) หรือเพิ่มขึ้นในสองด้านที่แตกต่างกัน การบังคับใช้กฎนี้ในระดับฐานข้อมูลจึงเป็นสิ่งสำคัญที่สุดในการรักษาความสมบูรณ์ของข้อมูล (Data Integrity) ในระดับ Transaction

⚙️ การจำลอง Double-Entry ด้วย PostgreSQL

“>

ในการจำลองระบบบัญชีคู่ด้วย PostgreSQL เราต้องออกแบบโครงสร้างข้อมูลที่บังคับให้ยอดรวมของรายการเดบิตและเครดิตในแต่ละธุรกรรม (Transaction) ต้องเป็นศูนย์เสมอ เราจะใช้ตารางหลัก transactions และตารางย่อย transaction_details เพื่อเก็บรายละเอียดการบันทึก

SQL

-- 1. สร้างตารางบัญชี (Accounts) เพื่อกำหนดประเภทบัญชี<br>CREATE TABLE accounts (<code><br>    account_id SERIAL PRIMARY KEY,<br>    account_name VARCHAR(100) NOT NULL, -- เช่น Cash, Accounts Payable<br>    account_type VARCHAR(50) NOT NULL -- Asset, Liability, Equity<br>);<br><br>-- 2. สร้างตารางธุรกรรม (Transactions) เพื่อเก็บรายการหลัก<br>CREATE TABLE transactions (<code><br>    transaction_id SERIAL PRIMARY KEY,<br>    transaction_date DATE NOT NULL,<br>    description VARCHAR(255) NOT NULL<br>);<br><br>-- 3. สร้างตารางรายละเอียด (Transaction_Details) เพื่อเก็บ Debit/Credit<br>CREATE TABLE transaction_details (<code><br>    detail_id SERIAL PRIMARY KEY,<br>    transaction_id INT REFERENCES transactions(transaction_id),<br>    account_id INT REFERENCES accounts(account_id),<br>    amount NUMERIC(15, 2) NOT NULL, -- จำนวนเงิน<br>    debit BOOLEAN NOT NULL -- TRUE = Debit, FALSE = Credit<br>);<br><br>-- ตัวอย่างการบันทึก: การซื้อสินค้า (Debit: Inventory, Credit: Cash)<br>INSERT INTO transactions (transaction_date, description) VALUES ('2024-06-10', 'Purchase of supplies');<br>-- สมมติว่า Account ID 1 คือ Inventory และ 2 คือ Cash<br>INSERT INTO transaction_details (transaction_id, account_id, amount, debit) VALUES (1, 1, 500.00, TRUE); -- Debit Inventory<br>INSERT INTO transaction_details (transaction_id, account_id, amount, debit) VALUES (1, 2, 500.00, FALSE); -- Credit Cash<br>-- การตรวจสอบความสมดุล: ต้องรวมกันได้ 0.00<br>-- SELECT SUM(CASE WHEN debit = TRUE THEN amount ELSE -amount END) FROM transaction_details WHERE transaction_id = 1;<br>
“>

การออกแบบนี้ช่วยให้เราสามารถใช้ Constraint หรือ Triggers ใน PostgreSQL เพื่อตรวจสอบได้ว่าสำหรับทุก transaction_id ยอดรวมของ amount ที่ถูก Debit และ Credit จะต้องเท่ากับศูนย์เสมอ การบังคับใช้กฎทางธุรกิจนี้ในระดับฐานข้อมูล (Database Level) คือการรับประกันความสมบูรณ์ของข้อมูลที่แข็งแกร่งที่สุด

✅ บทสรุป: ความสำคัญต่อการออกแบบระบบ

“>

การเข้าใจหลักการ Double-Entry Bookkeeping ไม่ได้เป็นเพียงความรู้ทางบัญชี แต่คือการทำความเข้าใจหลักการทางตรรกะ (Logical Principle) ที่สามารถนำไปจำลองเป็นโครงสร้างข้อมูลที่แข็งแกร่งใน PostgreSQL ได้ การออกแบบระบบที่ยึดหลักการนี้ตั้งแต่ต้น จะช่วยลดความเสี่ยงของความผิดพลาดทางข้อมูล (Data Inconsistency) และสร้างระบบบัญชีที่เชื่อถือได้ในระดับ Enterprise Architecture