นอร์มัลไลเซชัน : ตอน 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 ที่สูงกว่าระดับที่สาม
อย่างที่เรียนไปแล้วว่าด้วยเหตุผลหลายๆ ประการนักออกแบบฐานข้อมูลมักไม่ทำนอร์มัลไลเซชันเกินระดับสามยกเว้นกรณีพิเศษจริงๆ

 

 

นอร์มัลไลเซชัน : ตอน 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 : การพาดพิง ตัวกำหนด และการพาดพิงทางอ้อม

 

 

แผนภูมิ ER: ตอน 2

 

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

 

แผนภูมิ ER: ตอน 2

 

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

กุญแจสามารถทำหน้าที่เป็นได้ทั้งกุญแจและเป็นดรรชนี เมื่อทำหน้าที่เป็นดรรชนีมันคัดลอกคอลัมน์ในตารางไปทำเป็นโครงสร้างที่ใช้ค้นข้อมูลได้อย่างมีประสิทธิภาพ (เช่นเป็นโครงสร้างแบบต้นไม้ไบนารี) เมื่อทำหน้าที่เป็นกุญแจมันใส่เครื่องหมายพิเศษไว้ในคอลัมน์เพื่อระบุว่าคอลัมน์นั้นทำหน้าที่เชื่อมโยงกับตารางอื่นๆ กุญแจมีสามแบบคือกุญแจหลัก (Primary Key ย่อ PK) กุญแจเอกลักษณ์ (Unique Key ย่อ UK) และกุญแจนอก (Foreign Key ย่อ FK)

 

5.2.1. นิยามกุญแจหลัก
PK ทำหน้าที่แยกแยะความแตกต่างระหว่างข้อมูลแถวต่างๆ ในตาราง การแยกแยะนี้เป็นสิ่งจำเป็น เพราะหากไม่มีเราจะไม่สามารถค้นหาข้อมูลเฉพาะแถวที่ต้องการได้ ภาพ 5-8 แสดง PK ของตาราง Author และตาราง Publication

ภาพ 5-8 : กุญแจหลักทำหน้าที่แยกแยะความแตกต่างระหว่างข้อมูลแถวต่างๆ ในตาราง

 

5.2.2. นิยามกุญแจเอกลักษณ์
UK เหมือน PK คือทำหน้าที่แยกแยะความแตกต่างระหว่างข้อมูลแถวต่างๆ ในตาราง โดยค่าของ UK จะไม่มีการซ้ำกัน ชนิดข้อมูลของ UK มักเป็นแบบเลขจำนวนเต็ม (สาเหตุที่ไม่ใช้ชื่อนักเขียนหรือชื่อหนังสือเป็นค่าของ UK ผู้เขียนจะอธิบายในบทต่อไป) เนื่องจากเราใช้ตัวเลขแทนชื่อเราจึงเรียกกุญแจเอกลักษณ์ได้อีกอย่างหนึ่งว่ากุญแจแทน (Surrogate Key ย่อ SK)

ยกตัวอย่างเช่นตาราง Author มีคอลัมน์ AUTHOR_ID เป็น UK เพราะมันมีค่าเป็นตัวเลขจำนวนเต็มซึ่งแทนชื่อของผู้เขียน (แทนค่าของคอลัมน์ NAME) แม้โอกาสน้อยมากที่จะมีผู้เขียนชื่อซ้ำกันแต่ SK ก็ยังมีประโยชน์ในการเพิ่มประสิทธิภาพ UK ต่างจาก PK ที่เราใช้เพื่อกำหนดความสัมพันธ์ระหว่างตาราง แต่เราจะไม่ใช้ UK เพื่อการนี้

ต่อไปนี้จะยกตัวอย่างตารางที่มี PK และ UK คิวรีในภาพ 5-9 ทำหน้าที่สร้างตาราง Author

ภาพ 5-9 : คิวรีทำหน้าที่สร้างตาราง Author

 

โปรดสังเกตว่าผู้เขียนกำหนดให้คอลัมน์ author_id เป็น PK และกำหนดให้คอลัมน์ name เป็น UK (คือไม่อนุญาตให้มีข้อมูลซ้ำกัน) เพื่อป้องกันไม่ให้ผู้ใช้ป้อนข้อมูลนักเขียนคนเดียวกันซ้ำมากกว่าหนึ่งแถว หรือป้องกันไม่ให้นักเขียนสองคนใช้นามปากกาซ้ำกัน

 

5.2.3. นิยามกุญแจนอก
FK คือสำเนาของ PK ที่ถูกคัดลอกจาก PT ไปใส่ CT เพื่อให้ทั้งสองตารางสามารถเชื่อมโยงกันได้ FK ทำให้เราแยกแยะได้ว่าข้อมูลแถวใดใน CT สัมพันธ์กันข้อมูลแถวใดใน PT

ในภาพ 5-10 จะเห็นตาราง Publication มี FK ชื่อ author_id (FK) เชื่อมโยงกับตาราง Author เพราะนักเขียนหนึ่งคนอาจเขียนหนังสือไว้หลายเล่ม ยกตัวอย่างเช่นผู้เขียนชื่อ Larry Niven (นักเขียนนิยายวิทยาศาสตร์ที่ผู้เขียนชื่นชอบ) มีรหัสประจำตัว 4 และมีหนังสือสี่เล่ม ดังนั้นในตาราง Author จะมี author_ID ที่เป็น 4 อยู่หนึ่งแถวและในตาราง Publication จะมี author_ID เป็น 4 อยู่สี่แถว

ดูภาพ 5-10 อีกครั้ง โปรดสังเกตว่าตาราง CoAuthor มีการเชื่อมโยงไปยังสองตาราง คือตาราง Author และตาราง Publication ที่เป็นเช่นนั้นเพราะผู้เขียนร่วมอาจเขียนหนังสือร่วมกับนักเขียนมากกว่าหนึ่งคน และในขณะเดียวกันก็อาจมีหนังสือ (ที่ตนเองร่วมเขียน) ได้มากกว่าหนึ่งเล่มด้วย ดังนั้นตาราง CoAuthor จึงมี FK ถึงสองอัน อันแรกชื่อ author_id (FK) ใช้เชื่อมโยงกับตาราง Author และอันที่สองคือ publicaction_ID เพื่อใช้เชื่อมโยงกับตาราง Publication

ภาพ 5-10 : FK ทำให้เราแยกแยะได้ว่าข้อมูลแถวใดใน CT สัมพันธ์กันข้อมูลแถวใดใน PT

 

ภาพ 5-11 เป็นคิวรีเพื่อสร้างตาราง Publication ซึ่งแสดงให้เห็นวิธีสร้างตารางที่มีกุญแจครบทั้งสามแบบ คือมีทั้ง PK, FK และ UK  

 

ภาพ 5-11 : คิวรีเพื่อสร้างตาราง Publication

โปรดสังเกตว่าคิวรีในภาพ 5-11 ผู้เขียนกำหนดให้คอลัมน์ publication_id เป็น PK ส่วน subject_id และ author_id เป็น FK เพื่อใช้เชื่อมโยงกับตาราง Subject และ Author ตามลำดับ ส่วนคอลัมน์ title ถูกกำหนดให้เป็น UK เพื่อป้องกันไม่ให้ผู้ใช้ป้อนข้อมูลชื่อหนังสือซ้ำกัน

 

5.3. สาธิตการออกแบบฐานข้อมูลอย่างง่าย
ในหัวข้อนี้ผู้เขียนจะแสดงวิธีออกแบบตารางสองตารางที่มีการเชื่อมโยงกันอย่างง่ายๆ สมมุติว่าเรามีข้อมูลอย่างที่เห็นในภาพ 5-12 ข้อมูลแต่ละบรรทัดคือข้อมูลของเพลงหนึ่งเพลง คอลัมน์แรก Band name คือชื่อวงดนตรี คอลัมน์ที่สอง Track คือชื่อเพลง คอลัมน์สุดท้าย Description คือคำวิจารณ์ของเพลงนั้น

ภาพ 5-12: ข้อมูลเพื่อสาธิตการออกแบบฐานข้อมูลอย่างง่าย

 

สมมุติว่าผู้เขียนถูกสั่งให้ทำสิ่งต่างๆ ดังนี้
1.    นำข้อมูลนี้มาออกแบบสร้างเป็น PT และ CT ที่เชื่อมโยงกันแบบหนึ่งต่อหลาย
2.    กำหนด PK ให้แก่ตารางทั้งสอง
3.    กำหนด FK ใน CT

 

5.3.1. ตัวอย่างการออกแบบ
ข้อมูลดิบมีสามคอลัมน์ เราต้องสร้างตารางสองตารางจากสามคอลัมน์นี้ ตารางที่ 1 มีหนึ่งคอลัมน์ ตารางที่ 2 มีสองคอลัมน์ การสร้างความสัมพันธ์แบบหนึ่งต่อหลายทำได้โดยดูข้อมูลที่ซ้ำกัน ในภาพ 5-12 อาจดูยากเพราะข้อมูลไม่ได้เรียงแต่กระจายอยู่อย่างไม่มีแบบแผน

การออกแบบตารางตามโจทย์สามข้อนี้มีสิ่งที่ควรพิจารณาดังนี้
1.    วงดนตรีหนึ่งวงปรกติจะมีเพลงมากกว่าหนึ่งเพลง เนื่องจากเราต้องการเชื่อมโยงความสัมพันธ์แบบหนึ่งต่อหลายโดย  ดังนั้น "หนึ่ง" คือ "หนึ่งวงดนตรี" และ "หลาย" คือ "หลายเพลง"
2.    ชื่อวงในคอลัมน์แรกมีการซ้ำกัน แต่คอลัมน์อื่นๆ ไม่มีข้อมูลซ้ำกันเลย ข้อเท็จจริงนี้สนับสนุนแนวคิดในข้อที่หนึ่ง
3.    เนื่องจากคอลัมน์แรกมีข้อมูลซ้ำกัน จึงเหมาะนำมาสร้างเป็น PT คอลัมน์ที่เหลืออีกสองคอลัมน์ไม่มีข้อมูลซ้ำจึงเหมาะนำมาใช้สร้างเป็น CT
4.    ข้อมูลชื่อเพลงจะต้องไม่มีการซ้ำกัน

ภาพข้างล่างแสดงทางเลือกสามแบบในการออกแบบ ทางเลือกที่ 3 ดีที่สุดเพราะ SK ถูกนำมาใช้เป็น PK และ FK  นั้นคือเรากำหนด band_id และ track_id เป็นเลขจำนวนเต็มเพื่อใช้เป็นตัวเชื่อมโยงแทนที่จะใช้ชื่อวงหรือชื่อเพลง ทั้งทางเลือกที่ 3 และที่ 2ใช้การกำหนดความสัมพันธ์แบบจำแนกไม่ได้ คือ CT ไม่ขึ้นกับ PT คือ PK ของ CT ไม่ใช่กุญแจเดียวกันกับ PK ในตารางแม่

ภาพ 5-13 : แผนภูมิ ER แสดงการออกแบบความสัมพันธ์ระหว่างตาราง Band และ Track

 

ส่วนทางเลือกที่ 2 ไม่ค่อยดี (แต่ก็ยังดีกว่าทางเลือกที่ 1) เพราะ PK ในตาราง Band และ FK ในตาราง Track ไม่ได้ใช้ SK (คือไม่ได้ใช้เลขรหัสแทนชื่อวง) จึงมีประสิทธิภาพต่ำกว่าทางเลือกที่ 3 ส่วนทางเลือกที่ 1 มีประสิทธิภาพต่ำที่สุดเพราะใช้ชื่อวง (band_name) เป็นตัวเชื่อมโยง คือใช้ชื่อวงเป็นทั้ง PK ในตาราง Band และ PK ในตาราง Track ด้วย การทำเช่นนี้ทำให้ชื่อวงมีฐานะเป็นกุญแจร่วม (Composite Key หรือ Compound Key ย่อ CK) คือมีข้อมูล (ชื่อวง) ซ้ำกันอยู่ในทั้งสองตารางซึ่งไม่ดี เพราะมีข้อมูลซ้ำกันจำนวนมากซึ่งเป็นสิ่งที่เราต้องการหลีกเลี่ยงตั้งแต่แรก

 

5.3.2. นิยามบูรณภาพสัมพันธ์
บูรณภาพสัมพันธ์ (Referential Integrity ย่อ RI)คือการควบคุมความคงเส้นคงว่าของความสัมพันธ์ระหว่างค่าของ PK และ FK  ซึ่งเป็นค่าที่เราใช้เชื่อมโยง PT และ CT เข้าด้วยกัน การควบคุมทำได้โดยใช้กลไกที่เรียกว่าข้อบังคับ (constraint) โปรแกรม RDBMS ส่วนใหญ่จะมีกลไกนี้ฝังมาในตัวอยู่แล้ว ยกตัวอย่างเช่นใน PT  คอลัมน์ที่เป็น PK จะมีค่าซ้ำกันไม่ได้ ตัวอย่างในหัวข้อที่ผ่านมา PT คือ Band มี PK เป็นชื่อวงดนตรี ค่านี้จะซ้ำกันไม่ได้ เพราะค่านี้ถูกใช้เป็น FK ใน CT  ดังนั้นใน PT จึงมีข้อมูลนี้ได้เพียงแถวเดียวเท่านั้น

เพื่อคงไว้ซึ่ง RI การออกแบบฐานข้อมูลจำเป็นต้องครอบคลุมประเด็นต่างๆ ต่อไปนี้
•    ตารางที่เก็บ PK จะถูกถือว่าเป็น PT และตารางที่เก็บ FK จะถูกถือว่าเป็น CT
•    เมื่อแทรกข้อมูลแถวใหม่เข้าสูง CT ค่าของ FK ของข้อมูลนั้นต้องเป็นค่ามีปรากฏอยู่ใน PT หรือจะเป็นค่า  NULL ก็ได้
•    FK จะมีค่าเป็น  NULL ก็ได้ แต่ PK จะมีค่าเป็น NULL ไม่ได้
•    การเปลี่ยนแปลงค่าใน PT เป็นสิ่งต้องห้าม หากการเปลี่ยนแปลงนั้นกระทบค่าของ PK นอกเสียจากว่าการเปลี่ยนแปลงนี้จะปรับแก้ค่าของ FK ใน CT ที่เชื่อมโยงอยู่ทั้งหมดด้วย
•    การเปลี่ยนแปลงค่าใน CT เป็นสิ่งต้องห้าม หากการเปลี่ยนแปลงนั้นกระทบค่าของ FK นอกเสียจากว่าการเปลี่ยนแปลงนี้จะทำให้ค่าของ FK เป็น NULL หรือมีการตรวจสอบค่า PK ใน PT ด้วย
•    การลบแถวใน PT เป็นสิ่งต้องห้าม นอกเสียจากว่าการลบนั้นจะดำเนินการกับ CT ทุกตาราง คือลบแถวข้อมูลใน CT ทุกแถวที่มี FK ตรงกับแถวข้อมูล PT ที่ถูกลบ

 

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

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

 

5.5. คำถามท้ายบท
1.    ERD มีประโยชน์อย่างไร
2.    ตีนกามีหน้าที่อะไร
3.    ความสัมพันธ์แบบหนึ่งต่อหนึ่งพบได้ในกรณีใด
4.    ความสัมพันธ์แบบหลายต่อหลายคืออะไร
5.    สัญลักษณ์รูปวงกลมและขีดหนึ่งขีดใช้แทนอะไร
6.    ความสัมพันธ์แบบจำแนกได้คืออะไร
7.    ความสัมพันธ์แบบจำแนกไม่ได้เป็นอย่างไร
8.    ตารางผูกพันคืออะไร
9.    กุญแจหลักมีหน้าที่อะไร
10.    กุญแจเอกลักษณ์คืออะไร

 

5.6. แบบฝึกหัดท้ายบท
พิจารณาข้อมูลในภาพ 5-13 แล้วทำสิ่งต่างๆ ดังนี้
1.    นำข้อมูลนี้มาออกแบบสร้างเป็น PT และ CT ที่เชื่อมโยงกันแบบหนึ่งต่อหลาย
2.    กำหนด PK ให้แก่ตารางทั้งสอง
3.    กำหนด FK ใน CT

 

ภาพ 5-13 : ตัวอย่างข้อมูลสำหรับทำแบบฝึกหัดท้ายบท

 

แผนภูมิ ER: ตอน 1

 

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

 

แผนภูมิ ER: ตอน 1

 

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

หัวข้อต่างๆ ที่ท่านจะได้เรียนในบทนี้คือ
•    นิยามแผนภูมิอีอาร์
     o    ตีนกา
     o    ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
     o    ความสัมพันธ์แบบหนึ่งต่อหลาย
     o    ความสัมพันธ์แบบหลายต่อหลาย
     o    ความสัมพันธ์แบบศูนย์ หนึ่ง และหลายๆ
     o    ตารางแม่ ตารางลูก
     o    ความสัมพันธ์ที่จำแนกได้และไม่ได้
     o    นิยามกุญแจ
     o    นิยามกุญแจหลัก
     o    นิยามกุญแจเอกลักษณ์
     o    นิยามกุญแจนอก
•    สาธิตการออกแบบฐานข้อมูลอย่างง่าย
     o    ตัวอย่างการออกแบบ
     o    นิยามบูรณภาพสัมพันธ์

 

5.1. นิยามแผนภูมิอีอาร์
หากเครื่องมือที่ดีที่สุดของนักเขียนโปรแกรมคือโฟลชาร์ท เครื่องมือที่ดีที่สุดของนักออกแบบฐานข้อมูลก็คือแผนภูมิอีอาร์ (Entity / Relation Diagram ย่อ ERD) เพราะ ERD ช่วยให้เราแสดงภาพความสัมพันธ์ภายในเอนทิตี และระหว่างเอนทิตี ได้เป็นอย่างดี คำว่าเอนทิตี (entity) ในการออกแบบฐานข้อมูลก็คือตารางในฐานข้อมูลนั่นเอง ท่านได้เรียนเรื่อง ERD ไปแล้วเล็กน้อยในบทก่อนหน้านี้ ในบทนี้ท่านจะได้เรียนวิธีอ่านและเขียน ERD เพิ่มเติม

 

ภาพ 5-1 : แผนภูมิอีอาร์หรือ ERD เป็นแผนภูมิง่ายๆ ไม่มีอะไรซับซ้อน เป็นเครื่องมือสำหรับนักออกแบบฐานข้อมูลเพื่อใช้แสดงภาพความสัมพันธ์ในเอนทิตี และระหว่างเอนทิตี

 

5.1.1. ตีนกา
คำว่าตีนกาในหัวข้อนี้ไม่ใช่รอยเหี่ยวย่นข้างดวงตา แต่เป็นสัญลักษณ์ใน ERD ที่ใช้เพื่อแสดงความสัมพันธ์แบบหนึ่งต่อหลาย (one-to-many) หรือหลายต่อหลาย (many-to-many) โดยในด้านที่เป็น "หลาย" จะใช้สัญลักษณ์รูป "ตีนกา" ซึ่งเป็นรูปเส้นสามแฉก เหมือนอย่างรอยที่เกิดหากท่านจับตีนกามาจุ่มหมึก (ถ้ามันยอม) แล้วซับลงบนกระดาษ  (ผู้เขียนไม่แน่ใจเหมือนกันว่าตีนของอีกาอันที่จริงแล้วมีนิ้วอยู่กี่นิ้ว แต่สัญลักษณ์ใน ERD จะเป็นเส้นสามเส้น)

ภาพ 5-2 : ตีนกาคือสัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์ใน ERD ในด้านที่เป็น "หลาย" ยกตัวอย่างเช่นในภาพนี้ แสดงความสัมพันธ์แบบ "หนึ่งต่อหลาย" ด้านที่เป็น "หนึ่ง" คือตาราง Author ด้านที่เป็น "หลาย" คือตาราง Publication นั่นคือนักเขียน (Author) หนึ่งคนอาจมีหนังสือ (Publication) ได้หลายเล่ม

 

5.1.2. ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
ความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นแบบที่ไม่ค่อยพบบ่อยนัก นอกจากจะจงใจออกแบบให้เป็นเช่นนั้น ท่านจะพบความสัมพันธ์แบบหนึ่งต่อหนึ่งได้ในการแปลงนอร์มัลฟอร์มระดับที่สี่เพื่อขจัดค่า NULL ออกจากตารางแม่ (เพื่อประหยัดเนื้อที่ในฮาร์ดดิสก์ ดูรายละเอียดในบทต่อไป)  เนื่องจากปัจจุบันฮาร์ดดิสก์มีความจุสูงมากและมีราคาถูก และใน SQL2008 มีชนิดข้อมูลที่เปลี่ยนความกว้างได้ ความสัมพันธ์แบบหนึ่งต่อหนึ่งจึงไม่เป็นที่นิยมเพราะมีประสิทธิภาพต่ำ

สัญลักษณ์แทนความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นขีดเพียงขีดเดียว

ภาพ 5-3 : ความสัมพันธ์แบบหนึ่งต่อหนึ่งแสดงเป็นนัยว่ามีหน่วยข้อมูลหนึ่งหน่วยอยู่ในทั้งสองตาราง สัญลักษณ์จึงใช้ขีดๆ เดียว

 

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

ภาพ 5-4 : ความสัมพันธ์แบบหนึ่งต่อหลายแสดงเป็นนัยว่ามีหน่วยข้อมูลหนึ่งหน่วยในตาราง ก และหลายหน่วยในตาราง ข ตรงตาราง ก จึงใช้รูปขีดๆ เดียว ส่วนตาราง ข ซึ่งมีข้อมูลหลายหน่วยจะใช้สัญลักษณ์รูปตีนกา

 

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

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

ภาพ 5-5 : ความสัมพันธ์แบบหลายต่อหลายสามารถนำมาสร้างเป็นตารามใหม่ได้อีกหนึ่งตาราง ในภาพนี้ตาราง Publisher เก็บข้อมูลสำนักพิมพ์ ตาราง Publication เก็บข้อมูลหนังสือ สองตารางนี้มีความสัมพันธ์แบบหลายต่อหลาย จึงสามารถนำมาสร้างเป็นตารามใหม่ได้อีกหนึ่งตารางคือ Edition

 

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

ยกตัวอย่างเช่นความสัมพันธ์ระหว่างตาราง Rank และตาราง Edition โดยตาราง Rank เก็บข้อมูลการจัดอันดับของหนังสือ (ว่าได้รับความนิยมเพียงใด) และตาราง Edition เก็บข้อมูลการจัดพิมพ์ในแต่ละครั้ง เนื่องจากในตาราง  Edition จะมีข้อมูลหนังสือเรื่องหนึ่งอยู่หนึ่งแถวมันจึงมีความสัมพันธ์แบบ "หนึ่ง" ส่วนตาราง Rank อาจไม่มีข้อมูลหนังสือเล่มนั้นอยู่เลย หรืออาจข้อมูลหนังสือเล่มนั้นอยู่หนึ่งแถว มันจึงมีความสัมพันธ์แบบ "ศูนย์และหนึ่ง"

ภาพ 5-6 : สัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์แบบศูนย์และหนึ่งคือรูปวงกลม (แทนศูนย์) และขีดหนึ่งขีด (แทนหนึ่ง) อย่างที่เห็นทางกรอบซ้าย ซึ่งแสดงความสัมพันธ์ระหว่างตาราง Rank และ Edition โดยในฝั่ง Rank เป็นแบบศูนย์และหนึ่ง ขณะที่ในฝั่ง Edition เป็นแบบหนึ่ง ดังนั้นความสัมพันธ์ระหว่างตาราง Rank และ Edition จึงเป็นแบบหนึ่งต่อศูนย์และหนึ่ง  ส่วนสัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์แบบศูนย์และหนึ่งหรือหลายๆ คือรูปตีนกาบวกขีดและวงกลมอย่างที่เห็นด้านบนของตารง Edition ทางกรอบขวาในภาพ

 

5.1.6. ตารางแม่ ตารางลูก
ในแบบจำลองฐานข้อมูลสัมพันธ์ท่านจะได้พบความสัมพันธ์แบบตารางแม่ (Parent Table ย่อ PT) และตารางลูก (Child Table ย่อ CT)อยู่เสมอ  นิยามของ PT คือตารางซึ่งมีข้อมูลที่ถูกอ้างถึงใน CT ส่วนนิยามของ CT คือตารางที่อ้างถึงข้อมูลใน PT ยกตัวอย่างเช่น ในภาพ 5-6 ตาราง Publication เป็น PT ของตาราง Edition และพูดได้อีกอย่างหนึ่งว่าตาราง Edition เป็น CT ของตาราง Publication

วิธีดูว่าตารางใดเป็น PT ตารางใดเป็น CT ให้ดูที่ FK หากตาราง ก มี FK ที่เชื่อมโยงไปยังตาราง ข จะถือว่าตาราง ก เป็น CT ของตาราง ข หรือพูดได้อีกอย่างหนึ่งว่าตาราง ข เป็น PT ของตาราง ก ยกตัวอย่างเช่น ในภาพ 5-6 ตาราง Edition มี FK คือคอลัมน์ publication_id ที่เชื่อมโยงไปยังคอลัมน์ชื่อเดียวกันในตาราง Publication

 

5.1.7. ความสัมพันธ์ที่จำแนกได้และไม่ได้
ฐานข้อมูลสัมพันธ์มักมีตารางจำนวนมากเชื่อมโยงกันด้วยความสัมพันธ์แบบกุญแจหลักหรือไพร์มารีคีย์ (PK) และกุญแจนอกหรือฟอร์เรนคีย์ (FK) ความสัมพันธ์เกิดระหว่าง PT และ CT ความสัมพันธ์ที่ว่านี้มีหลายแบบได้แก่


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

•    ความสัมพันธ์แบบจำแนกไม่ได้: คือความสัมพันธ์ที่ CT ไม่ขึ้นกับ PT นั่นคือ PK ของ CT ไม่ใช่กุญแจเดียวกันกับ PK ของ PT

•    ตารางผูกพัน: คือตารางที่มี FK เป็น PK ที่มาจาก PT เช่นตาราง CoAuthor ในภาพ 5-7

•    ตารางไม่ผูกพัน: หรือเอนทิตีอิสระคือตารางที่ไม่มี FK ที่เป็น PK ใน PT เช่นตาราง Publication ในภาพ 5-7

ภาพ 5-7 : แผนภูมิ ER นี้แสดงความสัมพันธ์ที่จำแนกได้และไม่ได้

 

วิธีออกแบบฐานข้อมูล : ตอน 2

 

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

 

วิธีออกแบบฐานข้อมูล : ตอน 2

 

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

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

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

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

 

4.5. กฎทางธุรกิจ
กฎทางธุรกิจ (Business Rules) คือนิยามของกระบวนการ คำจำกัดความและข้อกำหนดต่างๆ ที่จำเป็นต้องนำมาใช้เพื่อให้หน่วยงานสามารถทำงานได้บรรลุเป้าหมาย ยกตัวอย่างกฎทางธุรกิจเช่น "ยอมให้ลูกค้านำสินค้าที่มีปัญหามาเปลี่ยนได้ภายในเจ็ดวันหลังจากซื้อ" หากเราออกแบบฐานข้อมูลมาอย่างสวยงามตามหลักการออกแบบทุกประการ แต่ฐานข้อมูลนั้นไม่สามารถตอบสนองกฎทางธุรกิจได้ฐานข้อมูลนั้นก็ไร้ค่า

โปรดพิจารณาแผนภูมิ ERD ในภาพ 4-2 อันเป็นโครงสร้างฐานข้อมูลร้านขายหนังสือออนไลน์ (ขายในอินเตอร์เน็ต) จะเห็นว่าข้อมูลของหนังสือหนึ่งเล่มถูกแบ่งแยกออกเป็นหกตาราง แต่ละตารางถูกเชื่อมโยงด้วยตัวเชื่อมที่ต่างกัน ยกตัวอย่างเช่นตาราง Publication (เป็นตารางหลักเก็บข้อมูลหนังสือ) ถูกกำหนดให้มีสี่คอลัมน์ คอลัมน์แรกคือ publication_id เป็นคีย์หลักของตารางนี้ subject_id เป็นฟอร์เรนคีย ทำหน้าที่เชื่อมกับตาราง subject ซึ่งเก็บข้อมูลประเภทหรือชนิดของหนังสือ author_id เป็นฟอร์เรนคียเช่นกันทำหน้าที่เชื่อมกับตาราง Author ซึ่งเก็บข้อมูลผู้แต่งหนังสือ และสุดท้ายคือคอลัมน์ title ที่ไม่ได้เชื่อมโยงกับใคร ทำหน้าที่เก็บชื่อหนังสือ

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

 

4.6. นิยามกฎทางธุรกิจ
นิยามกฎทางธุรกิจคือกระบวนการต่างๆ ที่เกิดขึ้นในการทำงานประจำวัน การที่องค์กรตัดสินใจว่างานต่างๆ จะดำเนินการด้วยกรรมวิธีใด หรือองค์กรมีขึ้นเพื่อทำหน้าที่อะไร มีงานอะไรที่เกี่ยวข้องบ้าง มีรายได้จากอะไร และทำกำไรได้ด้วยวิธีใดมีผลมาจากการนิยามกฎทางธุรกิจ

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

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

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

 

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

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

 

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

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

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

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

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

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

 

4.9. ศึกษาจากระบบเดิม
บ่อยครั้งหน่วยงานที่ท่านจะออกแบบสร้างฐานข้อมูลมีระบบฐานข้อมูลเดิมอยู่แล้ว มันอาจเป็นแหล่งข้อมูลที่มีค่าให้ท่านใช้หาข้อมูลสำหรับออกแบบฐานข้อมูลได้ดี ระบบฐานข้อมูลเดิมอาจเป็นเพียงเอกสารกระดาษ ระบบฐานข้อมูลเก่าในเมนเฟรม หรือแม้แต่การจัดเก็บข้อมูลด้วยโปรแกรมเวิร์คชีต จงศึกษาจากระบบเดิมในสิ่งต่างๆ ต่อไปนี้

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

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

•    ระบบผสม: มีบางกรณีที่ระบบฐานข้อมูลเดิมขององค์กรเป็นระบบผสม ที่มีข้อมูลจากแผนกต่างๆ ซึ่งใช้เทคโนโลยีแตกต่างกัน เช่นแผนกการผลิตใช้แอพลิเกชันที่สร้างจากภาษา C# แผนกบัญชีใช้ออราเคิล และแผนกบริหารใช้ไมโครซอฟต์เอกเซล ฐานข้อมูลในระบบต่างๆ เหล่านี้เชื่อมโยงกันผ่านฐานข้อมูลกลางหรือเกตเวย์ อันเป็นฐานข้อมูลกลางที่รับข้อมูลจากทุกหน่วยงานมาผสมกัน

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

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

 

4.10. ข้อจำกัดและการตรวจสอบ
ข้อจำกัดคือสิ่งที่กำหนดว่าอะไรทำได้อะไรทำไม่ได้ ยกตัวข้อจำกัดคือ  "ตัวแทนฝ่ายขายภาคกลางจะขายสินค้าที่ภาคเหนือไม่ได้แต่ขายที่ภาคตะวันออกได้" ส่วนการตรวจสอบคือการคัดกรองข้อมูล เพื่อให้ฐานข้อมูลมีความถูกต้อง ยกตัวอย่างการตรวจสอบคือ "ยอดสั่งซื้อต่ำสุดของไอศกรีมหางเสือคือหนึ่งกล่อง"

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

•    NOT NULL: ทำหน้าที่กำหนดว่าคอลัมน์นั้นจะเป็น NULL ไม่ได้ คือจะต้องมีข้อมูลอยู่เสมอ
•    Validate Check: ทำหน้าที่ตรวจสอบการใส่ข้อมูลว่าตรงกับข้อกำหนดหรือไม่ ยกตัวอย่างเช่นคอลัมน์ที่ใช้เก็บข้อมูลเพศ กำหนดไว้ว่าให้เป็นตัวอักษรหนึ่งตัว จะต้องเป็น M หรือ F เท่านั้น
•    Key: กำหนดการเป็นกุญแจหรือคีย์ของคอลัมน์ใดๆ เช่นเป็นไพรมารีคีย์ ฟอร์เรนคีย์ และคีย์ที่ห้ามมีค่าซ้ำกัน

 

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

การวางแผนสร้างฐานข้อมูลจะต้องคำนึงถึงกฎทางธุรกิจ เนื่องจากองค์กรแต่ละแห่งย่อมมีกฎเกณฑ์ในการดำเนินงานที่แตกต่างกัน ดังนั้นในฐานะนักออกแบบฐานข้อมูล ท่านจะต้องรวบรวมข้อมูลจากผู้ใช้งานในองค์กรนั้นๆ รวมทั้งศึกษาระบบงานเดิมที่องค์กรนั้นๆ ใช้อยู่ รับฟังความต้องการและความคาดหวัง เพื่อนำมาออกแบบฐานข้อมูลใหม่ที่สามารถตอบสนองความต้องการทางธุรกิจได้ตรงตามจุดมุ่งหมาย

ในบทต่อไปท่านจะได้เรียนวิธีใช้แผนภูมิ ERD เพื่อการออกแบบฐานข้อมูล

 

4.12. คำถามท้ายบท

1.    ขั้นตอนที่สำคัญสุดในการออกแบบฐานข้อมูลคืออะไร
2.    บูรณภาพของข้อมูลคืออะไร
3.    คิวรีแบบ ad-hoc คืออะไร
4.    ฐานข้อมูลควรเชื่อมต่อกับแอพลิเกชันอย่างไร
5.    ฐานข้อมูลที่มีประสิทธิภาพเป็นอย่างไร
6.    การออกแบบทางแนวคิดคืออะไร
7.    การออกแบบทางตรรกะคืออะไร
8.    กฎทางธุรกิจคืออะไร
9.    การออกแบบฐานข้อมูลสัมพันธ์ควรสะท้อนกฎทางธุรกิจด้วยอะไร
10.    การศึกษาจากระบบเดิมอาจศึกษาจากอะไรได้บ้าง

 

4.13. แบบฝึกหัดท้ายบท
สมมุติว่าท่านไปเก็บข้อมูลเพื่อออกแบบสร้างฐานข้อมูลที่สโมสรกอล์ฟแห่งหนึ่ง เมื่อตรวจสอบแอพลิเกชันฐานข้อมูลเดิมที่ใช้งานอยู่ท่านพบว่ามีหน้าจอให้ป้อนพิมพ์ข้อมูลสมาชิกดังภาพ 4-3

ภาพ 4-3: หน้าจอให้ป้อนพิมพ์ข้อมูลสมาชิกของแอพลิเกชันฐานข้อมูลเดิมที่ใช้งานอยู่

จงออกแบบตารางเพื่อเก็บข้อมูลจากหน้าจอนี้ โดยแบ่งออกเป็นสองตารางคือ ตาราง Member เก็บข้อมูลสมาชิก และตาราง Type เก็บชนิดสมาชิกและจำนวนเงินค่าสมาชิก สองตารางนี้เชื่อมโยงกันด้วยคีย์ที่เหมาะสม

 

วิธีออกแบบฐานข้อมูล : ตอน 1

 

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

 

วิธีออกแบบฐานข้อมูล : ตอน 1

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

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

•    กำหนดเป้าหมาย
•    ฐานข้อมูลที่มีประสิทธิภาพ
•    หลักการออกแบบฐานข้อมูล
•    การออกแบบฐานข้อมูลในโลกจริง
•    กฎทางธุรกิจ
•    นิยามกฎทางธุรกิจ
•    ความสำคัญของกฎทางธุรกิจ
•    ความสัมพันธ์กับมนุษย์
•    ศึกษาจากระบบเดิม
•    ข้อจำกัดและการตรวจสอบ

 

4.1. กำหนดเป้าหมาย
ขั้นตอนที่สำคัญสุดในการวางแผนโครงการอะไรก็ตามมีเพียงอยู่เพียงขั้นตอนเดียว นั่นคือการระบุว่าจุดมุ่งหมายหรือเป้าหมายของงานเป็นอย่างไร การทำโครงการจะเริ่มจากขั้นตอนไหนก็ได้ แต่โครงการที่ประสบความสำเร็จส่วนมากเป็นโครงการที่วางแผนไว้ก่อนอย่างรัดกุม ขั้นตอนแรกสุดของการวางแผนคือการนิยามเป้าหมาย การออกแบบฐานข้อมูลก็เช่นเดียวกัน ท่านควรนิยามเป้าหมายโดยพิจารณาประเด็นต่างๆ ดังนี้


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


•    บูรณภาพของข้อมูล: บูรณภาพหมายถึงกฎที่ใช้ในการออกแบบฐานข้อมูลเพื่อให้มั่นใจว่าข้อมูลจะไม่สูญหายหรือเปลี่ยนแปลงไปโดยไม่เจตนา จะหายไปก็ต่อเมื่อท่านสั่งลบอย่างตั้งใจเท่านั้น การออกแบบฐานข้อมูลจะต้องคำนึงถึงบูรณภาพด้วย


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


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


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


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


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


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

 

ภาพ 4-1 : เว็บไซต์อย่าง ebay.com มีผู้เข้าทำธุรกรรมจากทั่วโลกวันละหลายๆ ล้านรายการ

 

4.2. ฐานข้อมูลที่มีประสิทธิภาพ
การออกแบบฐานข้อมูลให้บรรลุเป้าหมายทั้งหมดตามหัวข้อที่ผ่านมาอาจเป็นงานที่น่าปวดหัว แต่ก็คุ้มค่าเพราะหากทำได้จะเกิดข้อดีต่างๆ หลายอย่างดังนี้
•    ทำงานได้ดี: ฐานข้อมูลทำงานตอบสนองความต้องการได้ทุกข้อ กินทรัพยากรน้อย ผู้ใช้ทุกคนสามารถใช้งานได้อย่างไม่ติดขัด
•    คิวรีง่าย: เขียนคิวรีแล้วไม่เกิดปัญหาต่างๆ เช่น บูรณภาพของข้อมูล ความสัมพันธ์ระหว่างตารางผิด ตารางออกแบบไม่ได้ ฯลฯ
•    สร้างแอพลิเกชันง่าย: การออกแบบฐานข้อมูลให้สร้างแอพลิเกชันได้ง่ายเป็นสิ่งดี โดยเฉพาะอย่างยิ่งในงาน OLTP เพราะผู้ใช้ต้องใช้งานฐานข้อมูลทางอ้อมผ่านแอพลิเกชันโปรแกรม แต่ฐานข้อมูลในงานคลังข้อมูลอาจไม่จำเป็น เพราะผู้ใช้มักคิวรีฐานข้อมูลเองโดยตรงไม่ได้ทำงานผ่านแอพลิเกชัน
•    มีความยืดหยุ่น: การออกแบบฐานข้อมูลให้มีความยืดหยุ่นจะช่วยบรรเทาผลกระทบหากมีการเปลี่ยนแปลงโครงสร้างฐานข้อมูล

 

4.3. หลักการออกแบบฐานข้อมูล

หลักการออกแบบฐานข้อมูลมีขั้นตอนต่างๆ ดังต่อไปนี้

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

 

ภาพ 4-2 : ตัวอย่างแผนภูมิ ERD ของฐานข้อมูลร้านขายหนังสือในอินเตอร์เน็ตแห่งหนึ่ง

 

•    การออกแบบทางตรรกะ: เขียนคิวรี DDL (Data definition Language) เพื่อสร้างตารางต่างๆ ในฐานข้อมูล เครื่องมือสร้างแผนภูมิ ERD บางตัวอาจให้ DDL ได้โดยอัตโนมัติแต่เป็นเพียงคิวรีทั่วๆ ไป หากจะนำมาใช้ควรตรวจสอบให้ดีก่อน
•    การออกแบบทางกายภาพ: ปรับแก้คิวรีเพื่อสนับสนุนลักษณะทางกายภาพบางอย่าง เช่นพิจารณาว่าจำเป็นจะต้องต้องการเก็บออพเจ็กต์ที่เป็นไบนารีขนาดใหญ่ไว้เป็นไฟล์แยกต่างหากจากตารางมาตรฐานหรือไม่
•    การปรับแต่ง: ประกอบด้วยกระบวนการหลายอย่าง เช่นเพิ่มหรือลดระดับความเข้มข้นของการนอร์มัลไลซ์ การทำดรรชนี การจัดทำทริกเกอร์ การเพิ่มระบบรักษาความปลอดภัย หรืออะไรก็ตามที่ยังไม่ได้ทำในขึ้นตอนก่อนหน้านี้

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

 

การประยุกต์ใช้งานฐานข้อมูล : ตอน 2

 

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

 

การประยุกต์ใช้งานฐานข้อมูล : ตอน 2

 

3.5. การประมวลผลแบบขนาน
ปัจจุบันนี้ถ้าเราไปพันทิพย์เพื่อซื้อคอมพิวเตอร์ธรรมดาๆ เราจะได้คอมพิวเตอร์ที่มีตัวประมวลผลแบบมีแกนในสองแกน (dual-core)  เครื่องเล่นเกมอย่างเพลย์สเตชันสาม (PlayStaton 3) มีตัวประมวลผลขนาด 64 บิตแบบแปดแกน ในไม่ช้าตัวประมวลผลที่มีแกนหลักจำนวน 16 หรือ 32 แกนก็จะกลายเป็นเรื่องธรรมดา การมีตัวประมวลผลหลายแกนทำให้เราสามารถใช้งานโปรแกรมประยุกต์ที่ทำงานแบบคู่ขนาน (concurrent) ได้

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

นิยามการแบ่งส่วนของเซต A

ยูเนียนส่วนต่างๆ ทั้งหมดของเซต A

นั่นหมายความว่าการกระทำต่างๆ กับแถวของตารางเราสามารถทำได้อย่างคู่ขนาน คือสามารถทำได้กับทุกแถวไปพร้อมๆ กันโดยไม่จำเป็นต้องไล่ตั้งแต่แถวแรกไปถึงแถวสุดท้าย แสดงเป็นสัญลักษณ์ได้ดังนี้

ไม่มีอะไรจะทำงานได้เร็วไปกว่าการทำงานแบบคู่ขนาน ในอนาคตอันใกล้นี้เมื่อระบบปฏิบัติการและโปรแกรม RDBMS ยุคใหม่สนับสนุนการทำงานแบบคู่ขนาน การคิวรีข้อมูลปริมาณมากๆ จะทำได้รวดเร็วขึ้นกว่าปัจจุบันนี้หลายเท่าตัว

ภาพ 3-4: เครื่องเล่นเกมเพลย์สเตชันสามเป็นคอมพิวเตอร์ที่ใช้ตัวประมวลผลแบบคู่ขนาน

 

3.6. แรมราคาถูกลง
หน่วยความจำหลักหรือแรม (Random Access Memory ย่อ RAM) นับวันยิ่งมีความจุมากขึ้นและมีราคาต่ำลง  คอมพิวเตอร์ที่ผู้เขียนเคยใช้ตอนเริ่มหัดเขียนโปรแกรมมีแรมเพียง 2KB (สองพันไบต์) เท่านั้น แต่ในปัจจุบันเป็นเรื่องปรกติที่เราจะมีคอมพิวเตอร์ที่มีแรมจำนวน 2 หรือ 4GB (GB = พันล้านไบต์)  นั่นแปลว่าคอมพิวเตอร์ที่ผู้เขียนใช้ในปัจจุบันนี้มีแรมมากกว่าคอมพิวเตอร์ที่ผู้เขียนเคยใช้ตอนเริ่มหัดเขียนโปรแกรมถึงหนึ่งล้านเท่า และมากกว่าเครื่องเมนเฟรมในอดีตหลายแสนเท่า

 

ภาพ 3-5: MPF-1 คอมพิวเตอร์ที่ผู้เขียนใช้ตอนเริ่มหัดเขียนโปรแกรมในปี ค.ศ. 1984 มีแรมเพียง 2KB (ผู้เขียนซื้อคอมพิวเตอร์นี้จากร้านค้าใกล้บ้านหม้อ MPF-1 ผลิตโดยบริษัท มัลติเทค ที่ปัจจุบันเปลี่ยนชื่อเป็นเอเซอร์ เป็นเครื่องมือสำหรับฝึกเขียนโปรแกรมภาษาเครื่อง (machine language) ของซีพียู Z80)

นอกจากแรมแล้ว จานบันทึกข้อมูลก็มีความจุสูงขึ้นแต่มีราคาต่ำลงเช่นกัน แผ่นบันทึกข้อมูล "ฟล็อปปิดิสก์" ขนาดห้านิ้วครึ่งความจุ 360KB ถูกแทนที่ด้วยฟล็อปปิดิสก์ขนาดสามนิ้วครึ่ง ความจุ 1.44MB ต่อมาเป็น DVD-ROM ความจุ 4.7GB และปัจจุบันเป็นแผ่นดิสก์แบบบลูเรย์ (Blue-ray) ซึ่งมีความจุสูงถึง 50GB

 

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

ภาพ 3-6: โซลิดสเตทดิสก์มีความจุมากขึ้นแต่มีราคาต่ำลงเรื่อยๆ

3.8. ฮาร์ดดิสก์สมัยใหม่
ฮาร์ดดิสก์ (Hard disk drive ย่อ HDD) เป็นแผ่นจานแม่เหล็กที่ถูกประดิษฐ์คิดค้นโดยไอบีเอ็มตั้งแต่ปี ค.ศ. 1956 ปัจจุบันนี้ก็ยังไม่ตาย แต่มีราคาถูกลงและมีความจุมากขึ้น HDD ตามศูนย์ข้อมูล (Data center) หรือที่เครื่องแม่ข่ายให้บริการฐานข้อมูล (Database Server) เดิมจะใช้อินเตอร์เฟสแบบ SCSI (สแกซซี่)  ต่อพ่วง HDD ธรรมดาราคาไม่แพงเข้าด้วยกันหลายๆ ตัวเป็นแถว (Redundant Array of Inexpensive Disks ย่อ RAID) เพื่อเพิ่มความจุหรือเพิ่มความเชื่อถือได้ (หรือเล็งผลเลิศทั้งสองอย่าง)

ในสมัยก่อนหากต้องการสร้างคลังข้อมูลที่มีความจุระดับเทราไบต์ (Terabyte ย่อ TB) หรือล้านล้านไบต์ (1,000 ยกกำลัง 4 หรือ 10 ยกกำลัง 2) จำเป็นต้องใช้แถบแม่เหล็กหรืออุปกรณ์บันทึกข้อมูลด้วยแสงเป็นจำนวนมาก สลับสับเปลี่ยน (mount และ dismount) โดยอัตโนมัติด้วยน้ำมือของหุ่นยนต์ที่คล่องแคล่ว หรือจัดทำเป็นเซอฟเวอร์ฟาร์ม (Server Farm) ที่มีดิสก์ไซโล (Disks Silo) อยู่จำนวนมาก  แต่ตอนนี้หมดสมัยแล้ว เพราะในปัจจุบันแค่ HDD ธรรมดาราคาถูกก็มีความจุในระดับ TB ทำให้การจัดตั้งเครื่องแม่ข่ายให้บริการฐานข้อมูลทำได้งายขึ้น และมีราคาลดลง

ภาพ 3-7: โฆษณาขายฮาร์ดดิสก์ของบริษัท นอร์ทสตาร์ คอมพิวเตอร์ ในปี 1980 ความจุ 18MB รุ่นฮอร์ไรซอนราคาตัวละสามแสนบาท

 

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

ความคิดในย่อหน้าบนไม่เป็นความจริงเสมอไป เพราะขณะที่อุปกรณ์เก็บข้อมูลมีความจุเพิ่มขึ้น ขนาดของข้อมูลที่เราต้องการเก็บก็เพิ่มขึ้นเช่นกัน การใช้คอมพิวเตอร์ก่อนหน้านี้เน้นเก็บข้อความตัวอักษรและรูปภาพซึ่งกินเนื้อที่ไม่มาก แต่ปัจจุบันนี้เราเก็บข้อมูลเสียง (ไฟล์ MP3) หรือวิดีโอ (ไฟล์ .AVI, MP4, WMA และอื่นๆ)  และมีการประยุกต์ใช้งานใหม่ๆ ที่เพิ่มขนาดของข้อมูลอีกมาก เช่นโปรแกรมจดจำใบหน้าเพื่อการอ่านความรู้สึกและอารมณ์จากสีหน้า โปรแกรมจดจำลายนิ้วมือ โปรแกรมจดจำเส้นลายในดวงตาเพื่อแยกแยะความแตกต่างของบุคคล ข้อมูลแผนที่ๆ ทำงานร่วมกับดาวเทียม GPRS ข้อมูลเทียบ DNA ฯลฯ การประยุกต์ใช้งานใหม่เหล่านี้ล้วนต้องใช้พื้นที่เก็บข้อมูลขนาดใหญ่

 

ภาพ 3-8: ลักษณะของข้อมูลเปลี่ยนไป ข้อมูลสมัยใหม่มีขนาดใหญ่ขึ้นและซับซ้อนขึ้น ตัวอย่างเช่นในภาพนี้ เว็บไซต์ YouTube จัดเก็บคลิปวิดีโอที่สมาชิกส่งมาไว้เป็นฐานข้อมูลขนาดใหญ่

 

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

 

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

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

 

3.12. คำถามท้ายบท

1.    การใช้งานฐานข้อมูลแบบไคลแอนเซอฟเวอร์เป็นอย่างไร
2.    คลังข้อมูลคืออะไรมีหน้าที่อย่างไร
3.    ฐานข้อมูลแบบผสมผสานคืออะไร
4.    data bandwidth คืออะไร
5.    RAID คืออะไร
6.    การบีบฐานข้อมูลให้เล็กที่สุดมีข้อเสียอย่างไร
7.    ธรรมชาติของข้อมูลในปัจจุบันต่างจากในอดีตอย่างไร
8.    Solid-State Disk คืออะไร
9.    กฎของเซต (จำกัด) กล่าวว่าอย่างไร หมายความว่าอย่างไร

 

3.13. แบบฝึกหัดท้ายบท
จงเขียนคิวรีภาษา T-SQL เพื่อฉายแสดงข้อมูลในตาราง Employees ในฐานข้อมูล NorthWind โดยแสดงเฉพาะคอลัมน์ EmployeeID, LastName, FirstName, Title และ TitleOfCourtesy โดยให้แสดง 3 แบบดังนี้

1.    เซตของผู้ที่มี  TitleOfCourtesy = ‘Ms.’
2.    เซตของผู้ที่มี  TitleOfCourtesy = ‘Mr.’
3.    ผลจากการ UNION ALL ของทั้งสองเซต