340 likes | 1.31k Views
Normalization. Normalization. Normalization เป็นวิธีที่ใช้ในการปรับโครงสร้างของตารางเพื่อให้ได้ตารางที่สามารถเก็บข้อมูลได้โดยไม่มีปัญหาใดๆ ตามมาภายหลัง โดยให้อยู่ในรูปแบบที่เรียกว่า Normal Form มีเป้าหมายหลักคือ การลดความซ้ำซ้อนของข้อมูล และรักษาความถูกต้องให้แก่ข้อมูล.
E N D
Normalization • Normalizationเป็นวิธีที่ใช้ในการปรับโครงสร้างของตารางเพื่อให้ได้ตารางที่สามารถเก็บข้อมูลได้โดยไม่มีปัญหาใดๆ ตามมาภายหลัง โดยให้อยู่ในรูปแบบที่เรียกว่า Normal Form • มีเป้าหมายหลักคือ การลดความซ้ำซ้อนของข้อมูล และรักษาความถูกต้องให้แก่ข้อมูล
วัตถุประสงค์ของ Normalization • ลดเนื้อที่ในการจัดเก็บข้อมูล • เนื่องจากกระบวนการ Normalization เป็นการออกแบบ เพื่อลดความซ้ำซ้อนในข้อมูล จึงทำให้เนื้อที่ในการจัดเก็บข้อมูลลดลงด้วย • ลดปัญหาข้อมูลที่ไม่ถูกต้อง • เมื่อข้อมูลไม่มีความซ้ำซ้อน จึงทำให้สามารถปรับปรุงข้อมูลได้จากแหล่งข้อมูลเพียงแหล่งเดียว จึงลดปัญหาการปรับปรุงข้อมูลไม่ถูกต้องได้ (รวมถึงการเพิ่ม ลบ และปรับปรุงข้อมูล)
Data Redundancy and Update Anomalies • ตัวอย่างปัญหาของความซ้ำซ้อนในข้อมูลใน Staff relationและ Branch relationเมื่อเปรียบเทียบกับรีเลชันที่รวมข้อมูลพนักงานและสาขาไว้ด้วยกันใน StaffBranch relation
Data Redundancy and Update Anomalies • ตาราง StaffBranch จะมีความซ้ำซ้อนของข้อมูลโดยรายละเอียดของสาขา (branch) จะมีข้อมูลที่ซ้ำ ๆ กันในทุกสมาชิกของ staff • ปัญหาความซ้ำซ้อนในข้อมูลที่เกิดขึ้นจะเรียกว่า ข้อผิดพลาดจากการปรับปรุงข้อมูล ซึ่งประกอบด้วย • ข้อผิดพลาดจากการเพิ่มข้อมูล (Insertion) • ข้อผิดพลาดจากการลบข้อมูล (Deletion) • ข้อผิดพลาดจากการแก้ไขข้อมูล (Modification)
Normalization การ Normalization นี้เป็นการดำเนินงานอย่างเป็นลำดับ ที่กำหนดไว้ด้วยกันเป็นขั้นตอน ตามปัญหาที่เกิดขึ้นในข้นตอนนั้นๆ ซึ่งแต่ละขั้นตอนจะมีชื่อตามโครงสร้างข้อมูลที่กำหนดไว้ดังนี้ 1. ขั้นตอนการทำ First Normal Form(1NF) 2. ขั้นตอนการทำ Second Normal Form(2NF) 3. ขั้นตอนการทำ Third Normal Form(3NF) 4. ขั้นตอนการทำ Boyce-Codd Normal Form(BCNF) 5. ขั้นตอนการทำ Fourth Normal Form(4NF) 6. ขั้นตอนการทำ Fifth Normal Form(5NF)
ขอบเขต • ในทางปฏิบัติการทำ Normalization จนถึงระดับที่ 3 (3NF) ก็สามารถขจัดปัญหาความซ้ำซ้อนของข้อมูลลงได้จนเกือบหมดแล้ว แต่อาจจะมีความซ้ำซ้อนเกิดขึ้นได้อีกแม้จะพบได้ค่อนข้างน้อย • ดังนั้นเนื้อหาจึงขอกล่าวถึงการทำ Normalization จนถึง 3NF และกล่าวถึง BCNF กรณีที่ต้องการลดความซ้ำซ้อนให้น้อยลงไปอีก • จะไม่กล่าวถึง 4NF และ 5NF หากนักศึกษาต้องการศึกษาถึง 4NF และ 5NF สามารถอ่านได้จากหนังสืออ้างอิง
First Normal Form : 1NF • First Normal Form : 1NF • Relation หนึ่งๆ จะอยู่ในรูปแบบ 1NF ก็ต่อเมื่อ • “ค่าของ Attribute ต่างๆ ในแต่ละ Tuple จะมีค่าของข้อมูลเพียงค่าเดียว นั่นคือไม่มี Repeating Groupและ Multi-valued”
ตัวอย่างตารางข้อมูล Employee
วิธีการทำให้อยู่ในรูปแบบ 1NF • 1. กำจัด repeating group (กลุ่มซ้ำ) • 2. เพิ่มคีย์หลัก
ผลลัพธ์ที่ได้จากการทำ 1NF ตาราง Employee
Emp_Name Salary Dept Emp_ID Course_No Course_Name Employee D_Complete First Normal Form : 1NF Salary Course_No Dept Emp_ID Emp_Name Course_Name Employee D_Complete ผลลัพธ์ที่ได้จากการทำ 1NF
Second Normal Form (2NF) • 2. Second Normal Form : 2NF • Relation หนึ่งๆ จะอยู่ในรูปแบบ 2NF ก็ต่อเมื่อ • “1. Relation นั้นๆ ต้องอยู่ในรูปแบบ 1NF • 2. Attribute ทุกตัวที่ไม่ได้เป็นคีย์หลัก จะต้องมีความสัมพันธ์กับ Attribute ที่เป็นคีย์หลักทั้งหมด(Fully Functional Dependency) ไม่ใช่แค่ส่วนใดส่วนหนึ่งของคีย์หลัก หรือกล่าวง่ายๆ ว่า ไม่มี Partial Dependencyเกิดขึ้น”
Second Normal Form (2NF) full functional dependency Emp_ID Course_No D_Complete Course_Name Partial Dependency เพราะฉะนั้นตาราง Employee ไม่ได้อยู่ในรูป 2NF เนื่องจากมี Partial Dependency ต้องทำการแตก Relation เพื่อลดความซ้ำซ้อนของข้อมูล ดังนี้ Employee(Emp_id , Course_No ,D_Complete) Course(Course_No, Course_Name)
Second Normal Form (2NF) Employee Course
Third Normal Form : 3NF • 3. Third Normal Form : 3NF • Relation หนึ่งๆ จะอยู่ในรูปแบบ 3NF ก็ต่อเมื่อ • “1. Relation นั้นๆ ต้องอยู่ในรูปแบบ 2NF • 2. Attribute ทุกตัวที่ไม่ได้เป็นคีย์หลัก ไม่มีคุณสมบัติในการกำหนดค่าของ Attribute อื่นที่ไม่ใช่คีย์หลัก หรือกล่าวง่ายๆ ว่า ไม่มี Transitive Dependencyเกิดขึ้น”
Third Normal Form : 3NF Emp_ID Name Job_Class Chg_Hour Transitive Dependency ตาราง Employee ไม่ได้อยู่ในรูป 3NF เนื่องจากมี Transitive Dependency ต้องทำการแตก Relation เพื่อลดความซ้ำซ้อนของข้อมูล ดังนี้ Employee(Emp_id ,Name, Job_Class) Job(Job_Class, Chg_Hour)
Third Normal Form : 3NF Emp_Name Job Emp_ID Salary Employee WORK_ON TRAINED D_Complete Job Course Chg_Hour Job_Class Course_No Course_Name
ดีเพนเดนซีไดอะแกรม (Dependency diagram)
แสดงขั้นตอนของการทำ Normalization Entity ที่มีข้อมูลซ้ำซ้อน กำจัดกลุ่มข้อมูลซ้ำซ้อน กำจัด Partial Dependency 1NF 2NF กำจัด Transitive Dependency 3NF
Boyce/Codd Normal Form : BCNF 4. Boyce/Codd Normal Form : BCNF Relation หนึ่งๆ จะอยู่ในรูปแบบ BCNF ก็ต่อเมื่อ “1. Relation นั้นๆ ต้องอยู่ในรูปแบบ 3NF 2. ไม่มี Attribute อื่นใน Relation ที่สามารถระบุค่าของ Attribute ที่เป็นคีย์หลักหรือส่วนหนึ่งส่วนใดของคีย์หลักในกรณีที่คีย์หลักเป็นคีย์ผสม(Composite Key)”
Boyce-Codd normal form (BCNF) • ลักษณะ 3NF ที่ไม่ใช่ BCNF • สังเกตว่ายังมี Attribute หนึ่งยังสามารถระบุค่า Attribute ที่เป็นส่วนหนึ่งของ Primary key (C B)
Boyce/Codd Normal Form : BCNF เช่น หากเลือก S# และ P# เป็นคีย์หลักแล้วจะเกิดปัญหาใน Relation นี้คือ SNAME จะมีคุณสมบัติในการระบุค่าของ Attribute S# ได้ S# SNAME P# QTY
Boyce/Codd Normal Form : BCNF S# SNAME P# QTY ดังนั้น Relation SUPPLIER3 ต้องทำการแตกรีเลชันออก โดยแยก attribute ที่สามารถระบุค่าของ PK แยกเป็นอีกรีเลชันหนึ่ง คือ ORDER2(SNAME, P#, QTY) SUPPLIER4(SNAME , S#)
ประเด็นที่ควรคำนึงถึงในการทำให้เป็นรูปแบบบรรทัดฐาน (Normal Form) • การแตก relation มากเกินไป (Overnormalization) • การดีนอร์มอลไลเซชัน (Denormalization)
การแตก relation มากเกินไป (Overnormalization) • วัตถุประสงค์ของการทำให้เป็นรูปแบบบรรทัดฐาน คือ • เพื่อลดปัญหาในด้านความซ้ำซ้อนของข้อมูล • เพื่อลดปัญหาในเรื่องการเพิ่ม การลบ หรือการปรับปรุงข้อมูล • โดยทั่วไปการออกแบบในระดับแนวคิด ผู้ออกแบบจะพยายามวิเคราะห์ relation ให้อยู่ในรูปแบบ 3NF • กรณีที่เกิดปัญหาต่างๆ ที่จำเป็นต้องทำต่อไปถึงรูปแบบ BCNF, 4NF และ 5NF (เกิดขึ้นน้อยมากในทางปฏิบัติ)
ด้วยเหตุผลดังกล่าว ผู้ออกแบบไม่ควรพยายามที่จะแตก relation มากเกินความจำเป็น (Overnormalization)เพราะ • การแตก relation ออกเป็น relation ย่อยมากเกินไปมีผลต่อประสิทธิภาพในการทำงานของฐานข้อมูล เช่น ในการค้นคืนข้อมูลจะต้องใช้เวลามากกว่าเดิม เป็นต้น
การดีนอร์มอลไลเซชัน (Denormalization) • เป็นกระบวนการที่ตรงกันข้ามกับการ Normalization โดยยอมเก็บข้อมูลที่มีความซ้ำซ้อนกันบ้าง เพื่อแลกกับความเร็วในการเรียกดูข้อมูลที่มากขึ้น เช่น relation นั้นควรจะปรับให้อยู่ในรูปแบบ 3NF แต่หยุดอยู่เพียงรูปแบบ 2NF เป็นต้น อาจเป็นเพราะเหตุผลในเรื่องของประสิทธิภาพในการเรียกดู หรือ การค้นคืนข้อมูล และยอมให้เกิดความซ้ำซ้อนของข้อมูลได้
การดีนอร์มอลไลเซชัน (Denormalization) • การดีนอร์มอลไลเซชันอาจก่อให้เกิดปัญหาความซ้ำซ้อนของข้อมูล เกิดขึ้นได้ • ควรมีการระบุสาเหตุ และวิธีการในการปรับปรุงข้อมูลในโปรแกรมประยุกต์ใช้งาน เพื่อป้องกันไม่ให้เกิดปัญหาข้อมูลไม่ถูกต้อง • ถ้าข้อมูลใน relation นั้นๆ ส่วนใหญ่จะเป็นการเรียกดูข้อมูล (Select)มากกว่าการเพิ่ม ลบ หรือปรับปรุงข้อมูล เพื่อเพิ่มประสิทธิภาพในการทำงานของฐานข้อมูล และไม่มีปัญหาด้านความไม่ถูกต้องของข้อมูลที่ซ้ำซ้อนกันได้
จงวิเคราะห์และจัดทำ Normalization ระบบการลงทะเบียนของนักศึกษา ให้มีความซ้ำซ้อนน้อยที่สุด