0Pricing
SQL Academy · درس

المفاتيح الأساسية والتفرّد

افهم المفاتيح الأساسية، والمفاتيح البديلة مقابل الطبيعية، والمفاتيح المركبة، ولماذا يحتاج كل صف إلى معرّف فريد موثوق.

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

لماذا يحتاج كل صف إلى معرّف فريد؟

لتحديث صف محدد أو حذفه بأمان، يجب أن تتمكن من تحديده دون أي التباس.

  • يمكن أن يوجد مستخدمان باسم "Alice Adams"
  • لكن يجب ألا يوجد مستخدمان لهما id = 42
  • يُسمّى المعرّف الفريد المفتاح الأساسي

التصريح عن مفتاح أساسي

تحدّد عمودًا بوصفه المفتاح الأساسي عند إنشاء الجدول:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

المفتاح الأساسي = NOT NULL + UNIQUE

يفرض PRIMARY KEY تلقائيًا ما يلي:

  • NOT NULL — لا يمكن أن تكون قيم المفتاح الأساسي مفقودة
  • UNIQUE — لا يمكن لصفين مشاركة قيمة المفتاح الأساسي نفسها

تنشئ قاعدة البيانات أيضًا فهرسًا فريدًا للمفتاح الأساسي، لذا تكون عمليات البحث باستخدام المعرّف سريعة.

المفاتيح البديلة مقابل الطبيعية

لديك خياران للمفتاح الأساسي:

  • بديل — معرّف اصطناعي تنشئه قاعدة البيانات (BIGSERIAL أو UUID). وهو الأكثر شيوعًا في التطبيقات الحديثة.
  • طبيعي — معرّف من العالم الحقيقي (البريد الإلكتروني أو ISBN). وهو محفوف بالمخاطر، إذ قد يغيّر الأشخاص عناوين بريدهم الإلكتروني.

أفضل ممارسة: استخدم معرّفًا بديلًا وأضف قيد UNIQUE إلى المفتاح الطبيعي.

BIGSERIAL: أعداد صحيحة متزايدة تلقائيًا

في PostgreSQL، ينشئ BIGSERIAL عمودًا متزايدًا تلقائيًا بحجم 64 بت، تدعمه سلسلة.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

مفاتيح UUID الأساسية

البديل هو UUID بحجم 128 بت، وهو مفيد عندما يجب أن تكون المعرّفات فريدة عبر الأنظمة أو عندما تُنشأ من جهة العميل.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

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

أحيانًا يكون المعرّف الطبيعي مزيجًا من عدة أعمدة:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

قيود UNIQUE مقابل المفتاح الأساسي

يمكنك التصريح عن أعمدة أخرى بوصفها فريدة من دون جعلها المفتاح الأساسي:

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

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

ماذا يحدث عند إدراج قيمة مكررة؟

إذا حاولت إدراج مفتاح أساسي مكرر، ترفض قاعدة البيانات العبارة بأكملها:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

وهذا أمر جيد — إذ يمنع تلف البيانات الصامت.

البحث عن الصفوف باستخدام المفتاح الأساسي سريع

يتيح لك الفهرس الفريد على المفتاح الأساسي إجراء عمليات بحث بتعقيد O(log n)، حتى عند التعامل مع مليارات الصفوف.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

لا تعِد استخدام المعرّفات

حتى عند حذف صف، لا تُعِد استخدام مفتاحه الأساسي. فقد تظل جداول أخرى أو أنظمة خارجية تشير إليه. اترك السلسلة تتابع الزيادة — فالمعرّفات رخيصة.

مراجعة

تمنح المفاتيح الأساسية كل صف معرّفًا ثابتًا وفريدًا.

  • فضّل المفاتيح البديلة (BIGSERIAL أو UUID)
  • استخدم UNIQUE للمفاتيح الطبيعية التي يجب ألا تتكرر
  • تمثّل المفاتيح الأساسية المركبة قاعدة "يجب أن يكون هذا الزوج فريدًا"

تحقق سريع

ما الذي يفرضه PRIMARY KEY ضمنيًا؟

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

هل درس «المفاتيح الأساسية والتفرّد» مجاني؟

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

ماذا ستتعلم في «المفاتيح الأساسية والتفرّد»؟

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

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

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

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

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

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

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

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

  1. ما هو RDBMS ولماذا تهم الجداول
  2. المفاتيح الأساسية والتفرّد
  3. NULL: قيمة الحقيقة الثالثة
  4. نظرة عامة على أنواع البيانات: INT وVARCHAR وDATE وBOOLEAN
← العودة إلى SQL Academy