شبكة تعلم مع ناو

هل يمنع FOREIGN KEY تكرار القيمة أو تخزين NULL؟

يربط FOREIGN KEY قيم عمود في جدول بقيم مرجعية في جدول آخر. في العلاقة بين رواد الفضاء والدول، يمكن أن يشير country_id إلى معرف دولة موجودة. وظيفة القيد هي الحفاظ على صحة الإشارة المرجعية، لكنه لا يجعل عمود الجدول التابع فريدًا تلقائيًا، ولا يمنع NULL إذا كان العمود يسمح بها.

يمكن لعدة رواد فضاء الانتماء إلى الدولة نفسها، ولذلك قد تتكرر قيمة country_id بصورة صحيحة. وإذا كان انتماء أحد الرواد غير مسجل، يمكن تخزين NULL في العمود القابل لذلك. أما فرض دولة لكل رائد فيحتاج إلى NOT NULL بالإضافة إلى المفتاح الخارجي. يجب أيضًا وجود القيمة المرجعية قبل إدخال إشارة غير NULL إليها. في المثال نستخدم InnoDB وننشئ جدول الدول أولًا حتى تكون العلاقة قابلة للتطبيق.

مثال

CREATE TABLE countries_fk_example (id INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE astronauts_fk_example (
  id INT PRIMARY KEY,
  country_id INT,
  FOREIGN KEY (country_id) REFERENCES countries_fk_example(id)
) ENGINE=InnoDB;
INSERT INTO countries_fk_example VALUES (1);
INSERT INTO astronauts_fk_example VALUES (10, 1), (11, 1), (12, NULL);

باختصار: FOREIGN KEY يتحقق من المرجع، بينما منع التكرار ومنع NULL يحتاجان قيودًا مستقلة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.