بسم الله الرحمن الرحيم
.
السلام عليكم
ورحمة الله وبركاته .
العلاقات 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 مفتاح رئيسي في الجدول الثاني ( جدول الفرق الدراسية ) .
*** هذا النوع من
علاقات هي الأكثر استخداماً .
نلتقي في الجزء الثاني من الدرس ...