ในระหว่างการทำธุรกรรม (Transaction) การโอนเงินจากบัญชีหนึ่งไปยังบัญชีอื่น หากเกิดข้อผิดพลาดหลังจากหักเงินแต่ยังไม่ได้บวกเงิน ควรจัดการอย่างไรตามหลักการ ACID?
กcommit ขั้นที่หักเงินไว้ก่อน แล้วสร้างรายการแก้ไขสำหรับการเพิ่มเงินภายหลัง
ขลบประวัติข้อผิดพลาดแล้วถือว่าขั้นที่หักเงินสำเร็จเป็นผลลัพธ์สุดท้าย
คrollback ทั้งรายการเพื่อให้การเปลี่ยนแปลงทุกขั้นถูกยกเลิกเป็นหน่วยเดียว
งเพิ่ม lock ให้บัญชีปลายทางหลังเกิดข้อผิดพลาดแล้วคงยอดบัญชีต้นทางที่ถูกหักไว้
เฉลยอธิบาย
Transaction เป็น all-or-nothing และ ROLLBACK ทำให้การปรับปรุงระหว่าง transaction ไม่เกิดผล ดังนั้นคำตอบที่เหมาะที่สุดคือ “rollback ทั้งรายการเพื่อให้การเปลี่ยนแปลงทุกขั้นถูกยกเลิกเป็นหน่วยเดียว” ส่วนตัวลวงที่ใกล้เคียงที่สุดไม่ผ่านเพราะ ทำให้ธุรกรรมเดียวถูกยืนยันเพียงบางส่วนและยอดรวมไม่สอดคล้อง