นอร์มัลไลเซชัน : ตอน 2

 

 
Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

นอร์มัลไลเซชัน : ตอน 2

 

 6.4.4. กุญแจเสนอ
กุญแจเสนอ (Candidate Key ย่อ CK) คือคอลัมน์ที่อาจนำมาใช้ทำ PK ได้ ในภาพ 6-4 ทางซ้ายสุดคือตารางชื่อ Customer  กรอบห้ากรอบทางขวาแสดงคอลัมน์ต่างๆ ที่มีภาวะเป็น CK คือเป็นคอลัมน์ที่อาจนำมาใช้เป็น PK ได้ โปรดสังเกตว่ามีสองตารางที่มี CK มากกว่าหนึ่งคอลัมน์ร่วมกันเป็น PK แม้ CK บางแบบในภาพนี้อาจสุดโต่งไปสักหน่อยแต่ก็ใช้อธิบายแนวคิดของ CK ได้ดี

ภาพ 6-4 : ตารางและกุญแจเสนอที่อาจนำมาใช้ได้ห้าแบบ

 

6.4.5. การพาดพิงสมบูรณ์
การพาดพิงสมบูรณ์ (Full Functional Dependence ย่อ FFD) X เป็น FFD ของ Y เมื่อค่าของ X กำหนดค่าของ Y แต่ค่าของ X เมื่อร่วมกับค่าของ Z ไม่ได้กำหนดค่าของ Y กล่าวอีกอย่างคือค่าของ Y ขึ้นกับค่าของ X เท่านั้น ยกตัวอย่างเช่นตารางในภาพ 6-5 ซึ่งเหมือนตารางในภาพ 6-4 แต่เพิ่มคอลัมน์ Population ขึ้นอีกหนึ่งคอลัมน์ โปรแกรมสังเกตว่า Population ขึ้นกับค่าของ COUNTRY แต่ไม่ขึ้นกับ COUNTRY + RATE ดังนั้น  Population เป็น FFD กับ  COUNTRY แต่ไม่เกี่ยวข้องกับ RATE ดังนั้นในตัวกำหนด (ในตัวอย่างนี้คือ X หรือ Population) จะเป็นกุญแจผสมไม่ได้

ภาพ 6-5 : การพาดพิงสมบูรณ์

 

6.4.6. การพาดพิงหลายค่า
การพาดพิงหลายค่า (Multiple valued dependency ย่อ MVD)   MVD คือกรณีที่ตารางมีสองคอลัมน์ และคอลัมน์หนึ่งเป็น PK  และอีกคอลัมน์หนึ่งมีข้อมูลแบบคอลเลคชัน (Collection ข้อมูลเป็นกลุ่ม) เช่นอาร์เรย์หรือข้อความที่ขั้นด้วยลูกน้ำ ยกตัวอย่างเช่นตารางในภาพ 6-6 ตารางล่างมีคอลัมน์ SKILLS เป็น MVD ของคอลัมน์ NAME ส่วนตารางคอลัมน์ SKILLS ไม่เป็น MVD ของคอลัมน์ NAME เพราะภายในตารางมีคอลัมน์มากกว่าสองคอลัมน์

ภาพ 6-6 : การพาดพิงหลายค่า

 

6.4.7. การพาดพิงเป็นวงรอบ
การพาดพิงเป็นวงรอบ (Cyclic Dependency ย่อ CD) ค่าของ X ขึ้นกับค่าของ Y และในขณะเดียวกันค่าของ Y ก็ขึ้นกับค่าของ X ด้วย (ไม่ว่าจะในทางตรงหรือในทางอ้อม)  CD มักเกิดขึ้นเมื่อตารางมี PK เป็น CK จากคอลัมน์สามคอลัมน์หรือมากกว่า ยกตัวอย่างเช่น X สัมพันธ์กับ Y, Y สัมพันธ์กับ Z และ X สัมพันธ์กับ Z นั่นคือ Z ย้อนกลับไปพาดพิงกับ X วนไปเช่นนี้

 

6.4.8. การพาดพิงบางส่วน
การพาดพิงบางส่วน (Partial Dependency ย่อ PD) เกิดขึ้นเมื่อคอลัมน์ใดคอลัมน์หนึ่งมีภาวะ FFD กับคอลัมน์ที่เป็น PK ซึ่งเป็น CK

 

6.5. นิยามนอร์มัลฟอร์มแต่ละระดับ
นิยามนอร์มัลฟอร์มมีสองแบบคือนิยามนอร์มัลฟอร์มเชิงวิชาการซึ่งเป็นที่ยอมรับกันทั่วไป อีกแบบคือนิยามนอร์มัลฟอร์มแบบเข้าใจง่าย นิยามแบบหลังแม้จะไม่รัดกุมเท่าแบบแรกแต่จะช่วยให้ท่านเข้าใจหลักการนอร์มัลไลเซชันได้ง่ายขึ้น

 

6.6. นิยามนอร์มัลฟอร์มเชิงวิชาการ
ต่อไปนี้เป็นนิยามนอร์มัลฟอร์มเชิงวิชาการซึ่งเป็นที่ยอมรับกันทั่วไป

6.6.1. นอร์มัลฟอร์มระดับที่หนึ่ง
นอร์มัลฟอร์มระดับที่หนึ่ง (1st Normal Form ย่อ 1NF) ตัดข้อมูลที่ซ้ำกันเป็นกลุ่ม ทำให้สามารถจำแนกข้อมูลทุกแถวในทุกตารางได้ด้วย PK พูดอีกอย่างหนึ่งคือทุกคอลัมน์ต้องขึ้นกับคอลัมน์ที่เป็น PK

6.6.2. นอร์มัลฟอร์มระดับที่สอง
นอร์มัลฟอร์มระดับที่สอง (2nd Normal Form ย่อ 2NF) ทำให้คอลัมน์ที่ไม่ใช่กุญแจเป็น FFD ของคอลัมน์ที่เป็น PK และห้ามไม่ให้มี PD

6.6.3. นอร์มัลฟอร์มระดับที่สาม
นอร์มัลฟอร์มระดับที่สาม (3rd Normal Form ย่อ 3NF) กำจัด TD ซึ่งก็คือการกำจัดคอลัมน์ที่พาดพิงทางอ้อมกับคอลัมน์ที่เป็น PK ที่ต้องกำจัดเพราะคอลัมน์นั้นจะ FD กับคอลัมน์ที่ขึ้นกับคอลัมน์ซึ่งเป็น PK

6.6.4. นอร์มัลฟอร์มแบบบอยซ์-คอดด์
นอร์มัลฟอร์มแบบบอยซ์-คอดด์ (Boyce-Codd Normal Form ย่อ BCNF) การทำให้คอลัมน์ที่เป็นตัวกำหนดทั้งหมดในตารางกลายเป็นกุญแจเสนอ หากพบว่ามีคอลัมน์ที่เป็นกุญแจเสนอเพียงคอลัมน์เดียวจะถือว่า BCNF และ 3NF มีระดับเท่ากัน

6.6.5. นอร์มัลฟอร์มระดับที่สี่
นอร์มัลฟอร์มระดับที่สี่ (4th Normal Form ย่อ 4NF) เป้าหมายของนอร์มัลฟอร์มระดับนี้คือการกำจัด MVD

6.6.6. นอร์มัลฟอร์มระดับที่ห้า
นอร์มัลฟอร์มระดับที่ห้า (5th Normal Form ย่อ 5NF) กำจัด CD บางครั้งเรียกระดับนี้ว่านอร์มัลฟอร์มแบบฉาย (Projection Normal Form ย่อ PJNF)

6.6.7. นอร์มัลฟอร์มกุญแจโดเมน
นอร์มัลฟอร์มกุญแจโดเมน(Domain Key Normal Form ย่อ DKNF) เป้าหมายของนอร์มัลฟอร์มระดับนี้คือการทำนอร์มัลไลเซชันระดับสูงสุด

 

แม้นิยามนอร์มัลฟอร์มเชิงวิชาการจะเต็มไปด้วยศัพท์แสงน่าเวียนหัว ชวนให้คิดว่านอร์มัลไลเซชันเป็นเรื่องซับซ้อน แต่อันที่จริงแล้วถ้าตัดคำจาร์กอนออกไป ท่านจะสามารถทำนอร์มัลไลเซชันได้โดยใช้เพียงสามัญสำนึก คนคอมพิวเตอร์ทั่วไปจะสามารถทำนอร์มัลไลเซชันสามระดับแรก (คือ 1NF, 2NF และ 3NF) ได้โดยเพียงแค่พิจารณาชุดข้อมูลที่ต้องการนำมาสร้างฐานข้อมูล โดยทั่วไปแล้วการทำนอร์มัลไลเซชันสามระดับแรกก็เพียงพอสำหรับงานส่วนใหญ่ ในงานที่เฉพาะเจาะจง (เช่นงานที่มีข้อจำกัดมาก หรืองานที่ต้องการประสิทธิภาพสูงเป็นพิเศษ)  นักออกแบบฐานข้อมูลจึงจะทำนอร์มัลไลเซชันในระดับสูงขึ้น

การทำนอร์มัลไลเซชันในระดับสูงขึ้น (ระดับ BCNF, 4NF, 5NF และ DKNF) มักให้ผลลัพธ์ที่ไม่ดีนักและไม่ค่อยจำเป็น งาน OLTP และงาน  OLAP ส่วนใหญ่ต้องการนอร์มัลไลเซชันเพียงสามระดับแรกเท่านั้น การทำนอร์มัลไลเซชันมากระดับเกินไปมีข้อเสียคือจะเกิดตารางขึ้นจำนวนมาก ทำให้คิวรียาว ซับซ้อนและทำงานช้า เพราะต้องจอยตารางจำนวนมาก

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

 

6.7. นิยามนอร์มัลฟอร์มแบบเข้าใจง่าย
หากท่านอ่านนิยามนอร์มัลฟอร์มเชิงวิชาการแล้วงงก็อย่าเพิ่งท้อใจ ลองอ่านนิยามในหัวข้อนี้ซึ่งเป็นนิยามนอร์มัลฟอร์มแบบเข้าใจง่าย

6.7.1. นิยาม 1NF
ขจัดคอลัมน์ที่มีข้อมูลซ้ำกันด้วยการสร้างตารางใหม่ โดยให้ตารางเดิมเป็น PT ตารางใหม่เป็น CT แล้วเชื่อมโยงกันแบบ master-detail ซึ่งเป็นความความสัมพันธ์แบบหนึ่งต่อหลาย  ยกตัวอย่างเช่นกำหนดให้ PT เก็บรายชื่อนักเขียนทั้งหมดของสำนักพิมพ์หนึ่ง  CT เก็บรายละเอียดหนังสือต่างๆ ที่นักเขียนเหล่านั้นเขียน แล้วสร้าง PK ในทั้งสองตาราง 

กำหนดให้ PT มี PK เป็นคอลัมน์ชื่อนักเขียน ส่วน CT มี PK เป็น CK (composite key หรือ compound key คือมีข้อมูล  ซ้ำกันอยู่ในทั้งสองตาราง) คือใน CT ใช้ชื่อหนังสือบวกชื่อนักเขียนบวกรหัส ISBN เป็น PK และใช้คอลัมน์ชื่อนักเขียนทำหน้าที่เป็น FK เพื่อเชื่อมโยงกับ PT

6.7.2. นิยาม 2NF
ทำคล้ายๆ 1NF แตกต่างกันที่ใน 1NF จะเน้นขจัดคอลัมน์ที่มีข้อมูลซ้ำ แต่ 2NF จะเน้นขจัดตัวข้อมูลที่ซ้ำกัน ใน 1NF ได้ผลลัพธ์เป็นวามความสัมพันธ์แบบหนึ่งต่อหลาย แต่ 2NF ได้ผลลัพธ์เป็นหลายต่อหนึ่ง CT จะมี PK แบบเดี่ยว (ไม่ใช่แบบร่วมอย่างใน 1NF) และ PT จะมี FK เพื่อใช้เชื่อมไปยัง CT

6.7.3. นิยาม 3NF
การอธิบาย 3NF โดยไม่ใช้คำจาร์กอนค่อนข้างจะลำบากอยู่เหมือนกัน ผู้เขียนขอยกยอดเรื่อง 3NF ไปอธิบายในหัวข้อต่างหากของมันเอง

6.7.4. นิยาม NF ที่สูงกว่าระดับที่สาม
อย่างที่เรียนไปแล้วว่าด้วยเหตุผลหลายๆ ประการนักออกแบบฐานข้อมูลมักไม่ทำนอร์มัลไลเซชันเกินระดับสามยกเว้นกรณีพิเศษจริงๆ

 

 

โฆษณา

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: