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