ตาราง Shipment ในระบบโลจิสติกส์มีฟิลด์ดังนี้: ShipmentID, DriverID, DriverName, TruckID, TruckModel, RouteID, DepartureTime, ArrivalTime พบปัญหา Data Redundancy และ Update Anomaly การแก้ไขตารางนี้ให้ถูกต้องตามหลัก 3NF ควรทำอย่างไร
กแยกออกเป็น 3 ตาราง ได้แก่ Driver(DriverID, DriverName), Truck(TruckID, TruckModel) และ Shipment(ShipmentID, DriverID, TruckID, RouteID, DepartureTime, ArrivalTime) โดยใช้ Foreign Key เชื่อมความสัมพันธ์
ขเพิ่ม Primary Key แบบ Composite Key โดยใช้ (ShipmentID, DriverID, TruckID) ร่วมกัน และคงฟิลด์ทั้งหมดไว้ในตารางเดียวเพื่อลดความซับซ้อนในการ Join ตาราง
คแยกออกเป็น 2 ตาราง ได้แก่ ShipmentDetail(ShipmentID, DriverID, DriverName, TruckID, TruckModel) และ ShipmentTime(ShipmentID, RouteID, DepartureTime, ArrivalTime) เพื่อแบ่งข้อมูลตามประเภท
งสร้าง View จากตาราง Shipment เดิม โดยแยก View สำหรับข้อมูล Driver และ Truck ออกจากกัน แทนการแยกตารางจริง เพื่อรักษาโครงสร้างตารางเดิม
เฉลยอธิบาย
หลัก 3NF กำหนดว่าแต่ละฟิลด์ต้องขึ้นอยู่กับ Primary Key โดยตรง ไม่ใช่ขึ้นอยู่กับฟิลด์ที่ไม่ใช่ Key (Transitive Dependency) ในตารางเดิม DriverName ขึ้นอยู่กับ DriverID และ TruckModel ขึ้นอยู่กับ TruckID ซึ่งเป็น Transitive Dependency การแยกเป็น 3 ตาราง คือ Driver, Truck และ Shipment พร้อม Foreign Key จึงแก้ปัญหาได้ถูกต้องตามหลัก 3NF ส่วนตัวเลือก B ไม่ได้แก้ Redundancy, ตัวเลือก C ยังคง DriverName และ TruckModel ไว้ในตารางเดียวกับ ID ซึ่งยังผิด 3NF และตัวเลือก D ใช้ View ไม่ได้แก้ปัญหาโครงสร้างที่แท้จริง