sql course شرح مبسط لأنواع العلاقات والمفاتيح ، ولمفهوم التكامل المرجعي ولكيفية إضافة القيود المناسبة لتأمينه و في هذا الدرس ستتعرف معي على :
- العلاقات في قواعد البيانات العلائقية.
- التكامل المرجعي
- استخدام قيد المفتاح الأجنبي للمحافظة على التكامل المرجعي.
لنبدأ
التكامل المرجعي 1 :
قواعد
البيانات العلائقية تتألف من مجموعة من
الجداول كل منها
يتشكل من مجموعة من
السجلات كل سجل من
سجلات جدول يتميز بقيمة فريدة
هذا الحقل يسمى حقل المفتاح الرئيسي.
الجداول قد ترتبط بعضها ببعض
بعلاقات يمكن لهذه
العلاقات أن تأخذ
أحد الأشكال الاتية :
اولاً علاقة واحد لواحد أو سجل لسجل:
في
هذا النوع من
العلاقات يرتبط كل
سجل من الجدول الأول مع
سجل وحيد من الجدول الثاني. كما
في الصورة التالية
ثانياً علاقة واحد لعديد أو سجل لعدة سجلات
: يرتبط
كل سجل من
الجدول الأول مع
مجموعة سجلات من
الجدول الثاني وليس العكس. كما في الصورة التالية
ثالثاً علاقة عديد لعديد أو عدة سجلات لعدة سجلات:
ترتبط
مجموعة من سجلات
الجدول الأول مع
مجموعة من سجلات الجدول الثاني.كما في الصورة التالية
التكامل المرجعي 2 :
اولاً علاقة سجل لعدة سجلات:
يتم
عادة التعبير عن
العلاقة بإدراج ما
يسمى المفتاح الثانوي او المفتاح الاجنبي KP في
حقل خاص في
الجدول الثاني (
الذي يقع
في الجهة التي
توجد فيها مجموعة السجلات المرتبطة بالسجل الوحيد)
وبحيث تكون قيم
هذا الحقل مأخوذة من قيم
حقل المفتاح الرئيسي للجدول الأول.كما في الصورة التالية :
ثانياً علاقة عدة سجلات لعدة سجلات
هي
تطبَّق فعليًا على
شكل علاقتين من
نوع سجل لعدة
سجلات مع استخدام جدول وسيط يحتوي
مفتاح أساسي مركب
يتكون من قيمة
المفتاح الأساسي للسجل
المراد ربطه من
الجدول الأول مع
قيمة المفتاح الأساسي للسجل
المراد ربطه من
الجدول الثاني. كما
في الصورة التالية
التكامل المرجعي 3
لو فرضنا اننا نمتلك قاعدة بيانات علائقية مؤلفة
من جدولين يرتبط
الأول بالثاني بعلاقة واحد لعديد أي ان سجل من الأول
مرتبط بعدة سجلات من الثاني.
سبق
وأسلفنا أن طريقة
حلّ العلاقة، تتلخص
في إدراج مفتاح
في الجدول الثاني يسمى المفتاح الثانوي مصدره
قيم المفتاح الرئيسي للجدول الأول.
لكن
ماذا لو اضطررنا إلى حذف
أو تعديل أحد
السجلات من الجدول الأول المرتبطة بعدد من
السجلات من الجدول الثاني ؟
فعليًا ما
سنحصل عليه هو
قيم جديدة غير
مترابطة ببعضها البعض. وهنا
تكمن أهمية المحافظة على ما ندعوه التكامل المرجعي في قاعدة البيانات.
دعونا نأتي بمثال :
لنفرض
أن لدينا جدول
يحتوي معلومات الزبائن وجدول آخر
يحتوي طلبات الشراء التي قام
بها الزبائن. من
الواضح أن العلاقة بين الجدولين هي
علاقة سجل من
جدول الزبائن لعدة
سجلات من جدول
الطلبات.
فإذا خطر بذهن
أحدهم حذف اسم
أحد الزبائن من جدول الزبائن وكان
لهذا سجلات طلبات
في جدول الطلبات فسنحصل بعد
عملية الحذف تلك
على طلبات في
جدول الطلبات لا
نعلم الزبون الذي طلبها. كما في المخطط الموضح بالصورة
نلاحظ في المخطط اعلاه ان حذف السجل من الجدول Customers
سيؤدي الى حذف مرجعية السجلات في الجدول Order .
التكامل المرجعي 4
لكي لا نكسر قاعدة التكامل المرجعي في SQL ,
علينا استخدام قيد يعرف احد الحقول في جدول على انه حقل مفتاح اجنبي لجدول اخر
بحيث يفشل أي تعبير لا يحترم قاعدة التكامل المرجعي بعد استخدام هذا القيد .
ولكي يتم ذلك علينا استخدام الصيغة التالية :
CREATE TABLE
myTable
(Column1
Column1Type PRIMARY KEY NOT NULL , Column2 Column2Type ,
Column3
Column3Type ,
CONSTAINT foreign_key_name
FOREIGN KEY (Column3)
REFERENCES other_table
(other_table_primary_key));
في الصيغة السابقة انشأنا الجدول myTable
الذي يحتوي على Column1
كحقل لمفتاح رئيسي والحقل Column2 والحقل Column3
الذي تم تقييدة بالقيد FOREIGN KEY لجعلة مفتاح اجنبي مرتبط بالمفتاح الرئيسي
للجدول other_table
والذي يحمل اسم other_table_primary_key .
اليك بمثال لتوضيح ذلك :
اذا اردنا انشاء الجدول Brands
والذي يحتوي على اسماء وارقام ماركات اجهزة الحواسب المتوفرة بمتجر ما, والجدول Models
الذي يحتوي على الموديلات المتوفرة لكل ماركة من الماركات , واردنا ربط الجدول Brands
مع الجدول Models
بعلاقة سجل من جدول Brands الى عدة سجلات من الجدول Models
مع ضمان التكامل المرجعي نكتب الصيغة التالية لانشاء الجدول Brands
:
CREATE TABLE
Brands
(brandID INT
PRIMARY KEY NOT NULL ,
brandName
varchar (50));
ولإنشاء الجدول Models
نكتب الصيغة التالية :
CREATE TABLE
Models
(modelID INT
PRIMARY KEY NOT NULL ,
modelName
varchar (50) ,
modelBrand INT
,
CONSTRAINT myFK
FOREIGN KEY (modelBrand)
REFERENCES Brands
(brandID));
هذه
الصيغة صالحة في
Access و
SQL Server, Oracle, DB 2
ويمكن كتابتها بشكل مختصر اكثر كما يلي :
CREATE TABLE
Models
(modelID INT
PRIMARY KEY NOT NULL,
modelName
varchar (50) ,
modelBrand INT
,
FOREIGN KEY (modelBrand)
REFERENCES Brands
(brandID));
التكامل المرجعي في MySQL
في MySQL تختلف الصيغة في نقطتين اساسيتين وهما :
الاولى هي
ان الجداول الداخلة في العلاقة يجب ان تكون من
نوع الجداول الخاص في قواعد بيانات MySQL وهو InnoDB .
والثانية هي
ضرورة تعريف حقل المفتاح الاجنبي كفهرس فتصبح
الصيغة كما يلي:
CREATE TABLE
myTable
(Column1
Column1Type PRIMARY KEY NOT NULL , Column2 Column2Type ,
Column3
Column3Type ,
FOREIGN KEY (Column3)
REFERENCES other_table
(other_table_primary_key)
INDEX myIndex
(Column3))
Type = InnoDB;
اكتفي بهذا ونلتقي في الدرس من sql course القادم الى اللقاء
لا تنسى الاشتراك في المدونة ليصلك كل جديدنا على بريدك الالكتروني
كذلك لا تجعل الدرس يقف عندك قم بمشاركته الان
دمت بالف خير عزيزنا الزائر
إرسال تعليق
لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر