از آنجایی که قیود unique و primary key شباهت های بسیاری دارند. برای افراد بسیاری این سوال به وجود می آید که چه تفاوت هایی بین این دو وجود دارد. که در ادامه به آنها اشاره خواهد شد.
ویژگی ها و شباهت ها
هر دوی این کلید ها برای به اجرا در آوردن جامعیت داده ها (enforcing data integrity) به کار گرفته می شوند. در حقیقت هر دو، نوعی قید (constraint) می باشند، در واقع قیود مکانیزم استانداردی را برای SQL Server آماده می کنند تا جامعیت داده ها توسط آنها اعمال شود.
نوع ستون parent-key در جدول parent (در یک قید foreign key) حتما باید منحصر بفرد باشد. پس از هر دو کلید یکتا و اولیه می توانیم به عنوان یک parent-key یا referenced key استفاده کنیم.
هر دو برای جلوگیری از وارد شدن نمونه های تکراری (duplicate) مورد استفاده قرار می گیرند. یعنی هر دو برای اعمال uniqueness (یکتایی) ستون یا ستونهایی (در صورت ترکیبی بودن) بکار گرفته می شوند.
زمانی که یک قید کلید اولیه و یا یکتا ایجاد می کنیم یک ایندکس منحصر بفرد (unique index) توسط Database Engine ساخته می شود. از این ایندکس برای سرعت بخشیدن به query هایی که بر اساس این ستونها هستند مورد بهره بری قرار می گیرد.
اگر مقادیر تکراری در جدول درج شده باشند (در ستون یا ترکیب ستونهای مورد نظر) نمی توانیم این قیود را ایجاد کنیم.
هر دوی این قیود می توانند از ترکیب چند ستون ایجاد شوند.
تفاوت ها
کلید اصلی (primary key تلفظ می شود "پرایمری کی") اجازه نمی دهد که مقدار NULL جزئی از مقادیر کلید باشد، یعنی ما اجازه نداریم که ستون هایی که در PK شرکت دارند را Nullable در نظر بگیریم. ولی برعکس آن کلید یکتا به ما این امکان را می دهد که مقادیر NULL را برای ستون یا ستونهایی (در صورتی که قید composite/compund باشد) که در UK شرکت دارند درج کنیم. البته مقادیر NULL مثل تمام مقادیر دیگر تنها یکبار قابل درج شدند هستند. مثلا اگر ستون A کلید یکتا و allow null باشد نمی توانیم دو سطر با مقدار NULL در ستون A داشته باشیم.
چندین قید unique می توانیم برای یک جدول ایجاد کنیم (که آن وابسته به محدودیت تعداد شاخصی است که در یک جدول می توانیم ایجاد کنیم) ولی تنها یک قید primary key جدول می تواند داشته باشد.
زمانی که یک قید کلید اولیه ایجاد می کنید، یک unique clustered index روی ستون یا ستونها بطور اتوماتیک ایجاد می شود اگر یک clustered index قبلا ایجاد نشده باشد، بدلیل اینکه هر جدول تنها یک Clustered index می تواند داشته باشد. (هیچ اجباری به clustered index بودن primary key وجود ندارد، شما می توانید ستون یا ستونهای دیگری را به عنوان clustered index انتخاب کنید)
زمانی که یک قید کلید یکتا ایجاد می کنید بطور پیشفرض یک unique index برای اعمال جامعیت و سرعت بخشیدن به جستجو ایجاد می شود نوع این شاخص nonclustered است. بدلیل اینکه هر جدول تنها یک clustered index می تواند داشته باشد آن هم بطور پیشرفض به primary key اختصاص داده می شود.