محدودیت های SQL 101: اطمینان از صحت و یکپارچگی داده ها

اعمال محدودیت در نوع دادههایی که به جدول پایگاه داده میروند راهی برای محافظت از آن در برابر حملات مخرب و داشتن دادههای ثابتی است که به الزامات پایبند هستند. هنگام ایجاد یک جدول پایگاه داده، ممکن است بخواهید محدودیت هایی را بر روی نوع داده هایی که در جدول ذخیره می شوند، اعمال کنید.
به عنوان مثال، هنگام ایجاد جدول برای دانش آموزان برای یک موسسه خاص، به هر دانش آموز یک شناسه منحصر به فرد اختصاص داده می شود که به هیچ دانش آموز دیگری آن شناسه اختصاص داده نمی شود. اگر به دانش آموز دیگری شناسه ای که قبلاً اختصاص داده شده است اختصاص داده شود، آن شناسه قابل تخصیص نیست. این به سادگی به این معنی است که هیچ دو دانش آموز نمی توانند شناسه دانشجویی یکسانی داشته باشند.
هدف از اعمال محدودیت ها حفظ یکپارچگی و دقت داده های ذخیره شده است.
هر گونه تلاش برای ذخیره مقادیری که آنچه جدول انتظار دارد را نقض می کند، پایگاه داده با خطا مواجه می شود. آنها به سادگی قوانینی هستند که برای محدود کردن نوع دادههایی که میتوانند در جدول یا ستونها قرار گیرند، استفاده میشوند.
مزایای محدودیت های SQL:
-
حفظ یکپارچگی داده ها
محدودیتهای SQL با اعمال قوانینی که از ورود دادههای نامعتبر یا متناقض جلوگیری میکند، اطمینان میدهند که دادههای ذخیرهشده در پایگاه داده دقیق و سازگار هستند. -
اجتناب از خطاها
با جلوگیری از ورود داده های نامعتبر یا متناقض، محدودیت های SQL به جلوگیری از خطاهایی که ممکن است از داده های نادرست ایجاد شود، کمک می کند. -
بهبود عملکرد
با اعمال قوانین داده در سطح پایگاه داده، محدودیت های SQL می تواند به بهبود عملکرد کوئری های پایگاه داده و کاهش خطر خرابی برنامه کمک کند. -
اجرای قوانین تجاری
محدودیتهای SQL را میتوان برای اجرای قوانین تجاری استفاده کرد و اطمینان حاصل کرد که دادههای وارد شده در پایگاه داده با الزامات سازمان مطابقت دارد و منجر به تصمیمگیری و تجزیه و تحلیل دادههای مؤثرتر میشود.
محدودیت ها به دو دسته تقسیم می شوند
محدودیت های سطح جدول: محدودیت هایی که مستقل از تعریف ستون تعریف می شوند. این نوع محدودیت ها معمولاً در انتهای دستور جدول ایجاد تعریف می شوند.
CREATE TABLE Student (
student_id INT SERIAL,
department_name VARCHAR(100),
college_name VARCHAR(100),
CONSTRAINT student_pk PRIMARY KEY(student_id)
);
محدودیت های سطح ستون: محدودیت های تعریف شده در هنگام تعریف ستون. آنها معمولاً در سطح ستون نوشته می شوند، جایی که ما می خواهیم محدودیت ها اعمال شوند.
CREATE TABLE Students (
student_id INT SERIAL PRIMARY KEY,
department_name VARCHAR(20) NOT NULL,
college_name VARCHAR(50) NOT NULL
);
محدودیت های SQL را می توان در هنگام ایجاد جدول برای اولین بار تعریف کرد، همچنین می توان آنها را با استفاده از دستور ALTER اضافه کرد.
محدودیت های مختلف مورد استفاده در SQL عبارتند از:
- محدودیت کلید اولیه
- نه محدودیت صفر
- محدودیت منحصر به فرد
- محدودیت را بررسی کنید
- محدودیت پیش فرض
- محدودیت کلید خارجی
محدودیت کلید اولیه
محدودیت PRIMARY KEY برای شناسایی منحصر به فرد ردیف ها / رکوردهای ایجاد شده در یک جدول استفاده می شود. یک یا چند ترکیب از ستون ها در یک جدول کلید اصلی را تعریف می کند.
کلیدهای اصلی به گونه ای اعمال می شوند که حاوی مقادیر منحصر به فرد باشند و نمی توانند با مقادیر تهی باشند.
CREATE TABLE Students (
student_id INT SERIAL PRIMARY KEY,
department_name VARCHAR(100),
college_name VARCHAR(200)
);
در اینجا محدودیت کلید اولیه برای student_id تعریف می شود و در سطح ستون تعریف می شود.
با استفاده از دستور ALTER
CREATE TABLE Student (
student_id INT SERIAL,
department_name VARCHAR(100),
college_name VARCHAR(100)
);
ALTER TABLE Student ADD PRIMARY KEY (student_id);
محدودیت های کلید اولیه سطح جدول
CREATE TABLE Student (
student_id INT SERIAL,
department_name VARCHAR(100),
college_name VARCHAR(100),
CONSTRAINT Student_PK PRIMARY KEY (student_id)
);
محدودیت NOT NULL
محدودیت NOT NULL مشخص می کند که مقادیری که باید در یک ستون خاص درج شوند نمی توانند خالی باشند.
CREATE TABLE Student (
student_id INT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL,
college_name VARCHAR(100) NOT NULL
);
در اینجا، ستون های Department_name و college_name در جدول Students مقادیر NULL را نمی پذیرند.
با استفاده از دستور ALTER
CREATE TABLE Student (
student_id INT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL,
college_name VARCHAR(100)
);
ALTER TABLE Student ALTER COLUMN college_name SET NOT NULL;
خطا هنگام درج مقادیر NULL
یک مقدار باید در ستون هایی با محدودیت NOT NULL درج شود. در غیر این صورت، SQL یک خطا ایجاد می کند.
در مثال زیر، SQL یک خطا ایجاد می کند زیرا مقدار college_name داده نشده است.
INSERT INTO Students (student_id, department_name, college_name)
VALUES (1, 'Economics')
محدودیت منحصر به فرد
محدودیت UNIQUE به این معنی است که ستون باید یک مقدار منحصر به فرد داشته باشد. مقادیر تکراری در ستون هایی که محدودیت UNIQUE روی آنها اعمال می شود مجاز نیست.
محدودیتهای منحصربهفرد به مقادیر تهی اجازه میدهند. یعنی مقادیر null را می توان در ستون هایی با محدودیت UNIQUE ذخیره کرد.
CREATE TABLE Student (
student_id INT SERIAL PRIMARY KEY,
department_name VARCHAR(100) NOT NULL,
college_name VARCHAR(100) NOT NULL,
student_email varchar(100) UNIQUE,
);
محدودیت های UNIQUE در سطح جدول
CREATE TABLE Students (
student_id INT PRIMARY KEY,
department_name VARCHAR(20) NOT NULL,
college_name VARCHAR(50) NOT NULL,
student_email varchar(50),
student_phone INT,
CONSTRAINT unique_column UNIQUE (student_email)
);
با استفاده از دستور ALTER
CREATE TABLE Student (
student_id INT PRIMARY KEY,
department_name VARCHAR(20) NOT NULL,
college_name VARCHAR(50) NOT NULL,
student_email varchar(50),
student_phone INT
);
ALTER TABLE Students ADD UNIQUE (student_email);
در بالا، دستور SQL محدودیت UNIQUE را به ستون های student_email در جدول Student موجود اضافه می کند.
-- Add a unique constraint to multiple columns
ALTER TABLE Student ADD UNIQUE (student_email, student_phone);
خطا هنگام درج مقادیر تکراری
اگر بخواهیم مقادیر تکراری را در ستونی با محدودیت UNIQUE وارد کنیم، با خطا مواجه خواهیم شد.
CREATE TABLE Student (
student_id INT SERIAL PRIMARY KEY,
department_name VARCHAR(100) NOT NULL,
college_name VARCHAR(100) NOT NULL,
student_email VARCHAR(100) UNIQUE,
student_phone INT UNIQUE
);
-- Insert values to the Student table
-- student_email has duplicate values
INSERT INTO Student(student_id, department_name,college_name,
student_email, student_phone)
VALUES (1, "Philosophy", "Madonna University", "mymy@gmail.com", 4487),
(2, "Sociology", "Gallas University", "mymy@gmail.com", 9976 );
محدودیت را بررسی کنید
محدودیت CHECK برای اطمینان از اینکه تمام رکوردهای یک ستون خاص از یک قانون خاص پیروی می کنند استفاده می شود.
هنگامی که کاربر می خواهد مقدار را در ستونی با محدودیت CHECK وارد کند، ابتدا مقدار مورد نظر بررسی می شود تا قبل از درج مقدار در آن ستون، اطمینان حاصل شود که شرایط تعریف شده را دارد.
مثال: اگر جدول دارای ستون حقوق و دستمزد تعریف شده باشد، بدون محدودیت چک، کاربر میتواند هر مقداری را که انتخاب میکند، که ممکن است زیر یا بالاتر از محدوده مورد نیاز باشد، درج کند.
اما، اگر کاربر یک محدودیت چک در ستون حقوق اعمال کرده باشد، ستون مقداری را که در الزامات آن تعریف نشده است، نمی پذیرد.
این از درج حقوق زیر یا بالاتر از محدوده حقوق شناخته شده جلوگیری می کند.
CREATE TABLE employees (
employee_id INT NOT NULL PRIMARY KEY,
employee_name VARCHAR(55) NOT NULL,
salary INT NOT NULL CHECK (salary >= 1000 AND salary <= 10000)
);
محدودیت CHECK در سطح جدول
CREATE TABLE employees (
employee_id INT NOT NULL PRIMARY KEY,
employee_name VARCHAR(55) NOT NULL,
salary INT NOT NULL
CONSTRAINT salaryCK CHECK (salary >= 1000 AND salary <= 10000)
);
با استفاده از دستور ALTER
CREATE TABLE employees (
employee_id INT NOT NULL PRIMARY KEY,
employee_name VARCHAR(55) NOT NULL,
salary INT NOT NULL
);
ALTER TABLE employees
ADD CONSTRAINT salaryCK CHECK (salary >= 1000 AND salary <= 10000)
محدودیت پیش فرض
محدودیت DEFAULT برای تنظیم مقدار پیش فرض برای یک ستون زمانی که مقدار NULL باشد استفاده می شود.
CREATE TABLE User (
id NOT NULL SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50),
country VARCHAR(30) NOT NULL DEFAULT 'Belgium'
);
با استفاده از دستور ALTER
CREATE TABLE User (
id NOT NULL PRIMARY KEY SERIAL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50),
country VARCHAR(30) NOT NULL
);
ALTER TABLE User
ALTER COLUMN country SET DEFAULT 'Belgium';
درج مقادیر در جدول
-- Using the insert command, the default value of the country column
-- is set to Belgium.
-- So, when we try to insert a NULL value to the country column,
-- it is replaced with Belgium by default.
INSERT INTO User (id, first_name, last_name, country)
VALUES (1, 'John', 'Agba');
INSERT INTO User (id, first_name, last_name, country)
VALUES (1, 'John', 'Agba', 'Nigeria);
اما وقتی مقدار ستون کشور را تنظیم می کنیم، مقدار پیش فرض نادیده گرفته می شود و مقدار ستون تنظیم می شود.
محدودیت کلید خارجی
محدودیت FOREIGN KEY ستونی است که برای ارجاع به رکوردی که در جدول دیگری وجود دارد استفاده می شود.
به سادگی، این یک ستون در یک جدول است که به کلید اصلی در جدول دیگر اشاره دارد. جدول با کلید خارجی جدول فرزند نامیده می شود در حالی که جدول مرجع با کلید اصلی جدول والد نامیده می شود.
مثال
CREATE TABLE Customer (
customer_id INT PRIMARY KEY,
address VARCHAR(200) NOT NULL,
email varchar(100) UNIQUE
);
CREATE TABLE Orders (
id INT PRIMARY KEY,
product VARCHAR(50),
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);
با استفاده از دستور ALTER
CREATE TABLE Customer (
id INT PRIMARY KEY,
address VARCHAR(200) NOT NULL,
email varchar(100) unique
)
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
product varchar(50),
customer_id
)
ALTER TABLE Orders
ADD FOREIGN KEY (customer_id) REFERENCES Customer(id);
نتیجه
در نتیجه، محدودیتهای SQL یک جنبه ضروری از طراحی پایگاه داده است، که توسعهدهندگان و مدیران را قادر میسازد تا یکپارچگی دادهها را حفظ کنند و اطمینان حاصل کنند که دادههای ذخیره شده در پایگاه داده شما دقیق، سازگار و ایمن هستند.
محدودیت های SQL همچنین با جلوگیری از درج داده های نامعتبر به کاهش خطاها و بهبود عملکرد پایگاه داده کمک می کند.
در طول این مقاله، انواع مختلفی از محدودیتهای SQL، مانند محدودیتهای کلیدهای اولیه، محدودیتهای کلید خارجی، محدودیتهای منحصربهفرد، و محدودیتهای چک را بررسی کردهایم و نمونههایی از نحوه استفاده از آنها در عمل ارائه کردهایم.
پیاده سازی محدودیت های SQL در جدول پایگاه داده بهترین روشی است که می تواند به ایجاد یک سیستم قوی و قابل اعتماد کمک کند.
امیدوارم این مقاله درک روشنی از محدودیتهای SQL و نحوه استفاده از آنها برای ساخت پایگاههای داده بهتر، ایمنتر و کارآمدتر به شما ارائه کرده باشد.
با من ارتباط برقرار کن توییتر یا لینکدین