Khóa ngoại trong SQL Server là một khái niệm quan trọng mà mọi lập trình viên cần biết. Trong bài viết này, chúng ta sẽ cùng tìm hiểu những điều cần biết về khóa ngoại trong SQL Server.
Các khóa chính
Một khóa chính trong SQL Server là một định danh duy nhất để phân biệt một bản ghi với các bản ghi khác. Tạo khóa chính giúp giảm thiểu rủi ro dữ liệu trùng lặp. Mỗi bản ghi trong SQL Server đều cần có một khóa chính.
Dùng khóa chính trong database
Để bao gồm khóa chính trong database SQL Server, bạn chỉ cần thêm nó như một thuộc tính bình thường khi tạo bảng mới. Ví dụ, bảng khách hàng có thể có 4 cột:
- ID chủ sở hữu xe (khóa chính)
- Tên gọi
- Tên họ
- Số điện thoại
Ví dụ:
/* Tạo bảng ghi mới trong bảng khách hàng */
INSERT INTO Customers VALUES ('0004', 'John', 'Brown', '111-999-5555');
Tại sao dùng khóa ngoại trong SQL?
Để bình thường hóa dữ liệu
Khóa ngoại giúp bạn bình thường hóa dữ liệu trong nhiều bảng và giảm dư thừa. Điều đó có nghĩa một database có thể có nhiều bảng liên quan với nhau.
Tránh sai dữ liệu khi chèn
Nếu hai bảng có liên quan với nhau qua một trường, sử dụng khóa ngoại đảm bảo dữ liệu không hợp lệ không được chèn vào trường đó. Điều này giúp loại bỏ lỗi ở cấp database.
Khóa ngoại trong SQL Server là gì?
Khóa ngoại trong SQL Server được sử dụng để tăng tính tham chiếu trong cơ sở dữ liệu. Nghĩa là giá trị trong bảng con phải xuất hiện trong bảng mẹ. Bảng mẹ được gọi là bảng tham chiếu, trong khi bảng chứa khóa ngoại được gọi là bảng con. Khóa ngoại trong bảng con thường tham chiếu tới khóa chính trong bảng mẹ.
Tạo khóa ngoại bằng lệnh CREATE TABLE
Cú pháp:
CREATE TABLE bang_con (
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],
…
CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
Ví dụ:
CREATE TABLE sanpham (
id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho (
id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham)
);
Tạo khóa ngoại bằng lệnh ALTER TABLE
Cú pháp:
ALTER TABLE bang_con ADD CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n);
Ví dụ:
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham);
Những hạn chế và giới hạn khi tạo mối quan hệ khóa ngoại
- Ràng buộc khóa ngoại không chỉ được liên kết với một ràng buộc khóa chính trong bảng khác. Khóa ngoại cũng có thể được liên kết với các cột của một ràng buộc UNIQUE trong bảng khác.
- Giá trị khóa ngoại không được là NULL và phải tồn tại trong cột được tham chiếu. Điều này giúp đảm bảo tính nhất quán của dữ liệu.
- Ràng buộc khóa ngoại chỉ có thể tham chiếu tới các bảng trong cùng database trên cùng server.
- Ràng buộc khóa ngoại có thể tham chiếu tới cột khác trong cùng bảng, và được tham chiếu dưới dạng tự tham chiếu.
- Ràng buộc khóa ngoại ở cấp độ cột có thể chỉ liệt kê một cột tham chiếu. Các cột này phải có cùng kiểu dữ liệu với cột ràng buộc được xác định.
- Ràng buộc khóa ngoại ở cấp độ bảng phải có cùng số cột tham chiếu và kiểu dữ liệu với các cột tương ứng trong danh sách cột.
Đó là những điều cơ bản về khóa ngoại trong SQL Server mà mọi lập trình viên cần biết. Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về khái niệm và cách sử dụng khóa ngoại trong SQL Server.
Bài trước: LOCAL TEMPORARY TABLE trong SQL Server Bài sau: Khóa ngoại Foreign Key (Cascade Delete) trong SQL Server