القائمة الرئيسية

الصفحات

العلاقة Relationships One To One فى SQL Server


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


أنواع العلاقات : 
  • One To One
  • One To Many
  • Many To Many
  • Self Join

- مفهوم العلاقات هو ان بيانات جدول تعتمد على بيانات جدول اخر يتم الربط بينهم ب مفاتيح
primary key and foreign key
وعلاقة درسنا اليوم One To One هو ان  بيانات جدول ما تعتمد على جدول أخر بدون ان تكرر بيانات جدول المفتاح الاساسى وربط المفتاح الرئيسى للجدول الاول بمفتاح الرئيسى  للجدول التانى كما فى صورة عنوان الدرس وهى الجدولين بينهم علاقة طرفها مفتاح ناحية كل جدول .

نفتح الان  (ssms) SQL Server Management Studio
كليك يمين على Databases ونختار New Database



نكتب فى خانة Database Name : إسم قاعدة البيانات وليكن  TestDb  ثم  Ok
نفتح علامة + لإظهار الخيارات الموجودة تحت قاعدة البيانات.
من على Tables كليك يمين ثم New ثم Table



سوف ننشئ جدول للأشخاص و جدول لفصيلة الدم على سبيل المثال ، وهو مثال مناسب جدا للعلاقة 
One To One حيث ان لكل شخص فصيلة دم واحدة ويمكن تتكرر فصيلة الدم لأشخاص آخرين لكن لا يمكن ان يتكرر لشخص ما فصيلة دم أخرى .
 نقوم بعمل جدول بالشكل التالى{ Id = int } & {  PersonName = nvarchar(90) }


  

 نقف على الحقل الاول لجعله مفتاح اساسى  primary key من زر المفتاح المحدد بالصورة بالاعلى .
ايضا بنفس تحديد الحقل الاساسى نقوم بإضافة الترقيم تلقائى له من خانة  Identity Specification
تكون بشكل طبيعى No نعدلها لـ  Yes 



ثم نقوم بحفظ الجدول من علامةالحفظ فى شريط الاداوات بإسم TblPersons .

بنفس الطريقة نقوم بإنشاء جدول اخر بإسم TblBloodType ، لكن بدون عمل Identity Specification 
والسبب ان الحقل الاساسى فى جدول نوع الدم سيحفظ رقم الحقل الاساسى بجدول TblPersons.

 
 
بما أن جدول انواع فصيلة الدم يحتاج بيانات من الاشخاص فإن جدول فصيلة الدم سيكون جدول الحقل الاجنبى foreign key وجدول الاشخاص سيكون جدول الحقل الاساسى primary key
إذن سنفتح جدول TblBloodType بكليك يمين بعد الوقوف عليه ثم  Design  



1- لأنشاء علاقة جديد إما من قائمة Table Designer نختار Relationships أو كما فى الصورة من شريط الادوات

2- نضغط على زر Add لإضافة علاقة جديدة

3- نضغط على الزر المحدد كما فى الصورة لإختيار حقول وجداول العلاقة


يظهر لنا بشكل افتراضى جدول TblBloodType كـ  Foreign Key لأننا كنا نقف عليه اثناء بناء العلاقة كما شرحنا بالاعلى ، نختار حقل المفتاح الاساسى لهذا الجدول
ثم من خانة Primary key Table : نختار الجدول الاخر الاساسى للعلاقة وهو TblPersons
ثم نختار حقل المفتاح الاساسى له ايضا لأننا كما ذكرنا سابقا فى هذه العلاقة سنربط المفتاحين الاساسين لكل جدول ببعضهما . ثم  Ok و Close لشاشة العلاقات الاساسية

نجرب الان الادخال بيانات للتأكد من صحة العلاقة



أدخلنا هنا 4 اشخاص فى جدول الاشخاص نكتب الاسم فقط وقاعدة البيانات ستكتب هى Id التلقائى



 نكتب فى IdPersons رقم الشخص فى قاعدة البيانات Id ونكتب فى خانة فصيلة الدم فصيلة دمه
نلاحظ ان الشخص الاول محمد والشخص الثالث عمرو لهم نفس فصيلة الدم ويمكن لاشخاص اخرين يكونو مشتركين فى فصيلة الدم بدون مشاكل  .

لكن نلاحظ ان عن ادخال الشخص رقم 3 مرة اخرى للشخص عمرو بفصيلة دم مختلفة فإن قاعدة البيانات ترفض تكرار الشخص مرة اخرى مع العلم انه تم تكرار نوع الفصيلة سابقا كما فى الصورة
 ،، تخيلو ان هذا جدول حقيقى فى مؤسسة ومدخل البيانات يمكن ان يخطئ ويكتب اسم شخص مرتين فصيلة دم مختلفة :) 

الان العلاقة جاهزة للعمل ، وسوف نقوم بعمل دروس لكيفية استخدامها فى برنامج إن شاء الله

=========================

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

وحيث ان مهمتنا إيصال المعلومة بشكل كامل سنوضح الطريقة بشكل كامل ان شاء الله

نفتح جدول TblBloodType فى وضع Design ونضيف حقل ترقيم تلقائى باسم Id ونوعه int ونفعل الترقيم التلقائى لهذا الحقل من خاصية Identity Specification كما فعلنا فى جدول الاشخاص .

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


بهذه الطريقة يتم اضافة حقل ترقيم تلقائى مع كل سجل
وسوف نشرح بإذن الله طريقة اختيار الشخص من Combobox وحفظ الـ Id فى الجدول فى درس لاحق
مع لغة البرمجة #C بالتفصيل .




تعليقات