What are Types of Relationships in Database - Arabic
اتكلمنا في مقال الـRelational Database عن مفهوم الربط بين الـ Tables باستخدام الـ Foreign Key, المقال هنا هنتكلم عن الأنواع الثلاثة المختلفة للـ Relations وهي:
* One-to-One
* One-to-Many
* Many-to-Many
One-to-One
فيها يتم الربط بين عدد 2 Table, على سبيل المثال Person Table و Passport Table:
* Person(id, name, age, email)
* Passport(id, number)
في الغالب الـ One-to-One Relation مش مستخدمه كتير, لكن يتم استخدامها في حالات البيانات الحساسة بحيث بيكون مطلوب الولوج لـ Table معينة من قبل شخص ذي صلاحية معينة.
مثال الـ Passport والـ Person واضح من قراءة مدخلات الـ Table ان ممكن يتم حفظ الـ Passport number في الـ Person Table وخلاص, لكن زي ما قولتلك يتم الفصل في حالات البيانات الحساسة بحيث هنا مطلوب الولوج لرقم الـ Passport من قبل أشخاص معينين.
One-to-Many or Many-to-One
فيها يتم الربط Table وعدد آخر من الـ Tables, على سبيل المثال Customer Table و Account Table ... كل Customer ممكن يبقى ليه Account واحد أو أكثر من Account, لكن كل Account مرتبط بـ Customer واحد فقط.
الارتباط ممكن يقرا كـ One-to-Many في حالة القول ان الـ Customer مرتبط بعدد من الـ Accounts.
ممكن يقرا كـ Many-to-One في حالة القول ان عدد الـ Accounts مرتبط مرتبط بالـ Customer.
Many-to-Many
فيها بيكون الربط تعددي من الجانبين, على سبيل المثال Product Table و Customer Table ... كل Customer ممكن يبقى عنده اكتر من Product ... وكل Product ممكن ينتمي لأكثر من Customer
عاوزك ترسم مربع وقدامه 3 مربعات, بحيث الـ 3 مربعات تمثل الـ Product والأخر يمثل الـ Customer, حاجة زي كده:
Customer Product
[P1]
[C] [P2]
[P3]
الـ Customer يقدر يشتري كل الـ Products المتاحة بالمثال السابق -- وصل الـ Customer مع كل Product -- عاوزك تزود عدد الـ Customers كالتالي:
Customer Product
[C] [P1]
[C] [P2]
[C] [P3]
طبق نفس امكانية كل Customer شراء كل الـ Products -- وصل كل الـ Customers مع كل Product -- هو ده الـ Many-to-Many
طبعآ, لو رسمت ووصلت, هتلاحظ مشكلة التعقيد مع زيادة عدد الـ Customers وتوفر الـ Products, لحل المشكلة دي بنقسم الـ Many-to-Many لـ عدد 2 One-to-Many باستخدام الـ Linking Table
هنستخدم نفس المثال الفائت بإضافة Table جديدة Order Table, كالتالي:
Customer Order Product
[O1] [P1]
[C] [O2] [P2]
[O3] [P3]
مفهوم الـ Linking Table يعمل على تقسيم الـ Many-to-Many الى عدد 2 One-to-Many, الـ Order Table المضافة عملت نوع من التبسيط بحيث اصبح كل Customer ليه عدد من الـ Orders وكل Order مرتبط بـ Product واحد, وكل Product ممكن يرتبط بأكثر من Customer عامل Order, تعالى نرسم ونوصل الاول كمان مرة بعدين اكمل:
Customer Order Product
[O a]
[C x] [O b]
[O c]
[O1] [P1]
[C y] [O2] [P2]
[O3] [P3]
[O d]
[C z] [O e]
[O f]
* صل كل [C] مع 3 [O] -- كل Customer عمل 3 Order --
* صل كل [O] مع [P] -- كل Order مرتبط بـ Product واحد --
* صل كل Product مع [C] مختلفة -- كل Product مرتبط بـ Order مختلف --
تقسيمة الـ 2 One-to-Many تمت كالتالي:
* كل Customer مرتبط باكثر من Order -- هنا One-to-Many --
* كل Order مرتبط بـ Product واحد فقط -- هنا One-to-One --
* كل Product مرتبط باكثر من Order -- تاني One-to-Many --
نقدر نفهم في النهاية ان كل Record انت بتتعامل معاه (Create) في الـ Table هو Regular Record, محتاج تهتم بالـ Relation لما يكون في اكثر من Table بنفس الـ Database, بس كده.