สมมติว่าระบบจองห้องพักมี Booking ที่ใช้เวลาตั้งแต่ 1 วันถึง 30 วัน การออกแบบให้สามารถตรวจสอบว่าห้องว่างในวันใดบ้าง ควรทำอย่างไร
กเก็บ CheckInDate และ CheckOutDate ในตาราง Booking และคำนวณวันว่างด้วยการ Query ทุกครั้งที่ต้องการ
ขเก็บข้อมูลวันว่างของห้องเป็น JSON Array ในฟิลด์เดียว
คเก็บ CheckInDate และ CheckOutDate ในตาราง Booking และสร้าง View ที่ Expand ข้อมูลแต่ละวัน
งสร้างตาราง Room_Availability ที่เก็บ RoomID, Date, IsAvailable และบันทึกข้อมูล 1 แถวต่อห้อง 1 วัน
เฉลยอธิบาย
วิธี B คือ Denormalization ที่เหมาะสม (Justified Denormalization) เพราะการตรวจสอบความพร้อมใช้งาน (Availability Check) เป็นการดำเนินการที่ต้องสอบถามบ่อย ๆ โดยการ Expand ข้อมูล CheckIn/CheckOut เป็นระเบียนต่อวัน จะทำให้การค้นหา Query ง่ายและเร็วขึ้น ตัวเลือก A ช้าสำหรับการค้นหาซ้ำ ๆ ตัวเลือก C ใช้ View ทำให้ต้อง Compute ทุกครั้ง ตัวเลือก D ฝ่าฝืนหลักการ Relational Database