اطلاعات شما فقط در صورتی خوب است که بتوانید به آن اعتماد کنید. از محدودیت های پایگاه داده استفاده کنید تا مطمئن شوید که دقیق، قابل اعتماد است و مدل داده شما را خراب نمی کند.
تعاریف کلیدی
- از محدودیت های SQL برای حفظ یکپارچگی داده ها و اطمینان از یکنواختی در پایگاه داده خود استفاده کنید. محدودیت NOT NULL ستون ها را مجبور می کند که مقادیر NULL را رد کنند.
- برای اطمینان از منحصر به فرد بودن مقادیر در یک ستون یا مجموعه ای از ستون ها، محدودیت های کلید اولیه را اجرا کنید. این کار از تکرار رکوردها در جدول پایگاه داده جلوگیری می کند.
- محدودیت های کلید خارجی روابط بین جداول را ایجاد می کند و از اقداماتی که باعث از بین رفتن پیوندهای بین آنها می شود جلوگیری می کند. آنها اطمینان حاصل می کنند که یک رکورد در جدول فرزند به جدول والد ارجاع می دهد.
پایگاه داده برای بسیاری از برنامهها ضروری است، اما اگر دستورالعملهایی برای ذخیره و پردازش دادهها نداشته باشید، ممکن است کثیف شود.
محدودیت های SQL قوانینی را برای ذخیره داده ها در یک جدول مشخص می کند. هنگامی که محدودیت ها را تنظیم می کنید، اگر بخواهید داده هایی را که این قوانین را نقض می کنند ذخیره کنید، پایگاه داده با خطا مواجه می شود. محدودیت ها به حفظ یکپارچگی داده ها و اطمینان از یکنواختی در پایگاه داده شما کمک می کند.
انواع مختلفی از محدودیت های SQL وجود دارد که می توانید از آنها استفاده کنید. در اینجا برخی از مفیدترین آنها وجود دارد.
1. محدودیت NOT NULL
ستون های پایگاه داده، به طور پیش فرض، داده هایی با مقادیر NULL را می پذیرند. NULL در اصل به این معنی است که هیچ مقداری وجود ندارد. محدودیت NOT NULL یک ستون را مجبور می کند که مقادیر NULL را رد کند.
این محدودیت تضمین می کند که هر ستون باید دارای یک مقدار باشد. شما نمی توانید رکوردی را بدون ارائه داده برای ستون هایی با محدودیت NOT NULL به پایگاه داده اضافه کنید.
جدول مشتریان را مثال بزنید. برخی از جزئیات ضروری در مورد هر مشتری وجود دارد که شما میخواهید در آن ثبت شود، مانند نام آنها. برای اطمینان از ارائه این اطلاعات، محدودیت NOT NULL را به فیلدهای اجباری اضافه کنید.
در اینجا یک مثال نشان می دهد که چگونه می توانید از محدودیت NOT NULL در پایگاه داده PostgreSQL استفاده کنید:
CREATE TABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
اگر سعی کنید یک رکورد مشتری را بدون فیلد Age وارد کنید، پایگاه داده آن را بدون خطا می پذیرد:
INSERT INTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
با این حال، اگر سعی کنید رکوردی را بدون فیلد FirstName وارد کنید، پایگاه داده با یک پیام خطا آن را رد می کند:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. محدودیت کلید اولیه
KEY یک ویژگی منحصر به فرد است که به یک ستون یا فیلد تنظیم می شود که تاپل (یا رکورد) یک جدول را در سیستم های پایگاه داده مشخص می کند. یک محدودیت کلید اولیه منحصر به فرد بودن مقادیر در یک ستون یا مجموعه ای از ستون ها را تضمین می کند. این به عنوان یک شناسه منحصر به فرد در یک ردیف عمل می کند و از رکوردهای تکراری در جدول پایگاه داده جلوگیری می کند.
کلیدهای اصلی حاوی مقادیر منحصر به فرد هستند و نمی توانند حاوی مقادیر NULL باشند. هر جدول پایگاه داده SQL باید فقط یک کلید اصلی داشته باشد. PRIMARY KEY می تواند دارای ستون های تک یا چندگانه باشد.
به عنوان مثال، شما در حال ایجاد یک پایگاه داده از سوابق مشتریان هستید. شما باید هر مشتری شماره شناسایی خود را متفاوت از بقیه وارد کند. می توانید محدودیت کلید اصلی را اعمال کنید تا مطمئن شوید هیچ یک از مشتریان شما شماره شناسه یکسانی ندارند.
کد زیر نشان می دهد که چگونه می توانید یک محدودیت کلید اصلی را در پایگاه داده MySQL معرفی کنید:
CREATE TABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
اگر کاربر رکورد دیگری با شناسه مشابه وارد کند، پایگاه داده آن مقدار را نمی پذیرد. در عوض، خطای تکراری را نشان می دهد. کاربر سعی می کند در مثال زیر دو رکورد با یک شناسه وارد کند:
INSERT INTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERT INTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
پایگاه داده یک پیغام خطا نشان می دهد:
Duplicate entry '1' for key 'PRIMARY'
اما اگر ID مشتری دوم را تغییر دهید، پایگاه داده ورودی را می پذیرد. بنابراین، کلید اصلی تضمین میکند که شناسههای تکراری در سوابق مشتریان شما وجود ندارد.
3. محدودیت کلید خارجی
کلیدهای خارجی روابط بین دو جدول را ایجاد می کنند. میتوانید یک کلید خارجی به یک فیلد/ستون در یک جدول اضافه کنید که به کلید اصلی در جدول دیگر اشاره میکند.
جدول با کلید اصلی جدول والد است، در حالی که جدول با کلید خارجی جدول فرزند است. یک رکورد نمی تواند بدون ارجاع به جدول والد در جدول فرزند وجود داشته باشد.
محدودیت کلید خارجی از اقداماتی که باعث از بین رفتن پیوندهای بین جداول می شود جلوگیری می کند. به عنوان مثال، اگر یک جدول با کلید خارجی به جدول دیگر پیوند داده شود، نمی توانید آن را رها کنید. شما باید هر دو جدول را به یکباره رها کنید.
برخلاف کلید اصلی، میتوانید یک کلید خارجی را کپی کنید و بیش از یک کلید در یک جدول داشته باشید. مقادیر کلید خارجی نیز می تواند NULL باشد. در مثال زیر باید از customer_id برای ایجاد سفارش استفاده کنید.
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
INSERT INTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERT INTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
اگر میخواهید سفارشی را بدون customer_id ایجاد کنید، پایگاه داده یک پیام خطا نشان میدهد:
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. محدودیت منحصر به فرد
این محدودیت تضمین می کند که هیچ دو سطر نمی توانند مقادیر یکسانی برای یک ستون خاص داشته باشند. مانند کلیدهای اولیه، یک محدودیت منحصر به فرد یکپارچگی داده ها را حفظ می کند و از ورودی های تکراری جلوگیری می کند. اگر با یک پایگاه داده با طراحی ضعیف و بدون محدودیت UNIQUE کار می کنید، ممکن است مجبور شوید موارد تکراری را پیدا کرده و حذف کنید.
برخلاف کلیدهای اصلی، میتوانید بسیاری از محدودیتهای منحصر به فرد را در یک جدول داشته باشید. به عنوان مثال، هنگام ایجاد جدول مشتریان، ممکن است بخواهید شناسه ها و شماره تلفن های منحصر به فردی داشته باشید. برای اضافه کردن چنین محدودیتی با استفاده از سرور MySQL، از این نحو استفاده کنید:
CREATE TABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
اگر رکوردهایی را با همان شماره موبایل در پایگاه داده وارد کنید، یک پیغام خطا نشان می دهد.
INSERT INTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERT INTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
پیام خطا چیزی شبیه به این خواهد بود:
Duplicate entry '254000000' for key 'Mobile_No'
این محدودیت منحصر به فرد تضمین می کند که پایگاه داده مشتریانی با همان شناسه یا شماره تلفن همراه نداشته باشد.
5. محدودیت را بررسی کنید
محدودیت CHECK محدوده مقدار قرار داده شده در یک ستون را محدود می کند. افزودن یک محدودیت CHECK بر روی یک ستون فقط مقادیر مشخصی را برای آن ستون مجاز می کند. یکپارچگی داده را با اطمینان از اینکه کاربر فقط داده های معتبر را در جدول درج می کند، اعمال می کند.
محدودیت CHECK باید یک مقدار را برای هر ردیف یا ورودی جدول مشخص شده به عنوان TRUE یا UNKNOWN ارزیابی کند. اگر مقدار FALSE باشد، پایگاه داده یک پیغام خطا نشان می دهد.
به عنوان مثال، در جدول مشتریان، ممکن است بخواهید فقط به مشتریان بالای 18 سال خدمات رسانی کنید. میتوانید یک محدودیت CHECK اضافه کنید تا مطمئن شوید که به مشتریان زیر سن سرویس نمیدهید. همانطور که در کد زیر نشان داده شده است، می توانید محدودیت را در پایگاه داده PostgreSQL اضافه کنید:
CREATE TABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
حالا اگر بخواهید سن مشتری زیر 18 سال را درج کنید:
INSERT INTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
دیتابیس پیغام خطای زیر را نشان می دهد:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
نحوه افزودن و حذف محدودیت های SQL از پایگاه های داده
محدودیت های SQL در سنگ ریخته نمی شوند. با استفاده از عبارت ALTER TABLE می توانید محدودیت هایی را در جداول موجود اضافه یا حذف کنید. عبارت ALTER به شما اجازه می دهد تا با محدودیت هایی مطابق با نیازهای داده خود کار کنید.
بسیاری از محدودیت های SQL وجود دارد که می توانید یاد بگیرید که یک پایگاه داده به دلخواه خود طراحی کنید. می توانید با موارد ذکر شده در این مقاله شروع کنید.