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

ตัวอย่างความสัมพันธ์แบบหนึ่งต่อกลุ่ม
พิจารณาความสัมพันธ์ระหว่างครูกับหลักสูตรที่พวกเขาสอน ครูสามารถสอนได้หลายชั้นเรียน แต่หลักสูตรจะไม่มีความสัมพันธ์แบบเดียวกันกับครู
ดังนั้น สำหรับแต่ละระเบียนในตารางครู อาจมีระเบียนจำนวนมากในตารางรายวิชา ตัวอย่างนี้แสดงให้เห็นถึงความสัมพันธ์แบบหนึ่งต่อกลุ่ม: ครูหนึ่งคนต่อหลายหลักสูตร
ทำไมการสร้างความสัมพันธ์แบบหนึ่งต่อหลายคนจึงสำคัญ
ในการแสดงความสัมพันธ์แบบหนึ่งต่อกลุ่ม คุณต้องมีอย่างน้อยสองตาราง มาดูกันว่าทำไม
การปฏิบัติตามการออกแบบ First Normal Form
บางทีเราอาจจะสร้างตารางที่เราต้องการบันทึกชื่อและรายวิชาที่สอน เราอาจออกแบบตาราง Teachers and Courses แบบนี้:
ครู_ID | Teacher_Name | หลักสูตร |
---|---|---|
ครู_001 | คาร์เมน | ชีววิทยา |
ครู_002 | เวโรนิก้า | คณิตศาสตร์ |
ครู_003 | จอร์เก้ | ภาษาอังกฤษ |
ถ้าคาร์เมนสอนสองคอร์สขึ้นไปล่ะ? เรามีสองตัวเลือกสำหรับการออกแบบนี้ เราสามารถเพิ่มลงในบันทึกที่มีอยู่ของ Carmen ได้เช่นนี้:
ครู_ID | ครู_Name | หลักสูตร |
---|---|---|
ครู_001 | คาร์เมน | ชีววิทยา คณิตศาสตร์ |
ครู_002 | เวโรนิก้า | คณิตศาสตร์ |
ครู_003 | จอร์เก้ | ภาษาอังกฤษ |
อย่างไรก็ตาม การออกแบบด้านบนไม่ยืดหยุ่นและอาจส่งผลให้เกิดปัญหาในภายหลังเมื่อคุณแทรก แก้ไข หรือลบข้อมูล ทำให้การค้นหาข้อมูลทำได้ยาก
การออกแบบนี้ยังละเมิดหลักการแรกของการทำให้ฐานข้อมูลเป็นมาตรฐาน First Normal Form (1NF) ซึ่งระบุว่าแต่ละเซลล์ตารางควรมีข้อมูลเดียวที่ไม่ต่อเนื่อง
กฎรูปแบบปกติที่สอง
การออกแบบทางเลือกอื่นอาจเป็นการเพิ่มสถิติที่สองสำหรับ Carmen:
ครู_ID | ครู_Name | หลักสูตร |
---|---|---|
ครู_001 | คาร์เมน | ชีววิทยา |
ครู_001 | คาร์เมน | คณิตศาสตร์ |
ครู_002 | เวโรนิก้า | คณิตศาสตร์ |
ครู_003 | จอร์เก้ | ภาษาอังกฤษ |
วิธีการนี้ยึดตาม 1NF แต่ก็ยังมีการออกแบบฐานข้อมูลที่ไม่ดี เนื่องจากมีความซ้ำซ้อนและอาจขยายฐานข้อมูลขนาดใหญ่โดยไม่จำเป็น ที่สำคัญกว่านั้น ข้อมูลอาจไม่สอดคล้องกัน
เช่น ถ้าชื่อคาร์เมนเปลี่ยนชื่อล่ะ? ผู้ที่ทำงานกับข้อมูลอาจอัปเดตชื่อของเธอในระเบียนเดียวและไม่สามารถอัปเดตในระเบียนที่สองได้
การออกแบบนี้ละเมิดมาตรฐาน Second Normal Form (2NF) ซึ่งเป็นไปตาม 1NF และต้องหลีกเลี่ยงความซ้ำซ้อนของหลายระเบียน กฎ 2NF ทำได้โดยแยกชุดย่อยของข้อมูลออกเป็นหลายตารางและสร้างความสัมพันธ์ระหว่างกัน
วิธีออกแบบฐานข้อมูลด้วยความสัมพันธ์แบบหนึ่งต่อกลุ่ม
หากต้องการใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่มในตารางครูและหลักสูตร ให้แบ่งตารางออกเป็นสองตารางแล้วเชื่อมโยงโดยใช้คีย์ต่างประเทศ
ที่นี่ เราลบคอลัมน์หลักสูตรในตารางครู:
ครู_ID | ครู_Name |
---|---|
ครู_001 | คาร์เมน |
ครู_002 | เวโรนิก้า |
ครู_003 | จอร์เก้ |
และนี่คือตารางรายวิชา โปรดทราบว่ารหัสต่างประเทศของ Teacher_ID จะลิงก์หลักสูตรกับครูในตาราง Teachers:
หลักสูตร_ID | Course_Name | ครู_ID |
---|---|---|
หลักสูตร_001 | ชีววิทยา | ครู_001 |
หลักสูตร_002 | คณิตศาสตร์ | ครู_001 |
หลักสูตร_003 | ภาษาอังกฤษ | ครู_003 |
เราได้พัฒนาความสัมพันธ์ระหว่างครูกับตารางรายวิชาโดยใช้คีย์นอก ข้อตกลงนี้บอกเราว่า Carmen สอนทั้งวิชาชีววิทยาและคณิตศาสตร์ และ Jorge สอนภาษาอังกฤษ
เราจะเห็นว่าการออกแบบนี้หลีกเลี่ยงความซ้ำซ้อนที่อาจเกิดขึ้นได้อย่างไร ทำให้ครูแต่ละคนสามารถสอนหลายหลักสูตร และใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่ม