فصل بیست و سوم :
CONSTRAINTS و یا قید ها در SQLite
قید ها قوانینی هستند که به ستونهای جداول تحمیل میشوند . قید ها برای محدود کدن نوع دیتایی که می توند در یک جدول ذخیره شود ، استفاده میشوند و این مساله دقت و قابلیت اطمینان اطلاعات جداول را بالا میبرد.
قید ها می توانند در سطح ستونها و یا در سطح جداول اعمال شوند. قید های در سطح ستونها فقط بروی ان ستون مورد نظر عمل کرده درصورتیکه قید های در سطح جدول به کل جدول اعمال میشوند. رایج ترین قید ها عبارتند از :
NOT NULL Constraint
تضمین میکند که یک ستون نتواند مقدار null را داشته باشد (یعنی حتما مقدار دهی شود)
DEFAULT Constraint
هنگامی که برای یک ستون مقداری را در نظر نمی گیریم مقدار پیشفرضی را در آن درج میکند
UNIQUE Constraint
تضمین میکند که تمامی مقادیر موجود در این ستون در جدول منحصر به فرد باشند (دوستون با مقدار یکسان در جدول نباشند)
PRIMARY Key
بطور منحصر به فردی یک رکورد را در یک جدول مشخص میکند.
CHECK Constraint
تضمین میکند که تمامی مقادیر موجود در یک ستون شروط خاصی را تامین کنند (مثلا نشود در یک ستون عدددی بیش از 100 را درج کرد)
NOT NULL Constraint
بطور پیشفرض یک ستون جدول می تواند مقدار null را در خود داشته باشد اگر بخوواهیم که یک ستون حتما دارای مقدار بااشد و کاربر نتواند آنرا null رها کند از این قید استفاده میکنیم
نکته : null مقدار نامشخص است . مقداری که هنوز نمی دانیم چیست. و با رشته خالی "" و یا 0 فرق دارد.
مثال : در مثال ذیل جدولی را میسازیم که 3 ستون ان نمی توانند مقدار null داشته باشند:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
پس وقتی رکوردی در این جدول وجود دارد حتما سه فیلد ID , NAME و AGE آن دارای مقدار هستند.
DEFAULT Constraint
این قید هنگامی که رکوردی را بوسیله دستور INSERT INTO در جدول درج میکینم. اگر ستون خاصی را در دستور insert درج نکرده باشیم به ان ستون که این قید بروی ان فعال شده است مقدار پیشرضی را اختصاص میدهد.
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);
در جدول بالا اگر در هنگام درج یک رکورد COMPANY مقداری را به فیلد SALARY اختصاص ندهیم بطور اتوماتیک مقدار 50000 در آن ستون درج خواهد شد.
UNIQUE Constraint
هنگامی که این قید در ستونی تنظیم میشود هیچ دو رکوردی در جدول نم تونادد مقدار تکراری در ان ستون داشته باشند .فرض کنید جدولی از پرسنل داریم و بروی فیلد کد ملی انها یک unique constraint تنظیم میکنیم . تا نتوان بطور تصادفی دو نفر را بایک کد ملی در جدول ذخیره کرد و یا از ذخیره تکراری دو نفر جلوگیری کنیم.
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL UNIQUE,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);
در مثال بالا هیچ دوشرکتی در جدول ما نمی توانند فیلد Age یکسان داشته باشند.
PRIMARY KEY Constraint
کلید اصلی یا primary key و یا به اختصار PK بطور منحصر به فردی میتواند یک رکورد را در یک جدول مشخص کند. فرض کنید در مثال جدول پرسنل می خواهیم ستونی داشته باشیم که به کمک ان بتوان اطلاعات یک فرد را از جدول بیرون کشید. حال میتوانیم مقداری مثا کد ملی را بعنوان کلید اصلی در نظر بگیریم ون بای هر نفر مقداری منحصر به فرد است.
هر جدول نمی تواند بیش از یک کلید اصلی داشته باشد. ولیکن می تواند ستونهای Unique زیادی داشت باشد. یک کلید اصلی تما نباید شامل یک ستون باشد . می توانم کلید اصلی را داشته باشیم که شامل چند ستون باشد و مجموع قادیر ان چند ستون یک کلید اصلی و منحصر به فرد را بسازد. اگر کلید اصلی شامل چند ستون باشد آنرا composite key و یا کلید مرکب نامند .
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
در جدول بالا یک کلید اصل بروی ستون ID ما تنظیم شده است . یعنی بکمک ستون ID می تواند یک company را بطور منحصر به فردی مشخص کرد و از این جدول بیرون کشید.
CHECK Constraint
بوسیله این قید می توانیم شرط هایی را وضع کنیم که یک دیتا هنگام درج در یک ستون باید با ان شرط ها سازگار باش مثلا می خواهیم مقدار ستون Age ما بیشتر از 100 نباشد. و اگر بود رکورد در جدول درج نمی شودو خطایی مبنی بر عدم رعایت این قید بروز میکند.
CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);
در مثال بالا ما نمی توانیم رکوردی در جدول داشته باشیم که مقدار ستون SALARY ان صفر و یا کمتر از صفر باشد.
نکته : SQLite محدودیت ها زیادی بروی ALTER TABLE دارد.بوسیله این دستو می تون نام جدولی را عوض کردو یا ستونی را به جدول موجود افزود ولیکن نمی توان نام یک ستون را عوض کرد و یا یک ستون را حذف نمود و یا یک قید را به جدولی اضافه و یا از ان حذف کرد.
مفاهیم و موضوعات این فصل عبارتند از :
-
NOT NULL Constraint در SQLite
-
DEFAULT Constraint در SQLite
-
UNIQUE Constraint در SQLite
-
PRIMARY Key Constraint در SQLite
-
CHECK Constraint در SQLite