Bạn đã từng nghe về khóa ngoại trong SQL Server chưa? Khóa ngoại được dùng để tăng tính tham chiếu trong cơ sở dữ liệu SQL Server. Hãy cùng tìm hiểu về khái niệm này và cách sử dụng trong bài viết sau đây.
Khóa ngoại - Một khái niệm quan trọng trong SQL Server
Khóa ngoại là một cơ chế trong SQL Server được sử dụng để tạo quan hệ giữa các bảng trong cơ sở dữ liệu. Khóa ngoại định nghĩa rằng giá trị trong một bảng phải xuất hiện trong bảng khác. Bảng tham chiếu được gọi là bảng mẹ, trong khi bảng chứa khóa ngoại được gọi là bảng con. Thông thường, khóa ngoại trong bảng con tham chiếu tới khóa chính PRIMARY KEY trong bảng mẹ.
Cú pháp tạo khóa ngoại
Bạn có thể tạo khóa ngoại bằng lệnh CREATE TABLE hoặc lệnh ALTER TABLE. Dưới đây là cú pháp tạo khóa ngoại trong SQL Server:
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 } ]
);
Giải thích các tham số trong cú pháp
- bang_con: Tên của bảng con muốn tạo.
- cot1, cot2: Các cột muốn tạo trong bảng. Bạn có thể chỉ định xem cột có chứa giá trị NULL hay không.
- fk_ten: Tên của ràng buộc khóa ngoại muốn tạo.
- cot_con1, cot_con2, ... cot_con_n: Các cột trong bảng con muốn tham chiếu tới khóa chính trong bảng mẹ.
- bang_me: Tên của bảng mẹ chứa khóa chính được dùng trong bảng con.
- cot_me1, cot_me2, ... cot_me_n: Các cột tạo nên khóa chính trong bảng mẹ.
- ON DELETE: Tùy chọn xử lý khi dữ liệu mẹ bị xóa.
- ON UPDATE: Tùy chọn xử lý khi dữ liệu mẹ được cập nhật.
Các tùy chọn xử lý khóa ngoại
- NO ACTION: Không làm gì với dữ liệu con khi dữ liệu mẹ bị xóa hoặc cập nhật.
- CASCADE: Dữ liệu con bị xóa hoặc cập nhật khi dữ liệu mẹ bị xóa hoặc cập nhật.
- SET NULL: Dữ liệu con được đặt thành NULL khi dữ liệu mẹ bị xóa hoặc cập nhật.
- SET DEFAULT: Dữ liệu con được đặt thành giá trị mặc định khi dữ liệu mẹ bị xóa hoặc cập nhật.
Ví dụ về khóa ngoại trong SQL Server
Hãy xem ví dụ sau để hiểu rõ hơn về cách sử dụng khóa ngoại trong SQL Server:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
category VARCHAR(25)
);
CREATE TABLE inventory (
inventory_id INT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product_id FOREIGN KEY (product_id)
REFERENCES products (product_id)
);
Trong ví dụ này, chúng ta tạo hai bảng "products" và "inventory". Trong bảng "products", "product_id" được sử dụng làm khóa chính và đồng thời cũng là khóa ngoại trong bảng "inventory".
Kết quả:
Tên khóa ràng buộc khóa ngoại trong bảng "inventory" là "fk_inv_product_id". Nó thiết lập quan hệ giữa hai bảng "inventory" và "products" trên cột "product_id".
Chúng ta có thể kiểm tra quan hệ này như sau:
Tạo khóa ngoại sử dụng nhiều trường
Ngoài việc sử dụng một cột, chúng ta cũng có thể tạo khóa ngoại sử dụng nhiều trường. Hãy xem ví dụ sau đây:
CREATE TABLE products2 (
product_name VARCHAR(50) NOT NULL,
location VARCHAR(50) NOT NULL,
category VARCHAR(25),
CONSTRAINT products_pk PRIMARY KEY (product_name, location)
);
CREATE TABLE inventory2 (
inventory_id INT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
location VARCHAR(50) NOT NULL,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product FOREIGN KEY (product_name, location)
REFERENCES products2 (product_name, location)
);
Trong ví dụ này, bảng "products2" có khóa chính là hai cột "product_name" và "location". Do đó, bảng "inventory2" phải có khóa ngoại là hai cột này.
Kết quả:
Qua bài viết này, bạn đã hiểu về khái niệm và cách sử dụng khóa ngoại trong SQL Server. Khóa ngoại giúp tạo quan hệ giữa các bảng và tăng tính tham chiếu trong cơ sở dữ liệu. Hy vọng bạn có thể áp dụng thành công trong các dự án của mình!