เมื่อออกแบบฐานข้อมูลสำหรับระบบการเงิน ต้องการเก็บข้อมูลบัญชีธนาคาร และการโอนเงินระหว่างบัญชี (Transaction) ปัญหาหลักที่ต้องระวังในการออกแบบตาราง Transaction คืออะไร
กไม่จำเป็นต้องใช้ Foreign Key เพราะการโอนเงินเป็นข้อมูลชั่วคราว
ขควรสร้างสองตาราง Transaction แยกกัน หนึ่งสำหรับการหักเงิน และอีกหนึ่งสำหรับการเพิ่มเงิน
คต้องเก็บทั้ง FromAccountID และ ToAccountID เป็น Foreign Key อ้างอิงตาราง Account เดียวกัน และต้องใช้ Database Transaction เพื่อความสมบูรณ์
งควรเก็บชื่อบัญชีต้นทางและปลายทางแทน ID เพื่อให้อ่านง่าย
เฉลยอธิบาย
ในระบบการเงิน ตาราง Transaction ต้องมีทั้ง FromAccountID และ ToAccountID ที่เป็น Foreign Key อ้างอิงตาราง Account เดียวกัน (ซึ่งเป็น Self-Reference FK) นอกจากนี้ต้องใช้ Database Transaction (ACID) เพื่อให้แน่ใจว่าการหักเงินและการเพิ่มเงินเกิดขึ้นพร้อมกัน ไม่มีการสูญเสียข้อมูล ตัวเลือก B ละเมิด Normalization ตัวเลือก C ทำให้เกิด Data Redundancy และจัดการยาก ตัวเลือก D ละเมิด Referential Integrity