ในระบบฐานข้อมูลคำสั่งซื้อที่มีตาราง Orders (OrderID, CustomerID, OrderDate, TotalAmount) และตาราง OrderDetails (OrderDetailID, OrderID, ProductID, Quantity, UnitPrice) หากราคาสินค้าในตาราง Products มีการเปลี่ยนแปลง ข้อมูลในตาราง OrderDetails จะได้รับผลกระทบอย่างไร
กไม่ได้รับผลกระทบ เนื่องจากตาราง OrderDetails เก็บ UnitPrice ซึ่งเป็นราคา ณ เวลาที่สั่งซื้อไว้แยกต่างหาก ทำให้ข้อมูลประวัติการสั่งซื้อยังคงถูกต้องตามเดิม
ขได้รับผลกระทบโดยตรง เนื่องจาก UnitPrice ใน OrderDetails อ้างอิงค่าจากตาราง Products แบบ Real-time ทำให้ราคาในคำสั่งซื้อเก่าเปลี่ยนแปลงตามโดยอัตโนมัติ
คได้รับผลกระทบบางส่วน เนื่องจากระบบจะอัปเดต UnitPrice เฉพาะคำสั่งซื้อที่ยังไม่ได้ชำระเงิน ส่วนคำสั่งซื้อที่ชำระแล้วจะไม่เปลี่ยนแปลง
งไม่ได้รับผลกระทบในทันที แต่เมื่อมีการ Query ข้อมูลย้อนหลัง ระบบจะดึงราคาปัจจุบันจากตาราง Products มาแสดงแทนราคาเดิมเสมอ
เฉลยอธิบาย
ตาราง OrderDetails มีคอลัมน์ UnitPrice ซึ่งเก็บราคาสินค้า ณ เวลาที่ทำการสั่งซื้อไว้โดยตรง (Snapshot) ไม่ได้อ้างอิงค่าจากตาราง Products แบบ Real-time ดังนั้นเมื่อราคาสินค้าใน Products เปลี่ยนแปลง ข้อมูลใน OrderDetails จะไม่ได้รับผลกระทบใดๆ ซึ่งเป็นแนวทางการออกแบบฐานข้อมูลที่ถูกต้องเพื่อรักษาความถูกต้องของข้อมูลประวัติธุรกรรม