ความสัมพันธ์แบบหนึ่งต่อกลุ่มในฐานข้อมูล

สารบัญ:

ความสัมพันธ์แบบหนึ่งต่อกลุ่มในฐานข้อมูล
ความสัมพันธ์แบบหนึ่งต่อกลุ่มในฐานข้อมูล
Anonim

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

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

ฐานข้อมูลยังสามารถใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งและความสัมพันธ์แบบกลุ่มต่อกลุ่ม

Image
Image

ตัวอย่างความสัมพันธ์แบบหนึ่งต่อกลุ่ม

พิจารณาความสัมพันธ์ระหว่างครูกับหลักสูตรที่พวกเขาสอน ครูสามารถสอนได้หลายชั้นเรียน แต่หลักสูตรจะไม่มีความสัมพันธ์แบบเดียวกันกับครู

ดังนั้น สำหรับแต่ละระเบียนในตารางครู อาจมีระเบียนจำนวนมากในตารางรายวิชา ตัวอย่างนี้แสดงให้เห็นถึงความสัมพันธ์แบบหนึ่งต่อกลุ่ม: ครูหนึ่งคนต่อหลายหลักสูตร

ทำไมการสร้างความสัมพันธ์แบบหนึ่งต่อหลายคนจึงสำคัญ

ในการแสดงความสัมพันธ์แบบหนึ่งต่อกลุ่ม คุณต้องมีอย่างน้อยสองตาราง มาดูกันว่าทำไม

การปฏิบัติตามการออกแบบ 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 สอนภาษาอังกฤษ

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