العلاقات بين الجداول



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

ومثال علي ذلك الجدول في الصورة التالية، وهو مثال ممتاز للتصميم الخاطئ

و هذا الجدول المقصود منه تسجيل حركة الدورات التدريبية، أي الدورات التي حصل عليها كل موظف في الشركة


أي أن الموظف  ذو الرقم المبين قد حضر دورة معينة والتي كودها وعنوانها وتواريخها كما هو مبين

و لنلاحظ أن اللون الأصفر يمثل بيانات دورة الاكسيل رقم 1 والتي تكررت بالكامل 5 مرات في جدول لم تتعد سجلاته عشرة سجلات فهل ترون هذا منطقي ؟؟

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

و الآن ما هي عيوب هذا التصميم ؟؟

تكرار المعلومات واستهلاك مساحة تخزينيه لا داعي لها، ويتطلب أيضا مجهود في إدخال بيانات مكررة

صعوبة التغيير، فلو أردت تعديل بيانات دورة ما فلابد من تعديلها  في سجلات كل من حضروها

احتمال الخطأ في بيانات الدورة من سجل لآخر أثناء الإدخال

صعوبة الحذف، ماذا لو أردت حذف دورة ما ؟

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


التصميم القياسي للجدول

للتغلب علي المشاكل أعلاه يتم فصل الجدول الأصلي المسمي oneTable  في المثال المرفق الي جدولين الأول به بيانات الدورات (سجل واحد لكل دورة) والآخر به تسجيل لحركة الدورات عبارة عن كود الموظف وكود الدورة فقط بينما بيانات الموظفين موجودة في جدول الموظفين وبيانات الدورات موجودة في جدول الدورات، فنضمن بذلك عدم التكرار  بدون داعي للبيانات الخاصة بالموظفين أو الدورات مع كل تسجيل لموظف في دورة جديدة.

و يكون شكل الجدولان كالتالي



و بعمل علاقة بينها يمكن الحصول علي استعلام يناظر الجدول الأصلي مثلما في الصورة query1





وسنعرض هنا في هذا الموضوع  للعلاقات وتكوينها، أما الاستعلام فسيأتي دوره لاحقا بإذن الله


المهم هو أننا استطعنا تفادي الخمسة عيوب السابقة عن طريق فصل الجداول الي جداول قياسية، مما يمنع تكرار البيانات أو يمنع ما يطلق عليه ب DATA REDUNDANCY



و الآن سنتحدث عن أنواع العلاقات المختلفة :

هناك ثلاث أنواع من العلاقات بين الجداول

علاقات من نوع ا الي متعدد (رأس بأطراف - ولكن لا أحب هذه التسمية !! وأفضل متعدد)

علاقات من نوع ا الي 1

علاقات من نوع متعدد الي متعدد

و لكي يسهل علينا وصف العلاقات، سنعرف بالإضافة الي حقل المفتاح حقل آخر يسمي الحقل الغريب Foreign Key والموجود في الجدول الرئيسي والذي سيتم ربطه بحقل المفتاح في جدول فرعي.

علاقات من نوع واحد الي متعدد

هذا هو النوع لأعم من العلاقات وفيه تكون القيم في حقل المفتاح يناظرها قيمة أو أكثر في الحقل الغريب في الجدول الرئيسي

و لكن أي قيمة في الحقل الغريب في الجدول الرئيسي يناظرها قيمة واحدة فقط في حقل المفتاح في الجدول الفرعي

شكل العلاقة

علاقات من نوع واحد الي واحد

وفيه تكون القيم في  حقل الربط في الجدول الثاني  يناظرها قيمة واحدة  في الجدول الأول والعكس صحيح

و هذا ليس نوعا نمطيا من العلاقات، لأنه في هذه الحالة يمكن ضم بيانات الجدولين في جدول واحد، ولكن قد نلجأ لذلك في حالة الحاجة لعزل جزء من البيانات لأسباب أمنية أو لكون البيانات تمثل حالة خاصة

شكل العلاقة


علاقات من نوع متعدد الي متعدد

وفيه تكون القيم في  حقل الربط في الجدول الثاني  يناظرها قيم عديدة   في الجدول الأول  والعكس صحيح

هذا جزء من ملف التعليمات بالإنجليزية

This type of relationship is only possible by defining a third table (called a junction table) whose primary key consists of two fields — the foreign keys from both Tables A and B.

هذا النوع من العلاقات لا يمكن حدوثه إلا بتعريف جدول جديد يسمي جدول الوصلة، ويكون المفتاح في جدول الوصلة هو الحقلين الغريبين في كلا الجدولين المراد ربتهما بهذا النوع من العلاقات

A many-to-many relationship is really two one-to-many relationships with a third table.

إذا العلاقة من نوع متعدد الي متعدد هي حقيقة علاقتين من نوع واحد الي متعدد مع جدول ثالث

For example, the Orders table and the Products table have a many-to-many relationship that's defined by creating two one-to-many relationships to the Order Details table. One order can have many products, and each product can appear on many orders.

مثال : جدول الطلبيات والمنتجات بينهما علاقة من نوع متعدد الي متعدد يتم عملها عن طريق جدول تفاصيل الطلبيات.

الطلبية الواحدة قد يكون فيها أكثر من منتج، وكل منتج يكون موجود في عدة طلبيات

و لكن هنا العلاقة بين جدولي الطلبيات والمنتجات تكون من خلال جدول الوصلة والذي هو جدول تفاصيل الطلبيات في هذه الحالة

شكل العلاقة



إنشاء العلاقات المختلفة :


من قائمة

Tools

نختار Relationships



يظهر مربع حوار لاختيار الجداول المتاحة في القاعدة، ونختار الجدول ثم نضغط ADD

أو ننقر نقر مزدوج علي اسم الجدول فيظهر في قاعدة البيانات


و إن أردنا إضافة جدول بعد ذلك نختار أي منطقة خالية في شاشة البيانات ونختار show Table

و لحذف جدول من لوحة العلاقات نختاره ونضغط

زر Delete



تظهر الجداول في لوحة الجداول بدون علاقات


لبناء علاقة واحد الي متعدد

و بعد ذلك لعمل العلاقة نختار الحقل الغريب في الجدول الثاني ونسحبه الي نظيره المفتاح في الجدول الرئيسي

فيظهر مربع الحوار كما هو مبين للتأكيد علي الحقول المختارة لإنشاء العلاقة

والمسمي مربع تحرير العلاقات


و بالضغط علي زر Create أو إنشاء يتم إنشاء العلاقة بين الجدولين كما في الشكل

و هذا هو شكل العلاقة من نوع واحد الي مالا نهاية

شرحها


بالضغط علي زر Create New في مربع تحرير العلاقات يظهر مربع الحوار التالي لكي نضيف منها علاقات جديدة مع جداول أخرى

و فيه يتم تحديد كل من اسم الجدول والحقل للحقول المراد ربطها


بالضغط علي زر Join Type في مربع تحرير العلاقات يظهر مربع الحوار التالي لكي نحدد نوع العلاقة بين الجدولين من حيث تواجد البيانات علي طرفي العلاقة و هي إما:

اختيار أن تظهر البيانات الموجودة علي الطرفين فقط دون الموجودة في أحدهما فقط

اختيار إظهار كل ما في الجدول الرئيسي وما يناظرها فقط من بيانات في الفرعي اختيار إظهار كل ما في الجدول الفرعي وما يناظرها فقط من بيانات في الرئيسي




نتيجة الحالة 1


نتيجة الحالة 2


نتيجة الحالة 3


هذا مثال علي شكل علاقة من نوع واحد الي واحد


شرحها


و هذا مثال علي شكل العلاقة من نوع متعدد اللي متعدد كما

شرحها





Referential Integrity

التكامل المرجعي للبيانات، هو نظام عبارة عن مجموعة قواعد يتبعها الأكسس لضمان أن العلاقة بين جدولين علاقة سليمة وأنك أل تمسح أو تغير البيانات الخاصة بالعلاقة بدون قصد.

  هذا يعني أن هناك  علاقة ارتباطية بين بيانات الجدولين عن طريق الحقلين في طرفي العلاقة وباختيار هذا الخيار، فإننا نعني الآتي :
1- طرف العلاقة في الجدول الرئيسي هو حقل المفتاح أو علي الأقل حقل فريد في الجدول الرئيسي  (Courses)

2- الحقل الآخر الذي يمثل الطرف الثاني من العلاقة في جدول EMPCOURSES له نفس نوع البيانات

3-الجدولان موجودان في نفس قاعدة البيانات


و يتم تفعيل هذا الخيار بالنقر علي العلاقة واختيار خصائص من قائمة الماوس المختصرة

ثم اختيار Enforce referential Integrity



و باختيار هذا الخيار لا يمكنك إضافة دورة اسمها xxxx نفى جدول تسجيل حركات الدورات إلا إذا كان هناك بالفعل دورة مسجلة بهذا الاسم في جدول الدورات ن وهذا يعتبر قيد مفيد جدا يقلل الخطأ في إدخال البيانات

 ,و بعد اختيار Enforce referential Integrity

يمكننا الاختيار بين تطبيق الخيارات الآتية


تفعيل توالي ارتباطات التحديث للعلاقة

باختيار Cascade update related field

فبتحديث كود الدورة في جدول الدورات، يتم التحديث لكل السجلات المناظرة في جدول حركات الدورات


تفعيل توالي ارتباطات الحذف للعلاقة

باختيار Cascade delete related field

فبحذف دورة من جدول الدورات، يتم حذف كل السجلات المناظرة لهذه الدورة في جدول تسجيل حركة الدورات


و هكذا نكون أكملنا الحديث حول العلاقات وأنواعها وطرق إنشاءها