✨ Giới thiệu
SQL (Structured Query Language) là ngôn ngữ tiêu chuẩn dùng để thao tác và quản lý cơ sở dữ liệu quan hệ (RDBMS). Một trong những khái niệm quan trọng khi thiết kế cơ sở dữ liệu chính là ràng buộc (constraints) – công cụ giúp đảm bảo tính toàn vẹn và hợp lệ của dữ liệu.
Trong bài viết này, chúng ta sẽ cùng khám phá:
-
Các loại ràng buộc dữ liệu (constraints) phổ biến trong SQL.
-
Các kiểu dữ liệu thường dùng.
-
Những lưu ý khi làm việc với SQL Server.
📌 Constraints là gì?
Constraints là những quy tắc được áp dụng lên cột (hoặc nhiều cột) trong bảng, nhằm giới hạn giá trị dữ liệu được phép nhập vào. Mục tiêu là đảm bảo rằng dữ liệu trong bảng luôn đúng, hợp lệ, và nhất quán.
🧭 Bảng Tổng Hợp Ràng Buộc và Kiểu Dữ Liệu trong SQL
| Ràng buộc / Kiểu dữ liệu | Tên | Ý nghĩa | Trong SQL Server |
|---|---|---|---|
UNIQUE |
Duy nhất | Không trùng lặp, được phép null | ✔️ |
PRIMARY KEY |
Khóa chính | Không trùng, không null, định danh duy nhất mỗi dòng | ✔️ |
FOREIGN KEY |
Khóa ngoại | Kết nối với khóa chính bảng khác, cho phép null | ✔️ |
NOT NULL |
Khác null | Không được để trống dữ liệu | ✔️ |
UNSIGNED |
Không dấu âm | Không được âm (số dương)«/small> | ❌ Không hỗ trợ trong SQL Server |
INT |
Số nguyên | VD: 10, 20, 30 | ✔️ |
FLOAT |
Số thực | VD: 1.5, 2.9 | ✔️ |
VARCHAR(n) |
Chuỗi động | Tối đa n ký tự; tự động co giãn bộ nhớ | ✔️ NVARCHAR(n) cho chuỗi có dấu |
CHAR(n) |
Chuỗi cố định | Cố định n ký tự, chiếm đủ bộ nhớ | ✔️ NCHAR(n) cho chuỗi có dấu |
BOOLEAN |
Đúng/Sai | 0 hoặc 1 | ✔️ BIT thay cho BOOLEAN |
TEXT |
Chuỗi dài | Không giới hạn ký tự, dùng cho văn bản dài | ✔️ NTEXT cho chuỗi có dấu |
DATE |
Ngày | VD: 2025-04-08 |
✔️ |
DATETIME |
Ngày + giờ | VD: 2025-04-08 23:59:59 |
✔️ |
TIME |
Giờ:phút:giây | VD: 23:59:59 |
✔️ |
AUTO_INCREMENT |
Tự động tăng | Tăng tự động mỗi khi thêm dòng | ✔️ Dùng IDENTITY trong SQL Server |
CHECK |
Kiểm tra điều kiện | Giới hạn giá trị hợp lệ | ✔️ |
DEFAULT |
Giá trị mặc định | Gán giá trị nếu không nhập | ✔️ |
🔑 Các Ràng Buộc Phổ Biến Trong SQL – Giải Thích Chi Tiết
1. PRIMARY KEY – Khóa chính
-
Dùng để xác định duy nhất mỗi dòng.
-
Không được trùng và không được NULL.
CREATE TABLE SinhVien (
ma_sinh_vien INT PRIMARY KEY,
ho_ten NVARCHAR(100)
);
2. UNIQUE – Duy nhất
-
Đảm bảo không có giá trị trùng lặp.
-
Có thể dùng cho cột chứa NULL.
CREATE TABLE NhanVien (
ma_nv INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
3. FOREIGN KEY – Khóa ngoại
-
Tạo mối quan hệ giữa hai bảng.
-
Giúp đảm bảo dữ liệu liên kết hợp lệ.
CREATE TABLE Lop (
ma_lop INT PRIMARY KEY,
ten_lop NVARCHAR(50)
);
CREATE TABLE SinhVien (
ma_sinh_vien INT PRIMARY KEY,
ma_lop INT,
FOREIGN KEY (ma_lop) REFERENCES Lop(ma_lop)
);
4. NOT NULL – Không được null
CREATE TABLE DonHang (
ma_don INT PRIMARY KEY,
ngay_dat DATE NOT NULL
);
5. CHECK – Kiểm tra điều kiện
- Dùng để giới hạn giá trị được nhập vào.
CREATE TABLE Diem (
ma_sv INT,
diem FLOAT CHECK (diem >= 0 AND diem <= 10)
);
CREATE TABLE SinhVien (
ten_sinh_vien NVARCHAR(50) CHECK (LEN(ten_sinh_vien) > 5)
);
6. DEFAULT – Giá trị mặc định
CREATE TABLE Diem (
ma_sinh_vien INT PRIMARY KEY,
diem FLOAT DEFAULT 5
);
-- Chèn dữ liệu không có điểm
INSERT INTO Diem (ma_sinh_vien) VALUES (1);
-- => điểm = 5
7. AUTO_INCREMENT (MySQL) / IDENTITY (SQL Server)
CREATE TABLE HoaDon (
ma_hd INT PRIMARY KEY IDENTITY(1,1),
ngay_lap DATE
);
📚 Lưu ý khi dùng SQL Server
| Tính năng | Tên gọi SQL Server |
|---|---|
BOOLEAN |
BIT |
TEXT |
NTEXT |
VARCHAR có dấu |
NVARCHAR |
CHAR có dấu |
NCHAR |
AUTO_INCREMENT |
IDENTITY |
Không hỗ trợ UNSIGNED |
❌ |
🧠 Kết luận
Việc hiểu rõ constraints và kiểu dữ liệu không chỉ giúp bạn viết được cấu trúc bảng vững chắc, mà còn ngăn chặn sai sót dữ liệu ngay từ đầu. Đây là bước không thể thiếu trong bất kỳ hệ thống quản lý cơ sở dữ liệu nào.
💡 Hãy thực hành bằng cách tạo bảng có đầy đủ ràng buộc và thử chèn dữ liệu để kiểm chứng!