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

[ تمت الإجابة ]ماهو الفرق بين Primary Key وبين Index

بدأه MS_SQL في 20 فبراير 2008 · 11 رد · 16,406 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني اريد ان أعرف ماهو الفرق بين الحقول المفاتيح الرئيسية وبين الفهارس

وجزاكم الله خيراً

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#2

اخي الفاضل

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

المفتاح الأساسي primary key واختصاره هو PK

1. هو عبارة عن حقل فريد له قيمة استثنائية تميزه عن باقي الحقول ولا يمكن ان يتكرر في السجل سوى مرة واحدة فقط ويمكن ربطه بعدة حقول فرعية FK في جداول اخرى

2. لا تستطيع حذف قيم رئيسية للمفتاح الأساسي PK من خلال المفتاح الأجنبي Foreign Key واختصاره FK ولكن يمكن العكس حيث يمكنك حذف اي قيم فرعية من القيم الرئيسية .

3. عند انشاء مفتاح رئيسي فإنه مباشرة يكون مفهرس Unique Index

4. المفتاح الرئيسي لا يسمح بأي حال من الأحوال ان تكون قيمته خالية Null

5. المفتاح الأساسي يسرع عملية البحث في الجدول والإستعلامات لأن البحث سيكون على قيم فريده غير مكرره .

6. المفتاح الأساسي له شكل خاص مميز يميزه عن باقي الحقول في الجدول post-15367-1203547254_thumb.gif

7. نوع البيانات الأصلي للمفتاح الأساسي primary key هو الترقيم التلقائي Autonumber

اما Primary index

فلا يوجد شيء من هذا القبيل بإسم Primary index في قاعدة البيانات ولكن يوجد ما يسمى Unique Index

1. يمكن القيام بعمل فهارس Index للحقول حسب الرغبة بأن تكون مفهرسة وتصبح هذه الحقول عبارة عن أدلة الفريدة لتفادي او اصلاح مشاكل القاعدة

2. ممكن ان تكون قيمة الحقل المفهرس خالية لمرة واحدة فقط

#3

مشكور أختي الفاضلة وجزاك الله ألف خير

لدي سؤال اخر : هل يجوز ربط جدولين بعلاقة رأس بأطراف بحقلين نوعهم AutoNumber

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#4

نعم اخي الكريم يجوز الربط ولكن بشرط

1. الحقل ID1 في الجدول الأول يكون ترقيم تلقائي ومفهرس اي يكون عليه مفتاح اصفر

2. الحقل ID2 في الجدول الثاني يكون ترقيم تلقائي فقط

3. يتم الربط بين الحقلين من خلال نافذة العلاقات لينتج لدينا ربط بين الجدولين بعلاقة رأس بأطراف

post-15367-1203551137_thumb.gif

#5

أختي الكريمة،

هل يمكن أن تشرحي لنا ما هو Normalizartion و Denormalization وكيف نستطيع استخدمهما في قاعدة البيانات بشكل صحيح.

ولك جزيل الشكر

#6
Abo Ahmed كتب:
هل يمكن أن تشرحي لنا ما هو Normalizartion و Denormalization وكيف نستطيع استخدمهما في قاعدة البيانات بشكل صحيح.

اخي Abo Ahmed لقد سبق ان سأل احد الاعضاء عن قواعد التطبيع وهي ثلاثة او اربعة

وستلقى في هذا الرابط شرح وافي للاخت زهرة

قواعد او مراحل التطبيع

اخوك حازم

#8

طيب اختي انا عملت هذه العلاقة

post-126189-1203635301_thumb.gif

ماسبب ظهور هذه الرسالة عندما أضغط على جميع الاختيارات:

post-126189-1203635404_thumb.gif

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#9

اخي الفاضل

دعني اشرح لك بعض الأمور فقد تكون غائبة عنك حتى يكون بناءك منذ البداية لقاعدة البيانات على اساس سليم بدون اخطاء لهذا دعنا نتعرف على التالي :

التكامل

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

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

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

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

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

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

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

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

SHH1.gif

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

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

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

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

SHH2.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) إلا عند الاضطرار إلى ذلك فعلاً.

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

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

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

السؤال بارك الله فيك بعد هذا الشرح

لماذا تريد ربط حقلين من نوع ترقيم تلقائي بعلاقة رأس بأطراف ؟؟

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

لهذا أرى ان افضل طريقة لك هي وضع حقل DpetID كمفتاح اساسي ويكون ( ترقيم تلقائي ومفهرس ) في جدول الإدارات Dept والحقل DeptID يكون ( رقم فقط غير مفهرس ) في جدول الموظفين Emp ثم تربط بينهم بعلاقة رأس بأطراف ووضع فرض التكامل المرجعي وتتالي تحديث الحقول المرتبطة وتتالي حذف الحقول المرتبطة فلا يوجد مشكله ثم تقوم بوضع حقل ترقيم تلقائي مثلا ID في جدول الموظفين Emp

1
#10

مشكورة أختي وجزاك الله خيرا .

:ty:

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#11

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

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

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

#12

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

أختي الكريمة ومشرفتنا العزيزة زهرة، إسمحي لي أن أطرح سؤال لكي يكتمل الموضوع عندي. هل ممكن أن تشرحي لنا ما هي join Properties وما هي أهميتها.

ولك جزيل الشكر والامتنان

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