0Pricing
SQL Academy · درس

قيود UNIQUE والمفاتيح المركبة

افرض التفرّد على عمود واحد أو عدة أعمدة، وافهم NULL في الفهارس الفريدة، واستخدم التفرّد المركب للمفاتيح الطبيعية.

قيود UNIQUE والمفاتيح المركبة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

UNIQUE: لا يُسمح بالتكرارات

يمنع قيد UNIQUE صفين من مشاركة القيمة نفسها في الأعمدة الخاضعة للقيد:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

ينشئ UNIQUE فهرسًا

يُنفذ قيد UNIQUE باستخدام فهرس B-tree فريد، ولذلك تكون عمليات البحث باستخدام ذلك العمود سريعة.

-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';

UNIQUE مركب

التفرّد عبر مجموعة من الأعمدة:

CREATE TABLE memberships (
  user_id BIGINT NOT NULL,
  group_id BIGINT NOT NULL,
  role TEXT NOT NULL,
  UNIQUE (user_id, group_id)        -- a user can be in a group at most once
);

UNIQUE مقابل PRIMARY KEY

المفتاح الأساسي هو في الأساس UNIQUE + NOT NULL + هوية مخصصة. ويمكن أن يحتوي الجدول على مفتاح أساسي واحد، لكن يمكنه احتواء العديد من قيود UNIQUE.

NULL في UNIQUE

يتعامل SQL القياسي مع NULL على أنه مختلف عن كل قيمة أخرى (بما في ذلك قيم NULL الأخرى). ويمكن أن يحتوي عمود UNIQUE على عدة صفوف ذات قيمة NULL:

CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL);   -- both succeed

-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);

مفتاح أساسي مركب

إذا كان المفتاح الطبيعي المركب مناسبًا، فاستخدمه مفتاحًا أساسيًا PRIMARY KEY:

CREATE TABLE order_items (
  order_id   BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
  product_id BIGINT NOT NULL REFERENCES products(id),
  quantity   INT NOT NULL CHECK (quantity > 0),
  PRIMARY KEY (order_id, product_id)
);

مفتاح بديل + مفتاح طبيعي UNIQUE

نمط شائع: استخدام id اصطناعي كمفتاح أساسي، وفرض التفرّد الواقعي باستخدام UNIQUE:

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  sku VARCHAR(50) NOT NULL UNIQUE,
  name TEXT NOT NULL
);

فهارس UNIQUE جزئية

يُفرض التفرّد على بعض الصفوف فقط:

-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
  ON users (email)
  WHERE deleted_at IS NULL;

فهارس UNIQUE للتعبيرات

فرض التفرّد على تعبير محسوب، وهو مفيد لعناوين البريد الإلكتروني غير الحساسة لحالة الأحرف:

CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));

أخطاء انتهاك UNIQUE

يعيد الإدراج المكرر ما يلي:

ERROR:  duplicate key value violates unique constraint "users_email_key"
DETAIL:  Key (email)=(alice@example.com) already exists.

يعتمد UPSERT على UNIQUE

يحتاج ON CONFLICT إلى UNIQUE أو PRIMARY KEY ليستهدفه، فبهذه الطريقة تعرف PostgreSQL ما الذي يُعد تكرارًا.

مراجعة

يُعد UNIQUE ثاني أهم قيودك بعد NOT NULL.

  • مفرد أو مركب
  • UNIQUE جزئي من أجل «التفرّد بين الصفوف النشطة فقط»
  • UNIQUE للتعبيرات من أجل المفاتيح غير الحساسة لحالة الأحرف
  • انتبه إلى قاعدة اعتبار NULL مختلفًا

اختبار سريع

هل يمكن لعمود UNIQUE أن يحتوي على عدة قيم NULL في SQL القياسي؟

الأسئلة الشائعة

هل درس «قيود UNIQUE والمفاتيح المركبة» مجاني؟

نعم — نص درس «قيود UNIQUE والمفاتيح المركبة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «قيود UNIQUE والمفاتيح المركبة»؟

افرض التفرّد على عمود واحد أو عدة أعمدة، وافهم NULL في الفهارس الفريدة، واستخدم التفرّد المركب للمفاتيح الطبيعية. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «قيود UNIQUE والمفاتيح المركبة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قيود NOT NULL وCHECK
  2. قيود UNIQUE والمفاتيح المركبة
  3. FOREIGN KEY والإجراءات المرجعية
  4. القيم الافتراضية والأعمدة المُولَّدة
← العودة إلى SQL Academy