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

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

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

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

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

เพื่อเป็นตัวแทนของความสัมพันธ์แบบหนึ่งต่อหลายท่านต้องมีอย่างน้อยสองตาราง มาดูกันว่าทำไม

บางทีเราอาจสร้างตารางครูที่เราต้องการจะบันทึกชื่อและหลักสูตรที่สอนไว้ เราอาจออกแบบได้ดังนี้:

ครูและหลักสูตร
Teacher_ID TEACHER_NAME หลักสูตร
Teacher_001 คาร์เมน ชีววิทยา
Teacher_002 เวโรนิก้า คณิตศาสตร์
Teacher_003 Jorge อังกฤษ

เกิดอะไรขึ้นถ้า Carmen สอนหลักสูตรสองหลักสูตรขึ้นไป? เรามีทางเลือกสองแบบด้วยการออกแบบนี้ เราสามารถเพิ่มลงในบันทึกที่มีอยู่ของ Carmen เช่น:

ครูและหลักสูตร
Teacher_ID ครู _Name หลักสูตร
Teacher_001 คาร์เมน ชีววิทยาคณิตศาสตร์
Teacher_002 เวโรนิก้า คณิตศาสตร์
Teacher_003 Jorge อังกฤษ

อย่างไรก็ตามการออกแบบข้างต้นไม่ยืดหยุ่นและอาจทำให้เกิดปัญหาในภายหลังเมื่อพยายามแทรกแก้ไขหรือลบข้อมูล

ทำให้การค้นหาข้อมูลทำได้ยาก การออกแบบนี้ละเมิดหลักเกณฑ์แรกของการทำให้เป็นบรรทัดฐานของฐานข้อมูล First Normal Form (1NF) ซึ่งระบุว่าแต่ละเซลล์ในตารางควรมีข้อมูลชิ้นเดียวที่ไม่ต่อเนื่อง

อีกทางเลือกหนึ่งในการออกแบบคือการเพิ่มระเบียนที่สองสำหรับ Carmen:

ครูและหลักสูตร
ครู _ID ครู _Name หลักสูตร
Teacher_001 คาร์เมน ชีววิทยา
Teacher_001 คาร์เมน คณิตศาสตร์
Teacher_002 เวโรนิก้า คณิตศาสตร์
Teacher_003 Jorge อังกฤษ

การปฏิบัตินี้เป็นไปตาม 1NF แต่ยังคงมีการออกแบบฐานข้อมูลที่ไม่ดีเนื่องจากแนะนำการสำรองข้อมูลและสามารถขยายฐานข้อมูลขนาดใหญ่ได้โดยไม่จำเป็น ข้อมูลที่สำคัญอาจไม่สอดคล้องกัน ตัวอย่างเช่นถ้าชื่อของ Carmen เปลี่ยนไป? คนที่ทำงานร่วมกับข้อมูลอาจอัปเดตชื่อของเธอในระเบียนเดียวและไม่สามารถอัปเดตในระเบียนที่สองได้ การออกแบบนี้ละเมิดรูปแบบที่ 2 (Second Normal Form) (2NF) ซึ่งยึดมั่นกับ 1NF และต้องหลีกเลี่ยงความซ้ำซ้อนของระเบียนหลาย ๆ อันด้วยการแยกข้อมูลย่อยลงในหลาย ๆ ตารางและสร้างความสัมพันธ์ระหว่างกัน

วิธีการออกแบบฐานข้อมูลด้วยความสัมพันธ์แบบหนึ่ง - ต่อ - หลาย

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

ที่นี่เราได้ลบคอลัมน์หลักสูตรในตารางครู:

ครู
ครู _ID ครู _Name
Teacher_001 คาร์เมน
Teacher_002 เวโรนิก้า
Teacher_003 Jorge

และนี่คือตารางหลักสูตร โปรดทราบว่าคีย์ต่างประเทศ Teacher_ID เชื่อมโยงหลักสูตรกับครูในตารางครู:

หลักสูตร
Course_ID COURSE_NAME Teacher_ID
Course_001 ชีววิทยา Teacher_001
Course_002 คณิตศาสตร์ Teacher_001
Course_003 อังกฤษ Teacher_003

เราได้พัฒนาความสัมพันธ์ระหว่างครูและตารางหลักสูตรโดยใช้คีย์ต่างประเทศ

นี่บอกเราว่าทั้งชีววิทยาและคณิตศาสตร์สอนโดย Carmen และ Jorge สอนภาษาอังกฤษ

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

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