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

 

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

 

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

 

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

หัวข้อที่ท่านจะได้เรียนในบทนี้มีดังนี้
•    เตรียมการนอร์มัลไลเซชัน
•    นิยามนอร์มัลไลเซชัน
•    ประโยชน์ของนอร์มัลไลเซชัน
•    ข้อควรระวังในการทำนอร์มัลไลซ์
•    นิยาม อะนอมาลิ
•    นิยามคำสำคัญในการทำนอร์มัลไลซ์
•    นิยามนอร์มัลฟอร์มแต่ละระดับ
•    วิธีทำ 1NF
•    วิธีทำ 2NF
•    วิธีทำ 3NF
•    วิธีทำ BCNF
•    วิธีทำ 4NF
•    วิธีทำ 5NF
•    วิธีทำ DKNF

 

 6.1. เตรียมการนอร์มัลไลเซชัน
ในทางปฏิบัติ นอร์มัลไลเซชัน คือการแบ่งตารางออกเป็นตารางย่อยๆ ที่เล็กลง แต่ไม่แบ่งมากเกินความเหมาะสม การลดทอนความซ้ำซ้อนโดยทั่วไปแล้วจะสามารถทำได้โดยใช้การพิจารณาธรรมดา ไม่จำเป็นต้องใช้การคำนวณทางคณิตศาสตร์ เป้าหมายของนอร์มัลไลเซชันคือเพื่อประหยัดที่เก็บข้อมูลในฮาร์ดดิสก์ และจัดรูปแบบตารางให้เหมาะแก่การนำไปใช้งานอยู่ในสภาพที่จัดการได้ง่าย แต่ที่สำคัญคือจะต้องไม่ทำให้ประสิทธิภาพของฐานข้อมูลลดลง

 

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

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

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

 

6.1.2. ประโยชน์ของนอร์มัลไลเซชัน
กระบวนการลดทอนความซ้ำซ้อนของข้อมูลมีประโยชน์ ดังนี้
•    ประหยัด: ลดเนื้อที่ๆ จำเป็นต้องใช้เก็บข้อมูลในฮาร์ดดิสก์
•    ระเบียบ: ทำให้ข้อมูลมีโครงสร้างที่เป็นแบบแผนมากขึ้น
•    สะดวก: ช่วยให้การเข้าถึงหรือเปลี่ยนแปลงข้อมูลหนึ่งชิ้น (เช่นหนึ่งแถว) สามารถทำได้กับตารางเพียงตารางเดียว ไม่ต้องทำกับกลุ่มของตาราง

 

6.1.3. ข้อควรระวังในการทำนอร์มัลไลซ์
การยึดหลักสายกลางในการทำสิ่งต่างๆ จะได้ผลดีกว่าการทำมากหรือน้อยเกินไป นอร์มัลไลเซชันก็เช่นกัน หากทำอย่างเลยเถิดเกิดไปย่อมเกิดผลลบขึ้น การทำนอร์มัลไลซ์ที่มากเกินไปจะทำให้ประสิทธิภาพของระบบลดลง โดยเฉพาะอย่างยิ่งในงาน OLTP ที่มีผู้ใช้พร้อมๆ กันเป็นจำนวนมาก ส่วนงาน OLAP หากทำนอร์มัลไลเซชันมากเกินไป จะทำให้ผู้ใช้ (ซึ่งปรกติแล้วจะไม่ใช่คนคอมพิวเตอร์) เขียนคิวรีได้ยากหรือเขียนได้แต่ไม่มีประสิทธิภาพ

 

การทำนอร์มัลไลซ์ควรคำนึงถึงประเด็นต่างๆ ดังนี้
•    ประหยัดแล้วไม่คุ้ม:
การทำนอร์มัลไลซ์โดยคำนึงถึงการลดเนื้อที่ในฮาร์ดดิสก์มากเกินไปอาจไม่ใช่เรื่องดี (ยกเว้นงานที่มีปริมาณข้อมูลมากอย่างยิ่ง เช่น OLAP) เพราะประสิทธิภาพที่เสียไปในการทำนอร์มัลไลซ์อาจทำให้เกิดค่าใช้จ่ายสูงกว่าราคาฮาร์ดดิสก์ซึ่งขณะนี้มีราคาถูกลงมากแล้ว
•    แยกย่อยแล้วยืดยาด: การทำนอร์มัลไลซ์มากเกินไปจะทำให้มีตารางเล็กๆ เกิดขึ้นมากซึ่งจะทำให้คิวรียืดยาวซ้ำซ้อนมาก (เพราะต้องจอยตารางหลายตาราง) คิวรีที่ซับซ้อนเกินไปย่อมไม่มีประสิทธิภาพ และมีผลให้โปรแกรมประยุกต์ทำงานไม่มีประสิทธิภาพตามไปด้วย หรือในกรณีที่เลวร้ายที่สุดคือโปรแกรมประยุกต์ทำงานไม่ได้เลย
•    ซอยมากจนซับซ้อน: การทำนอร์มัลไลซ์มากเกินไปจะทำให้การเข้าถึงข้อมูลซับซ้อนเกินไปด้วยเช่นกัน ตารางและความสัมพันธ์ต่างๆ จะอยู่ในสภาพเป็นคณิตศาสตร์มากว่าโครงสร้างตามธรรมชาติ หากผู้ใช้ฐานข้อมูลมีเพียงแอพลิเกชันก็ไม่เป็นไร แต่ถ้าผู้ใช้ฐานข้อมูลคือผู้ใช้ระดับปลายแถวการเขียนคิวรีจะเป็นไปอย่างยากลำบาก

 

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

 

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

อะนอมาลิทำให้เกิดความผิดพลาดเมื่อเพิ่มลบหรือเปลี่ยนแปลงข้อมูลในลักษณะต่างๆ ดังนี้
•    อะนอมาลิของการแทรกข้อมูล: ความผิดปรกติเช่นนี้เกิดเมื่อแทรกข้อมูลใน CT โดยไม่ได้แทรกข้อมูลใน PT ก่อน ยกตัวอย่างเช่นในภาพ 6-1 จะเห็นว่า Author เป็น PT ทำหน้าที่เก็บรายชื่อนักเขียน Book คือ CT ทำหน้าที่เก็บรายละเอียดของหนังสือ การแทรกข้อมูลใหม่ตามปรกติต้องแทรกข้อมูลนักเขียนเข้าไปใน PT ก่อน แล้วค่อยแทรกข้อมูลหนังสือ (ที่นักเขียนผู้นั้นเขียน) เข้าสู่ CT หากผู้เขียนแทรกข้อมูลหนังสือก่อนที่จะแทรกข้อมูลนักเขียนจะถือเป็นอะนอมาลิของการแทรกข้อมูล

ภาพ 6-1 : อะนอมาลิของการแทรกข้อมูล

 

•    อะนอมาลิของการลบข้อมูล: ความผิดปรกติเช่นนี้เกิดเมื่อผู้เขียนลบข้อมูลใน PT โดยไม่ได้ลบข้อมูลทั้งหมด (ที่สัมพันธ์กัน) ใน CT เสียด้วย ยกตัวอย่างเช่นในภาพ 6-2 จะเห็นว่า Author เป็น PT ทำหน้าที่เก็บรายชื่อนักเขียน Book เป็น CT ทำหน้าที่เก็บรายละเอียดของหนังสือ การลบข้อมูลนักเขียนหนึ่งคนตามปรกติต้องลบข้อมูลหนังสือของนักเขียนผู้นั้นทั้งหมดออกจาก CT ก่อน แล้วค่อยลบข้อมูลนักเขียนจาก PT หากผู้เขียนลบข้อมูลนักเขียนใน PT ก่อน ผู้เขียนจะขาดตัวเชื่อมโยงเพื่อลบข้อมูลหนังสือออกจาก CT (คือแถวข้อมูลใน CTกลายเป็นกำพร้า)  ซึ่งถือว่าเป็นอะนอมาลิของการลบข้อมูล

ภาพ 6-2 : อะนอมาลิของการลบข้อมูล

 

•    อะนอมาลิของการอัพเดตข้อมูล: เป็นความผิดปรกติลักษณะเดียวกับความผิดปรกติของการลบข้อมูล เมื่อมีการอัพเดตข้อมูล ข้อมูลต้องถูกอัพเดตทั้งที่ PT และ CT เพื่อป้องกันไม่ให้เกิดแถวข้อมูลกำพร้าใน CT

 

6.4. นิยามคำสำคัญในการทำนอร์มัลไลซ์
ต่อไปนี้เป็นนิยามของคำสำคัญต่างๆ ซึ่งเป็นคำจาร์กอนในวิชาออกแบบฐานข้อมูล ท่านจำเป็นต้องเข้าใจความหมายของคำเหล่านี้จึงจะเรียนเรื่องการออกแบบฐานข้อมูลและนอร์มัลไลเซชันในหัวข้อต่อๆ ไปได้เข้าใจ คำเหล่านี้ไม่ใช่คำแปลกใหม่ แต่เป็นคำที่ท่านเคยเรียนมาแล้วในวิชาคณิตศาสตร์ระดับมัธยม (เรื่องพีชคณิตและแคลคูลัส) ทั้งนั้น

 

6.4.1. การพาดพิง
การพาดพิง (Functional Dependency ย่อ FD) Y เป็น FD ของ X เมื่อค่าของ Y ขึ้นกับค่าของ X ยกตัวอย่างเช่น หาก Y = X + 1 ค่าของ X ย่อมส่งผลต่อค่าของ Y ดังนั้น Y จึงเป็น FD ของ X ยกตัวอย่างเช่นตารางในภาพ 6-3 เป็นตารางเก็บข้อมูลสกุลเงิน คอลัมน์ FXCODE เก็บรหัสย่อของสกุลเงิน คอลัมน์ CURRENCY เก็บชื่อสกุลเงิน คอลัมน์ RATE เก็บอัตราแลกเปลี่ยน และคอลัมน์ COUNTRY เก็บชื่อประเทศ ในตารางนี้ข้อมูลในคอลัมน์ CURRENCY เป็น FD ของข้อมูลในคอลัมน์ FXCODE

 

6.4.2. ตัวกำหนด
ตัวกำหนด (Determinant) X เป็นตัวกำหนดของ Y เมื่อค่าของ Y ขึ้นกับค่าของ X ยกตัวอย่างเช่นตารางในภาพ 6-3 ข้อมูลในคอลัมน์ FXCODE เป็นตัวกำหนดของข้อมูลในคอลัมน์ CURRENCY

 

6.4.3. การพาดพิงทางอ้อม
การพาดพิงทางอ้อม (Transitive Dependence ย่อ TD) Z เป็น TD ของ X เมื่อค่าของ X กำหนดค่าของ Y และค่าของ Y กำหนดค่าของ Z ดังนั้นค่าของ Z จึงขึ้นกับค่าของ X โดยอ้อมผ่านความสัมพันธ์ของ Y ยกตัวอย่างเช่นตารางในภาพ 6-3 จะเห็นว่า ค่าของคอลัมน์ RATE ขึ้นกับค่าของคอลัมน์ CURRENCY ซึ่งค่าของคอลัมน์ CURRENCYขึ้นกับค่าของคอลัมน์ COUNTRY อีกต่อหนึ่ง ดังนั้นคอลัมน์ RATE จึงเป็น TD ของคอลัมน์ COUNTRY

ภาพ 6-3 : การพาดพิง ตัวกำหนด และการพาดพิงทางอ้อม

 

 

โฆษณา

One Response to นอร์มัลไลเซชัน : ตอน 1

ใส่ความเห็น

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: