Trong khi thiết lập DB thì cần phải có các quy tắc để đảm bảo được lượng dữ liệu sẽ được chứa trong DB, bài hôm nay chúng ta cùng tìm hiểu các quy tắc này dựa qua các ràng buộc (constraints),
Nội dung
1. Vai trò của các ràng buộc (constraints) trong SQL
Các ràng buộc (constraints) thường được sử dụng như là quy tắc cho các dữ liệu ở table.
Ràng buộc dùng để giới hạn các dữ liệu đến table. Đảm bảo tính chính xác và rõ ràng của dữ liệu. Nếu có bất kì sự vi phạm nguyên tắc đến các ràng buộc thì thao tác đó sẽ bị huỷ.
Phạm vị của ràng buộc sẽ nằm ở mức độ cột hay table.
[Database] Constraint (Part 1)
[Database] Constraint (Part 2)
2. Các loại ràng buộc (constraints) trong SQL
Ở SQL, bao gồm các loại ràng buộc chung sau đây:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
Cú pháp chung:
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
constraint
....
);
3. Hướng dẫn sử dụng các ràng buộc (constraints)
3.1. NOT NULL
Ý nghĩa
Mặc định, các cột sẽ có giá trị là NULL.
Khi định nghĩa cột là NOT NULL, thì sẽ bảo đảm người dùng không nhập được giá trị NULL đến cột, tức là cột phải có giá trị rõ ràng.
Ví dụ
CREATE TABLE doctor (
doctor_id INT,
first_name VARCHAR(10) NOT NULL,
middle_name VARCHAR(10)
);
Với ví dụ trên, bạn hãy thử INSERT hay UPDATE một record ở doctor với giá trị ở cột first_name là NULL, thì sẽ bị lỗi và không thể thực hiện các thao tác đó.
3.2. UNIQUE
Ý nghĩa
Ràng buộc UNIQUE sẽ đảm bảo giá trị các cột luôn khác nhau.
Với PRIMARY KEY thì cũng đảm bảo việc này, với PRIMARY KEY thì các column mặc định sẽ là khác nhau mà không cần phải khai báo.
Sử dụng UNIQUE sẽ áp dụng nhiều lần ở một table, nhưng với PRIMARY KEY thì không.
Ví dụ
CREATE TABLE doctor (
doctor_id INT,
first_name VARCHAR(10),
middle_name VARCHAR(10),
id_card VARCHAR(15),
UNIQUE (id_card)
);
Từ đó, đảm bảo id_card (căn cước công dân) sẽ không bị trùng lặp giữa các bác sĩ.
3.3. PRIMARY KEY
Ý nghĩa
Đảm bảo tính duy nhất ở mỗi record trong table.
Với primary key, thì nó sẽ là UNIQUE và NOT NULL.
Mỗi table chỉ có một khoá chính, khoá chính có thể chứa 1 hoặc nhiều cột.
Ví dụ
CREATE TABLE doctor (
doctor_id INT PRIMARY KEY,
first_name VARCHAR(10),
middle_name VARCHAR(10)
);
Hoặc có thể dùng cách 2 bên dưới.
CREATE TABLE doctor (
doctor_id INT,
first_name VARCHAR(10),
middle_name VARCHAR(10),
CONSTRAINT pk_doctor PRIMARY KEY (doctor_id)
);
Với cách 2 thì có thể tạo khoá chính với nhiều cột.
3.4. FOREIGN KEY
Ý nghĩa
Đảm bảo dữ liệu luôn được liên kết giữa 2 table, nếu khác thì quá trình INSERT, UPDATE sẽ bị huỷ.
FOREIGN KEY là một cột ở table, nó tham chiếu đến PRIMARY KEY ở table khác.
Ví dụ
CREATE TABLE specialization (
specialization_id INT PRIMARY KEY,
specialization_name VARCHAR(50)
);
CREATE TABLE doctor (
doctor_id INT PRIMARY KEY,
`first_name` VARCHAR (10),
`middle_name` VARCHAR (10),
`last_name` VARCHAR (10),
date_of_birth DATE,
qualification INT,
specialization_id INT,
FOREIGN KEY (specialization_id) REFERENCES specialization(specialization_id)
);
Với cột specialization_id (chuyên khoa) ở table doctor, thì giá trị sẽ chỉ thuộc ở table specialization, nếu cố tình nhập giá trị khác thì sẽ bị lỗi và thao tác bị huỷ bỏ.
3.5. CHECK
Ý nghĩa
Giới hạn phạm vi giá trị ở cột.
Hay nói cách khác, ràng buộc này sẽ giúp kiểm tra giá trị nhập vào phải khớp với điều kiện đã được khai báo với cột đó.
Ví dụ
CREATE TABLE doctor (
doctor_id INT PRIMARY KEY,
first_name VARCHAR(10),
middle_name VARCHAR(10),
qualification INT,
CHECK (qualification >= 0)
);
Với cách khai báo như trên, thì số năm kinh nghiệm (qualification) của doctor phải lớn hơn hoặc bằng 0, nếu nhập số âm sẽ báo lỗi.
3.6. DEFAULT
Ý nghĩa
Dùng để gán giá trị mặc định đến một cột, trong trường hợp người dùng không nhập giá trị cho cột này.
Ví dụ
CREATE TABLE doctor (
doctor_id INT PRIMARY KEY,
first_name VARCHAR(10),
middle_name VARCHAR(10),
qualification INT DEFAULT 1
);
Nếu người dùng không nhập giá trị cho cột qualification, thì giá trị mặc định sẽ là 1.
Kết luận
Để giữ được dữ liệu luôn chuẩn xác, dễ thao tác và bảo trì trong tương lai, thì các ràng buộc (constraints) cũng là một yếu tố khá quan trọng.
TẠO BẢNG bác sĩ (
bác sĩ_id INT,
first_name VARCHAR(10),
tên đệm VARCHAR(10),
Ràng buộc pk_doctor KHÓA CHÍNH (doctor_id)
);
0 Lời bình