บริษัทสตรีมมิ่งวิดีโอต้องออกแบบฐานข้อมูลสำหรับเก็บข้อมูลสมาชิก บอกให้ระบบสามารถติดตามว่าสมาชิกแต่ละคนดูวิดีโอเรื่องใด เมื่อไหร่ และดูจนถึงเปอร์เซ็นต์เท่าไร เพื่อใช้ในการแนะนำวิดีโอในครั้งต่อไป นอกจากนี้สมาชิกหนึ่งคนสามารถดูวิดีโอเดียวกันได้หลายครั้ง และวิดีโอหนึ่งเรื่องถูกดูโดยสมาชิกจำนวนมาก เซอร์วิสต้องเก็บประวัติการดูทั้งหมด ควรออกแบบความสัมพันธ์อย่างไร
กสร้างตาราง User, Video โดย User มี List ของ VideoID ที่ดู
ขสร้างตาราง User_Video โดย User_Video มี Composite Foreign Key ไปยัง User และ Video
คสร้างตาราง User, Video, และ WatchHistory โดย WatchHistory เป็นตารางแนวเชื่อมที่มี Primary Key ประกอบด้วย UserID, VideoID, และ WatchTimestamp
งเก็บการดูทั้งหมดในตาราง User ด้วยฟิลด์ที่ยาวและแสดงรายการวิดีโอ
เฉลยอธิบาย
การดูวิดีโอของสมาชิกเป็นความสัมพันธ์ Many-to-Many ที่มีข้อมูลเพิ่มเติม (Attributes) เช่น เวลาดู และเปอร์เซ็นต์ที่ดู ตารางแนวเชื่อม (WatchHistory) ควรมี Primary Key ประกอบด้วยทั้ง UserID, VideoID, และ WatchTimestamp เพื่อเป็นการเก็บประวัติการดูแต่ละครั้งอย่างแยกต่างหาก ตัวเลือก A และ C เก็บรายการหลายค่าในแถวเดียว ส่วน B ยังไม่มีตัวระบุเหตุการณ์ดูแต่ละครั้ง จึงแยกการดูวิดีโอเดิมหลายครั้งไม่ได้ ตัวเลือก D จึงครบถ้วนที่สุด