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 سه معیار ثابت برای ارزیابی نمونهها هستند.