فهم المفاتيح الأجنبية في SQL Server

عند تصميم قاعدة بيانات علائقية، من الضروري إنشاء علاقات بين الجداول للحفاظ على سلامة البيانات. إحدى الطرق لتحقيق ذلك هي من خلال استخدام المفاتيح الأجنبية. المفتاح الأجنبي في SQL Server هو حقل (أو مجموعة من الحقول) في جدول واحد يحدد فريدًا صفًا في جدول آخر. إذا كنت تأتي من نظام قاعدة بيانات آخر، مثل PostgreSQL، قد تجد بعض الاختلافات في الصياغة والتنفيذ في SQL Server، مما قد يؤدي إلى الارتباك.

المشكلة: إنشاء مفتاح أجنبي

في السيناريو المعطى، هناك محاولة لإنشاء ثلاثة جداول: exams وquestion_bank وanswer_bank. الهدف هو إنشاء مفتاح أجنبي في question_bank يشير إلى جدول exams. ومع ذلك، تظهر خطأ عند تشغيل كود SQL. الرسالة الرئيسية من الخطأ هي:

Msg 8139, Level 16, State 0, Line 9 عدد الأعمدة المرجعية في المفتاح الأجنبي يختلف عن عدد الأعمدة المشار إليها، جدول ‘question_bank’.

هذا يشير إلى وجود تناقض في تعريف المفتاح الأجنبي.

الحل: تعريف المفتاح الأجنبي بشكل صحيح

الخطوة 1: مراجعة تعريفات الجداول

دعونا نلقي نظرة أقرب على كيفية ضبط المفتاح الأجنبي بشكل صحيح في جدول question_bank.

إعداد الجدول الحالي

تم إنشاء جدول question_bank الأصلي كما يلي:

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint question_exam_id foreign key references exams(exam_id)
);

المفتاح الأجنبي المقصود أن يشير إلى exam_id من جدول exams، لكنه يفتقر إلى الصياغة والبنية المناسبة.

الخطوة 2: تحديث تعريف المفتاح الأجنبي

لتعريف العلاقة بين المفتاح الأجنبي بشكل صحيح، حدد كيفية ارتباط عمود المفتاح الأجنبي (question_exam_id) بالمفتاح الرئيس للجدول المشار إليه (exam_id):

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);

التغييرات الرئيسية:

  • حدد اسم المفتاح الأجنبي: من الممارسات الجيدة تسمية قيد المفتاح الأجنبي (مثل fk_questionbank_exams) من أجل الوضوح.
  • قم بالإشارة بشكل صحيح إلى عمود المفتاح الأجنبي: تأكد من أن المفتاح الأجنبي يشير إلى العمود الصحيح في الجدول المشار إليه.

الخطوة 3: تنفيذ التغييرات

الآن، يمكنك حذف جدول question_bank القائم (إذا كان موجودًا) وإعادة إنشائه مع تعريف المفتاح الأجنبي المصحح باستخدام:

drop table if exists question_bank;

create table question_bank
(
    question_id uniqueidentifier primary key,
    question_exam_id uniqueidentifier not null,
    question_text varchar(1024) not null,
    question_point_value decimal,
    constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);

الخلاصة

إعداد المفاتيح الأجنبية في SQL Server هو خطوة حيوية لضمان سلامة البيانات وإنشاء علاقات بين الجداول. من خلال تعريف قيود المفتاح الأجنبي بعناية وتصحيح أي مشكلات في الصياغة، يمكنك إنشاء تصميم قاعدة بيانات قوي وفعال.

إذا واجهت أي أخطاء، تحقق دائمًا من تعريفات المفاتيح الأجنبية لضمان أن العمود المرجع يتوافق بشكل صحيح مع العمود المشار إليه. مع هذا الدليل، يجب أن تكون مجهزًا جيدًا لتنفيذ المفاتيح الأجنبية بنجاح في قواعد بيانات SQL Server الخاصة بك.