Những nội dung quan trọng cần nắm
• Khái niệm: Foreign key là ràng buộc giúp liên kết dữ liệu giữa các bảng và đảm bảo tính toàn vẹn tham chiếu.
• Lợi ích: Giúp chuẩn hóa dữ liệu, hạn chế dữ liệu sai và tăng tính nhất quán cho database.
• Cơ chế hoạt động: Giá trị ở bảng con phải tồn tại trong bảng cha.
• Quản lý foreign key: Có thể tạo hoặc xóa bằng CREATE TABLE hoặc ALTER TABLE.
• Lưu ý: Cần chú ý đến kiểu dữ liệu, NULL, UNIQUE và phạm vi tham chiếu.
Foreign key trong SQL Server là gì?
Foreign key (khóa ngoại) là một ràng buộc trong Microsoft SQL Server dùng để duy trì mối quan hệ giữa các bảng trong cơ sở dữ liệu.
Nói đơn giản:
-
Bảng chứa khóa ngoại → bảng con
-
Bảng được tham chiếu → bảng cha
Giá trị trong cột foreign key của bảng con bắt buộc phải tồn tại trong cột được tham chiếu của bảng cha (thường là PRIMARY KEY hoặc UNIQUE).

Ví dụ:
-
user_id phải tồn tại trong bảng users
Điều này giúp tránh trường hợp đơn hàng tham chiếu đến một user không tồn tại.
Vì sao nên dùng foreign key?
1. Chuẩn hóa dữ liệu
Foreign key giúp tách dữ liệu thành nhiều bảng liên kết với nhau thay vì lưu toàn bộ trong một bảng lớn.
Lợi ích:
2. Ngăn dữ liệu không hợp lệ
Foreign key giúp database tự kiểm tra dữ liệu khi INSERT hoặc UPDATE.
Ví dụ:
-
Không thể thêm
product_id không tồn tại vào bảng order_items
Nhờ vậy, lỗi logic được phát hiện ngay ở tầng database thay vì chờ xử lý ở ứng dụng.
Foreign key hoạt động như thế nào?
Foreign key buộc dữ liệu ở bảng con phải khớp với dữ liệu tồn tại ở bảng cha.
Nếu dữ liệu không hợp lệ:
-
DELETE có thể bị chặn nếu đang có dữ liệu liên quan
Cơ chế này giúp tránh tạo ra orphan record — tức dữ liệu “mồ côi” không còn liên kết hợp lệ.
Hướng dẫn tạo foreign key
1. Tạo foreign key bằng CREATE TABLE
Bạn có thể khai báo khóa ngoại ngay khi tạo bảng:

Thông thường sẽ dùng:
Ngoài ra có thể kết hợp:
để kiểm soát hành vi khi dữ liệu ở bảng cha thay đổi.
2. Tạo foreign key bằng ALTER TABLE
Nếu bảng đã tồn tại, bạn có thể thêm khóa ngoại sau:

Cú pháp phổ biến:
Cách này phù hợp khi cần bổ sung ràng buộc cho database đang hoạt động.
Hướng dẫn xóa foreign key
Để xóa khóa ngoại, dùng:

Việc xóa foreign key thường được dùng trước khi:
-
Định nghĩa lại constraint
Những lưu ý quan trọng khi dùng foreign key
Foreign key có thể tham chiếu UNIQUE
Foreign key không bắt buộc phải tham chiếu PRIMARY KEY mà có thể tham chiếu cột UNIQUE.
Giá trị không NULL phải tồn tại
Nếu cột foreign key chứa giá trị khác NULL thì giá trị đó bắt buộc phải tồn tại ở bảng cha.
Nên dùng NOT NULL với composite key
Với foreign key nhiều cột, nên đặt NOT NULL để đảm bảo tính toàn vẹn đầy đủ.
Chỉ hỗ trợ trong cùng database
Foreign key chỉ hoạt động giữa các bảng trong cùng database trên cùng server.
Có thể tự tham chiếu
Một bảng hoàn toàn có thể tham chiếu chính nó để tạo cấu trúc phân cấp.
Ví dụ:
Kiểu dữ liệu phải tương thích
Các cột tham chiếu cần:
-
Hoặc tương thích với nhau
Nếu không, SQL Server sẽ từ chối tạo constraint.