ระบบห้างสรรพสินค้าต้องการออกแบบฐานข้อมูลสำหรับโปรแกรมสะสมแต้ม ลูกค้าสะสมแต้มได้จากทุกการซื้อ และสามารถแลกแต้มได้ ควรออกแบบการติดตามแต้มอย่างไรให้มีประสิทธิภาพสูงสุด

เก็บประวัติการซื้อทั้งหมดในคอลัมน์ Text เดียวในตาราง Customer
เก็บ TotalPoints เป็นตัวเลขเดียวในตาราง Customer และอัปเดตทุกครั้งที่มีการซื้อหรือแลก
สร้างตาราง PointTransaction ที่บันทึกแต่ละรายการ (ประเภท: สะสม/แลก, จำนวนแต้ม, วันที่, อ้างอิง OrderID) และคำนวณยอดแต้มรวมจากการ SUM
ไม่ต้องเก็บประวัติ ให้เก็บเฉพาะยอดแต้มปัจจุบันของลูกค้า

เฉลยอธิบาย

การสร้างตาราง PointTransaction แบบ Ledger (บัญชีรายการ) เป็นแนวปฏิบัติที่ดีที่สุดเพราะสามารถตรวจสอบประวัติย้อนหลังได้ ป้องกันข้อผิดพลาดจากการ Update พร้อมกัน (Concurrency Issues) และสามารถ Audit ได้ ตัวเลือก A มีความเสี่ยงสูงเพราะถ้า Update ผิดพลาดจะไม่มีประวัติให้ตรวจสอบ ตัวเลือก C ละเมิด 1NF ตัวเลือก D ทำให้ไม่สามารถตรวจสอบหรือแก้ไขข้อผิดพลาดได้

ข้อสอบอื่นในวิชาความรู้ความสามารถในการวิเคราะห์ ออกแบบ ฐานข้อมูล

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