Foreign Key và Constraints
Khái niệm
Foreign Key (Khóa Ngoại) là một trường hoặc một nhóm các trường trong một bảng được dùng để tạo liên kết giữa dữ liệu trong bảng này với dữ liệu trong bảng khác. Khóa ngoại xác định rằng giá trị của một trường (hoặc nhóm trường) trong bảng này phải tồn tại dưới dạng giá trị của khóa chính trong bảng khác.
Constraint (Ràng Buộc) là các quy tắc áp đặt lên các cột trong bảng để duy trì tính toàn vẹn và tính chính xác của dữ liệu. Các loại ràng buộc khác nhau bao gồm:
- NOT NULL: Bắt buộc giá trị của cột không được để trống.
- UNIQUE: Đảm bảo rằng tất cả các giá trị trong một cột là duy nhất.
- PRIMARY KEY: Kết hợp giữa NOT NULL và UNIQUE. Một bảng chỉ có thể có một khóa chính.
- FOREIGN KEY: Tạo liên kết giữa các bảng bằng cách tham chiếu đến khóa chính của bảng khác.
- CHECK: Đảm bảo rằng các giá trị trong cột thỏa mãn một điều kiện nhất định.
- DEFAULT: Đặt giá trị mặc định cho một cột nếu không có giá trị nào được chỉ định.
Bảng Courses
| CourseID | CourseName |
|---|---|
| 1 | Mathematics |
| 2 | Physics |
| 3 | Chemistry |
Bảng Students
| StudentID | Name | CourseID |
|---|---|---|
| 1 | Alice | 1 |
| 2 | Bob | 2 |
| 3 | Charlie | 3 |
Bảng Employees
| EmployeeID | FirstName | LastName | |
|---|---|---|---|
| 1 | John | Doe | john.doe@example.com |
| 2 | Jane | Smith | jane.smith@example.com |
Bảng Products
| ProductID | ProductName | Price | CreatedDate |
|---|---|---|---|
| 1 | Widget | 10.00 | 2024-07-23 |
| 2 | Gadget | 15.50 | 2024-07-23 |
Khám Phá Foreign Key và Constraints Trong SQL
Bảng Courses
Bảng Courses lưu thông tin về các khóa học.
CREATE TABLE Courses (
CourseID INT PRIMARY KEY, -- Khóa chính
CourseName VARCHAR(50) NOT NULL -- Không được để trống
);
Bảng Students
Bảng Students lưu thông tin về các sinh viên và khóa học mà họ đang theo học.
CREATE TABLE Students (
StudentID INT PRIMARY KEY, -- Khóa chính
Name VARCHAR(50) NOT NULL, -- Không được để trống
CourseID INT, -- Mã khóa học
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) -- Khóa ngoại tham chiếu tới Courses
);
Chèn dữ liệu mẫu
Thêm dữ liệu vào bảng Courses:
INSERT INTO Courses (CourseID, CourseName) VALUES (1, 'Mathematics');
INSERT INTO Courses (CourseID, CourseName) VALUES (2, 'Physics');
INSERT INTO Courses (CourseID, CourseName) VALUES (3, 'Chemistry');
Thêm dữ liệu vào bảng Students:
INSERT INTO Students (StudentID, Name, CourseID) VALUES (1, 'Alice', 1); -- Alice học Mathematics
INSERT INTO Students (StudentID, Name, CourseID) VALUES (2, 'Bob', 2); -- Bob học Physics
INSERT INTO Students (StudentID, Name, CourseID) VALUES (3, 'Charlie', 3); -- Charlie học Chemistry
Ví dụ về Constraints
Bảng Employees với ràng buộc NOT NULL và UNIQUE:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY, -- Khóa chính
FirstName VARCHAR(50) NOT NULL, -- Không được để trống
LastName VARCHAR(50) NOT NULL, -- Không được để trống
Email VARCHAR(100) UNIQUE -- Giá trị duy nhất
);
Bảng Products với ràng buộc CHECK và DEFAULT:
CREATE TABLE Products (
ProductID INT PRIMARY KEY, -- Khóa chính
ProductName VARCHAR(50) NOT NULL, -- Không được để trống
Price DECIMAL(10, 2) CHECK (Price > 0), -- Giá trị phải lớn hơn 0
CreatedDate DATE DEFAULT GETDATE() -- Giá trị mặc định là ngày hiện tại
);
Tóm tắt
- Bảng Courses có một khóa chính CourseID và một cột CourseName không được để trống.
- Bảng Students có một khóa chính StudentID, một cột Name không được để trống, và một khóa ngoại CourseID tham chiếu đến CourseID trong bảng Courses.
- Ví dụ về các ràng buộc khác như NOT NULL, UNIQUE, CHECK, và DEFAULT được áp dụng trong các bảng khác như Employees và Products.
Tính liên kết giữa các bảng
Bảng Courses lưu trữ thông tin về các khóa học. Mỗi khóa học có một CourseID là khóa chính.
Bảng Students lưu trữ thông tin về các sinh viên. Mỗi sinh viên có một StudentID là khóa chính và một CourseID là khóa ngoại tham chiếu đến CourseID trong bảng Courses. Điều này đảm bảo rằng mỗi sinh viên phải đăng ký vào một khóa học có sẵn trong bảng Courses.
Tổng kết
Bảng Courses: Lưu trữ thông tin về các khóa học với CourseID là khóa chính.
Bảng Students: Lưu trữ thông tin về các sinh viên với StudentID là khóa chính và CourseID là khóa ngoại tham chiếu đến Courses.
Bảng Employees: Ví dụ về ràng buộc NOT NULL và UNIQUE.
Bảng Products: Ví dụ về ràng buộc CHECK và DEFAULT.

Join the conversation