sql JOIN : الربط بين الجداول


MySQl : المفاتيح الخارجية

MySql : قاعدة بيانات علائقية . جميع المعلومات تُخزّن بطريقة مُنظّمة في مجموعة من الجداول . و تجمع بين هذه الأخيرة علاقة وطيدة .
لتوضيح نوع هذه العلاقة . لنأخذ مثال درسنا السابق : "إنشاء مدونة" . عملنا على جدولين :
1. ـ جدول "blog" : لتخزين مواضيع المدوّنة .
2. ـ جدول "blog_comments" : لتخزين تعاليق المواضيع

blog_comments
idauthorcontentblog_id
1......تعليق11
2......تعليق21
3......تعليق32
...
blog
idtitlecontentauthor
1...رحلتي إلى جبال......
2...جزر الكارايبي......

العلاقة التي تجمع بين الجدولين هي أن البيانات الموجودة في جدول "blog_comments" . هي تعاليق على المواضيع الموجودة في جدول "blog" . بما أن قاعدة البيانات لا تعلم بهذه العلاقة !! نحن من قمنا بالرّبط بين الجدولين ، حين لجأنا إلى استعمال المفتاح الخارجي . حيث قمنا بتخزين مفتاح أو رقم الموضوع الذي ينتمي إليه التعليق في حقل "blog_id"، كلّما أضفنا تعليقا جديدا . بهذه الطّريقة فقط ، تمكّنا من ربط كل تعليق بالموضوع الذي ينتمي إليه .
في مثالنا ، التعليق1 و التعليق2 ينتميان للموضوع رقم 1 . لأن قيم المفتاح الخارجي "blog_id" لهذين التعليقين ، مُطابقة لقيمة المفتاح الأساسي "id" للموضوع رقم 1 في جدول blog
التعليق3 ينتمي للموضوع رقم 2 .
في استعلامنا إذا أردنا مثلا أخذ التعاليق الخاصّة بالموضوع رقم "1" :

SELECT * FROM blog_comments WHERE blog_id = 1

المفتاح الخارجي : تعلّمنا سابقا ، أثناء إنشاء جدول ، نقوم بإضافة حقل "المفتاح الأساسي" مثلا id . و هو عبارة عن حقل يقوم بالعد التصاعدي لترقيم إدخالات الجدول . أمّا المفتاح الخارجي "blog_id في مثالنا" فهو حقل في هذا الجدول ، يضم مفاتيح إدخالات جدول آخر ، و هو ضروري لإجراء عمليّة الربط بين الجداول .
في أي جدول ، نضع حقل المفتاح الخارجي ؟

لربط جدولين أو أكثر ، نضع حقل المفتاح الخارجي في الجدول الإبن . في مثالنا الجدول الإبن هو blog_comments لأنه يحمل بيانات تنتمي إلى الجدول الأب الذي هو blog . بصيغة أخرى كل موضوع في جدول blog يمكن أن يكون لديه مجموعة من الأبناء (التعاليق) في جدول blog_comments .



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

لإنعاش الذّاكرة ، للذين تابعوا الدّرس السابق "إنشاء مدونة " . في صفحة show.php قمنا باستعلامين لأخذ البيانات من القاعدة :
1. ـ الإستعلام الأول يخصّ جدول "blog" : أخذنا فيه بيانات الموضوع
2. ـ الإستعلام الثاني يخصّ جدول "blog_comments" : أخذنا فيه بيانات التعاليق

في كثير من الحالات ، شبيهة بهذه ، نكون مُضطرّين لأخذ البيانات من جدولين أو أكثر ، في نفس الوقت . لهذا بدل إجراء إستعلامين أو أكثر ، و تفاديا لتكرار نفس الشيفرات و إثقال كاهل صفحاتنا ، سنتعرّف في الدّرس الموالي ، كيف يمكننا في استعلام واحد فقط ، الرّبط بين هذه الجداول و أخذ جميع بياناتها بالمرّة .

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



 بوبكر حسني
averroes