ความสัมพันธ์ แบบหนึ่ง - ต่อ - หลาย ในฐานข้อมูล เกิดขึ้นเมื่อแต่ละระเบียนในตาราง 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 สอนภาษาอังกฤษ
เราสามารถดูได้ว่าการออกแบบนี้หลีกเลี่ยงความซ้ำซ้อนที่เป็นไปได้ใด ๆ ช่วยให้ครูแต่ละคนสอนหลายหลักสูตรและใช้ความสัมพันธ์แบบหนึ่งต่อหลาย
ฐานข้อมูลยังสามารถใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งและความสัมพันธ์แบบหลายต่อหลายคน