خانه/ ارتباطات و JOINها/ کلید اصلی

کلید اصلی (Primary Key)

مبتدی ۱۱ دقیقه مطالعه

در درس جدول‌ها (فصل ۱) به‌طور مختصر با PRIMARY KEY آشنا شدیم. حالا که وارد فصل ارتباطات و JOINها می‌شویم، وقتش رسیده کامل بفهمیم کلید اصلی چیست — چون تمام JOINهایی که در این فصل یاد می‌گیریم، دقیقاً بر پایه‌ی همین کلیدها کار می‌کنند.

کلید اصلی دقیقاً چیست؟

کلید اصلی (Primary Key) ستون یا مجموعه‌ای از ستون‌هاست که هر ردیف را در یک جدول به‌طور یکتا مشخص می‌کند. کلید اصلی سه ویژگی اجباری دارد:

  • یکتا بودن: هیچ دو ردیفی نمی‌توانند مقدار یکسانی برای کلید اصلی داشته باشند.
  • غیرقابل NULL بودن: کلید اصلی هرگز نمی‌تواند خالی باشد — چون در آن صورت دیگر نمی‌تواند شناسه‌ی یکتای آن ردیف باشد.
  • پایداری: مقدار کلید اصلی نباید بعداً تغییر کند؛ چیزهایی که تغییر می‌کنند (مثل شماره تلفن یا آدرس) انتخاب خوبی برای کلید اصلی نیستند.

کلید طبیعی در برابر کلید مصنوعی

برای انتخاب کلید اصلی دو رویکرد رایج وجود دارد:

نوعتوضیحمثال
کلید طبیعی (Natural Key)یک مقدار واقعی و معنادار که از قبل در دنیای واقعی یکتاستکد ملی
کلید مصنوعی (Surrogate Key)یک عدد بی‌معنا که فقط برای شناسایی داخلی پایگاه‌داده ساخته می‌شودستون IDENTITY مثل StudentID
توصیه‌ی رایج: در اکثر پروژه‌های واقعی، کلید مصنوعی (مثل یک ستون IDENTITY) ترجیح داده می‌شود — حتی اگر کلید طبیعی معتبری هم وجود داشته باشد. دلیلش این است که کلیدهای طبیعی گاهی تغییر می‌کنند یا اشتباه ثبت می‌شوند (مثلاً کد ملی وارد‌شده اشتباه)، در حالی که یک عدد مصنوعی همیشه پایدار می‌ماند.

کلید اصلی ترکیبی (Composite Primary Key)

گاهی یک ستون به‌تنهایی کافی نیست و کلید اصلی از ترکیب چند ستون ساخته می‌شود. این الگو مخصوصاً در جدول‌های واسط (مثل enrollments که در ادامه‌ی این فصل زیاد می‌بینیم) رایج است:

sql
CREATE TABLE Enrollments (
    StudentID INT,
    CourseID INT,
    PRIMARY KEY (StudentID, CourseID)
);
-- یعنی: هر دانش‌آموز فقط یک‌بار می‌تواند در یک درس خاص ثبت‌نام کند

ببین کلید اصلی چطور از تکرار جلوگیری می‌کند

بیا با یک مثال واقعی ببینیم SQL Server (و SQLite) چطور جلوی درج یک مقدار تکراری در کلید اصلی را می‌گیرند:

امتحانش کن — تلاش برای درج کلید تکراری
پیامی که دیدی (چیزی شبیه UNIQUE constraint failed) دقیقاً همان محافظتی است که PRIMARY KEY فراهم می‌کند — چه در SQLite، چه در SQL Server واقعی.

افزودن کلید اصلی به جدول موجود

اگر جدولی از قبل بدون کلید اصلی ساخته شده، می‌توان بعداً هم آن را اضافه کرد:

sql
ALTER TABLE Students
ADD CONSTRAINT PK_Students PRIMARY KEY (StudentID);

جمع‌بندی این درس

  • کلید اصلی هر ردیف را به‌طور یکتا، بدون NULL و به‌شکل پایدار مشخص می‌کند.
  • کلید مصنوعی (عددی و بی‌معنا) معمولاً به کلید طبیعی (مثل کد ملی) ترجیح داده می‌شود.
  • کلید اصلی می‌تواند از ترکیب چند ستون ساخته شود (کلید ترکیبی) — الگوی رایج جدول‌های واسط.
  • پایگاه‌داده به‌طور خودکار از درج مقادیر تکراری در کلید اصلی جلوگیری می‌کند.

در درس بعدی سراغ کلید خارجی می‌رویم: چطور جدول‌ها را با ارجاع به کلید اصلی یکدیگر، به هم متصل کنیم.