عند توزيع البيانات في جدولين مثلا فانه يلزم وجود علاقة بينهما بحيث يمكنك الوصول إلى جزء من المعلومة واستكمالها من الآخر عن طريق هذه العلاقة. لإيجاد أو إنشاء علاقة بين جدولين ، نستخدم مفتاحين هما المفتاح الأساسي ( Primary Key ) والمفتاح الأجنبي ( Foreign Key ).
المفتاح الأساسي ( Primary Key )
هو الحقل الذي يحتوي على بيانات لا تتكرر داخل الجدول ، ومثال على ذلك يحتوي كل سجل من جدول العملاء على بيانات كاملة عن عميل معين ، فمن المناسب أن نستخدم حقل " رقم العميل " لأنه لن يتكرر داخل الجدول ويكون هو المفتاح الأساسي أو Primary Key لهذا الجدول.
المفتاح الأجنبي ( Foreign Key )
هو الحقل الموجود بالجدول المرتبط وعادة لا يكون الجدول المرتبط في حاجة إليه ، ولكن وجوده ضروري لربط هذا الجدول مع الجدول الأساسي. يشتمل الشكل التالي على مربع " علاقات " وفيه يظهر أن العلاقة بين جدول العملاء ( Customers ) وجدول الطلبات ( Order ) تم تأسيسها بناء على بيانات حقل رقم العميل ( Customer_ID)، ويظهر بالشكل موقع المفتاح الأساسي وموقع المفتاح الأجنبي.
[IMG]http://www.***.com/vb//uploaded/6_1242155551.jpg[/IMG]
ويعتبر رقم العميل ( Customer_ID ) داخل جدول العملاء Customers مفتاحا أساسيا بينما يعتبر رقم العميل في جدول الطلبات Orders مفتاحا أجنبيا فهو لا يتعلق بموضوع الطلبات ولكن جدول الطلبات في حاجة إليه لكي يتم ربطه مع جدول العملاء وبذلك يمكنك أن تفهم أن هذه الطلبات سوف يتم توصيلها إلى العميل رقم كذا وبياناته تقع في جدول العملاء ومن ذلك يمكن تعريف المفتاح الأجنبي على انه حقل مستخدم في أحد سجلات جدول ( في المثال السابق هو جدول الطلبات – وهو قابل للتكرار ) ليشير إلى سجل واحد فقط موجود في جدول آخر ( في المثال السابق هو جدول العملاء ).
أنواع علاقات الارتباط
يمكن ربط جدولين إذا كان كليهما يشتمل على حقل أو اكثر بهما نفس البيانات ، وعادة تسمى الحقول في كلا الجدولين بنفس الاسم. مثل رقم العميل في جدول بيانات العملاء ورقم العميل في جدول الطلبات.
يمكن إنشاء 3 أنواع من العلاقات : علاقة واحد مقابل واحد ، وعلاقة واحد مقابل مجموعة ، وعلاقة مجموعة مقابل مجموعة ، ونوضح فيما يلي الفرق بين هذه الأنواع من العلاقات.
علاقة واحد مقابل مجموعة ( One-to-Many )
تسمى هذه العلاقة أحيانا " علاقة ارتباط رأس بأطراف " ومعناها أيضا علاقة واحد مقابل مجموعة وهي الأكثر استخداما. وتعني أن السجل الواحد في جدول البيانات ( يسمى الجدول الرئيسي Primary Table ) يقابله اكثر من سجل في جدول آخر ( يسمى الجدول المرتبط Related Table ). فمثلا قاعدة البيانات Sales تسجل كل فاتورة في سجل واحد في جدول إجماليات الفواتير ، وتسجل تفصيلات هذه الفاتورة في سجل أو اكثر في جدول " تفصيلات الفواتير " ، ولذلك يقابل كل سجل ( بيانات فاتورة ) في جدول إجماليات " الفواتير " سجلا أو اكثر ( تفصيلات الفاتورة ) في جدول " تفصيلات الفواتير ".
علاقة واحد قابل مقابل واحد ( One-to-One)
أحيانا تسمى هذه العلاقة " علاقة ارتباط راس براس " وهذا النوع من العلاقة اقل استخداما من النوع السابق ، وفيه كل سجل في الجدول الرئيسي يقابله سجل واحد في الجدول المرتبط به. ومن الأمثلة التي تستخدم فيها علاقة واحد مقابل واحد ، عندما ترغب في فصل معلومات العميل إلى بيانات عامة وخاصة ، فمثلا يمكن أن تضع معلومات عامة عن العميل مثل الاسم والعنوان في الجدول الرئيسي وتضع معلومات أخرى خاصة عن العميل مثل الرصيد المدين أو الدائن في الجدول التابع.
علاقة مجموعة مقابل مجموعة ( Many-to-Many )
أحيانا تسمى هذه العلاقة " علاقة ارتبط أطراف بأطراف ". وهذا النوع من العلاقة أيضا نادر الاستخدام وفيه يقابل كل سجل من الجدول الرئيسي عدة سجلات في الجدول المرتبط ، ويقابل السجل الواحد في الجدول المرتبط عدة سجلات في الجدول الرئيسي. ومن الأمثلة على ذلك في قاعدة البيانات التي تشتمل على جدول للمنتجات وجدول لأوامر الشراء ، يمكن أن يقابل السجل الواحد في جدول أوامر الشراء اكثر من سجل في جدول المنتجات ، ومن الناحية الأخرى من الممكن أن يظهر المنتج الواحد في عدة طلبات وبالتالي يمكن أن تجد لكل سجل في جدول المنتجات اكثر من سجل في جدول أوامر الشراء.
هذا النوع من العلاقات معقد ويحتاج لدراية كافية بالبرمجة لأنه من الممكن أن يسبب مشكلة ما لم تتدخل لربط الجدولين بأسلوب غير مباشر يتلخص في إنشاء جدول ثالث يعمل على تجزئة علاقة ارتباط مجموعة مقابل مجموعة إلى علاقتين من نوع واحد مقابل مجموعة ، وفي هذه الحالة تضع المفتاحين الأساسيين لكلا الجدولين في الجدول الثالث.
مثال .. علاقة الارتباط بين جدول " العملاء Customers " ، وجدول " الأصناف Items " علاقة ( مجموعة مقابل مجموعة ) فأي عميل يمكن أن يشتري أي صنف والعكس صحيح فأي يمكن صنف يمكن أن يُباع لأي عميل.
للتغلب على هذه المشكلة التي تسبب صعوبة بالغة عند التصميم ، يتم تجزئة علاقة " مجموعة مقابل مجموعة " إلى علاقتين من نوع " واحد مقابل مجموعة " وذلك بإضافة جدول ثالث هو جدول " الطلبات Orders " وبذلك تصبح العلاقة بين كل جدول والجدول الذي يتعامل معه هي علاقة " واحد مقابل مجموعة ". انظر أخي للصورة التالية ومنه تستنتج أن جدول Orders يمكن أن يحتوي على اكثر من صنف ويمكن أيضا أن يحتوي على اكثر من عميل.
ليست هناك تعليقات:
إرسال تعليق