بسم الله الرحمن الرحيم
.السلام عليكم ورحمة الله وبركاته .
العلاقات RelationShip
قبل أن نبدأ نود أن نعرف أولاً لماذا نستخدم العلاقات ؟ لنعرف ذلك لا بد لنا أولاً أن نعرف ما معنى علاقة .
يقصد العلاقة
هو اشتراك حقل بين جدولين بحيث تملك كل قيمة في هذا الحقل سجلين ، السجل
الأول في الجدول الأول والسجل الثاني في الجدول الآخر .
نعود إلى سؤالنا السابق : نستخدم العلاقة لنضمن شيئين رئيسيين :
أولاً : تحقيق تكامل حقيقي بين جداول قاعدة البيانات .
ثانياً : منع تكرار القيم في أي من الجداول لمنع إهدار حجم قواعد البيانات .
ربما لم نبدأ بعد ، ولكن لنرى مثالاً سريعاً نضيفه سوياً لقاعدة البيانات التي كنا نعمل عليها الدروس السابقة .
لنقل أننا نريد أن نريد أن نقسم الأصدقاء إلى أربع مجموعات - مثلاً - بحسب السنة الدراسية في الكلية على سبيل المثال ، ونريد أن نعرف عن كل سنة عدد الطلبة فيها وعدد المواد الدراسية .
إذا كنا نعمل بالطريقة التقليدية فسنقول : نضيف لكل صديق حقل خاص بالسنة ، وحقل آخر خاص بعدد الطلبة العام وحقل ثالث بعدد المواد .
لكن لاحظ كم مرة سنكرر عدد المواد ، وعدد الطلبة .
لاحظ أيضاً لو زادت مادة لطلبة أي سنة دراسية ، فهذا يعني أننا سنحدث بيانات جميع الحقول .
وقل نفس الأمر بالنسبة للحذف وغير ذلك .
ربما لا يتضح موضوع الحذف في مثالنا ( نوتة الهواتف ) ولكن سأخرج - جزئياً - عن الموضوع لأشرح مثالاً صغيراً على عملية الحذف .
لنفرض أن لدينا قاعدة بيانات تحتوي على الموظفين ويهمنا فقط اسم الموظف وفرع الشركة التي يعمل فيها ومكان الفرع .
إذا قامت الشركة مثلاً بحذف فرع ... فهذا يعني أن تقوم يدوياً - أو حتى بالكود - بحذف جميع الموظفين الذين ينتمون إلى هذا الفرع .
لكن الأمر ليس كذلك مع العلاقات ، فبمجرد حذف القسم سوف يحذف تلقائياً الموظفون التابعون له – طبعاً فقط إذا كنا نرغب في ذلك - .
لتلافي ذلك فإننا نستخدم ما يعرف بالعلاقات RelationShip .
أنواع العلاقات :
النوع الأول : One To One - علاقة واحد لواحد .
في هذه العلاقة نقول أن لكل سجل في القاعدة الرئيسية سجل واحد يقابله في القاعدة الثانية .
مثال على هذه العلاقة ضمن قاعدة بيانات الأصدقاء :
بفرض أننا نريد اضافة المعلومات الموجودة ضمن البطاقة الشخصية ( رقم البطاقة - فصيلة الدم - مصدر البطاقة )
نستطيع اضافة هذه الحقول مباشرة إلى الجدول الأول ، ولكن
لاحظ كم سيصبح حجم هذا الجدول ، وبالتالي إذا حاولنا استخراج اسماء
الأصدقاء فقط فسيستغرق المزيد من الوقت .
ربما لن يظهر ذلك مع قاعدتنا البسيطة ولكنه يظهر مع قواعد البيانات الضخمة .
إذن سنقوم بانشاء جدول جديد يحتوي على الحقول التالية ( رقم البطاقة - فصيلة الدم - مصدر البطاقة )
PassPort - BClass - From
تبقى شيء واحد وهو الحقل الذي يمثل رابطاً بين الجدولين .
وهذا الحقل الرابط له شروط هي :
* أن يكون موجوداً في الجدولين .
* أن يكون نوعه متطابقاً في الجدولين ( فلا يصلح أن يكون الأول رقم والثاني نص ) .
* أن يحتوي على قيم فريدة ( بمعنى أن لا يتكرر ) حتى لا يسبب المشاكل .
ولذا فإننا نقول أننا لا نستطيع أن نستخدم حقل الإسم لاخلاله بالشرط الثالث لاحتمال تشابه الأسماء .
لذلك فإن أنسب حقل هو حقل الرقم لأننا ذكرنا أنه سيحتوي على قيم فريدة ( غير متشابهه ) .
قم الآن باضافة حقل Number إلى الجدول السابق وعينه كمفتاح رئيسي Primary Key ، وقم بحفظ الجدول تحت اسم Tb_R1 أو أي اسم كما تحب .
*** في النهاية لا يستحب استخدام هذا النوع من العلاقات كثيراً ... النوع الثاني : One To Many - علاقة واحد لمجموعة ( والعكس صحيح ) .
في هذه العلاقة نقول إن لكل سجل في الجدول الرئيسي مجموعة سجلات في الجدول الثاني .
مثال ذلك المثال الذ قمنا بشرحه في الدرس السابق .
لو لاحظت المثال ستجد أن مجموعة من الطلاب يمكن أن يكون لهم سجل واحد في جدول الفرق ، لكن لا يمكن أن يكون لطالب ( سجل ) واحد أكثر من سجل آخر في جدول الفرق ( السنوات الدراسية ) .
وهذا هو الفرق بينه وبين النوع التالي .
لذا قم بانشاء جدول ثالث تحت اسم Tb_R2 ويحتوي على الحقول التالية :
Year - Books - Students
السنة - الكتب - الطلاب
يمكننا اضافة حقل جديد في الجدول الأول Tb_Main تحت اسم Year حيث سيكون هو الحقل الرابط بين الجدولين .
قم بالضغط على الجدول الأول ، ثم اضغط على ( تصميم - Design ) ، ثم قم بالضغط بزر الماوس الأيسر في المكان المطلوب ثم قم بالضغط على ( ادراج صف - Insert Row ) .
أيضاً لا تنس أن تجعل حقل Year مفتاح رئيسي في الجدول الثاني ( جدول الفرق الدراسية ) .
*** هذا النوع من علاقات هي الأكثر استخداماً .
نلتقي في الجزء الثاني من الدرس ...