تحدث علاقة رأس بأطراف في قاعدة بيانات عندما يكون لكل سجل في الجدول أ العديد من السجلات المرتبطة في الجدول ب ، ولكن قد يكون لكل سجل في الجدول ب سجل واحد مطابق في الجدول أ. علاقة رأس بأطراف في قاعدة البيانات هي تصميم قاعدة البيانات العلائقية الأكثر شيوعًا وهي في صميم التصميم الجيد.
فكر في العلاقة بين المعلم والدورات التي يدرسها. يمكن للمدرس تدريس دورات متعددة ، ولكن الدورة لن يكون لها نفس العلاقة مع المعلم.
لذلك ، لكل سجل في جدول المعلمين ، قد يكون هناك العديد من السجلات في جدول الدورات التدريبية. هذه هي علاقة رأس بأطراف: معلم واحد إلى دورات متعددة.
لماذا تأسيس علاقة واحد لكثير مهم
لتمثيل علاقة رأس بأطراف ، تحتاج إلى جدولين على الأقل. دعونا نرى لماذا.
ربما أنشأنا جدولاً للمعلمين أردنا فيه تسجيل الاسم والدورات التي يتم تدريسها. قد نصممه على النحو التالي:
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 |
لقد طورنا علاقة بين المعلمين وجدول الدورات باستخدام مفتاح خارجي.
هذا يخبرنا أن كل من علم الأحياء والرياضيات يتم تدريسهما من قبل كارمن وأن جورج يقوم بتدريس اللغة الإنجليزية.
يمكننا أن نرى كيف يتجنب هذا التصميم أي فائض محتمل ، ويسمح للمعلمين الفرديين بتدريس دورات متعددة ، وتنفيذ علاقة رأس بأطراف.
يمكن لقواعد البيانات أيضًا تنفيذ علاقة رأس برأس وعلاقة بين أطراف بأطراف.