علاقات رأس بأطراف في قاعدة بيانات

تحدث علاقة رأس بأطراف في قاعدة بيانات عندما يكون لكل سجل في الجدول أ العديد من السجلات المرتبطة في الجدول ب ، ولكن قد يكون لكل سجل في الجدول ب سجل واحد مطابق في الجدول أ. علاقة رأس بأطراف في قاعدة البيانات هي تصميم قاعدة البيانات العلائقية الأكثر شيوعًا وهي في صميم التصميم الجيد.

فكر في العلاقة بين المعلم والدورات التي يدرسها. يمكن للمدرس تدريس دورات متعددة ، ولكن الدورة لن يكون لها نفس العلاقة مع المعلم.

لذلك ، لكل سجل في جدول المعلمين ، قد يكون هناك العديد من السجلات في جدول الدورات التدريبية. هذه هي علاقة رأس بأطراف: معلم واحد إلى دورات متعددة.

لماذا تأسيس علاقة واحد لكثير مهم

لتمثيل علاقة رأس بأطراف ، تحتاج إلى جدولين على الأقل. دعونا نرى لماذا.

ربما أنشأنا جدولاً للمعلمين أردنا فيه تسجيل الاسم والدورات التي يتم تدريسها. قد نصممه على النحو التالي:

المعلمين والدورات
Teacher_ID TEACHER_NAME دورة
Teacher_001 كارمن مادة الاحياء
Teacher_002 فيرونيكا الرياضيات
Teacher_003 خورخي الإنجليزية

ماذا لو كانت كارمن تعلم دورتين أو أكثر؟ لدينا خياران مع هذا التصميم. يمكننا فقط إضافته إلى سجل كارمن الموجود ، على النحو التالي:

المعلمين والدورات
Teacher_ID المعلم _Name دورة
Teacher_001 كارمن علم الأحياء ، الرياضيات
Teacher_002 فيرونيكا الرياضيات
Teacher_003 خورخي الإنجليزية

ومع ذلك ، فإن التصميم أعلاه غير مرن وقد يؤدي إلى مشاكل لاحقًا عند محاولة إدخال البيانات أو تعديلها أو حذفها.

يجعل من الصعب البحث عن البيانات. ينتهك هذا التصميم المبدأ الأول لتطبيع قاعدة البيانات ، النموذج الأول العادي (1NF) ، والذي ينص على أن كل خلية جدول يجب أن تحتوي على قطعة واحدة منفصلة من البيانات.

قد يكون بديل آخر للتصميم هو ببساطة إضافة سجل ثانٍ لكارمن:

المعلمين والدورات
المعلم _ID المعلم _Name دورة
Teacher_001 كارمن مادة الاحياء
Teacher_001 كارمن الرياضيات
Teacher_002 فيرونيكا الرياضيات
Teacher_003 خورخي الإنجليزية

هذا التمسك 1NF ولكن لا يزال تصميم قاعدة بيانات فقيرة لأنه يقدم التكرار ويمكن أن سخام قاعدة بيانات كبيرة جدا دون داع. الأهم من ذلك ، قد تصبح البيانات غير متناسقة. على سبيل المثال ، ماذا لو تغير اسم كارمن؟ قد يعمل شخص ما يعمل مع البيانات على تحديث اسمها في سجل واحد وفشل في تحديثه في السجل الثاني. ينتهك هذا التصميم النموذج العادي الثاني (2NF) ، الذي يلتزم بـ 1NF ويجب أيضًا تجنب تكرار السجلات المتعددة عن طريق فصل مجموعات فرعية من البيانات إلى جداول متعددة وإنشاء علاقة بينها.

كيفية تصميم قاعدة بيانات مع علاقات رأس بأطراف

لتنفيذ علاقة رأس بأطراف في جدول المعلمين والدورات التدريبية ، نقوم بتجزئة الجداول إلى قسمين وربطها باستخدام مفتاح خارجي .

هنا ، أزلنا عمود الدورة التدريبية في جدول المعلمين:

معلمون
المعلم _ID المعلم _Name
Teacher_001 كارمن
Teacher_002 فيرونيكا
Teacher_003 خورخي

وهنا جدول الدورات. لاحظ أن مفتاحه الخارجي ، Teacher_ID ، يربط المقرر الدراسي بمعلم في جدول المعلمين:

الدورات
معرف بالطبع اسم الدورة التدريبية Teacher_ID
Course_001 مادة الاحياء Teacher_001
Course_002 الرياضيات Teacher_001
Course_003 الإنجليزية Teacher_003

لقد طورنا علاقة بين المعلمين وجدول الدورات باستخدام مفتاح خارجي.

هذا يخبرنا أن كل من علم الأحياء والرياضيات يتم تدريسهما من قبل كارمن وأن جورج يقوم بتدريس اللغة الإنجليزية.

يمكننا أن نرى كيف يتجنب هذا التصميم أي فائض محتمل ، ويسمح للمعلمين الفرديين بتدريس دورات متعددة ، وتنفيذ علاقة رأس بأطراف.

يمكن لقواعد البيانات أيضًا تنفيذ علاقة رأس برأس وعلاقة بين أطراف بأطراف.