تحدث علاقة رأس بأطراف في قاعدة البيانات عندما يكون لكل سجل في الجدول A العديد من السجلات المرتبطة في الجدول B ، ولكن كل سجل في الجدول B قد يكون له سجل واحد مقابل في الجدول A.
علاقة واحد لكثير في قاعدة البيانات هي أكثر تصميمات قواعد البيانات العلائقية شيوعًا وهي في قلب التصميم الجيد.
يمكن لقواعد البيانات أيضًا تنفيذ علاقة رأس برأس وعلاقة أطراف بأطراف.
مثال على علاقة واحد بأطراف
ضع في اعتبارك العلاقة بين المعلم والدورات التي يدرسها. يمكن للمدرس تدريس عدة فصول ، لكن الدورة لن تكون لها نفس العلاقة مع المعلم.
لذلك ، لكل سجل في جدول المدرسين ، يمكن أن يكون هناك العديد من السجلات في جدول الدورات التدريبية. يوضح هذا المثال علاقة رأس بأطراف: مدرس بمقررات دراسية متعددة.
لماذا إنشاء علاقة واحد بأطراف مهم
لتمثيل علاقة رأس بأطراف ، تحتاج إلى جدولين على الأقل. دعونا نرى لماذا.
الالتزام بتصميم النموذج العادي الأول
ربما أنشأنا جدولًا نريد فيه تسجيل الاسم والدورات التي يتم تدريسها. قد نقوم بتصميم جدول المعلمين والدورات على النحو التالي:
معرف_المعلم | Teacher_Name | دورة |
---|---|---|
Teacher_001 | كارمن | علم الأحياء |
Teacher_002 | فيرونيكا | الرياضيات |
Teacher_003 | خورخي | الإنجليزية |
ماذا لو قامت كارمن بتدريس دورتين أو أكثر؟ لدينا خياران مع هذا التصميم. يمكننا إضافته إلى سجل كارمن الحالي ، مثل هذا:
معرف_المعلم | المعلم_Name | دورة |
---|---|---|
Teacher_001 | كارمن | علم الأحياء ، الرياضيات |
Teacher_002 | فيرونيكا | الرياضيات |
Teacher_003 | خورخي | الإنجليزية |
ومع ذلك ، فإن التصميم أعلاه غير مرن وقد يؤدي إلى مشاكل لاحقًا عند إدراج البيانات أو تحريرها أو حذفها. يجعل من الصعب البحث عن البيانات.
هذا التصميم ينتهك أيضًا المبدأ الأول لتطبيع قاعدة البيانات ، النموذج العادي الأول (1NF) ، والذي ينص على أن كل خلية جدول يجب أن تحتوي على قطعة واحدة منفصلة من البيانات.
القاعدة الثانية للنموذج العادي
قد يكون تصميم بديل آخر هو إضافة رقم قياسي ثانٍ لكارمن:
المعلم_ID | المعلم_Name | دورة |
---|---|---|
Teacher_001 | كارمن | علم الأحياء |
Teacher_001 | كارمن | الرياضيات |
Teacher_002 | فيرونيكا | الرياضيات |
Teacher_003 | خورخي | الإنجليزية |
يلتزم هذا النهج بـ 1NF ولكنه لا يزال تصميم قاعدة بيانات ضعيف لأنه يقدم التكرار ويمكن أن يؤدي إلى تضخم قاعدة بيانات كبيرة دون داع. الأهم من ذلك ، قد تصبح البيانات غير متسقة.
على سبيل المثال ، ماذا لو تغير اسم كارمن؟ قد يقوم شخص ما يعمل مع البيانات بتحديث اسمها في سجل واحد ويفشل في تحديثه في السجل الثاني.
هذا التصميم ينتهك معيار النموذج العادي الثاني (2NF) ، والذي يلتزم بـ 1NF ويجب أيضًا تجنب التكرار في السجلات المتعددة. تحقق قاعدة 2NF ذلك عن طريق فصل مجموعات فرعية من البيانات إلى جداول متعددة وإنشاء علاقة بينها.
كيفية تصميم قاعدة بيانات بعلاقات واحد إلى متعدد
لتنفيذ علاقة رأس بأطراف في جدول المدرسين والدورات التدريبية ، قم بتقسيم الجداول إلى جزأين واربطهم باستخدام مفتاح خارجي.
هنا ، قمنا بإزالة عمود الدورة التدريبية في جدول المعلمين:
المعلم_ID | المعلم_Name |
---|---|
Teacher_001 | كارمن |
Teacher_002 | فيرونيكا |
Teacher_003 | خورخي |
وهنا جدول الدورات. لاحظ أن مفتاحه الخارجي ، Teacher_ID ، يربط مقررًا دراسيًا بمدرس في جدول المعلمين:
معرف_الدورة | اسم الدورة | معرف_المعلم |
---|---|---|
Course_001 | علم الأحياء | Teacher_001 |
Course_002 | الرياضيات | Teacher_001 |
Course_003 | الإنجليزية | Teacher_003 |
قمنا بتطوير علاقة بين المعلمين وجدول الدورات باستخدام مفتاح خارجي. هذا الترتيب يخبرنا أن كارمن تُدرس كلاً من علم الأحياء والرياضيات وأن جورجي يعلم اللغة الإنجليزية.
يمكننا أن نرى كيف يتجنب هذا التصميم أي فائض محتمل ، ويسمح للمعلمين الفرديين بتدريس دورات متعددة ، وينفذ علاقة رأس بأطراف.