دامین در اس کیو ال و یا RULE
جمعه 7 اردیبهشت 1397در این مقاله به معرفی دامین در اس کیو ال و یا 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
- 3k بازدید
- 1 تشکر