قواعد البيانات العلائقية

Database table
ما هي قواعد البيانات العلائقية: Relational Database
نموذج تم بناؤه علي نظريات الجبر العلائقي وتتلخص فكرة النموذج في النظر إلي قاعدة البيانات علي أنها مجموعة من الجداول أو علاقات تسمي (relations) والعلاقة هي عبارة عن مصطلح رياضي وتمثل جدولا ذا بعدين(صفوف وأعمدة) .

ولا توجد هنالك أهمية لترتيب الصفوف أو الأعمدة حيث تمثل الصفوف مجموعة سجلات الجداول(records or tuple) وتمثل الأعمدة الصفات لهذه الجداول (attributes) ويجب أن يكون لكل صفة مجال (domain) من القيم التي يمكن أن يحتويها هذا العمود وترتبط هذه الجداول مع بعضها البعض بواسطة روابط ويجب أن يكون لكل جدول مفتاح رئيسي (primary key) لتمييز الصفوف عن بعضها والنقطة التي تمثل تقاطع الصف مع العمود (الصفة) تمثل قيمة لهذا الصف.

مثال على ذلك الجدول التالي يمثل معلومات الطالب في قاعدة بيانات جامعة
1.اسم الجدول student كل صف يمثل معلومات تخص طالبا واحدا فقط
2 – المفتاح الرئيسي للجدول هو st_no رقم الطالب حيث لا يتكرر رقم الطالب (الرقم الجامعي)
3-القسم dept_code تمثل القسم الذي ينتمي إلية كل طالب
4-.gpa تمثل المعدل التراكمي للطلاب
5-مجال القيم : كل صفة يجب أن يكون لها مجال ثابت من القيم فمثلا gpa يجب أن تحتوي على رقم حقيقي بين 1 ــ 4 والقسم dept_code يجب أن يكون أحد الأقسام الدراسية الموجودة في الجامعة.

مفاتيح الجداول (العلاقات) :
المفتاح هو أي عمود (أو Attribute ) ممكن يحدد لنا صف معيّن في الجدول، المفتاح ممكن يكون عبارة عن Attribute واحد أو أكثر بحسب الجدول. على سبيل المثال لو أخذنا جدول للطلاب يحتوي على ثلاث بيانات: ID و اسم وعنوان. هل نقدر نحدد طالب محدد عن طريق اسمه؟ طبعاً لأ لأن احتمال كبير يكون فيه طالبين بنفس الاسم. طيب هل نقدر نحددهم بالعنوان؟ لأ لأن ممكن طالبين يكونون ساكنين مع بعض. عشان كذا الطلاب دائماً يعوطنهم رقم ID خاص فيهم، لأنه هو الشيء الوحيد اللي يضمن اننا نقدر نحدد طالب محدد من ضمن كل الطلاب. بعض الأحيان نحتاج لأكثر من Attribute عشان نقدر نحدد صف معيّن في الجدول.
يعني باختصار احنا لو عرفنا المفتاح حق الجدول، لو سوينا كويري للجدول بقيمة معيّنة لهذا المفتاح لازم يرجع لنا صف واحد بس. والجدول ممكن يكون له أكثر من مفتاح، لكن لازم دائماً نختار واحد منهم يكون هو الأساسي.
04fig04
تعتبر من أهم خصائص قواعد البيانات العلائقية حيث إنها تكون المميزة لجدول معين من جهة والرابط الذي يربط الجداول المختلفة مع بعضها من جهة أخرى
1.المفتاح الأعظم ( Super Key ) : هو أقل مجموعة من الصفات التي يمكن أن تميز الصف في الجدول عن بقية الصفوف الأخرى فمثلا هذه المجموعة من الصفات يمكن أن تكون مفتاحا أعظم st_no OR st_no , st_name OR st_no , dept_code بمعنى الرقم الجامعي أو الرقم الجامعي + اسم الطالب أو الرقم الجامعي + قسم الطالب
2.المفتاح المرشح ( Candidate Key ) : وهو الصفة (مجموعة الصفات) التي يمكن اختيارها كمفتاح رئيسي للجدول ويجب أن يكون هنالك أكثر من صف له نفس القيمة لهذه الصفة أو الصفات وكذلك يجب أن يكون له قيمة أي ليس NULL حيث st_no يعتبر مفتاحا مرشحا ليكون مفتاحا رئيسيا
3.المفتاح الرئيسي ( Primary Key ) : هو المفتاح الذي تم اختياره من مجموعة المفاتيح المرشحة ليكون محددا لكل صف في الجدول يمكن أن نختار st_no ليكون مفتاحا رئيسيا ، ايضاً candidate ترجمتها مرشّح ، أي مفتاح للجدول نسميه candidate key، كأننا نقول انه مرشّح لأنه يكون مفتاح للجدول.
4- المفتاح الثانوي alternate key
alternate معناها بديل، المفتاح البديل هو أي مفتاح (candidate key) لكننا ما اخترناه يكون مفتاح رئيسي. يعني باختصار Primary وalternate هم كلهم candidate keys،
Primary هو المفتاح اللي اخترناه يكون مفتاح رئيسي، والـ alternate هو اللي ما اخترناه يكون مفتاح رئيسي.
هو عبارة عن صفة أو صفات تستخدم لغايات الاسترجاع فمثلا لو كان لدينا جدول يحتوي علي قائمة بالعملاء فالمفتاح الرئيسي هو رقم العميل ولكن إذا أردنا أن نسترجع رقم هاتف عميل معين (حيث من سيحفظ أرقام العملاء؟؟؟) ففي هذه الحالة يتم استخدام الاسم في عملية البحث وليس رقم العميل ومن هنا يتم اختيار اسم العميل كمفتاح ثانوي
5.المفتاح الأجنبي ( Foreign Key ) : وهو صفة أو صفات تشير إلي مفتاح رئيسي أو قيمة غير مكررة (unique) في جدول آخر فمثلا الصفة dept_code في جدول المتدرب مفتاحا أجنبيا لجدول الأقسام department.
ايضاً كلمة Foreign ممكن نترجمها كأجنبي أو دخيل. المفتاح الدخيل يستخدم للربط بين جدولين، وهو مايعتبر candidate key للجدول، وهذا الشيء معناه انه ممكن القيم الموجودة في عمود الفورين كي تتكرر.
foreign key هو candidate key للجدول الثاني اللي مربوط مع جدولنا، عادةً يكون البرايمري كي حقها لكن مو شرط.

كمثال عليه:
افترض ان عندنا relationship بين الطالب والجامعة العربية المفتوحة، الطالب الواحد بيكون مرتبط مع فرع واحد بس، لكن الفرع بيكون مرتبط مع أكثر من طالب. طيب الحين كيف ممكن نربط الطالب مع الفرع اللي هو مسجل فيه؟ لو افترضنا بأن كل فرع له رقم مميّز (primary key) واسمه رقم الفرع، الربط ببساطة بيكون عن طريق إضافة عمود جديد في جدول الطالب ونسميه رقم الفرع، كذا راح نقدر نعرف كل طالب مسجّل في أي فرع، لأننا أضفنا الـ key حق الفرع في جدول الطالب، فالحين نقدر نوصل لكل بيانات الفرع اللي مسجل فيه الطالب.

رقم الفرع هذا يعتبر foreign key في جدول الطالب. ويعتبر primary key في جدول الجامعة.
اسمه foreign لأننا ندخله في العلاقات (مايعتبر راعي محل )، واسمه key لأنه مفتاح في الجدول الثاني اللي ربطناه مع جدولنا، مو لأنه مفتاح في جدولنا.

التشاركية بين الجداول (العلاقات)
1- واحد ــــ واحد (1:1) : مثلا لكل شخص جواز سفر واحد فقط وأن جواز السفر يعود لشخص واحد فقط .
2- واحد ــــ متعدد أو متعدد — واحد (1:N أو N:1) : مثلا الطالب يتبع قسم واحد فقط وفي نفس الوقت يكون هناك أكثر من طالب ينتمي لهذا القسم .
3.متعدد ـــــ متعدد (N:N) : مثلا الطالب يدرس عدة مواد والمواد يدرسها عدة طلبة.

إن شاء الله تكون وضحت اراكم في مقاله قادمة ان شاء الله 🙂