หน่วยที่ 1 ความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล
เรื่อง การทำนอร์มอลฟอร์ม (Normalization)
_________________________________________________________________
หน่วยที่ 1 ความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล
เรื่อง การทำนอร์มอลฟอร์ม (Normalization)
เรื่อง การทำนอร์มอลฟอร์ม (Normalization)
การทำนอร์มอลฟอร์ม (Normalization)
4. แปลงเอ็นทิตี้และแอททริบิวท์เป็นตาราง
จากนั้นดูว่าคีย์หลักที่เราใส่มานั้นใช้ได้หรือไม่ โดยพิจารณาจากตารางที่ 3 และตารางที่
4 ดังนี้
การนอร์มัลไลเซซัน (Normalization) เป็นทฤษฎีหรือกระบวนการที่ใช้ในการทำให้เอนทิตี้และแอททริบิวต์ที่ได้ออกแบบไว้มาจัดกลุ่มตารางให้ความสัมพันธ์กัน
ให้อยู่ในรูปแบบที่เรียกว่า รูปแบบบรรทัดฐาน หรือ Normal Form เพื่อเพิ่มประสิทธิภาพให้แก่ฐานข้อมูล โดยทำให้ฐานข้อมูลไม่มีความซ้ำซ้อนและไม่มีขนาดใหญ่จนเกินไป
โดย การทำ “Normalization” มีลำดับดังนี้
1. 0NF เป็นตาราง (Table)
2. 1NF (First Normal Form)
3. 2NF (Second
Normal Form)
4. 3NF (Third
Normal Form)
5. BCNF (Boyce/Codd Normal Form)
6. 4NF (Forth
Normal Form)
7. 5NF (Fifth
Normal Form)
โดยส่วนใหญ่ ในการทำนอร์มอลฟอร์มจะทำถึง 3NF เท่านั้น ส่วนพวกที่มากกว่านี้แทบจะไม่พบในชีวิตประจำวัน
0NF เป็นตาราง
ในการสร้างฐานข้อมูลนั้น
ข้อมูลจะต้องสามารถทำเป็นตารางได้ ซึ่งตารางที่มีมานั้น อาจมีข้อมูลไม่ครบทุกช่อง
(ซึ่งตารางที่ผ่านมา ได้ทำการทำนอร์มอลฟอร์มมาแล้ว ซึ่งตารางดังกล่าวยังไม่ได้ทำ) ดังตารางที่
1
ดังนั้น 0NF คือตารางที่มีช่องว่าง
ซึ่งไม่สามารถนำข้อมูลมาใส่ฐานข้อมูลได้ จึงต้องมีการนำมา 1NF เสียก่อน
1NF (First Normal Form)
กฎของการทำ
1NF คือ
ต้องทำการเติมตารางที่เว้าแหว่งในแต่ละฟิลด์ให้เต็มทุกช่องโดย 1 ช่องต้องมีข้อมูลแค่
1 ข้อมูลเท่านั้น ที่สำคัญจะต้องไม่มีเรคอร์ดซ้ำ (Repeating Groups)
จากตารางที่
1 เราสังเกตได้ว่าในตารางนั้นมีช่องว่างอยู่
ซึ่งตารางแบบนี้ไม่เหมาะสมที่จะใส่ในฐานข้อมูล โดยใน 1NF จะต้องทำการเติมช่องว่างให้เต็ม จะได้ดังตารางที่ 2
หลังจากทำ 1NF แล้วตารางอาจยังดูแปลกๆอยู่ เพราะ
1. ตารางดูใหญ่มาก มีข้อมูลมากเกินความจำเป็น
2.
ข้อมูลซ้ำซ้อน
3.
ถ้าเลิกขายสินค้าชิ้นไหนก็ต้องลบข้อมูลออกหลายจุด
4. ถ้ามีสินค้าใหม่ออกจำหน่าย ก็ต้องใส่ข้อมูลหลายแห่ง
ดังนั้นการทำ 1NF ยังไม่เพียงพอ จึงต้องทำ 2NF ต่อไป
2NF (Second Normal Form)
กฎของการทำ 2NF คือ ต้องเป็น 1NF มาก่อน แล้วต้องมีคีย์หลัก (Primary key) ส่วนข้อมูลที่อยู่ในฟิลด์อื่นจะเรียกว่า ไม่มีคีย์ (Non-key) และฟิลด์ดังกล่าวต้องขึ้นกับฟิลด์ที่เป็นคีย์หลักด้วย
โดย คีย์หลักนี้สามารถเป็นคีย์เดี่ยวหรือคีย์รวม (Compound key) ก็ได้ และถ้าเป็นคีย์รวม แล้วฟิลด์ที่ไม่มีคีย์ต้องขึ้นกับคีย์รวมด้วย
วิธีการนำตาราง 1NF มาทำเป็น 2NF
1. พิจารณาว่าข้อมูลในตารางของเรามีอะไรบ้าง
อาจนำความรู้จากเรื่องเอ็นทิตี้และแอททริบิวท์มาช่วยจากตารางที่ 2 แปลงได้ ดังนี้
2. พิจารณาความสัมพันธ์ของข้อมูล
โดยในที่นี้จะเป็นข้อมูล 2 กลุ่มที่มีความสัมพันธ์กันเองคือ “รายการอาหาร” และ
“ข้อมูลการสั่งอาหาร” ทำให้เราสามารถแยกเป็น 2 เอ็นทิตี้ได้ดังนี้
ข้อสังเกต
1. ราคาอาหารจะขึ้นอยู่กับชนิดของอาหารเท่านั้นไม่ได้ขึ้นกับฟิลด์อื่นเลย
ทำให้สามารถแยกมาเป็น 1 ตารางได้
2. อาหารที่สั่ง
และจำนวนที่สั่ง จะขึ้นอยู่กับลูกค้าว่าจะอะไร
แต่อย่างไรก็ตามเราไม่สามารถนำข้อมูลลูกค้าของร้านอาหารตามสั่งมาใส่ในฐานข้อมูลได้
ก็เลยต้องใช้ Order No กับโต๊ะที่ลูกค้านั้ง
รวมกับวัน-เวลาที่ลูกค้ามาใช้บริการเป็นหลักให้อาหารที่สั่งกับจำนวนที่สั่ง
ก็เลยได้มาอีก 1 ตาราง
3. แอททริบิวท์ที่เป็น “ยอดรวม”
เป็นค่าที่สามารถหาได้จากการคำนวณ โดยนำจำนวนที่สั่งมาคูณกับราคาอาหาร
ก็เลยไม่จำเป็นต้องมีฟิลด์นี้อยู่ในตาราง ดังนั้นจึงตัดทิ้งได้
3. หาคีย์หลักให้กับเอ็นทิตี้ทั้งสอง
โดยถ้าเอ็นทิตี้ไหนไม่มีคีย์หลัก ให้เพิ่มแอททริบิวท์คีย์หลักของตารางนั้นๆ
(อาจกำหนดรหัสของอาหารด้วยว่ารายการไหนรหัสอะไร) ดังนี้
จากตารางที่ 3
รายการอาหารดูแล้วไม่น่ามีปัญหา แต่เมื่อมาดูตารางที่ 4
ข้อมูลการสั่งอาหารดูแล้วมีปัญหาแน่ๆ
เพราะดูเหมือนว่าจะไม่มีฟิลด์ไหนเป็นคีย์หลักได้เลย ดังนั้นจึงต้องรวม Order No วันที่ โต๊ะที่
เวลาและรายชื่ออาหารเข้าไปเป็นคีย์หลัก
ซึ่งในการรวมฟิลด์หลายๆฟิลด์นี้เองที่เรียกว่าคีย์รวม (Compound key)
หมายเหตุ ในแง่ของฐานข้อมูล โดยปกติแล้วเราจำไม่นำชื่อของอะไรก็ตามมาเป็นคีย์หลัก
หรือส่วนหนึ่งของคีย์รวม เพราะจะมีปัญหาในการกำหนด Index key ดังนั้นจึงทำการเปลี่ยน
จากรายการชื่ออาหารที่สั่งเป็นรหัสสินค้าแทน ดังนี้
จากตารางรายการอาหาร กับข้อมูลการสั่งอาหาร เราจะมาวิเคราะห์ความสัมพันธ์ (Relationships) ของทั้งสอน เอ็นทิตี้
ซึ่งเมื่อพิจารณาแล้วจะได้ความสัมพันธ์ในรูปแบบดังนี้
วิธีพิจารณาคือ
“รายการอาหารหลายรายการสามารถอยู่ในข้อมุลการสั่งอาหารได้หลายข้อมูล”
หลังจากทำ 2NF ยังไม่สามารถน้ำข้อมูลมาใช่ได้ เนื่องจาก
1. มีข้อมูลซ้ำซ้อนเยอะ
2. ความสัมพันธ์ก็แบบ M:N
ดังนั้นเราควรไปทำ 3NF ต่อไป
3NF (Third Normal Form)
กฎของการทำ 3NF คือ จะต้องเป็น 2NF มาก่อนและต้องไม่มีการขึ้นต่อกันเองในหมู่
Non-key หมายความว่า พวกที่ไม่ใช่คีย์หลัก
ต้องขึ้นตรงกับคีย์หลักเท่านั้น
สำหรับตาราง
“รายการอาหาร” ดูแล้วไม่น่ามีปัญหาอะไร เพราะอาหารที่สั่ง
กับราคาอาหารต่างก็ขึ้นกับรหัสอาหารทั้งหมด ดังนั้นตารางนี้ถึงว่าเป็น 3NF แล้ว
ตาราง
“ข้อมูลการสั่งอาหาร” จะเห็นว่า “อาหารที่สั่ง (รหัสอาหาร) ” กับ “จำนวน”
นอกจากจะขึ้นกับ Order No แล้ว ยังขึ้นกลับ วันที่ โต๊ะ
และเวลาอีกด้วย ซึ่งกรณีนี้แสดงว่ามีความสัมพันธ์แบบ Non-key อยู่แน่นอน ดังนั้นเราจึงแบ่ง “ข้อมูลการสั่งอาหาร”
ออกเป็นเอ็นทิตี้ย่อยดังนี้
เมื่อมาดูในมุมมองของตารางข้อมูลจะได้ดังนี้
ส่วนตารางข้อมูลการสั่ง
สามารถตัดส่วนที่ซ้ำๆ ออกได้ ทำให้คีย์หลักของเรา เปลี่ยนไป จากที่รวม ทั้ง Order No วันที่ โต๊ะที่
และเวลา ก็เหลือเพียง Order No เป็นคีย์หลักก็เพียงพอแล้ว
เขียนในรูปแบบของเอ็นทิตี้กับแอททริบิวท์ ได้ดังนี้
จากนั้นทำการพิจารณาความสัมพันธ์ของเอ็นทิตี้
ซึ่งจะมีความสัมพันธ์ในรูปแบบนี้
ตารางที่ได้นั้นก็สามารถนำไปใส่ในฐานข้อมูลได้แล้ว
ซึ่งการทำนอมอลฟอร์มนั้น ถ้าทำถึง 3NF มักจะเพียงพอต่อการนำไปใส่ฐานข้อมูลโดยไม่ก่อให้เกิดปัญหา