FOREIGN KEY
Trong SQLite, FOREIGN KEY (Khóa ngoại) là một ràng buộc (constraint) được sử dụng để thiết lập mối quan hệ giữa hai bảng. Nó đảm bảo tính toàn vẹn tham chiếu bằng cách yêu cầu giá trị trong một cột của bảng này phải tồn tại trong cột của một bảng khác (thường là Khóa chính - Primary Key).
Nói một cách dễ hiểu hơn là: FOREIGN KEY giúp các bảng "nói chuyện" và "quản lý" lẫn nhau, ngăn chặn việc tạo ra các dữ liệu "mồ côi" (nghĩa là không có parent).
Note: Và FOREIGN KEY có thể trỏ trong chính table đó. Điều này cực kỳ hữu ích khi bạn muốn biểu diễn các dữ liệu có cấu trúc phân cấp (Hierarchy) hoặc cây (Tree).
Ví dụ 1
Giả sử ta muốn có hai bảng: Lớp học và Học sinh. Mỗi học sinh phải thuộc về một lớp nào đó.
- Parent Table: LopHoc (chứa column LopID).
- Child Table: HocSinh (chứa column LopID đóng vai trò là Khóa ngoại).
Ví dụ về cú pháp:
-- Parent Table
CREATE TABLE LopHoc (
LopID INTEGER PRIMARY KEY,
TenLop TEXT NOT NULL
);
-- Child Table
CREATE TABLE HocSinh (
HocSinhID INTEGER PRIMARY KEY,
TenHocSinh TEXT,
LopID INTEGER,
-- Khai báo khóa ngoại ở đây
FOREIGN KEY (LopID) REFERENCES LopHoc(LopID)
);
Ví dụ 2
FOREIGN KEY sẽ trỏ về chính table.
Hãy tưởng tượng một bảng NhanVien. Mỗi nhân viên đều có một người quản lý, và người quản lý đó cũng chính là một nhân viên trong cùng bảng đó. Theo mô hình phân cấp trong công ty
SQL
CREATE TABLE NhanVien (
NhanVienID INTEGER PRIMARY KEY,
Ten TEXT NOT NULL,
ManagerID INTEGER,
-- Khóa ngoại trỏ ngược về cột NhanVienID của chính bảng này
FOREIGN KEY (ManagerID) REFERENCES NhanVien(NhanVienID)
);
All rights reserved