แผนภูมิ 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 : ตัวอย่างข้อมูลสำหรับทำแบบฝึกหัดท้ายบท

 

โฆษณา

ใส่ความเห็น

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: