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

ما الفرق بين UNIQUE المركب وUNIQUE لكل عمود؟

عندما نكتب UNIQUE (country_id, local_code)، نطلب تفرد الزوج المكوّن من الدولة والرمز المحلي. يستطيع الرمز نفسه الظهور في دولتين مختلفتين، كما تستطيع الدولة احتواء عدة رموز. الممنوع هو تكرار الرمز نفسه داخل الدولة نفسها. يناسب ذلك القيم التي تكون فريدة داخل نطاق محدد وليست فريدة في الجدول كله.

أما وضع قيد UNIQUE مستقل على كل عمود فيفرض شرطين مختلفين: لا تتكرر الدولة مطلقًا، ولا يتكرر الرمز مطلقًا. هذا أشد تقييدًا، وقد يمنع بيانات صحيحة كان التصميم المركب يسمح بها. لذلك لا يمكن استبدال القيد المركب بقيدين منفصلين دون تغيير معنى قواعد البيانات المقبولة.

مثال

CREATE TABLE employees (
  id INT PRIMARY KEY,
  country_id INT NOT NULL,
  local_code INT NOT NULL,
  UNIQUE (country_id, local_code)
);
INSERT INTO employees VALUES (1, 10, 7), (2, 20, 7);

ينجح الإدخال لأن الرمز 7 مستخدم في دولتين مختلفتين، والزوجان غير متطابقين.

باختصار: يقيد UNIQUE المركب تكرار المجموعة، بينما تقيد القيود المنفصلة تكرار كل عمود على حدة.

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

اختبر نفسك

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