ในการออกแบบฐานข้อมูลสำหรับระบบการศึกษาออนไลน์ที่มีตาราง Students, Courses, Lessons และ Progress โดยหลักสูตรหนึ่งมีบทเรียนหลายบท และนักเรียนหนึ่งสามารถเรียนได้หลายหลักสูตร ควรกำหนด Foreign Key ในตาราง Progress อย่างไรจึงจะถูกต้องที่สุด
กตาราง Progress มี Foreign Key อ้างอิง student_id จากตาราง Students และ lesson_id จากตาราง Lessons เพื่อติดตามความคืบหน้าในแต่ละบทเรียนของนักเรียนแต่ละคน
ขตาราง Progress มี Foreign Key อ้างอิง student_id จากตาราง Students และ course_id จากตาราง Courses โดยไม่จำเป็นต้องอ้างอิงถึงระดับบทเรียน
คตาราง Lessons มี Foreign Key อ้างอิง student_id จากตาราง Students และ progress_id จากตาราง Progress เพื่อเชื่อมโยงข้อมูลนักเรียนกับบทเรียน
งตาราง Students มี Foreign Key อ้างอิง course_id จากตาราง Courses และ lesson_id จากตาราง Lessons รวมกันไว้ในตารางเดียวเพื่อลดความซับซ้อนของการ JOIN
เฉลยอธิบาย
การออกแบบที่ถูกต้องคือตาราง Progress ควรมี Foreign Key อ้างอิง student_id จากตาราง Students และ lesson_id จากตาราง Lessons เพราะเป้าหมายคือการติดตามความคืบหน้าของนักเรียนในแต่ละบทเรียน และตาราง Lessons ก็มี Foreign Key อ้างอิง course_id จากตาราง Courses อยู่แล้ว ทำให้สามารถสืบค้นย้อนกลับไปยังหลักสูตรได้โดยไม่ต้องเก็บข้อมูลซ้ำซ้อน ตัวเลือก B ไม่สามารถระบุความคืบหน้าระดับบทเรียนได้ ตัวเลือก C และ D วางความสัมพันธ์ผิดตาราง ทำให้ละเมิดหลักการออกแบบฐานข้อมูล