الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]التكامل المرجعي

بدأه aben.hamid في 7 أكتوبر 2008 · 4 رد · 13,652 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لقد قمت بتصميم برنامج وهو يعمل بشكل ممتاز ويوجد فيه عدد من الاستعلامات .

هل الان يجب ان اذهب الى صفحة العلاقات واقوم بعمل جميع العلاقات للجداول وفرض التكامل المرجعي ارجو الاجابة تحياتي للجميع

#2

اخي الفاضل

السلام عليكم ورحمة الله وبركاته

اتمنى ان تقرأ هذا لكي تتعرف على ماذا نعني بالتكامل المرجعي وبعدها قرر بنفسك ما هو الواجب عليك القيام به .

حافظ على سلامة بياناتك

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

توفر مايكروسوفت أكسيس أدوات تضمن وتتحكم بسلامة البيانات، وسنشرح في هذه المقالة بعضاً من هذه الأدوات وطرائق تطبيقها للاستفادة منها.

التكامل

تدل كلمة "التكامل" (Integrity) على القوانين التي تهتم بتماسك علاقات معينة، وبالتالي الاهتمام بتماسك البيانات المخزّنة في الجداول المرتبطة، ولدينا طريقان لتكامل البيانات في قواعد البيانات العلائقية:

أولاً- تكامل الكائن (Entity integrity) الذي يملي على كل سطر أن يمتلك معرفاً فريداً غير متكرر (أي لا يمكن للمفتاح الأساسي أن يكون قيمة خالية Null).

ثانياً- التكامل المرجعي (Referential Integrity) وتعني أن قيمة المفتاح الخارجي يجب أن تتطابق مع قيمة مفتاح أساسي في الجدول المرتبط معه، أو أن تكون قيمة خالية Null.

تستطيع التطبيقات التي تستخدم التكامل المرجعي ومنها قاعدة البيانات أكسيس منع المستخدم من الإجراءات التالية:

§ إضافة سجل جديد، في حال عدم تطابق قيمة المفتاح الخارجي مع قيمة موجودة ضمن المفتاح الأساسي في الجدول المرتبط معه (مثال: إدخال طلبية باسم زبون، ليس له اسم في جدول الزبائن).

§ حذف سجل، في حال تطابق قيمة المفتاح الأساسي للسجل مع قيمة المفتاح الخارجي في الجدول المرتبط معه، (مثال: حذف معرف زبون، على الرغم من وجود طلبيات مرتبطة بهذا الزبون).

§ تعديل قيمة المفتاح الأساسي، إذا وجدت هذه القيمة كمفتاح خارجي في الجدول المرتبط معه (مثال: تعديل معرف الزبون مع وجود طلبيات تشير إلى الزبون ذاته)

ملاحظة: تدل عبارة قيمة المفتاح الأساسي وقيمة المفتاح الخارجي على السجل بالكامل، وليس على القيمة الموجودة ضمن حقل المفتاح الخارجي أو المفتاح الأساسي.

post-15367-1223375977_thumb.gif

الشكل1: يبين الشكل نافذة العلاقات، حيث تظهر العلاقات بين الجداول مرسومة بيانياً

إن أفضل مكان يمكننا أن نتعلم منه التكامل المرجعي هو نافذة العلاقات في برنامج أكسيس، حيث تظهر العلاقات مرسومة بيانياً بين الجداول المرتبطة (الشكل1)، وكي نتمكن من فرض التكامل المرجعي يجب إنشاء علاقة بين جدولين. تظهر في نافذة العلاقات، كل العلاقات الدائمة التي تؤثر على كل الكائنات، ولاتظهر العلاقات المؤقتة التي أنشأناها في نافذة تصميم الاستعلام (query).

وللاطلاع على طريقة عمل نافذة العلاقات، افتح قاعدة البيانات Northwind وانقر على "أدوات| علاقات" (Tools| Relationships). لاحظ العلاقات بين جداول قاعدة البيانات Northwind الموضحة في الشكل1، ويمثل كل خط علاقة بين جدولين، والعلاقة الافتراضية هي علاقة "رأس بأطراف" (one-to-many)، ويشار إلى ذلك بالرقم 1 عند الرأس وإشارة اللانهاية عند الأطراف، ويمثل الخط العادي الواصل بين جدولين علاقة عادية بين الجدولين أي بدون تفعيل "فرض التكامل المرجعي" (force referental integrity).

فرض التكامل المرجعي

post-15367-1223375947_thumb.gif

الشكل2: يبقى القرار لك بشأن فرض التكامل المرجعي، أوالسماح للأكسيس بتغيير أو حذف المفاتيح الخارجية عند استبدال المفتاح الأساسي.

توجد ثلاثة شروط يجب تحقيقها قبل فرض التكامل المرجعي على علاقة معينة :

1. أن يكون أحد الحقول المرتبطة مفتاحاً أساسياً أو يمتلك فهرساً فريداً، ويشير اللون الغامق في جدول الحقول إلى الحقل الذي يمتلك مفتاحاً أساسياً.

2. يجب أن تكون الحقول المرتبطة من النوع ذاته (رقم، نص، …) وتوجد حالة استثنائية واحدة هي ربط حقل "رقم" (Number) مع حقل "ترقيم تلقائي" (AutoNumbering).

3. أن تكون الجداول المرتبطة ضمن قاعدة البيانات ذاتها. لايمكن فرض التكامل المرجعي بين الجداول المرتبطة (Linked).

ملاحظة : لا يتم فرض التكامل المرجعي في أكسيس بشكل افتراضي، بل يمكن تطبيق ذلك عند إنشاء علاقة بين جدولين .

يبين الشكل2 العلاقة بين الجدولين والممثلة في الحقل CategoryID، ونجد إشارة صح بجانب خيار فرض التكامل المرجعي، ومعنى ذلك أن أكسيس ستقبل قيم المفتاح الخارجي في جدول الأبناء (المنتجات، Categories) فقط في حالة تطابق قيمتها مع قيمة موجودة ضمن المفتاح الرئيسي في جدول الآباء (الفئات، Categories)، ولن تسمح بإلغاء قيمة المفتاح الرئيسي في جدول الآباء إذا تضمن جدول الأبناء قيمة مطابقة لقيمة المفتاح الخارجي.

دعنا نختبر إمكانية الإجراءات السابقة في حماية البيانات، انقر على زر "إلغاء" (Cancel) لإغلاق صندوق حوار "تحرير العلاقات" (Edit Relationship)، ثم اضغط على المفتاح F11 لإظهار نافذة قاعدة البيانات، ثم افتح جدول الفئات Categories واختر أي سجل وانقر على "تحرير| حذف سجل" (Edit| Delete Record)، عندها ستشاهد رسالة خطأ تقول أن جدول المنتجات Products يتضمن سجلات مرتبطة، لذا فإنه لايمكن حذف السجل من جدول الفئات Categories، إنقر على زر "موافق" (OK) لإغلاق الرسالة.

وستظهر رسالة خطأ جديدة عند محاولة إضافة سجل إلى جدول المنتجات Products بدون اختيار فئة نظامية من جدول الفئات، ولن تسمح أكسيس بإضافة قيمة مفتاح خارجي إن لم تتطابق مع قيمة المفتاح الأساسي في جدول الآباء المرتبط معها. إن مفتاح قيمة الفئات هو من نوع حقل "بحث" (Lookup)، ما يجبرنا على اختيار إحدى الفئات الموجودة.

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

عند محاولة تغيير قيمة المفتاح الأساسي أو حذف سجل، تتبع أكسيس أحد طريقين:

حجب التعديلات، أو تحديث كل الجداول التابعة على التتالي، وتستطيع أكسيس ضبط قيم المفتاح الخارجي عند تغيير قيمة المفتاح الأساسي.

لنفترض أنك ترغب في تعديل قيمة الحقل CustomerID ضمن جدول الزبائن Customers، تخبرنا نافذة العلاقات أن لكل زبون عدداً من الطلبيات وأن التكامل المرجعي مفروض على هذه العلاقة، ووجدنا أيضاً أنه تم وضع إشارة صح بجانب خيار "تتالي تحديث الحقول المرتبطة" (Cascade Update Related Fields)، ونستنتج من ذلك أنه يمكننا تعديل قيمة حقل CustomerID، في جدول الزبائن، وسيحدّث أكسيس الحقول المرتبطة في جدول الطلبيات.

يساهم فرض التكامل المرجعي في الإقلال من مشكلة السجلات اليتيمة (orphans) والتي تحدث نتيجة حذف سجل من جدول الطلبيات Orders، في حين لازالت سجلات تفاصيل الطلبية مخزنة في جدول Order Details ، ما يخلّف بيانات عن طلبية لم تعد موجودة، ولا يمكن متابعتها مع الزبون من خلال حقل CustomerID.

يساهم تتالي حذف السجلات المرتبطة في منع هذه الحالة (السجلات اليتيمة)

تمرين احترازي :

إن حذف البيانات هو إجراء حاسم وله نتائج وآثار مهمة، وربما يشكل حذف السجلات مسؤولية كبيرة جداً على المستخدم العادي، لذا فإن عدداً من المطورين يرفضون حذف السجلات من الجدول ويستعيضون عن ذلك بوضع إشارة محذوف Deleted على السجل بدلاً من حذفه فعلاً، أو ينقلون السجلات المحذوفة إلى جدول تاريخي لأغراض الأرشفة، وننصح بعدم وضع إشارة صح بجانب خيار "تتالي حذف السجلات المرتبطة" (Cascade Delete Related Records) إلا عند الاضطرار إلى ذلك فعلاً.

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

#3

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

او الواجب ان يعمل ذلك من بداية البرنامج حيث ان البرنامج عندي مكتمل اعطيني الحل والشكر

#4

أخي الفاضل

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

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

#5

بسم الله الرحمن الرحيم

تمت الإجابة على الموضوع

إدارة الفريق العربي للبرمجة

مواضيع مشابهة