วิธีลดความซ้ำซ้อนของข้อมูล



 
Normalization
  Normalization
             เป็นวิธีการลดความซ้ำซ้อนของข้อมูลที่อาจเกิดขึ้นได้ มักใช้ในการออกแบบฐานข้อมูลที่เป็น
แบบ Relational Database ซึ่งการทำ Normalization นี้จะช่วยให้ความซ้ำซ้อนของข้อมูลลดลง และลด
โอกาสที่จะทำให้เกิดความผิดพลาดจากการประมวลผลข้อมูลในตารางต่างๆ ซึ่งหลักการทำ Normaliza
tion นี้ จะทำการแบ่งตารางที่มีความซ้ำซ้อนของข้อมูลออกมาเป็นตารางย่อย ๆ   และใช้ Foreign Key
เป็นตัวเชื่อมความสัมพันธ์ระหว่างตาราง
             ข้อมูลที่ซ้ำซ้อนกันนี้จะก่อให้เกิดปัญหาขึ้นอย่างน้อย 2 ประการ คือ
         1. ปัญหาความผิดพลาดของข้อมูล เช่น การที่ลูกค้าเปลี่ยนชื่อหรือในกรณีที่บริษัทมีการเปลี่ยน
แปลงรายละเอียดสินค้า เราจะต้องทำการแก้ไขข้อมูลให้ครบทุกเรคคอร์ดในตาราง มิฉะนั้นข้อมูลใน
บางเรคคอร์ดจะเกิดความผิดพลาดได้
         2. เปลืองเนื้อที่ในการจัดเก็บข้อมูลเพราะจะต้องจัดเก็บข้อมูลเดียวกันไว้ในหลาย ๆ เรคคอร์ด

 


          หลักการทำ Normalization

 
           หลักการทำ Normalization สิ่งสำคัญคือ"การลดความ
   ซ้ำซ้อนและโอกาสที่จะเกิดความผิดพลาดกับข้อมูลได้"  ซึ่ง
   การที่จะทำให้บรรลุจุดประสงค์ดังกล่าวจะต้องมีเกณฑ์และ
   ขั้นตอนในการวิเคราะห์ข้อมูล
        โดยทั่วไปเราต้องรู้ก่อนว่าแต่ละตารางมี field ใดบ้างสา-
   มารถบ่งชี้หรือค้นหาข้อมูลได้ เช่น เมื่อทราบรหัสลูกค้า จะ
   ทำให้สามารถค้นหา ชื่อ,นามสกุล,ที่อยู่ ฯลฯ ได้
        สำหรับเกณฑ์เหล่านี้เราจะเรียกว่า "Functionl Depen-
   dency" (FD)
  ใชัสัญลักษณ์    แทนการกำหนดค่าระ-
   หว่าง field
        คุณสมบัติที่สำคัญอีกประการของการทำ Normalization
   คือ เมื่อตารางใดจัดอยู่ใน Normal Form ใด แล้วจะต้องมี
   คุณสมบัติของ Normal Form ที่ต่ำกว่าเสมอ เช่น ถ้าตาราง
   ใดเป็น 3N จะต้องมีคุณสมบัติของ 1N และ 2N อยู่ด้วย
  
 
 
 
 
               2NF(Second Normal Form)
        การทำ 2 NF เน้นการวิเคราะห์ฟิลด์ที่เป็น Primary
  Key โดยปรกติแล้ว Primary Key ของตารางหนึ่งๆ อาจ
  ประกอบด้วย Field เพียง Field เดียวหรือหลาย Fields
  รวมอยู่ด้วยกันก็ได้โดยมีหลักว่า "หากมีตารางใดที่ประ
  กอบด้วย Field เพียง Field เดียวจะถือว่าตารางนั้นอยู่
  ใน 2NF"
ส่วนตารางใดที่มีหลาย Fields รวมกันเป็น
  Primary Key ให้แยกเอา Fields นั้นไปสร้างตารางใหม่
  ดังตัวอย่าง

 
               1NF(First Normal Form)
        ตารางใดจะถือว่าอยู่ใน 1 NF หรือไมจะพิจารณาทุก
  Fields ในตารางว่าจะต้อง"ไม่มี Fields ใด Fields หนึ่งที่
  ลักษณะเป็น Multivalued (Field เดียวแต่เก็บหลายๆ ค่า
  ไว้ด้วยกันเช่น

Car Table
CID Brand Model Color
1ข-2776 Benz E220 ขาว,เหลือง
9ค-8412 Misubishi Lacer แดง,ขาว,
2ถ-5266 Toyota Corolla เหลือง,เทา

      จากตัวอย่างดังกล่าวจะเห็นได้ว่า Field "Color"จะเป็น
  ลักษณะของ Multivalued  ซึ่งให้แก้ไขโดยแบ่ง Field ดัง
  กล่าวออกเป็นอีกตาราง และดึงเอา Primary Key ของ
  ตารางนั้นมาด้วยดังรูป
 
Car Table
CID Brand Model
1ข-2776 Benz E220
9ค-8412 Misubishi Lacer
2ถ-5266 Toyota Corolla
Color Table
CID Color
1ข-2776 ขาว
1ข-2776 เหลือง
9ค-8412 แดง
2ถ-5266 เทา
9ค-8412 ขาว
2ถ-5266 เหลือง

ตารางรายการขาย (InvoiceDetail Table)
InvNo InvDt Pid Pname Brand Model Qu Cid Title Fname Lname Tel
101 10/7/00 M011 หม้อหุงข้าว Hitachi CX98 20 C01 นาย สุรสิทธิ์ รักล้น 522-1622
101 10/7/00 F002 ตู้เย็น Whirlpool AB77 5 C01 นาย สุรสิทธิ์ รักล้น 522-1622
101 10/7/00 F003 ตู้เย็น National CC87 10 C01 นาย สุรสิทธิ์ รักล้น 522-1622
102 11/7/00 F002 ตู้เย็น Whirlpool AB77 15 C03 นาย สมศักดิ์ มักรวย 121-1111
102 11/7/00 F005 ตู้เย็น Whirlpool CC87 30 C03 นาย สมศักดิ์ มักรวย 121-1111
103 11/7/00 M011 หม้อหุงข้าว Hitachi CX98 2 C01 นาย สุรสิทธิ์ ทองมาก 252-1111
104 12/7/00 F002 ตู้เย็น Whirlpool AB77 5 C02 นส. การุณ ทองสุข 254-1545

       จากตัวอย่างจะเห็นได้ว่า Pid (รหัสสินค้า) ซึ่งเป็นส่วนหนึ่งของ Primary Key ในตาราง InvoiceDetail (รายการขาย)
  สามารถไปกำหนดฟิลด์ Pname(ชื่อสินค้า),Brand (ยี่ห้อ),Model (รุ่น),ได้ ดังนั้นเราจึงแยกเอาฟิลด์ Pname,Brand,Model
  Pid ไปสร้าใหม่อีกตาราง และตั้งชื่อว่า Product (สินค้า) ดังตารางด้านล่าง
           นอกจากฟิลด์ Pid แล้วยังมีฟิลด์ InvNo (หมายเลขใบกำกับสินค้า) ที่เป็นส่วนหนึ่งของ Primary Key และสามารถไป
  บ่งชี้ฟิลด์อื่นๆ ได้คือ ฟิลด์ InvDt (วันที่ใบกำกับสินค้า), และCid (รหัสลูกค้า) ดังนั้นเราจึงแยกฟิลด์ InvDt,Cid และ InvNo
  ไว้ในตาราง Invoice (ใบกำกับสินค้า) ดังแสดงในตาราง
 
ตัวอย่างการ Normalization ในระดับ 2NF
ตารางสินค้า (Product Table)               ตารางใบกำกับสินค้า (Invoice Table)
Pid Pname Brand Model Price
M011 หม้อหุงข้าว Hitachi CX98 2500
F002 ตู้เย็น Whirlpool AB77 8000
F003 ตู้เย็น National CC87 6800
InvNo InvDt Cid
101 10/7/00 C01
102 11/7/00 C03
103 11/7/00 C01
104 12/7/00 C02

ตารางรายการขาย (Invoice Detail Table)
InvNo Pid Qu Cid Title Fname Lname Tel
101 M011 20 C01 นาย สุรสิทธิ์ รักล้น 522-1622
101 F002 5 C01 นาย สุรสิทธิ์ รักล้น 522-1622
101 F003 10 C01 นาย สุรสิทธิ์ รักล้น 522-1622
102 F002 15 C03 นาย สมศักดิ์ มักรวย 435-7207
102 F005 30 C03 นาย สมศักดิ์ มักรวย 435-7207
103 M011 2 C01 นาย สุรสิทธิ์ ทองมาก 252-1111
104 F002 5 C02 นส. การุณ ทองสุข 254-1545

        จากตัวอย่างเป็นการทำให้อยู่ในระดับ 2NF เท่านั้นจึงสังเกตได้ว่าฟิลด์ Cid ในตารางรายการการขายนั้นสามารถบ่งชี้
  ฟิลด์ Title,Fname,Lname,Tel ได้ แต่ไม่มีการแยกออกไปเป็นอีกตาราง เนื่องจากฟิลด์ Cid ไม่เป็นส่วนหนึ่งของ Primary
  Key  และสังเกตได้ว่ายังมีข้อมูลที่ซ้ำซ้อนอีกจำนวนมาก เช่น ลูกค้าชื่อ "สุรสิทธิ์" จะต้องเก็บถึง 3 record   ดังนั้นจะต้องทำ
  Normalization ในระดับต่อไป

 



























Up to top
 
               3NF (Third Normal Form)
   
        หลักการทำ 3NF คือ การที่จะต้องไม่มีฟิลด์ใดในตาราง นอกจาก Primary Key ที่ามารถไปกำหนดฟิลด์อื่น ดังตัวอย่างใน
  ขั้นตอน 2NF จะเห็นได้ว่ารหัสลูกค้า (Cid) ไม่ได้เป็น Primary Key ของตารางแต่สามารถไปกำหนด ชื่อ,นามสกุล,คำนำหน้า
  และเบอร์โทรศัพท์ ดังนั้นตารางรายการการขาย (Invoice Datail Table) จึงไม่อยู่ในรูป 3NF
        วิธีแก้ไข คือ แยกเอาฟิลด์ต่างๆ ที่ถูกกำหนดโดยฟิลด์ที่ไม่ใช่ Primary Key นั้นออกมาอีกตารางหนึ่งและดึงเอาฟิลด์เป็น
  ตัวกำหนดนันมาเป็นส่วนร่วมในตารางใหม่นี้ด้วย ดังนั้นฟิลด์ Title,Fname,Lname,Tel,Cid จึงถูกแยกออกมาเป็นตารางลูก
  ค้า (Customer Table) ดังรูป
 
 
ตารางรายการขาย (Invoice Detail Table) ตารางใบกำกับสินค้า (Invoice Table)
Pid Pname Brand Model Price
M011 หม้อหุงข้าว Hitachi CX98 2500
F002 ตู้เย็น Whirlpool AB77 8000
F003 ตู้เย็น National CC87 6800
InvNo InvDt Cid
101 10/7/00 C01
102 11/7/00 C03
103 11/7/00 C01
104 12/7/00 C02
ตารางรายการขาย (Invoice Detail Table) ตารางรายการขาย (Invoice Detail Table)
InvNo Pid Qu
101 M011 20
101 F002 5
101 F003 10
102 F002 15
102 F005 30
103 M011 2
104 F002 5
Cid Title Fname Lname Tel
C01 นาย สุรสิทธิ์ รักล้น 522-1622
C03 นาย สมศักดิ์ มักรวย 435-7207
C01 นาย สุรสิทธิ์ ทองมาก 252-1111
C02 นส. การุณ ทองสุข 254-1545

          หลังจากการทำ 3NF แล้วจะเห็นได้ว่าข้อมูลในแต่ละตารางลดความซ้ำซ้อนได้เป็นอย่างมาก ข้อมูลจะถูกจัดให้เป็นระ-
 เบียบมากขึ้น แต่จะมีตารางต่างๆ มากมาย ซึ่งความเร็วในการเข้าถึงข้อมูลจะช้าลง เนื่องจาก DBMS เพราะจะต้องทำการ
 อ่านข้อมูลจากหลายตาราง ต้องค้นหาข้อมูลที่มีความสัมพันธ์กันจากหลายๆ ตาราง ผู้ออกแบบระบบจึงต้องเปรียบเทียบข้อดี
 ข้อเสีย แล้วปรับใช้ให้เหมาะสมกับฐานข้อมูล การทำ Normalization โดยทั่วไปจะทำอยู่ในระดับ 3 (3NF) ซึ่งฐานข้อมูลของ
 เราจะมีความซ้ำซ้อนน้อยมาก และการเข้าถึงข้อมูลก็ทำได้เร็วเช่นกัน
          สำหรับการทำ Normalization ระดับที่เหลืออยู่คือ BCNF,4NF, และ 5NF ซึ่งจะไม่ขอกล่าวถึง ซึ่งผู้จัดทำไม่สามารถหา
 ข้อมูลที่ดีพอนำเสนอได้  และส่วนใหญ่มักจะไม่ค่อยเจอ  แต่อย่างไรก็ดีเราต้องขออภัยไว้ในโอกาสนี้ด้วย   แต่ถ้าเจอตัว -
ตัวอย่างดี ๆ เมื่อไหร่ก็จะ Update ให้ได้อ่านกันค่ะ  สำหรับการทำ Nomalization ขอจบเพียงแค่นี้นะค่ะง่วงแล้ว   บ๊ายบาย
ราตรีสวัสดิ์

Up to top