المتابعون للمدونة

الثلاثاء، 26 أبريل 2016

العلاقة الذاتية Self-Relation:


العلاقة الذاتية Self-Relation:

في بعض الأحيان يمكن إنشاء علاقة بين سجل من سجلات الجدول، وسجل آخر في نفس الجدول.. يسمى هذا بالعلاقة الذاتية Self-Relation، حيث يحتوي الجدول على عمود المفتاح الأساسي وعمود المفتاح الفرعي معا.. هذا مفيد عند تمثيل أي تركيب هرمي كالشجرة Tree.. في هذه الحالة يشير المفتاح الفرعي للسجل إلى المفتاح الأساسي للسجل الرئيسي الذي ينتمي إليه.. وعلينا تتبع هذه السلسلة إلى أن نصل إلى سجل رئيسي يعمل كجذر، وفي هذه الحالة يجب أن نضع صفرا أو -1 في خانة المفتاح الفرعي، للإشارة إلى عدم وجود سجل رئيسي لهذا السجل.. افترض مثلا أن عندنا شجرة العائلة التالية:

-      كامل
·      شريف
o     أحمد
o     نهى
·      هاني
o     رشيد
o     فتحي
·      عمر
o     نجوى
o     تقوى
o     معاذ

 

يمكن تمثيل هذه الشجرة في جدول واحد كما هو موضح :

 

ID
Name
ParentID
1
كامل
0
2
شريف
1
3
أحمد
2
4
نهى
2
5
هاني
1
6
رشيد
5
7
فتحي
5
8
عمر
1
9
نجوى
8
10
تقوى
8
11
معاذ
8

 

في هذا الجدول، يعمل الحقل ID كمفتاح أساسي، بينما يعمل الحقل ParentID كمفتاح فرعي.. وبهذا يكون من السهل استخراج كل التفاصيل المطلوبة لو بدأنا من أي سجل.. مثلا:

-  لمعرفة السجلات الفرعية للسجل الحالي، عليك بالبحث في الحقل  ParentID عن الخانات التي تحتوي على القيمة الموجود في الحقل ID للسجل الحالي.. مثلا: فتحي ليس له أبناء، لأن معرفه ID = 7، غير موجود في الحقل ParentID في أي سجل في الجدول.. بينما عمر له ثلاثة أبناء، لأن معرفه ID = 8، موجود في الحقل ParentID في السجل رقم 9 والسجل رقم 10 والسجل رقم 11.

-  ولمعرفة السجل الرئيسي للسجل الحالي، يكفي أن نقرأ المعرف ID المحفوظ في الحقل ParentID للسجل الحالي.. مثلا: عمر هو ابن الرجل الذي سجله يحمل المعرف 1، (وهو كامل).

إن هذه أفضل طريقة لتمثيل العلاقات الشجرية، فلو حاولت استخدام أكثر من جدول لتمثيلها، فسيكون عليك إنشاء جدول لكل مستوى من مستويات الشجرة، وإنشاء علاقات بينها، وهو أمر غير عملي ويضيع منك وقتا أطول في تصمم الجداول، خاصة لو ازداد عدد المستويات الفرعية للشجرة، كما أن كتابة الكود الذي يتعامل مع مثل هذه الجداول سيكون مزعجا ومعقدا!.. انظر كيف يمكن تمثيل الشجرة السابقة بثلاثة جداول:

 

جدول الجدود Grandparents
ID
Name
1
كامل

 

جدول الآباء Parents
ID
Name
GrandParentID
1
شريف
1
2
هاني
1
3
عمر
1

 

جدول الأبناء Sons
ID
Name
ParentID
1
أحمد
1
2
نهى
1
3
رشيد
2
4
فتحي
2
5
نجوى
3
6
تقوى
3
7
معاذ
3

 

طبعا سيكون الأمر كارثيا لو أردت تمثيل عدة أجيال أخرى، كالأحفاد وأبناء الأحفاد وهلم جرا!

 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET

للتنزيل من مكتبة الكتب العربية برابط مباشر:

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر