การทำนอร์มัลไลเซชัน เป็นวิธีการในการกำหนดแอตทริบิวต์ให้กับแต่ละเอนทิตี เพื่อให้ได้โครงสร้างของตารางที่ดี สามารถควบคุมความซ้ำซ้อนของข้อมูลหลีกเลี่ยงความผิดปกติของข้อมูล โดยทั่วไปผลลัพธ์ของการนอร์มัลไลเซชัน จะได้ตารางที่มีโครงสร้างซับซ้อนน้อยลง แต่จำนวนของตารางจะมากขึ้น
การทำนอร์มัลไลเซชัน จะประกอบด้วยนอร์มัลฟอร์ม (Normal Form) แบบต่าง ๆ ที่มีเงื่อนไขของการทำให้อยู่ในรูปของนอร์มัลฟอร์มที่แตกต่างกันไป ขึ้นอยู่กับผู้ออกแบบฐานข้อมูลว่า ต้องการลดความซ้ำซ้อนในฐานข้อมูลให้อยู่ในระดับใด ซึ่งประกอบด้วยนอร์มัลฟอร์มแบบต่าง ๆ ดังต่อไปนี้
– นอร์มัลฟอร์มที่ 1 (First Normal Form : 1NF)
– นอร์มัลฟอร์มที่ 2 (Second Normal Form : 2NF)
– นอร์มัลฟอร์มที่ 3 (Third Normal Form : 3NF)
– บอยซ์คอดด์นอร์มัลฟอร์ม (Boyce-Codd Normal Form : BCNF)
– นอร์มัลฟอร์มที่ 4 (Fourth Normal Form : 4NF)
– นอร์มัลฟอร์มที่ 5 (Fifth Normal Form : 5NF)
ถึงแม้ว่าการนอร์มัลไลเซชัน จะเป็นสิ่งสำคัญและจำเป็นที่สุดสำหรับการออกแบบฐานข้อมูล แต่ก็ไม่ได้หมายความว่าจะต้องทำการนอร์มัลไลเซชันจนถึงระดับนอร์มัลฟอร์มที่ 5 โดยทั่วไปการแสดงผลข้อมูลจากตารางที่อยู่ในนอร์มัลฟอร์มที่ 5 จะมีการเชื่อมต่อตารางเป็นจำนวนมาก ทำให้การแสดงผลและการโต้ตอบระหว่างระบบฐานข้อมูลกับผู้ใช้กระทำได้ช้า การออกแบบฐานข้อมูลที่ดีจึงต้องพิจารณาถึงความต้องการของผู้ใช้และต้องสามารถตอบสนองได้อย่างรวดเร็ว เพราะฉะนั้นในบางกรณีจึงมีการลดระดับการนอร์มัลไลเซชันในบางส่วนของการออกแบบฐานข้อมูล เพื่อให้ระบบสามารถตอบสนองได้ตามความต้องการของผู้ใช้ การลดระดับการนอร์มัลไลเซชัน (Denormalization) เป็นวิธีการลดระดับของนอร์มัลฟอร์มลงมา เช่น การแปลงจาก 3NF มาเป็น 2NF อย่างไรก็ตาม สิ่งที่จะได้รับเพิ่มขึ้นมาจากการลดระดับการนอร์มัลไลเซชัน นอกจากความเร็วที่ดีขึ้นแล้ว ความซ้ำซ้อนของข้อมูลก็เพิ่มสูงขึ้นด้วย ซึ่งเป็นสิ่งที่ควรนำมาพิจารณาอย่างระมัดระวัง
1) การแปลงให้อยู่ในรูปนอร์มัลฟอร์มที่ 1 (First Normal Form : 1NF)
คุณสมบัติของรีเลชันของแบบจำลองข้อมูลเชิงสัมพันธ์ ก็คือ ข้อมูลในแต่ละทัปเพิลจะต้องไม่ซ้ำกัน และค่าในแต่ละแอตทริบิวต์จะต้องไม่สามารถถูกแบ่งแยกย่อยลงไปได้อีกหรือมีความเป็นอะตอมมิค
(Atomic) รวมถึงจะต้องมีค่าเพียงค่าเดียวที่อยู่ในแต่ละแอตทริบิวต์หรือมีความเป็นซิงเกิลแวลู (Single Value) ซึ่งในการทำนอร์มัลไลเซชันให้อยู่ในนอร์มัลฟอร์ที่ 1 ก็อาศัยคุณสมบัติดังที่กล่าวไว้ข้างต้น
1.1) รีพีทติ้งกรุ๊ป (Repeating Group)
การที่ข้อมูลใน 1 ทัปเพิล สามารถมีค่าในแต่ละแอตทริบิวต์ได้มากกว่าหนึ่งค่า (Multivalued) จะทำให้เกิดรีพีทติ้งกรุ๊ป ดังตารางที่แสดงในภาพข้างล่าง ซึ่งเลขที่โครงการหนึ่งหมายเลขประกอบด้วยกลุ่มข้อมูลหลายกลุ่ม ซึ่งทำให้รีเลชันดังกล่าว ขาดคุณสมบัติซิงเกิลแวลู
1.2) นิยามของนอร์มัลฟอร์มที่ 1
รีเลชันจะอยู่ในรูปของนอร์มัลฟอร์มที่ 1 ก็ต่อเมื่อมีคุณสมบัติตามเงื่อนไขดังต่อไปนี้
1. มีการกำหนดแอตทริบิวต์ที่เป็นคีย์
2. ต้องไม่มีรีพีทติ้งกรุ๊ป แต่ละแถวหรือคอลัมน์จะมีค่าได้เพียง 1 ค่าเท่านั้น
3. แอตทริบิวต์ทุกตัวต้องขึ้นอยู่กับคีย์หลัก
จากภาพข้างบน เมื่อการการนอร์มัลไลเซชันให้อยู่ในรูปนอร์มัลฟอร์มที่ 1 จะได้ตารางที่แตกย่อยออกมาเป็น 2 ตาราง ดังภาพข้างล่าง ซึ่งมีคุณสมบัติตามนอร์มัลฟอร์มที่ 1 แล้ว
2) การแปลงให้อยู่ในรูปนอร์มัลฟอร์มที่ 2 (Second Normal Form : 2NF)
ในหนึ่งรีเลชันจะประกอบด้วยแอตทริบิวต์ต่าง ๆ ที่มีความสัมพันธ์ที่ขึ้นต่อกัน ซึ่งความสัมพันธ์ดังกล่าวจะเป็นตัวกำหนดว่าแอตทริบิวต์ใดเป็นตัวกำหนดข้อมูล หรือ คีย์แอตทริบิวต์ (Key Attribute) และและแอตทริบิวต์ใดเป็นข้อมูลที่ถูกกำหนดหรือนอนคีย์แอตทริบิวต์ (Nonkey Attribute)
2.1) ฟังก์ชันนัลดีเพนเดนซี (Functional Dependency: FD)
ในการทำนอร์มัลไลเซชัน จะต้องมีความเข้าใจหลักการของฟังก์ชันดีเพนเดนซี
(Function Dependency : FD) เสียก่อน โดยมีคำจำกัดความคือ B ขึ้นอยู่กับ A ถ้าทราบค่าของ A ก็จะทำให้รู้ค่าของ B ได้
ฟังก์ชันนัลดีเพนเดนซี สามารถแสดงด้วยการใช้เครื่องหมายลูกศร ( ->) ตัวอย่างเช่น A->B แสดง B เป็นฟังก์ชันนัลดีเพนเดนต์กับ A กล่าวคือ ถ้ารู้ค่า A ก็จะทำให้ทราบค่าของ B ด้วย ทุกค่าของ A ที่มีค่าเท่ากัน จะได้ค่า เท่ากันเสมอ
2.2) พาเชียลดีเพนเดนซี (Partial Dependency)
พาร์เชียลดีเพนเดนซี หมายถึง การที่มีแอตทริบิวต์บางแอตทริบิวต์ ที่ขึ้นอยู่กับเพียงบางส่วนของคีย์หลักเท่านั้น ตัวอย่างเช่น จากตารางในภาพข้างล่าง แอตทริบิวต์ชื่อพนักงานจะขึ้นอยู่กับคีย์รหัสพนักงาน ในขณะที่แอตทริบิวต์ชื่อแผนก จะขึ้นอยู่กับคีย์รหัสแผนก จะเห็นว่า ข้อมูลที่อยู่ในรีเลชันเดียวกัน แต่ไม่ได้ขึ้นอยู่กับคีย์ใดคียหนึ่งทั้งหมด แต่จะขึ้นอยู่กับคีย์ใดคีย์หนึ่งเพียงบางส่วนเท่านั้น
2.3) นิยามของนอร์มัลฟอร์มที่ 2
รีเลชันจะอยู่ในรูปของนอร์มัลฟอร์มที่ 2 ก็ต่อเมื่อมีคุณสมบัติตามเงื่อนไขดังต่อไปนี้
1. รีเลชันนั้นเป็นนอร์มัลฟอร์มที่ 1 อยู่แล้ว
2. รีเลชันนั้นไม่มีพาร์เชียลดีเพนเดนซี
ตัวอย่างรีเลชันพนักงานในแผนกในภาพข้างบน เมื่อทำการแตกออกเป็นรีเลชันย่อยที่ไม่มีพาร์เชียลดีเพนเดนซีแล้ว จะได้เป็นรีเลชันสองรีเลชัน คือ รีเลชันพนักงานและ รีเลชันแผนก ซึ่งอยู่ในรูปของนอร์มัลฟอร์มที่ 2 แล้ว ดังภาพข้างล่าง
3) การแปลงให้อยู่ในรูปนอร์มัลฟอร์มที่ 3 (Third Normal Form : 3NF)
ในหนึ่งรีเลชันจะประกอบคีย์แอตทริบิวต์และนอนคีย์แอตทริบิวต์ คีย์แอตทริบิวต์จะต้องเป็นตัวกำหนดความหมายหรือการมีอยู่ของแอตทริบิวต์อื่น ๆ ที่อยู่ในรีเลชันเสมอ
3.1) ทรานซิทีฟดีเพนเดนซี (Transitive Dependency)
ทรานซิทีฟดีเพนเดนซี หมายถึง การที่มีฟังก์ชันนัลดีเพนเดนซี ระหว่างแอตทริบิวต์ที่ไม่ได้เป็นส่วนของคีย์ใด ๆ แต่มีแอตทริบิวต์อื่น ๆ มาขึ้นกับแอตทริบิวต์นั้นตัวอย่างเช่น จากตารางในภาพข้างล่าง แอตทริบิวต์ชื่อพนักงาน และรหัสตำแหน่งงานจะขึ้นอยู่กับคีย์รหัสพนักงาน ในขณะที่แอตทริบิวต์ค่าแรงต่อชั่วโมของพนักงาน จะขึ้นอยู่กับแอตทริบิวต์รหัสตำแหน่งงานซึ่งไม่ใช่คีย์อีกต่อหนึ่งทำให้มีทรานซิทีฟดีเพนเดนซีเกิดขึ้นในรีเลชันนี้
3.2) นิยามของนอร์มัลฟอร์มที่ 3
รีเลชันจะอยู่ในรูปของนอร์มัลฟอร์มที่ 3 ก็ต่อเมื่อมีคุณสมบัติตามเงื่อนไขดังต่อไปนี้
1. รีเลชันนั้นเป็นนอร์มัลฟอร์มที่ 2 อยู่แล้ว
2. รีเลชันนั้นไม่มีทรานซิทีฟดีเพนเดนซี
ตัวอย่างรีเลชัน การทำงานของพนักงาน ในภาพข้างบน เมื่อทำการแตกออกเป็นรีเลชันย่อยที่ไม่มีทรานซิทีฟดีเพนเดนซีแล้ว จะได้เป็นรีเลชันสองรีเลชัน คือรีเลชันพนักงาน และรีเลชันตำแหน่งงาน ซึ่งอยู่ในรูปของนอร์มัลฟอร์มที่ 3 แล้ว ดังภาพข้างล่าง
4) การแปลงให้อยู่ในรูปบอยซ์คอดด์นอร์มัลฟอร์ม (Boyce-Codd Normal Form : BCNF)
ในหนึ่งรีเลชันอาจจะประกอบด้วยหลายแคนดิเดตคีย์ (Candidate Key) ทุกแอตทริบิวต์ในรีเลชันจะต้องขึ้นอยู่กับแคนดิเดตคีย์เสมอ เราสามารถกำหนดนิยามของรีเลชันที่อยู่ในรูปของบอยซ์คอดด์นอร์มัลฟอร์ม ก็ต่อเมื่อรีเลชันมีคุณสมบัติตามเงื่อนไขดังต่อไปนี้
1. รีเลชันนั้นเป็นนอร์มัลฟอร์มที่ 3 อยู่แล้ว
2. ทุกแอตทริบิวต์ในรีเลชันจะต้องขึ้นกับแคนดิเดตคีย์
รีเลชันจะอยู่ในรูปบอยซ์คอดด์นอร์มัลฟอร์ม ถ้าทุกแอตทริบิวต์ขึ้นอยู่กับแคนดิเดตคีย์ (Candidate Key) ดังนั้นถ้าใน 1 รีเลชันมีแคนดิเดตคีย์เพียงตัวเดียวแล้ว นอร์มัลฟอร์มที่ 3 และบอยซ์คอดด์นอร์มัลฟอร์ม จะเหมือนกัน โอกาสที่คุณสมบัติของบอยซ์คอดด์นอร์มัลฟอร์มจะถูกละเมิดนั้น เกิดขึ้นได้น้อย และจะเกิดได้กับรีเลชันที่มีแคนดิเดตคีย์มากกว่าหนึ่งเท่านั้น ดังตัวอย่างในภาพข้างล่าง รีเลชันการลงทะเบียนเรียน รีเลชันดังกล่าวอยู่ในรูปนอร์มัลฟอร์มที่ 3 แล้ว แต่ก็ยังมีบางส่วนมีปัญหาอยู่ ตรงจุดที่แอตทริบิวต์รหัสวิชาเรียน และผลการเรียนขึ้นอยู่กับคีย์นักศึกษา และคีย์ผู้สอน แต่ในขณะเดียวกันรหัสผู้สอนก็ขึ้นอยู่กับรหัสวิชาเรียน ทำให้ถ้าต้องการเปลี่ยนแปลงผู้สอนในวิชา 301 จะต้องมีการเปลี่ยนแปลงถึง 2 ทัปเพิล ซึ่งผลลัพธ์ที่ได้อาจจะทำให้เกิดความผิดพลาดหากทำการแก้ไขไม่ครบถ้วน และถ้านักศึกษารหัส 135 ถอนการลงทะเบียนวิชา 280 ข้อมูลของผู้ที่สอนวิชานี้จะหายไปจากระบบเลย ถ้าเราลบข้อมูลนี้
![Image](https://msit5.files.wordpress.com/2013/09/44.jpg?w=487)
เราสามารถทำการแตกตารางออกมาให้อยู่ในรูปของบอยซ์คอดด์นอร์มัลฟอร์มได้ โดยการแยกแอตทริบิวต์รหัสวิชาเรียนและรหัสผู้สอนซึ่งขึ้นอยู่กับแอตทริบิวต์รหัสวิชาเรียน ออกมาเป็นอีกหนึ่งรีเลชัน และแยกแอตทริบิวต์ รหัสนักศึกษา รหัสผู้สอน และผลการเรียนออกมาเป็นอีกหนึ่งรีเลชัน ดังแสดงในภาพข้างล่าง
5) การแปลงให้อยู่ในรูปนอร์มัลฟอร์มที่ 4 (Fourth Normal Form : 4NF)
ในขณะที่การทำให้อยู่ในรูปของนอร์มัลฟอร์มต่าง ๆ ที่ผ่านมา จะเกี่ยวข้องกับการขึ้นตรงต่อกันของข้อมูลในแต่ละแอตทริบิวต์หรือฟังก์ชันนัลดีเพนเดนซี แต่การทำให้อยู่ในรูปของนอร์มัลฟอร์มที่ 4 จะเกี่ยวข้องกับรูปแบบของการขึ้นตรงต่อกันของข้อมูลในระดับที่ซับซ้อนกว่า
5.1) มัลติแวลูดีเพนเดนซี (Multivalued Dependency)
ถ้าแต่ละแอตทริบิวต์ในหนึ่งรีเลชัน แบ่งออกเป็นกลุ่มของข้อมูลอิสระ เช่นแอตทริบิวต์ X, Y และ Z แบ่งออกเป็นกลุ่มข้อมูลของ X, Y และ Z ที่เป็นอิสระต่อกัน มัลติแวลลูดีเพนเดนซี X –>> Y หมายถึงว่าค่า X หนึ่งค่าสามารถที่จะบอกค่า Y ได้หลาย ๆ (X Multi-Determinse Y) ไม่ว่า Z จะมีค่าเป็นอะไรก็ตาม
โดยปกติ ถ้า R ประกอบด้วย Attribute X, Y และ Z (Z = R – {XY} ) ดังนั้น ถ้า X –>> Y แล้ว X –>> Z เสมอ สามารถเขียนใหม่เป็น X –>> Y | Z ถ้า Y เป็นสับเซทของ X หรือ X ยูเนี่ยน Y = R แล้ว เราเรียก X –>> Y ว่า ทริเวียลมัลติแวลูดีเพนเดนซี (Trivial Multivalued Dependency) ซึ่งจะต่างจากฟังก์ชันนัลดีเพนเดนซี X –> Y ที่ X จะสามารถบอกค่า Y ได้แค่เพียงค่าเดียว ดังตัวอย่างภาพข้างล่าง เนื่องจากแอตทริบิวต์ รหัสโครงการ รหัสบริษัท และที่ตั้งโครงการล้วนเป็นคีย์แอตทริบิวต์ ดังนั้นรีเลชันในภาพ จึงถือว่าอยู่ในรูป BCNF แล้ว แต่ยังไม่อยู่ในรูปของ 4NF เนื่องจากรีเลชันดังกล่าวยังมีทริเวียลมัลติแวลูดีเพนเดนซีอยู่ในรีเลชัน ตัวอย่างเช่นรหัสโครงการA001 สามารถบอกค่าของรหัสบริษัทที่เป็นผู้รับผิดชอบได้มากกว่าหนึ่งบริษัท คือ รหัสบริษัท B001 และ B002 ในขณะเดียวกันรหัสโครงการ A001 ก็บอกถึงที่ตั้งของโครงการสองแห่งคือ จันทบุรี และระยอง ซึ่งถ้ามีการเพิ่มบริษัทที่รับผิดชอบโครงการเข้าไปในโครงการ A001 อีกหนึ่งบริษัทก็จะต้องมีการเพิ่มข้อมูลถึงสองทัปเพิลเนื่องจากโครงการดังกล่าวมีที่ตั้งอยู่ถึงสองแห่งคือ ระยอง และจันทบุรี ส่งผลให้เกิดความซ้ำซ้อนของข้อมูลขึ้นในรีเลชันดังกล่าว และอาจจะเกิดความผิดพลาดในการเพิ่มข้อมูลได้ เนื่องจากที่ตั้งโครงการไม่ได้ขึ้นอยู่กับรหัสบริษัทที่เป็นผู้รับผิดชอบแต่ขึ้นอยู่กับรหัสโครงการ ดังนั้น ถ้าหากมีการเพิ่มบริษัทผู้รับผิดชอบเพิ่มขึ้นอีกหนึ่งบริษัท เราจำเป็นที่จะต้องทำการเพิ่มข้อมูลที่ตั้งโครงการเข้าไปอีกสองแห่งด้วยเสมอ ซึ่งเป็นผลจากความสัมพันธ์ในรูปแบบของ ทริเวียลมัลติแวลูดีเพนเดนซี นั่นเอง
![Image](https://msit5.files.wordpress.com/2013/09/46.jpg?w=487)
นอร์มัลฟอร์มที่ 4
5.2) นิยามของนอร์มัลฟอร์มที่ 4
รีเลชันจะอยู่ในรูปของนอร์มัลฟอร์มที่ 4 ก็ต่อเมื่อมีคุณสมบัติตามเงื่อนไขดังต่อไปนี้
1. รีเลชันนั้นเป็นบอยซ์คอดด์นอร์มัลฟอร์มอยู่แล้ว
2. รีเลชันนั้นไม่มีทริเวียลมัลติแวลูดีเพนเดนซี
จากรีเลชันในภาพข้างบน เราสามารถขจัดทริเวียลมัลติแวลูดีเพนเดนซี โดยการแตกรีเลชันดังกล่าวออกเป็นรีเลชันย่อย 2 รีเลชัน ซึ่งจะทำให้ทั้งสองรีเลชันอยู่ในรูปของนอร์มัลฟอร์มที่ 4 ดังภาพข้างล่าง
6) การแปลงให้อยู่ในรูปนอร์มัลฟอร์มที่ 5 (Fifth Normal Form : 5NF)
การแปลงให้อยู่ในรูปของนอร์มัลฟอร์มที่ 5 จะพิจารณาถึงการขึ้นต่อกันของข้อมูลในการแยกข้อมูลในรีเลชันออกเป็นรีเลชันย่อย และประกอบรีเลชันย่อยกลับเป็นรีเลชันใหญ่เช่นเดิม ซึ่งเป็นการตรวจสอบว่าเมื่อรวมกันใหม่ด้วยวิธีการจอยน์แล้ว จะได้รีเลชันกลับมาเหมือนเดิมทุกประการหรือไม่
6.1) จอยน์โอเปอรชัน (Join Operation)
ถ้ามี R1(X,Y) และ R2(Y,Z) R1 JOIN R2 = R3(X, Y, Z) โดยที่ t(x, y, z) อยู่ใน R3 ก็ต่อเมื่อมี t1(x,y) อยู่ใน R1 และ t2(y,z) อยู่ใน R2
6.2) จอยน์ดีเพนเดนซี (Join Dependency)
ในการแยกรีเลชันออกเป็นส่วนย่อย (Decomposition) R1, R2, R3, Rn มีคุณสมบัติจอยน์ดีเพนเดนซี ก็ต่อเมื่อ R1 JOIN R2 JOIN R3 … JOIN Rn = R นั่นคือเมื่อเอารีเลชันย่อยมารวมกันก็ต้องได้รีเลชันเดิม ที่ไม่มีข้อมูลสูญหาย และไม่มีทัปเพิลที่เกินมา ที่เรียกว่า สพิวเรียสทัปเพิล (Spurious Tuple)
6.3) นิยามของ 5NF รีเลชันจะเป็น 5NF ถ้า
1. รีเลชันนั้นเป็นนอร์มัลฟอร์มที่ 4 อยู่แล้ว
2. การแบ่งแยกรีเลชันมีคุณสมบัติจอยน์ดีเพนเดนซี
จากตัวอย่างในภาพข้างล่าง รีเลชัน วิชาเรียนประจำภาคอยู่ในรูปของนอร์มัลฟอร์มที่ 4 แล้ว เนื่องจากแอตทริบิวต์ภาคการศึกษาเป็นตัวกำหนดแอตทริบิวต์รหัสวิชาหลาย ค่าในขณะที่แอตทริบิวต์รหัสวิชา ก็เป็นตัวกำหนดแอตทริบิวต์รหัสชั้นเรียนหลายค่า รีเลชันนี้จึงไม่มีทริเวียลมัลติแวลูดีเพนเดนซี ต่อไปเราจึงทำการทดสอบคุณสมบัตินอร์มัลฟอร์มที่ 5 ของรีเลชันวิชาเรียนประจำภาค โดยเมื่อนำรีเลชันดังกล่าวมาทำการแตกย่อยออกเป็นสามรีเลชันคือ รีเลชันภาคการศึกษา รีเลชันวิชาเรียนของชั้นเรียน และ รีเลชันชั้นเรียนประจำภาค และทำการจอยน์ทั้งสามรีเลชันรวมกลับเป็นหนึ่งรีเลชันอีกครั้ง จะได้จำนวนข้อมูลเท่ากันกับรีเลชันก่อนที่จะมีแตกเป็นรีเลชันย่อยทุกประการ ซึ่งก็คือรีเลชันดังกล่าวมีคุณสมบัติจอยน์ดีเพนเดนซีและอยู่ในรูปของนอร์มัลฟอร์มที่ 5 แล้ว
|