310 likes | 673 Vues
Normalization. ความหมายของการนอร์มอลไลเซซัน. Normalization เป็นกระบวนการนำโครงร่างของรีเลชันมาแตกเป็นรีเลชันต่างๆ ให้อยู่ในรูปแบบที่เรียกว่า Normal form เป้าหมายเพื่อให้รีเลชันที่ได้รับการออกแบบอยู่ในรูปแบบบรรทัดฐานระดับที่เหมาะสม
E N D
ความหมายของการนอร์มอลไลเซซันความหมายของการนอร์มอลไลเซซัน • Normalization เป็นกระบวนการนำโครงร่างของรีเลชันมาแตกเป็นรีเลชันต่างๆ ให้อยู่ในรูปแบบที่เรียกว่า Normal form เป้าหมายเพื่อให้รีเลชันที่ได้รับการออกแบบอยู่ในรูปแบบบรรทัดฐานระดับที่เหมาะสม • E.F. Codd แบ่งรูปแบบ Normal Form ออกเป็น 3 ระดับด้วยกันคือ • Normal Form ระดับที่ 1 (1NF) • Normal Form ระดับที่ 2 (2NF) • Normal Form ระดับที่ 3 (3NF)
จุดประสงค์ของการนอร์มอลไลเซซันจุดประสงค์ของการนอร์มอลไลเซซัน • ลดเนื้อที่ในการจัดเก็บข้อมูล การ Normalizationเป็นการออกแบบเพื่อลดความซ้ำซ้อนในข้อมูล ทำให้ลดเนื้อที่ในการจัดเก็บข้อมูลลงไปด้วย • ลดปัญหาข้อมูลที่ไม่ถูกต้อง เมื่อมีข้อมูลไม่มีความซ้ำซ้อน ในการปรับปรุงข้อมูลก็สามารถปรับปรุงข้อมูลได้จากแหล่งเดียว จึงช่วยลดปัญหาการปรับปรุงข้อมูลถูกต้องได้
ความผิดพลาดจากการปรับปรุงข้อมูลความผิดพลาดจากการปรับปรุงข้อมูล • การผิดพลาดจากการเพิ่มข้อมูล • การผิดพลาดจากการลบข้อมูล • การผิดพลาดจากเปลี่ยนแปลงข้อมูล
Normalize ระดับที่ 1 • ไม่มีคอลัมน์ใด มีค่า มากกว่า 1 ค่า (ไม่มี repeating Group) • แต่ละตารางต้องมี Primary key
ตัวอย่างข้อมูล ตาราง Student และตาราง Subject
ทำให้ตารางทั้ง3 เป็นNF1 • แยกคอลัมน์ที่มีมากว่า 1 ค่าเป็นแถวใหม่ • เพิ่มข้อมูลที่เหมาะสมเข้าไป • กำหนด Primary Key
ได้ตาราง NF 1 ดังต่อไปนี้ ตารางStudent
Functional Dependency • ฟังก์ชั่นการขึ้นต่อกัน คือ ความสัมพันธ์ระหว่าง Attribute หนึ่ง หรือ กลุ่มของ Attribute ที่ประกอบกันแล้ว สามารถระบุค่าของ Attribute อื่นๆ ใน tuple เดียวกันของรีเลชั่นนั้นได้ • สมมติว่า A กับ B คือ Attribute ของรีเลชั่น R แล้ว B เป็นฟังก์ชั่นที่ขึ้นอยู่กับ A จะเขียนในรูปแบบสัญลักษณ์ได้ว่า A B โดยเรียก A ว่า Determinant และ เรียก B ว่า Dependent
ตัวอย่าง • จากตาราง staff ถ้าถามว่า พนักงานคนใดมี รหัสพนักงงาน sl22 เราสามารถตอบได้ทันทีว่า คือ พนักงานชื่อ Chuchai Suksri ดังนั้น แสดงว่า ชื่อพนักงาน ขึ้นอยู่กับ รหัสพนักงาน
Functional Dependency (FD) เป็นวิธีที่ใช้ตรวจสอบว่า Attribute ที่ไม่ใช่ Primary key นั้นมีความเกี่ยวข้องกับ Primary key หรือ ไม่เพื่อใช้ พิจารณา ว่าควรจะแยก Attribute ดังกล่าวควรจะแยกเป็นคอลัมน์ในตารางใหม่ หรือ ไม่ • ในรีเลชั่นหนึ่ง Attribute ทุกตัวต้องขึ้นอยู่กับ Primary key โดยถ้า Primary Key เป็นกลุ่ม Attribute ต้องขึ้นอยู่กับ Attribute ทุกตัวที่รวมเป็น Primary Key • ถ้าขึ้นอยู่กับ Primary key เพียงบางส่วนจะเรียกว่า Partial Dependency • ถ้าขึ้นอยู่กับ Primary key ทั้งหมดเรียกว่า Full Functional Dependency • ถ้า Primary key เป็น Attribute เดียวจะเป็น Full Functional Dependency
ตัวอย่าง รูปแบบ NF2 • ตาราง Student • จะเห็นได้ว่าName,BirthDay,Cladd,Advisor ไม่ได้ขึ้นอยู่กับAttribute ที่เป็นPrimary key ทั้งหมด แต่ขึ้นอยู่กับStudent_id เพียงAttribute เดียวไม่ได้ขึ้นอยู่กับClub และHobby ดังนั้นจะเขียน FD ได้ดังนี้ Student_id Name,Birthday,Class,Advisor Student_id club,hobby
ดังนั้น จึงสามารถแยกตารางตาม FD ได้ดังนี้
ตัวอย่าง รูปแบบ NF2 • ตาราง Subject • จะเห็นได้ว่าตาราง Subject จะมีลักษณะคล้ายกับ ตารางStudent ดังนั้นจะเขียน FD ได้ดังนี้ Subject_id Name, Credit Subject_id Teacher,Textbook
ดังนั้น จึงสามารถแยกตารางตาม FD ได้ดังนี้
สำหรับตาราง Student_subject เขียน FD ได้ดังนี้ Student_id,Subject_id Grade,Score,Term • จาก FD จะเห็นได้ว่า เมื่อต้องการจะทราบค่าของ Attribute ที่ไม่ใช้ Key ซึ่งก็คือ Grade,Score,Term ต้องทราบค่าของ Primary key คือ Student_id,Subject_id ก่อน ไม่ได้ขึ้นอยู่กับตัวใดตัวหนึ่ง ดังนั้นจึงไม่เป็ฯ Partial Dependency จึงไม่จำเป็นต้องแยกตาราง
Normalize ระดับที่ 3 • เป็น 2NF • Attribute ที่ใช่ Key ไม่ขึ้นต่อกันเอง (ไม่เป็น Transitive Dependency) • เป็น FD ที่ไม่เกี่ยวข้องกับ Primary key
จากตาราง Student จะมี FD ที่ไม่เกี่ยวข้องกับ Primary key คือ • ClassTeacher • จึงต้องแยกตารางออกเป็น สองตารางดังนี้
Boyce/Codd Normal Form (BCNF) • Attribute ทุกตัวขึ้นอยู่กับ Candidate Key • Determinant ทุกตัวต้องเป็น Candidate Key • ตัวอย่าง จากตาราง Teacher_Textbook ได้ FD ดังต่อไปนี้ Textbook Subject_id Teacher,Subject_id Textbook
Cadidate Key ของตารางนี้คือ • (teacher,textbook) กับ (teacher,subject_id) • Determinant คือ textbook กับ teacher,subject_id • จะเห็นว่า textbook ที่เป็น Determinant ของ FD ไม่ได้เป็น Cadidate Key ดังนั้น Relation นี้จึงไม่เป็น BCNF
ดังนั้น ต้องแยกตารางดังกล่าวออกเป็นสองตาราง ตาม FD ซึ่งมี Determinant ที่ไม่ได้เป็น Candidate Key • ซึ่งจะได้ตารางดังต่อไปนี้ คือ ตาราง Textbook และ Teacher_Textbook
Normalize ระดับที่ 4 • เป็น BCNF • ไม่มี Multivalued Dependency
Nomalization ระดับที่ 5 • จะต้องมี Candidate Key ปรากฏใน Join Dependency ของ Relation นั้นเสมอ