العلاقات بين الجداول فى الأكسسس

إعداد : محمد طاهر

 

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

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

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

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

 

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

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

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

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

 

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

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

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

 

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

 

 

 

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

 

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

 

 

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

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

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

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

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

و لكي يسهل علينا وصف العلاقات ، سنعرف بالاضافة الي حقل المفتاح حقل آخر يسمي الحقل الغريب 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. إختيار اظهار كل ما فى الجدول الفرعي و ما يناظرها فقط من بيانات فى الرئيسي

 

 

نتيجة الحالة 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

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

 

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

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