آموزش sql به زبان ساده و به صورت پروژه محور - جلسه چهارم

یکشنبه 3 اسفند 1404

در این جلسه شما با محدودیت ها (constraints) در زبون برنامه نویسی SQL آشنا میشوید و پس از این جلسه , دیگه قادر خواهید بود از محدودیت ها و قوانینی برای جداول برنامه های خود , استفاده کنید. محدودیت ها و قوانین جداول برنامه های خود را اجرا کنید.

آموزش sql به زبان ساده و به صورت پروژه محور - جلسه چهارم

در جلسه قبل راجع به دیتا تایپ‌ها (DATATYPES) در زبان برنامه‌نویسی SQL با همدیگه صحبت کردیم و دیتا تایپ‌ها رو یاد گرفتیم و باعث شد الان 

دیگه شما به راحتی بتونید با دیتا تایپ‌ها توی SQL کار کنید.

تو این جلسه می‌خوایم راجع به محدودیت‌هایی که ما روی جداول می‌ذاریم تا دیتاها و اطلاعات جداول برنامه هامون از یک قانون خاص برخوردار 

باشند صحبت بکنیم.

این قوانین یا محدودیت‌ها باعث میشه دیتاهای ما یکپارچه باشند و از یک قانون خاصی که ما تعریف می‌کنیم پیروی بکنند. دوستان توجه داشته 

باشید که مبحث دیتا تایپ‌ها و محدودیت‌ها یا CONSTRAINTS به شدت مهمه و پایه و اساس است.

 

محدودیت ها (CONSTRAINTS) در SQL :

 

 

۱ : محدودیت NULL :

 

اولین محدودیتی که می‌خواهیم راجع به اون صحبت کنیم محدودیت NULL هست. NULL به معنی هیچی است. یعنی نه صفر و نه اینکه یک رشته 

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

برنامه نویسی SQL فوق العاده مهمه.  توی سطح‌های حرفه‌ای کار کردن با SQL , مدیریت کردن این نال ها یک مبحث مهم و جداست.

 

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

 

در مقابل NULL ما NOT NULL هم داریم. وقتی که این محدودیت رو به یک فیلد میدیم به این معنیه که اون فیلد نمی‌تونه مقدارش خالی باشه.

پس ما تا اینجا با مفهوم NULL و NOT NULL آشنا شدیم و فهمیدیم که وقتی که NULL رو به یک فیلد اختصاص می‌دیم یعنی مقدار اون فیلد می‌تونه 

هیچی باشه و وقتی که NOT NULL رو به یک فیلد اختصاص می‌دیم به این معنیه که مقدار اون فیلد نمی‌تونه خالی یا هیچی باشه.

 

CREATE TABLE CUSTOMERS(
	ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(255) NOT NULL,
	FAMILY VARCHAR(255) NOT NULL,
	AGE CHAR(2) NULL
);

 

در مثال بالا ما محدودیت NOT NULL رو برای فیلد های ID , NAME , FAMILY قرار دادیم که به این معنیه , مقادیر این فیلد ها نمیتواند هیچی باشد.

در عوض برای فیلد AGE محدودیت NULL قرار دادیم که به معنیه اینه که کاربر میتونه سن خودشو وارد نکنه.

 

۲ :‌ محدودیت CHECK در SQL : 

 

محدودیت بعدی , محدودیت CHECK هست. این محدودیت به ما کمک می‌کنه در زمانی که یک داده رو می‌خوایم داخل یک فیلد قرار بدیم در همون  لحظه چک کنه که اون داده‌ای ,  با منطق یا قانونی که ما براش تعریف کردیم یکیه یا نه.

به عنوان مثال ما توی پروژه فروشگاهمون می‌تونستیم برای محصولاتمون قیمت ثبت بکنیم. خب یک امر طبیعی اینه که قیمت هیچ محصولی نباید 

صفر باشه و ما می‌تونیم در هنگام تعریف جدول , این قانون رو برای فیلد قیمت محصول در نظر بگیریم.

 

 

لطفاً به مثال زیر توجه کنید :

 

CREATE TABLE products (
    id int not null primary key AUTO_INCREMENT,
    name varchar(255) not null,
    price decimal(10,4) not null check(price > 0)
);

 

توی تعریف فیلد price , محدودیت  check  رو قرار دادیم که باعث میشه در زمانی که قیمت می‌خواد وارد فیلد بشه همون لحظه SQL چک کنه که آیا قیمت بزرگتر از صفره یا نه و اگر قیمت کوچکتر از صفر باشه اجازه ثبت اطلاعات داخل جدول رو نمیده.

 

 

۳ : محدودیت  DEFAULT در SQL :

 

محدودیت بعدی , محدودیت DEFAULT است. این محدودیت به ما کمک می‌کنه در زمانی که اطلاعات می‌خواد وارد جدول بشه , اگر برای اون فیلد 

مورد  نظر ما مقداری ارسال نشده بود ,  SQL اون مقدار پیش فرضی که ما بهش گفتیم رو برای اون فیلد در نظر بگیره.

به عنوان مثال توی پروژه فروشگاهمون ما می‌تونیم این محدودیت رو برای فیلد STATUS که باعث میشد یک محصول در برنامه نمایش داده بشه یا 

نه قرار بدیم.  وقتی که این محدودیت رو برای STATUS قرار می‌دیم , در زمان ثبت اطلاعات محصول , اگر برای فیلد STATUS مقداری در نظر گرفته 

نشه , SQL مقدار پیش فرضی که ما در نظر گرفته ایم وارد میکنه.

 

به مثال زیر توجه کنید :

 

CREATE TABLE products (
    id int not null primary key AUTO_INCREMENT,
    name varchar(255) not null,
    price decimal(10,4) not null check(price > 0),
    status boolean default 0
);

 

توی تعریف فیلد STATUS من محدودیت DEFAULT رو قرار دادم و بعد از اون مقدار پیش فرض یعنی (۰) قرار دادم و به این معنیه که اگر در زمان 

ثبت اطلاعات برای STATUS مقداری وارد نشده بود , SQL برای  STATUS مقدار صفر رو در نظر بگیره.

 

 

۴ : محدودیت PRIMARY KEY در SQL :

 

محدودیت PRIMARY KEY چند کار برای ما انجام میده :

هر جدول ما باید یک کلید اصلی داشته باشد که این کلید اصلی مقدار تکراری نداره و همیشه دارای یک مقداره. مثلاً اگر دقت کرده باشید در هنگامی 

که جدول PRODUCTS رو تعریف کردیم , برای فیلد ID محدودیت PRIMARY KEY در نظر گرفتیم و این به این معنیه که فیلد ID ما کلید اصلی 

جدولمونه و مقدارش هیچ وقت نمی‌تونه NULL باشه.

 

اگر خیلی ساده بخواهیم کلید اصلی رو معرفی بکنیم , تعریف ساده‌اش این مدلی میشه که هر رکورد داخل جدول ما باید به صورت  منحصر به فرد قابل 

شناسایی باشه.

مثلاً محصول شماره ۱ از محصول شماره ۲ جداست و این محصول شماره ۱ به صورت منحصر به فرد توی جدول قرار داره.

 

ما به داده‌های مجموعه فیلدهامون , رکورد می‌گیم به عنوان مثال به مثال زیر توجه کنید.

 

STATUSPRICENAMEID
۰۱۵.۰۰۰موبایل1
۰۲۰.۰۰۰کامپیوتر2

 

هر کدوم از این ردیف‌های جدول یک رکورد هستند. به عنوان مثال محصول با آیدی شماره ۱  و محصول با آیدی شماره ۲ , هر کدام یک رکورد هستن.

 

 

۵ : محدودیت FOREIGN KEY در SQL :

 

محدودیت FOREIGN KEY  یک کلید خارجی است. لطفا به مثالی که می‌زنم توجه کنید :

 

کلید خارجی یا محدودیت FOREIGN KEY به این صورته که میگه جدول a دارایه اطلاعاتی در جدول b است.

 

لطفاً به جدول‌های categories و products دقت کنید.

 

ما توی جدول products یک فیلد به اسم category_id  داریم که این category_idوصله به  جدول category فیلد ID.

و به این معنیه که مثلاً محصول با آیدی شماره ۲  , category_id اون محصول وصله به یک دسته بندی در جدول category با id شماره ۱

 

جدول دسته بندی ها

create table categories(
	id int not null primary key auto_increment,
	name varchar(255) not null
);

----------------------------------------------------------	
جدول محصولات

CREATE TABLE products (
    id int not null primary key AUTO_INCREMENT,
    category_id int not null,
    name varchar(255) not null,
    price decimal(10,4) not null check(price > 0),
    status boolean default 0
);

 

در زمانی که اطلاعات رو در جداول پروژه ثبت می‌کنیم با این مفهوم شما بیشتر آشنا میشوید و در درس های بعدی , نحوه تعریف آن را یاد 

خواهید گرفت.

 

 

۶ : محدودیت UNIQUE در SQL :

 

محدودیت UNIQUE همونجور که از اسمش مشخصه محدودیتیه که وقتی به یک فیلد اختصاصش میدیم باعث میشه اون فیلد هیچ مقدار تکراری 

نداشته باشه.

مثلاً ما می‌تونیم یک فیلد توی جدول CUSTOMERS داشته باشیم به اسم PHONE که شماره تماس مشتریامون رو ثبت بکنیم. همونجور که می‌دونید 

شماره تماس هر فرد منحصر به فرده.  پس وقتی که ما محدودیت یونیک رو به فیلد PHONE میدیم , باعث میشه SQL نذاره هیچ مقدار تکراری برای 

فیلد PHONE در جدول ثبت بشه.

 

CREATE TABLE CUSTOMERS(
	ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(255) NOT NULL,
	PHONE CHAR(10) NOT NULL UNIQUE
);	

 

 

۷ : محدودیت INDEX در SQL : 

 

محدودیت ایندکس یک مقداری توضیحات خاص خودشو داره ولی تا حدی من به شما توضیح میدم که تا  این سطح کافیه.  در کل 

محدودیت ایندکس وقتی به یک فیلد اختصاص داده می‌شه باعث می‌شه در زمانی که ما اطلاعات جدول رو می‌خونیم , سرعت خوندن اطلاعاتمون 

بالاتر بره تحت شرایط خاص.

 

create index products_status_index on products(status)

در مثال بالا من برای فیلد status در جدول products یک محدودیت ایندکس قرار دادم که در درس های بعدی با این محدودیت بیشتر آشنا میشوید.

 

 

خوب دوستان این ۷ محدودیت یا CONSTRAINTS در SQL بود که من به شما معرفی کردم. بعضی از این محدودیت‌ها شاید برای شما پیچیده یا 

سخت باشه که اصلاً نگران نباشید و در زمانی که بخواهیم داخل جدولمون اطلاعات ثبت بکنیم این محدودیت‌ها رو من به شما باز توضیح میدم که 

بتونید روی این مبحث مسلط‌تر باشید.

اکنون شما دیگه ساختار ساخت جدول رو بهتر و بیشتر درک میکنید و حرفه ای تر میتونید جداول برنامه خودتون رو بسازید.

 

تمرین :

 

جداول پروژه رو از اول تعریف کنید و محدودیت هایی که یاد گرفتید رو بر روی فیلد های جداول پروژه اعمال کنید.

 

اگر احیانا سوال یا مشکلی داشتید می‌تونید در بخش کامنت‌ها با من در ارتباط باشید.

رضا محمدزاده

نویسنده 5 مقاله در برنامه نویسان
  • Sql
  • 21 بازدید
  • 0 تشکر

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

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید

نظرات کاربران

برای درج نظر باید وارد سایت شوید