فصل 10 از 24 درس 1 از 1

Primary Key، Foreign Key و Constraintها

Primary Key، Foreign Key و Constraintها

بخشی از آموزش جامع SQL Server

محتوای درس Primary Key، Foreign Key و Constraintها

T-SQL | Data Integrity و قواعد پایگاه داده

Constraintها قواعدی هستند که SQL Server مستقل از Application enforce می‌کند. Primary Key هویت Row، Foreign Key یکپارچگی ارتباط و CHECK/UNIQUE/DEFAULT قواعد دیگر Domain را محافظت می‌کنند.

متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثال‌ها در امتداد مدل StoreDb نوشته شده‌اند و اصطلاحات اصلی SQL Server و T-SQL به‌صورت یکدست به‌کار می‌روند.

1. مفاهیم و قراردادهای اصلی

Constraintها قواعدی هستند که SQL Server مستقل از Application enforce می‌کند. Primary Key هویت Row، Foreign Key یکپارچگی ارتباط و CHECK/UNIQUE/DEFAULT قواعد دیگر Domain را محافظت می‌کنند.

در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید هم‌زمان با نیاز Domain در نظر گرفته شوند.

مفهومکارکرد
PRIMARY KEYشناسه یکتا
FOREIGN KEYاعتبار رابطه
UNIQUEیکتایی مقدار/ترکیب
CHECKقاعده منطقی
DEFAULTمقدار پیشفرض
NOT NULLاجباری بودن مقدار

2. ساختار و Syntax پایه

Constraintها نام‌گذاری می‌شوند تا خطا و Migration خواناتر باشد. Ruleهایی که همیشه باید معتبر بمانند در صورت امکان در Database نیز enforce می‌شوند.

ALTER TABLE dbo.Products
ADD CONSTRAINT PK_Products
PRIMARY KEY CLUSTERED (Id);

ALTER TABLE dbo.Products
ADD CONSTRAINT CK_Products_Stock
CHECK (Stock >= 0);

3. سناریوی StoreDb

Products به Categories متصل می‌شود. Sku یکتا و Price غیرمنفی است. این قواعد حتی اگر Insert از Script مستقیم انجام شود برقرار می‌مانند.

نمونه‌های این فصل بر مدل فروشگاهی StoreDb بنا شده‌اند تا ارتباط مفاهیم میان فصل‌ها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.

ALTER TABLE dbo.Products
ADD CONSTRAINT FK_Products_Categories
FOREIGN KEY (CategoryId)
REFERENCES dbo.Categories(Id);

ALTER TABLE dbo.Products
ADD CONSTRAINT UQ_Products_Sku UNIQUE (Sku);

4. اصول طراحی و Performance

طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب ساده‌تر زمانی ترجیح دارد که Contract داده را روشن‌تر و رفتار Optimizer را قابل پیش‌بینی‌تر نگه دارد.

  • Constraintها نام مشخص داشته باشند.
  • Foreign Keyهای پرتکرار از نظر Index بررسی شوند.
  • CHECK با منطق Deterministic و قابل فهم نوشته شود.
  • Default جایگزین Validation ورودی نیست.

5. خطاهای رایج و نکات ایمنی

دستورهای SQL می‌توانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.

  • فرض اینکه Application تنها مسیر تغییر داده است.
  • حذف Constraint برای عبور دادن داده نامعتبر.
  • Cascade Delete بدون بررسی زنجیره.
  • Unique Index و Unique Constraint بدون فهم تفاوت کاربردی.

6. چک‌لیست نهایی فصل

  • Primary Key همه Entityهای اصلی تعریف شده است.
  • Foreign Keyها رابطه معتبر را enforce می‌کنند.
  • Unique و Check Ruleهای کلیدی را پوشش می‌دهند.
  • NULLability با Domain هماهنگ است.

7. جمع‌بندی

خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونه‌ها هستند.