دامین در اس کیو ال و یا RULE

در این مقاله به معرفی دامین در اس کیو ال و یا rule می پردازیم

بنام خدا

موضوع مقاله:

تعریف دامین در sql

در تعریف دیتا بیس ها و ساخت جدول ها با ما انواع داده ای  اشنا میشویم که  انواع  نوع داده ای مانند(char,int,ntext,….) وجود دارد اما در بعضی از مواقع ما نیاز داریم تا نوع داده ای خود را تعریف کنیم و بتوانیم در جدول های خود از ان استفاده کنیم با یک مثال به توضیح راحت تر این موضوع می پردازم

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

1-id

2-name

3-mobile

4-PostalCode

تشکیل شده است درحالت عادی باید فیلد id خود را از نوع  عددی ، فیلد نام را از یکی از نوع های  رشته ای و همینطور فیلد موبایل و کد پستی را از نوع رشته ای تعریف کنم

این حالت کاملا درست و هیچ مشکلی نخواهد داشت

اما برای مدیریت و بهتر شدن کارایی و همینطور جلو گیری از داده های نامربوط باید یک سری شرط هایی اعمال کنم

مثلا فیلد موبایل من حتما 11 رقم باشد،فقط عدد های صحیح و مثبت را قبول کند و 2 رقم اول ان  با 09شروع بشود.

و یا فیلد کد پستی من حتما 10 رقم باشد و عدد های مثبت و صحیح را قبول کند

همچنین این شرط را برای نام می توان تعریف نمود که مثلا فقط کارکتر های فارسی را قبول کند و هیچ یک از سمبول ها و یا عدد هارا قبول نکند .

تمامی این شرط هارا ما میتوانیم سمت کلاینت هایی که از sqlاستفاده میکنند پیاده سازی کنیم

اما sql هم در این زمینه پاسخ گوی نیاز ما می باشد و در این زمینه  قابلیت دامین را در اس کیو ال معرفی نموده است مثلا در مثال بالا میتوانیم یک نوع داده ای به نام موبایل تعریف کنیم و تمامی شرط های نامبرده را در ان اعمال کنیم و دیگر در تعریف جداول خود نوع فیلد های موبایل را رشته ای نگریم بلکه همان نوع داده ای که خودمان ساختیم و شرط هایی اعمال کردیم را در نظر بگیریم.

در نسخه های قدیمی دستور کلی ساخت domain به شکل زیر بود:


CREATE DOMAIN name [ AS ] data_type
    [ COLLATE collation ]
    [ DEFAULT expression ]
    [ constraint [ ... ] ]

where constraint is:

[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expression) }

در نسخه های جدید ارائه شده توسط ماکروسافت دیگر نوشتن دامین به پیچیدگی قبل نمی باشد و امکان جدید RULEجایگزین دامین شد.

در RULEدیگر نیازی به تعریف کردن نوع داده ای نیست

دستور ساده تر و کارامد تر شده

مثال یک نوع داده ای میخواهیم تعریف کنیم که بزرگ تر و مساوی 100 و کوچک تر از 2000 باشد.



CREATE RULE range_rule  
AS   
@range>= 1000 AND @range <2000; 

دستورات rule  به 3 شکل تعریف می شوند:

1-محدوده ای 
2-لیست
3-الگو

 
مثال محدوده در بالا زده شد و دو مثال دیگر را در زیر خواهم زد
CREATE RULE list_rule  

AS   

@list IN ('1377', '4', '3'); 


CREATE RULE pattern_rule   

AS  

@value LIKE '__-%[0-9]' 



برای پیاده سازی هر rule باید ان را به نامه داده ای معرفی کنیم برای این کار از دستور :

EXEC sp_bindrule[name rule], 'nam date'

name rule:در این قسمت نام rule که ساختیم را قرار میدهیم

'nam date: و در این قسمت نام دلخواهی که میخواهیم به ان نام از ruleساخته شده استفاده کنیم.

مثال:

CREATE RULE range_rule2 

AS  

@range>= 1000 AND @range <2000;

EXEC sp_bindrule range_rule2, 'pooya'


Create Table test_range_rule(test pooya)


از این به بعد برای اینسرت در این فیلد فقط باید در محدوده تعریف شده این کار را انجام داد.

برای حذف ruleهم از دستور :

drop rule range_rule2;

استفاده میکنیم فقط توجه داشته باشید اگر در جدولی از این ruleاستفاده کرده اید اول باید ان را از بین ببرید و بعد اقدام به پاک کردن بکنید

و همینطور ان اسمی که به عنوان نام داده ای به ان اختصاص داده اید که با دستور:


drop type pooya;
می توانید این کار را انجام دهید 

آموزش نصب sql server 2017