يتم تأسيس علاقة بين جدولين قاعدة بيانات عندما يحتوي أحد الجداول على مفتاح خارجي يشير إلى المفتاح الأساسي لجدول آخر. هذا هو المفهوم الأساسي وراء مصطلح قاعدة البيانات العلائقية.
كيف يعمل المفتاح الأجنبي لإقامة علاقة
دعونا مراجعة أساسيات المفاتيح الأساسية والأجنبية. يعرّف المفتاح الأساسي بشكل فريد كل سجل في الجدول. وهو نوع من مفتاح المرشح الذي يكون عادةً العمود الأول في جدول ويمكن إنشاؤه تلقائيًا بواسطة قاعدة البيانات للتأكد من أنه فريد.
المفتاح الخارجي هو مفتاح مرشح آخر (وليس المفتاح الأساسي) يستخدم لربط سجل بالبيانات في جدول آخر.
على سبيل المثال ، ضع في الاعتبار هذين الجدولين اللذين يحددان المعلم الذي يعلم الدورة التدريبية.
هنا ، المفتاح الأساسي لجدول الدورات التدريبية هو Course_ID. مفتاحه الخارجي هو Teacher_ID:
معرف بالطبع | اسم الدورة التدريبية | Teacher_ID |
---|---|---|
Course_001 | مادة الاحياء | Teacher_001 |
Course_002 | الرياضيات | Teacher_001 |
Course_003 | الإنجليزية | Teacher_003 |
يمكنك أن ترى أن المفتاح الخارجي في الدورات يتطابق مع مفتاح أساسي في المدرسين:
Teacher_ID | TEACHER_NAME |
---|---|
Teacher_001 | كارمن |
Teacher_002 | فيرونيكا |
Teacher_003 | خورخي |
يمكننا أن نقول أن المفتاح الخارجي Teacher_ID ساعد في إنشاء صلة بين الدورات وطاولات المعلمين.
أنواع علاقات قواعد البيانات
باستخدام المفاتيح الأجنبية أو مفاتيح الترشيح الأخرى ، يمكنك تنفيذ ثلاثة أنواع من العلاقات بين الجداول:
واحد لواحد: هذا النوع من العلاقة يسمح بسجل واحد فقط على كل جانب من جوانب العلاقة.
يرتبط المفتاح الأساسي بسجل واحد فقط - أو لا شيء - في جدول آخر. على سبيل المثال ، في الزواج ، يكون لكل زوج زوج واحد آخر. يمكن تنفيذ هذا النوع من العلاقة في جدول واحد وبالتالي لا يستخدم مفتاحًا خارجيًا.
واحد لكثير: علاقة رأس بأطراف تسمح لسجل واحد في جدول واحد أن يرتبط بسجلات متعددة في جدول آخر.
جرب عمل مع قاعدة بيانات تحتوي على جداول Customers (العملاء) و Orders (الطلبيات).
يمكن لعميل واحد شراء عدة طلبات ، ولكن لا يمكن ربط طلب واحد بعدة عملاء. لذلك يحتوي جدول "الطلبات" على مفتاح خارجي يطابق المفتاح الأساسي في جدول "العملاء" ، بينما لا يحتوي جدول "العملاء" على مفتاح خارجي يشير إلى جدول "الطلبات".
الكثير للكثيرين: هذه علاقة معقدة يمكن فيها ربط العديد من السجلات في جدول بالعديد من السجلات في جدول آخر. على سبيل المثال ، ربما لا يحتاج نشاطنا التجاري إلى جداول العملاء والطلبات فحسب ، بل يحتاج أيضًا إلى جدول المنتجات.
مرة أخرى ، تكون العلاقة بين جدول "العملاء" و "الطلبيات" واحدة إلى أطراف عديدة ، ولكن ضع في اعتبارك العلاقة بين جدول الطلبات والمنتجات. يمكن أن يحتوي الطلب على منتجات متعددة ، ويمكن ربط منتج بأوامر متعددة: يمكن للعديد من العملاء إرسال طلب يحتوي على بعض المنتجات نفسها. هذا النوع من العلاقات يتطلب ثلاثة جداول على الأقل.
ما هي العلاقات قاعدة البيانات الهامة؟
إنشاء علاقات متناسقة بين جداول قاعدة البيانات يساعد على ضمان سلامة البيانات ، والمساهمة في تطبيع قاعدة البيانات. على سبيل المثال ، ماذا لو لم نربط أي جداول عبر مفتاح خارجي ، بل قمنا فقط بدمج البيانات في جداول الدورات والمعلمين ، مثل:
Teacher_ID | TEACHER_NAME | دورة |
---|---|---|
Teacher_001 | كارمن | علم الأحياء ، الرياضيات |
Teacher_002 | فيرونيكا | الرياضيات |
Teacher_003 | خورخي | الإنجليزية |
هذا التصميم غير مرن وينتهك المبدأ الأول لتطبيع قاعدة البيانات ، النموذج الأول العادي (1NF) ، والذي ينص على أن كل خلية جدول يجب أن تحتوي على قطعة واحدة منفصلة من البيانات.
أو ربما قررنا ببساطة إضافة سجل ثانٍ لكارمن ، لكي نفرض 1NF:
Teacher_ID | TEACHER_NAME | دورة |
---|---|---|
Teacher_001 | كارمن | مادة الاحياء |
Teacher_001 | كارمن | الرياضيات |
Teacher_002 | فيرونيكا | الرياضيات |
Teacher_003 | خورخي | الإنجليزية |
لا يزال هذا التصميم ضعيفًا ، حيث يقدم تكرارًا غير ضروري وما يسمى تشوهات الإدراج البيانات ، مما يعني أنه يمكن أن يساهم في بيانات غير متسقة.
على سبيل المثال ، إذا كان لدى المعلم سجلات متعددة ، فماذا لو كانت هناك حاجة لتحرير بعض البيانات ، ولكن الشخص الذي يقوم بتحرير البيانات لا يدرك وجود سجلات متعددة؟ بعد ذلك ، سيحتوي الجدول على بيانات مختلفة لنفس الشخص ، دون أي طريقة واضحة للتعرف عليها أو تجنبها.
كسر هذا الجدول إلى جدولين ، ينشئ المعلمون والدورات التدريبية (كما هو موضح أعلاه) العلاقة الصحيحة بين البيانات ، وبالتالي يساعد على ضمان اتساق البيانات ودقتها.