ระบบโรงพยาบาลออกแบบตาราง Patient (PatientID PK, Name, BloodType, EmergencyContact, EmergencyPhone) ปัญหาหลักของโครงสร้างตารางนี้คืออะไร และควรแก้ไขอย่างไร
กตารางละเมิด 2NF เพราะ EmergencyContact และ EmergencyPhone ขึ้นกับ PatientID บางส่วน ควรเพิ่ม composite key
ขตารางละเมิด 1NF เพราะผู้ป่วยอาจมีผู้ติดต่อฉุกเฉินได้หลายคน ทำให้ค่าในฟิลด์ไม่เป็น atomic ควรแยกเป็นตาราง EmergencyContact ต่างหาก
คตารางละเมิด BCNF เพราะ BloodType กำหนดค่า EmergencyContact ได้ ควรแยก BloodType ออกเป็นตารางอ้างอิง
งตารางละเมิด 3NF เพราะ EmergencyPhone ขึ้นกับ Name แทนที่จะขึ้นกับ PatientID ควรเพิ่ม index ให้กับฟิลด์ Name
เฉลยอธิบาย
ปัญหาหลักคือการละเมิด 1NF (First Normal Form) เนื่องจากผู้ป่วยหนึ่งคนอาจมีผู้ติดต่อฉุกเฉินได้มากกว่า 1 คน การเก็บเพียงหนึ่งฟิลด์ EmergencyContact และ EmergencyPhone ทำให้ข้อมูลไม่ครบถ้วนหรือต้องยัดรวมหลายค่าในฟิลด์เดียว ซึ่งทำให้ค่าไม่เป็น atomic วิธีแก้ไขที่ถูกต้องคือแยกออกเป็นตาราง EmergencyContact (ContactID PK, PatientID FK, ContactName, ContactPhone) เพื่อรองรับหลายผู้ติดต่อต่อผู้ป่วยหนึ่งคน