หน่วยที่ 5 การนอร์มัลไลเซชัน

นอร์มัลไลเซชัน (Normalization)

         ความซ้ำซ้อนของข้อมูลทำให้ข้อมูลมีขนาดใหญ่เกินความจำเป็น ส่วนที่ซ้ำซ้อนเป็นปัญหาของตารางข้อมูล (รีเลชั่น) แต่สามารถขจัดได้ด้วยขบวนการนอร์มัลไลเซชัน โดยการนอร์มัลไลเซชันถูกคิดค้นโดย E.F.Codd ซึ่งเป็นกระบวนการที่นำเค้าร่างของ relation มาทำให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน (Normal Form) เพื่อให้แน่ใจว่าการออกแบบเค้าร่างของ relation เป็นการออกแบบที่เหมาะสม

          นอร์มัลไลเซชัน คือ กระบวนที่ดำเนินการอย่างเป็นลำดับเพื่อลดปัญหาการซ้ำซ้อนของข้อมูล จึงกล่าวได้ว่านอร์มัลไลเซชันเป็นการออกแบบเพื่อลดความซ้ำซ้อนในข้อมูล

          การนอร์มอลไลท์เซชันคือการแปลงข้อมูลที่มีโครงสร้างแบบตาราง (รีเลชันนัล) จากรูปแบบที่มีความซ้ำซ้อนให้อยู่ในรูปที่ใช้งานได้ง่าย เพื่อให้ทำการเพิ่มข้อมูล ลบข้อมูล หรือแก้ไขข้อมูลที่อยู่ในรีเลชันได้โดยไม่เกิดความผิดพลาด

          หมายเหตุ การขึ้นต่อกันแบบทรานซิทีฟ (Transitive Dependency) หมายถึง แอตทริบิวต์ที่ไม่ใช่คีย์หลักสามารถระบุค่าแอตทริบิวต์อื่น

          กระบวนการนอร์มัลไลเซชัน ( Normalization Process ) เป็นกระบวนการเค้าร่างของรีเลชันมาทำให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ( Normal Form ) เพื่อให้แน่ใจว่าการออกแบบเค้าร่างของรีเลชันเป็นการออกแบบที่เหมาะสม กระบวนการนอร์มัลไลเซชันมีหลายระดับ (แต่ปฏิบัติการทำนอร์มอลไลซ์จะเริ่มจาก E-R Model ก่อน)

ประโยชน์นอร์มัลไลเซชัน คือ
          1. ลดที่ว่างที่ต้องใช้ในการเก็บข้อมูล
          2. ลดความผิดพลาดและความไม่ตรงกันของข้อมูลในฐานข้อมูล
          3. ลดการสูญเสียเวลาการเข้าถึงข้อมูลที่เกิดซ้ำซ้อนในข้อมูลของการลบและแก้ไขข้อมูล
          4. เพิ่มความคงทนแก่โครงสร้างฐานข้อมูล

ระดับนอร์มัลไลเซชัน
           นอร์มัลไลเซชัน  เป็นกระบวนการเพื่อพัฒนาการ เชื่อมต่อของข้อมูลเพื่อแก้ปัญหาของตารางข้อ(รีเลชั่น) ที่ว่าการออกแบบฐานข้อมูลทั้งทางตรรกะ และทางกายภาพที่ได้ออกมาใช้ได้หรือยัง การนอร์มัลไลเซชันแบ่งออกได้เป็นหลายระดับ  ได้แก่

  • นอร์มัลฟอร์ม - ระดับที่1 - (First Normal Form (1NF)), ทุกแอททริบิวต์ในแต่ละแถวมีค่าของข้อมูลเพียงค่าเดียว

ตารางหรือรีเลชันที่ไม่มีกลุ่มข้อมูลใดๆซ้ำอยู่ในรีเลชัน คือ ทุกช่องในรีเลชันจะต้องมีข้อมูลเพียงค่าเดียวเท่านั้น  สรุป " รีเลชันใดจะอยู่รูป 1NF ได้ รีเลชันั้นจะต้องไม่มีข้อมูลซ้ำอยู่ " 

          ดังนั้นจะต้องกำจัดกลุ่มข้อมูลซ้ำออกไปแล้วทำการหาคีย์หลักของรีเลชัน อาจจะต้องมีการแตกรีเลชันเป็นหลายรีเลชันก็ได้

          วิธีการที่จะทำให้เป็น 1NF คือ แยกคอลัมน์ที่มีค่ามากกว่า 1 ค่าออกเป็นแถวใหม่ และเพิ่มข้อมูลที่เหมาะสมเข้าไปในคอลัมน์ที่ว่างอยู่ของแถวที่เกิดขึ้นใหม่

ระดับ 0 นำตารางที่มีลักษณะข้อมูลเป็นค่าของกลุ่มข้อมูลที่ซ้ำกัน [ไม่เป็นรูปแบบ (Unnormal  Form)]

ตัวอย่าง ตารางนักศึกษาลงทะเบียน (รหัสนักศึกษา, ชื่อ, นามสกุล, คณะ, สาขา, รหัสวิชาที่ลงทะเบียน,ชื่อวิชา, วันเดือนปีที่ลงทะเบียน) 

รหัสนักศึกษา ชื่อ นามสกุล คณะ สาขา รหัสวิชาที่ลงทะเบียน ชื่อวิชา วันเดือนปีที่ลงทะเบียน
001 ยอดรัก อบอุ่นใจ บริหาร คอมพิวเตอร์ธุรกิจ 124-100 การจัดการ 2558-5-5
          124-105 การเงิน 2558-5-5
          124-138 พื้นฐานคอมพิวเตอร์ 2558-5-5
002 ชาตรี สง่างาม ศึกษาศาสตร์ เทคโนโลยีการศึกษา 124-103 การศึกษาปฐมวัย 2558-5-2
          124-138 พื้นฐานคอมพิวเตอร์ 2558-5-2

         จากตารางดังกล่าวทำให้ทุกแอททริบิวท์ในแต่ละแถว (ทัพเพิล) มีข้อมูลเป็นค่าเดี่ยว  โดยเติมค่าของข้อมูลให้เต็มทุกช่อง 

รหัสนักศึกษา ชื่อ นามสกุล คณะ สาขา รหัสวิชาที่ลงทะเบียน ชื่อวิชา วันเดือนปีที่ลงทะเบียน
001 ยอดรัก อบอุ่นใจ บริหาร คอมพิวเตอร์ธุรกิจ 124-100 การจัดการ 2558-5-5
001 ยอดรัก อบอุ่นใจ บริหาร คอมพิวเตอร์ธุรกิจ 124-105 การเงิน 2558-5-5
001 ยอดรัก อบอุ่นใจ บริหาร คอมพิวเตอร์ธุรกิจ 124-138 พื้นฐานคอมพิวเตอร์ 2558-5-5
002 ชาตรี สง่างาม ศึกษาศาสตร์ เทคโนโลยีการศึกษา 124-103 การศึกษาปฐมวัย 2558-5-2
002 ชาตรี สง่างาม ศึกษาศาสตร์ เทคโนโลยีการศึกษา 124-138 พื้นฐานคอมพิวเตอร์ 2558-5-2

          จากนั้นกำจัดข้อมูลที่มีกลุ่มซ้ำในตาราง (รีเลชัน) ออกไป  โดยแยกให้อยู่อีกตาราง (รีเลชัน) หนึ่ง ตามตัวอย่างจะเกิดเป็นตารางนักศึกษา และตารางวิชาลงทะเบียน

          โดยตารางนักศึกษาลงทะเบียน (รหัสนักศึกษา, ชื่อ, นามสกุล, คณะ, สาขา, รหัสวิชาที่ลงทะเบียน,ชื่อวิชา, วันเดือนปีที่ลงทะเบียน)

แก้ไขเป็น 

  • ตารางนักศึกษา (รหัสนักศึกษา, ชื่อ, นามสกุล, คณะ, สาขา)
รหัสนักศึกษา ชื่อ นามสกุล คณะ สาขา
001 ยอดรัก อบอุ่นใจ บริหาร คอมพิวเตอร์ธุรกิจ
002 ชาตรี สง่างาม ศึกษาศาสตร์ เทคโนโลยีการศึกษา

 

  • ตารางวิชาลงทะเบียน(รหัสนักศึกษา, รหัสวิชาที่ลงทะเบียน,ชื่อวิชา, วันเดือนปีที่ลงทะเบียน)    
รหัสนักศึกษา รหัสวิชาที่ลงทะเบียน ชื่อวิชา วันเดือนปีที่ลงทะเบียน
001 124-100 การจัดการ 2558-5-5
001 124-105 การเงิน 2558-5-5
001 124-138 พื้นฐานคอมพิวเตอร์ 2558-5-5
002 124-103 การศึกษาปฐมวัย 2558-5-2
002 124-138 พื้นฐานคอมพิวเตอร์ 2558-5-2

          สรุปนอร์มัลไลเซชันระดับที่ 1  (1NF)  เป็นการขจัดแอตตริบิวหรือกลุ่มแอตตริบิวที่ซ้ำกัน  แต่ปัญหาที่เกิดขึ้นกับรีเลชันที่มีรูปแบบ 1NF คือ การเก็บข้อมูลแบบนี้เป็นการสิ้นเปลืองเพราะมีค่าของกลุ่มข้อมูลที่ซ้ำกัน ได้แก่ ความผิดปกติต่อการเปลี่ยนแปลงแก้ไขข้อมูลการลบข้อมูล และการเพิ่มข้อมูล                     

  • นอร์มัลฟอร์ม - ระดับที่2 - (Second Normal Form (2NF)), ปรับมาจากระดับที่1 รีเลชันนั้นต้องไม่มีความสัมพันธ์ระหว่างแอททริบิวต์แบบบางส่วน (แอททริบิวต์ทุกตัวต้องขึ้นกับคีย์หลักทุกตัว ไม่ขึ้นอยู่กับตัวใดตัวหนึ่ง)

โดยระดับที่2 เป็นการขจัดแอตตริบิวที่ไม่ขึ้นกับทั้งส่วนของคีย์หลักออกไป  เพื่อให้แอตตริบิวอื่นทั้งหมดขึ้นตรงกับส่วนที่เป็นคีย์หลักทั้งหมดเท่านั้น 

ตัวอย่างพิจารณาจากโจทย์เดิม (1NF) ตารางนักศึกษา (รหัสนักศึกษา, ชื่อ, นามสกุล, คณะ, สาขา) และ (1NF) ตารางวิชาลงทะเบียน(รหัสนักศึกษา, รหัสวิชาที่ลงทะเบียน,ชื่อวิชา, วันเดือนปีที่ลงทะเบียน)

เริ่มต้นจากพิจารณาต่อว่าทั้ง 2 ตาราง (รีเลชัน) ดังกล่าวจัดอยู่ใน 2 NF ได้หรือไม่

  • ตาราง (รีเลชัน) นักศึกษาจัดเป็น 2 NF  เพราะมีแอททริบิวท์ที่เป็นคีย์หลักเพียงแอททริบิวท์เดียวได้แก่ รหัสนักศึกษา
  • ตารางวิชาลงทะเบียนไม่จัดเป็น 2 NF  เพราะคีย์หลักมี 2 แอททริบิวท์ได้แก่ รหัสนักศึกษาและรหัสวิชาที่ลงทะเบียน

แก้ไขตารางวิชาลงทะเบียน

          การทำให้ตาราง (รีเลชัน) มีคุณสมบัติอยู่ใน 2 NF สามารถกระทำได้โดยจะต้องแยกกลุ่มของแอททริบิวท์ที่ขึ้นกับบางส่วนของคีย์หลักนั้นออกไปเป็นอีกรีเลชันหนึ่ง  และสำหรับแอททริบิวท์ที่เหลือซึ่งขึ้นอยู่กับคีย์หลักที่แท้จริงนั้นให้อยู่อีกรีเลชันหนึ่ง

  • ตารางวิชา (รหัสวิชา, ชื่อวิชา)
รหัสวิชา ชื่อวิชา
124-100 การจัดการ
124-103 การศึกษาปฐมวัย
124-105 การเงิน
124-138 พื้นฐานคอมพิวเตอร์
  • ตารางลงทะเบียน (รหัสนักศึกษา, รหัสวิชา, วันเดือนปีที่ลงทะเบียน)
รหัสนักศึกษา รหัสวิชา วันเดือนปีที่ลงทะเบียน
001 124-100 2558-5-5
001 124-105 2558-5-5
001 124-138 2558-5-5
002 124-103 2558-5-2
002 124-138 2558-5-2

 

  • นอร์มัลฟอร์ม - ระดับที่3 - (Third Normal Form (3NF)), ปรับมาจากระดับที่2 ทุกแอททริบิวต์ที่ไม่ใช่คีย์หลักไม่มีคุณสมบัติในการกำหนดค่าของแอททริบิวต์อื่น

แอททริบิวท์จะต้องขึ้นกับคีย์หลักของรีเลชันเท่านั้น โดยจะต้องไม่มีการขึ้นต่อกันระหว่างแอททริบิวท์ด้วยกันเอง

เริ่มต้นจากพิจารณาต่อว่าทั้ง 3 ตาราง (รีเลชัน) ดังกล่าวจัดอยู่ใน 3 NF ได้หรือไม่

  • ตาราง (รีเลชัน) นักศึกษาไม่จัดเป็น 3 NF  เพราะ คณะสามารถมีได้หลายสาขาเพื่อจัดการความซ้ำซ้อนจึงต้องปรับปรุงใหม่

แก้ไขตารางนักศึกษา

  • ตารางนักศึกษา (รหัสนักศึกษา, ชื่อ, นามสกุล, รหัสสาขา)
รหัสนักศึกษา ชื่อ นามสกุล รหัสสาขา
001 ยอดรัก อบอุ่นใจ 102
002 ชาตรี สง่างาม 305
  • ตารางคณะ (รหัสสาขา, คณะ, สาขา)
รหัสสาขา คณะ สาขา
102 บริหาร คอมพิวเตอร์ธุรกิจ
305 ศึกษาศาสตร์ เทคโนโลยีการศึกษา
  • ตารางวิชา (รหัสวิชา, ชื่อวิชา)
  • ตารางลงทะเบียน (รหัสนักศึกษา, รหัสวิชา, วันเดือนปีที่ลงทะเบียน)

 

  • นอร์มัลฟอร์ม - บอยซ์คอดด์ (Boyce-Codd Normal Form (BCNF)) ปรับมาจากระดับที่3

กำหนดคีย์คู่แข่งในตารางจึงมีคุณสมบัติเป็น  BCNF

 

  • นอร์มัลฟอร์ม - ระดับที่4 - (Forth Normal Form (4NF)), ปรับมาจากระดับที่BCNF

จะต้องไม่มีการขึ้นต่อกันเชิงกลุ่มภายในรีเลชัน

 

  • นอร์มัลฟอร์ม - ระดับที่5 - (Fifth Normal Form (5NF)), ปรับมาจากระดับที่4

จะต้องไม่มีคุณสมบัติของการขึ้นต่อกันแบบเชื่อมโยง (join)

 

หมายเหตุ ส่วนใหญ่พบว่าการทำถึงระดับที่ 3  ก็เพียงพอที่จะแก้ปัญหาความผิดปกติและความซ้ำซ้อนของข้อมูลได้