Normalization
เป็นวิธีการในการกำหนด Attribute ให้กับแต่ละ Entity เพื่อให้ได้โครงสร้างของตารางที่ดี สามารถควบคุมความซ้ำซ้อนของข้อมูลหลีกเลี่ยงความผิดปกติของข้อมูล โดยทั่วไปผลลัพธ์ของการ Normalization จะได้ตารางที่มีโครงสร้างซับซ้อนน้อยลง แต่จำนวนของตารางจะมากขึ้น
การทำ Normalization จะประกอบด้วย Normal Form แบบต่าง ๆ ที่มีเงื่อนไขของการทำให้อยู่ในรูปของ Normal Form ที่แตกต่างกันไป ขึ้นอยู่กับผู้ออกแบบฐานข้อมูลว่า ต้องการลดความซ้ำซ้อนในฐานข้อมูลให้อยู่ในระดับใด ซึ่งประกอบด้วยนอร์มัลฟอร์มแบบต่าง ๆ ดังต่อไปนี้
- First Normal Form : 1NF
- Second Normal Form : 2NF
- Third Normal Form : 3NF
โดยจะแสดงวิธีการดังต่อไปนี้
รูปที่1 : ตารางที่ยังไม่ผ่านการ Normalization |
1. การแปลงให้อยู่ในรูปแบบของ 1NF (กำจัด Repeating Group)
การที่ข้อมูลใน 1 tuple สามารถมีค่าในแต่ละ Attribute ได้มากกว่าหนึ่งค่า (Multivalued) จะทำให้เกิด repeating group เช่นในตารางรูปที่1 การจะทำให้อยู่ในรูปแบบ 1NF จะทำได้ดังนี้
การที่ข้อมูลใน 1 tuple สามารถมีค่าในแต่ละ Attribute ได้มากกว่าหนึ่งค่า (Multivalued) จะทำให้เกิด repeating group เช่นในตารางรูปที่1 การจะทำให้อยู่ในรูปแบบ 1NF จะทำได้ดังนี้
- ระบุ Attribute ที่ซ้ำ
- ลบ Attribute ที่ทำซ้ำเหล่านี้ลงในตารางใหม่พร้อมกับคัดลอก Key ที่ได้จากตารางเก่า
- กำหนด Key ให้กับตารางใหม่ (และขีดเส้นใต้) key จากตารางต้นฉบับที่ไม่ผ่านการเกณฑ์ ปกติจะกลายเป็นส่วนหนึ่งของ key ของตารางใหม่ และมีการสร้าง คีย์ผสม(compound key)ขึ้น ค่าของคีย์นี้ต้องไม่ซ้ำกันสำหรับแต่ละ Entity ที่เกิดขึ้น
รูปที่2 : ตาราง 1NF ที่1 |
รูปที่3 : ตาราง 1NF ที่ 2 |
2. การแปลงให้อยู่ในรูปแบบของ 2NF (กำจัด Partial Dependency)
ในหนึ่ง Relation จะประกอบด้วย Attribute ต่าง ๆ ที่มีความสัมพันธ์ที่ขึ้นต่อกัน ซึ่งความสัมพันธ์ดังกล่าวจะเป็นตัวกำหนดว่า Attribute ใดเป็นตัวกำหนดข้อมูล หรือเรียกว่า Key Attribute และ Attribute ใดเป็นข้อมูลที่ถูกกำหนด หรือเรียกว่า Non-key Attribute ซึ่งใน 2NF จะเป็นการกำจัด Attribute ที่ไม่ขึ้นกับทั้งส่วนของคีย์หลักออกไป เพื่อให้ Attribute อื่นทั้งหมด ขึ้นตรงกับส่วนที่เป็น คีย์หลักทั้งหมดเท่านั้น การจะทำให้อยู่ในรูปแบบ 2NF จะทำได้ดังนี้
โดยตรวจสอบว่า Attribute นี้ ขึ้นอยู่กับส่วนใดส่วนหนึ่งของ key หลักหรือไม่?
- ถ้าใช่, ให้นำ Attribute ไปใช้ในตารางใหม่ โดยที่ key นั้นจะกลายเป็น key ในตารางใหม่ และขีดเส้นใต้ key ในตารางใหม่นี้
- ถ้าไม่ใช่, ตรวจสอบกับส่วนอื่น ๆ ของคีย์และทำซ้ำขั้นตอนข้างต้น
- ถ้ายังคงไม่ใช่ เช่น ไม่ขึ้นอยู่กับส่วนใดส่วนหนึ่งของคีย์ให้เก็บ Attribute ไว้ในตารางปัจจุบัน
- Employee name, Department No. และ Department Name ขึ้นอยู่กับ Employee No. ดังนั้นจึงถูกย้ายไปยังตารางใหม่ โดยมี Employee No. เป็น key
- แม้ว่า Hourly Rate จะขึ้นอยู่กับทั้ง Project Code และ Employee No. ซึ่งพนักงานอาจมีอั Hourly Rate ที่แตกต่างกันขึ้นอยู่กับโครงการที่พวกเขากำลังทำงานอยู่ ดังนั้นจึงยังคงอยู่ในตารางเดิม
รูปที่4 : ตาราง 2NF ที่ 1 |
รูปที่5 : ตาราง 2NF ที่ 2 |
รูปที่6 : ตาราง 2NF ที่ 3 |
3. การแปลงให้อยู่ในรูปแบบของ 3NF (กำจัด Transitivity Dependency)
Transitivity Dependency หมายถึง การที่มี Function Dependency ระหว่าง Attribute ที่ไม่ได้เป็นส่วนของคีย์ใด ๆ แต่มี Attribute อื่น ๆ มาขึ้นกับ Attribute นั้น หรือก็คือ Attribute ที่ไม่ใช่คีย์หลัก จะต้องไม่ขึ้นต่อกันเอง
Note
- Department Name ขึ้นอยู่กับ Department No. มากกว่า Employee No. ดังนั้นจึงย้ายไปอยู่ในตารางใหม่ และ Department No. เป็น key ของตารางใหม่นี้ และก็เป็น foreign key ของตาราง Employee ด้วย
เมื่อทำตามขั้นตอนแล้ว จึงได้ตารางดังนี้
รูปที่7 : ตาราง 3NF ที่1 |
รูปที่8 : ตาราง 3NF ที่2 |
รูปที่9 : ตาราง 3NF ที่3 |
รูปที่10 : ตาราง 3NF ที่4 |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น