วันอาทิตย์ที่ 26 กุมภาพันธ์ พ.ศ. 2560

8.1 โครงสร้างความสัมพันธ์

8.1 โครงสร้างความสัมพันธ์

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

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

ภาพที่ 8.แสดงความสัมพันธ์แบบหนึ่งต่อหนึ่ง

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

 
ภาพที่  8.3  แสดงความสัมพันธ์แบบหนึ่งต่อหนึ่งระหว่างตารางคณะและตารางคณบดี

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

ภาพที่  8.4  แสดงความสัมพันธ์แบบหนึ่งต่อกลุ่ม
จากภาพที่ 8.4 แสดงความสัมพันธ์แบบหนึ่งต่อกลุ่ม และอธิบายเป็นข้อความได้ว่า อาจารย์แต่ละคนสามารถเขียนหนังสือได้หลายเล่มและหนังสือแต่ละเล่มเขียนโดยอาจารย์เพียงคนเดียว เมื่อนำเอาแผนผังไปสร้างเป็นตารางและจัดเก็บข้อมูลเข้าไปในตารางทั้งสอง จะมีลักษณะดังภาพที่ 8.5
ภาพที่ 8.5  แสดงความสัมพันธ์แบบหนึ่งต่อกลุ่มระหว่างตารางอาจารย์และตารางหนังสือ
จากภาพที่ 8.5 อธิบายความสัมพันธ์ของตารางทั้งสองและการจัดการความสัมพันธ์ได้ ดังนี้  
                        1.  ตารางมีการแยกได้เป็น 2 ตาราง คือ ตารางอาจารย์  และตารางหนังสือ
                        2.  ตารางอาจารย์มีความสัมพันธ์กับตารางหนังสือแบบหนึ่งต่อกลุ่ม
                        3.  วิธีการจัดการความสัมพันธ์โดยการนำข้อมูลคีย์หลักของตารางอาจารย์ (TEACHER_ID) ไปสร้างแอตทริบิวต์เพิ่มที่ตารางหนังสือ แอตทริบิวต์ที่เพิ่มจะกลายเป็นคีย์นอก หลังจากนั้นจึงนำข้อมูลที่สัมพันธ์กันจากคีย์หลักของตารางอาจารย์มาเก็บในแอตทริบิวต์คีย์นอกของตารางหนังสือ
                        4.  จากตารางทั้งสองสามารถอ่านเพื่อตีความได้ว่า อาจารย์ทวีรัตน์ นวลช่วย เขียนหนังสือสองเล่ม ได้แก่ การโปรแกรมภาษาคอมพิวเตอร์และระบบฐานข้อมูล อาจารย์ยาใจ    โรจนวงศ์ชัย เขียนหนังสือจำนวนสองเล่ม ได้แก่ โครงสร้างข้อมูลและดีสครีตและโครงสร้าง และอาจารย์พิกุล สมจิตต์ เขียนหนังสือจำนวนหนึ่งเล่ม ได้แก่ โปรแกรมประยุกต์ด้านสถิติ
                                2.3          ความสัมพันธ์แบบกลุ่มต่อกลุ่ม หมายถึง สมาชิกจำนวนตั้งแต่หนึ่งระเบียนขึ้นไปในเอนทิตีที่หนึ่งมีความสัมพันธ์กับสมาชิกในเอนทิตีที่สองจำนวนหลาย ๆ ระเบียน ในขณะเดียวกันหากมองย้อนกลับ สมาชิกในเอนทิตีที่สองกลับไปมีความสัมพันธ์กับสมาชิกในเอนทิตีที่หนึ่งจำนวนหลาย ๆ ระเบียนเช่นกัน เช่น สำนักพิมพ์ต้องการเก็บข้อมูลผู้เขียนหนังสือและรายชื่อหนังสือ เมื่อวิเคราะห์ตามที่เป็นจริงปรากฏว่า หนังสือแต่ละเล่มมีผู้เขียนหนึ่งคนบ้าง หลายคนบ้าง และผู้เขียนแต่ละคนสามารถเขียนหนังสือได้หลาย ๆ เล่ม เป็นต้น เพราะฉะนั้นความสัมพันธ์ระหว่างผู้เขียนหนังสือกับหนังสือที่เขียนเป็นกลุ่มต่อกลุ่ม  สัญลักษณ์ที่ใช้คือ M : N สามารถเขียนเป็นแผนผังได้ดังภาพที่ 8.6

ภาพที่ 8.6  แสดงความสัมพันธ์แบบกลุ่มต่อกลุ่ม

จากภาพที่ 8.6 แสดงถึงความสัมพันธ์ระหว่างผู้เขียนหนังสือกับหนังสือ สามารถอธิบายเป็นข้อความได้ว่า ผู้เขียนหนังสือแต่ละคนเขียนหนังสือได้หลาย ๆ เล่มและหนังสือแต่ละเล่มเขียนโดยผู้เขียนหลาย ๆ คน เมื่อพิจารณาถึงการจัดเก็บในตารางของความสัมพันธ์ทั้งสองเอนทิตี จะไม่สามารถนำไปปฏิบัติ ดังต่อไปนี้ได้
ภาพที่ 8.แสดงรูปความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างตารางผู้เขียนและตารางหนังสือ
จากภาพที่ 8.7 เป็นการแสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างตารางผู้เขียนกับตารางหนังสือ เมื่อพิจารณาจากข้อมูลแล้วยังไม่สามารถนำไปพัฒนาเป็นระบบฐานข้อมูลให้ถูกต้องตามกฎเกณฑ์ได้ ด้วยสาเหตุมาจากหลายอย่าง ดังนี้
                        1.  ตารางทั้งสองยังคงมีความซ้ำซ้อน เช่น ที่แอตทริบิวต์ AUTHOR_ID มีข้อมูลซ้ำกันหลาย ๆ ครั้ง และในตาราง AUTHOR ยังคงมีแอตทริบิวต์ BOOK_ID และในทำนองเดียวกันในตาราง BOOK กลับมีแอตทริบิวต์ AUTHOR_ID ด้วย
                        2.  ตารางทั้งสองยังคงมีความซับซ้อน อาจจะทำให้มีข้อผิดพลาด และทำให้ฐานข้อมูลไม่มีประสิทธิภาพ
                วิธีแก้ปัญหาดังกล่าว แก้ไขโดยการเพิ่มเอนทิตีเพื่อให้เป็นเอนทิตีคอมโพสิต อีกหนึ่งเอนทิตีและเปลี่ยนโครงสร้างความสัมพันธ์ใหม่ให้เป็นหนึ่งต่อกลุ่ม จำนวนสามเอนทิตี ดังภาพที่ 8.8
ภาพที่ 8.8  แสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มที่เปลี่ยนเป็นหนึ่งต่อกลุ่มจากภาพที่ 8.8 แสดงวิธีแก้ปัญหาความสัมพันธ์แบบกลุ่มต่อกลุ่มเป็นความสัมพันธ์แบบหนึ่งต่อกลุ่ม โดยเพิ่มเอนทิตีที่ความสัมพันธ์ เรียกเอนทิตีที่เพิ่มมาใหม่ว่า คอมโพสิตเอนทิตี และเมื่อแปลงเอนทิตีให้เป็นรูปแบบตาราง โดยให้เพิ่มแอตทริบิวต์ของคีย์หลักทั้งตารางผู้เขียนและตารางหนังสือมาเป็นส่วนหนึ่งของคีย์หลักในตารางผู้แต่งหนังสือ (author publish) และให้คีย์ทั้งสองเป็นคีย์หลักของตาราง ดังแสดงในภาพที่ 8.9
ภาพที่ 8.9  แสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มที่ได้เพิ่มคอมโพสิตเอนทิตี
จากภาพที่ 8.9 แสดงให้เห็นถึงเอนทิตีที่ได้                                                   ได้แก่ ปัญหาความซ้ำซ้อนของข้อมูลที่เกิดขึ้นจากความสัมพันธ์แบบกลุ่มต่อกลุ่ม ให้เป็นหนึ่งต่อกลุ่มทั้งสองด้าน โดยเพิ่มคอมโพสิตเอนทิตีไปแทรกตรงกลาง และให้คอมโพสิตเอนทิตีมีคีย์หลักที่ประกอบด้วยคีย์หลักของ    เอนทิตีของ AUTHOR และเอนทิตีของ BOOK เพราะฉะนั้นเมื่อนำเอาตารางทั้งสามมาสัมพันธ์กันจะมีข้อมูลในลักษณะดังภาพที่ 8.10
ภาพที่ 8.10  แสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มโดยเปรียบเทียบระหว่างผู้เขียนและหนังสือ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...