ในระหว่างการทำธุรกรรม (Transaction) การโอนเงินจากบัญชีหนึ่งไปยังบัญชีอื่น หากเกิดข้อผิดพลาดหลังจากหักเงินแต่ยังไม่ได้บวกเงิน ควรจัดการอย่างไรตามหลักการ ACID?

commit ขั้นที่หักเงินไว้ก่อน แล้วสร้างรายการแก้ไขสำหรับการเพิ่มเงินภายหลัง
ลบประวัติข้อผิดพลาดแล้วถือว่าขั้นที่หักเงินสำเร็จเป็นผลลัพธ์สุดท้าย
rollback ทั้งรายการเพื่อให้การเปลี่ยนแปลงทุกขั้นถูกยกเลิกเป็นหน่วยเดียว
เพิ่ม lock ให้บัญชีปลายทางหลังเกิดข้อผิดพลาดแล้วคงยอดบัญชีต้นทางที่ถูกหักไว้

เฉลยอธิบาย

Transaction เป็น all-or-nothing และ ROLLBACK ทำให้การปรับปรุงระหว่าง transaction ไม่เกิดผล ดังนั้นคำตอบที่เหมาะที่สุดคือ “rollback ทั้งรายการเพื่อให้การเปลี่ยนแปลงทุกขั้นถูกยกเลิกเป็นหน่วยเดียว” ส่วนตัวลวงที่ใกล้เคียงที่สุดไม่ผ่านเพราะ ทำให้ธุรกรรมเดียวถูกยืนยันเพียงบางส่วนและยอดรวมไม่สอดคล้อง

ข้อสอบอื่นในวิชาความรู้เกี่ยวกับระบบฐานข้อมูล (Database System) และ ระบบการบริหารจัดการข้อมูล (Database Management System)

ดูข้อสอบวิชานี้ทั้งหมด →