8.1 โครงสร้างความสัมพันธ์
2. โครงสร้างความสัมพันธ์
เนื่องจากการเก็บข้อมูลในระบบฐานข้อมูลขนาดใหญ่
ถ้าหากเก็บข้อมูลไว้เพียงตารางเดียวจะเกิดปัญหาความซ้ำซ้อนของข้อมูล
วิธีหลีกเลี่ยงไม่ให้เกิดปัญหาจึงควรออกแบบให้มีตารางหลาย ๆ ตารางและแต่ละตารางมีความสัมพันธ์กัน
ซึ่งมีความสัมพันธ์อยู่ด้วยกัน 3 แบบ ดังนี้
ภาพที่ 8.2 แสดงความสัมพันธ์แบบหนึ่งต่อหนึ่ง
จากภาพที่ 8.2 เป็นการแสดงตัวอย่างการเขียนแผนผังเพื่อใช้เป็นการสื่อสารระหว่างผู้ออกแบบกับผู้เขียนโปรแกรมหรือผู้ที่เกี่ยวข้อง
แผนผังเปรียบเสมือนแบบแปลนบ้านที่เป็นพิมพ์เขียวของสถาปนิกที่เขียนให้แก่เจ้าของบ้านเพื่อไปว่าจ้างให้ช่างก่อสร้าง
สร้างบ้านตามพิมพ์เขียวนั้น จากผังงานสามารถอธิบายเป็นข้อความได้ว่า คณบดี 1
คนบริหารคณะเพียง 1 คณะและคณะ 1 คณะบริหารโดยคณบดีเพียงคนเดียว สำหรับในการเก็บข้อมูลที่อยู่ในรูปของตารางนั้น
สามารถเขียนได้ดังภาพที่ 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.7 แสดงรูปความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างตารางผู้เขียนและตารางหนังสือ
จากภาพที่ 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 แสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มโดยเปรียบเทียบระหว่างผู้เขียนและหนังสือ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น