Xin chào các bạn, bài viết hôm nay mình viết về khóa ngoại và các điểm lưu ý khi sử dụng khóa ngoại (Foreign Key) trong sqlserver.
Khóa ngoại là gì? Cách sử dụng và lưu ý khi sử dụng khóa ngoại trong SQL
Khóa ngoại (Foreign Key) trong cơ sở dữ liệu là một ràng buộc (constraint) giữa hai bảng khác nhau. Nó được sử dụng để thiết lập một quan hệ giữa hai bảng, trong đó bảng cha (parent table) có một hoặc nhiều bản ghi có giá trị trong trường khóa chính (primary key) được trích xuất bởi bảng con (child table).
Ràng buộc khóa ngoại đảm bảo tính toàn vẹn dữ liệu giữa các bảng trong cơ sở dữ liệu.
Ví dụ, trong cơ sở dữ liệu bán hàng, bạn có thể có hai bảng: bảng khách hàng (Customers) và bảng đơn hàng (Orders).
Mỗi đơn hàng phải được gán cho một khách hàng cụ thể. Để thiết lập quan hệ giữa hai bảng này, bạn có thể sử dụng một khóa ngoại trên bảng đơn hàng để tham chiếu đến khóa chính trên bảng khách hàng.
Ví dụ về tạo bảng khachhang
với khóa ngoại tham chiếu đến bảng datsan trong SQL Server:
create table khachHang
(
makh varchar(50) primary key,
tenkh nvarchar(254) not null,
cmnd varchar(20),
sdt varchar(11),
diaChi nvarchar(254)
)
go
create table datSan
(
mahd decimal default(0) primary key,
makh varchar(50) not null,
masan varchar(50) not null,
soluong int default(0),
sogio decimal default(0),
thanhtien decimal default(0),
ngaylap datetime default getdate(),
ngaynhan datetime not null,
trangthai int default(0)
---
FOREIGN KEY (makh) REFERENCES khachHang(makh)
)
Trong ví dụ trên, bảng Customers có cột khóa chính là CustomerID, trong khi bảng Orders có cột khóa chính là OrderID và cột CustomerID được sử dụng làm khóa ngoại.
Ràng buộc khóa ngoại được thiết lập bằng cách sử dụng từ khóa FOREIGN KEY trong câu lệnh CREATE TABLE của bảng Orders và tham chiếu đến cột CustomerID trên bảng Customers.
Khi sử dụng khóa ngoại, nếu bạn cố gắng thêm hoặc cập nhật một bản ghi trong bảng con mà không có giá trị tương ứng trong bảng cha, hệ thống sẽ trả về lỗi và từ chối thao tác đó.
Tính toàn vẹn dữ liệu được đảm bảo bởi ràng buộc khóa ngoại giữa hai bảng trong cơ sở dữ liệu.
Khi sử dụng khóa ngoại trong SQL Server, có một số lưu ý quan trọng cần lưu ý:
- Kiểm tra tính toàn vẹn dữ liệu: Ràng buộc khóa ngoại giúp đảm bảo tính toàn vẹn dữ liệu giữa các bảng trong cơ sở dữ liệu. Trước khi sử dụng khóa ngoại, hãy chắc chắn rằng các bảng đã được thiết kế một cách chính xác và không có lỗi dữ liệu.
- Cần có quyền truy cập: Khi sử dụng khóa ngoại, người dùng cần có quyền truy cập vào các bảng được tham chiếu để thực hiện các thao tác trên các bảng này.
- Không thể xóa hoặc cập nhật các bản ghi cha: Khi một bảng có một khóa ngoại tham chiếu đến một bảng khác, bạn không thể xóa hoặc cập nhật các bản ghi trong bảng cha mà không ảnh hưởng đến tính toàn vẹn dữ liệu của bảng con.
- Tối ưu hóa hiệu suất: Nếu sử dụng khóa ngoại trong cơ sở dữ liệu lớn, có thể ảnh hưởng đến hiệu suất của hệ thống. Để tối ưu hóa hiệu suất, hãy sử dụng chỉ số trên các cột được sử dụng trong các ràng buộc khóa ngoại và tối ưu hóa các truy vấn để giảm thiểu số lượng bản ghi được quét.
- Xác định quy tắc xử lý khi xóa hoặc cập nhật bản ghi cha: SQL Server cung cấp các quy tắc xử lý mặc định khi xóa hoặc cập nhật bản ghi trong bảng cha. Bạn có thể xác định quy tắc xử lý này bằng cách sử dụng từ khóa ON DELETE hoặc ON UPDATE trong câu lệnh tạo bảng hoặc sử dụng câu lệnh ALTER TABLE để thay đổi quy tắc xử lý.
Những lưu ý trên giúp bạn sử dụng khóa ngoại một cách hiệu quả và đảm bảo tính toàn vẹn dữ liệu giữa các bảng trong cơ sở dữ liệu.