SQL - Khóa Ngoại: Xây Dựng Mối Quan Hệ Giữa Các Bảng

Xin chào các bạn đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới của Khóa Ngoại trong SQL. Là người dạy máy tính gần gũi của bạn, tôi ở đây để hướng dẫn bạn qua khái niệm quan trọng này, là nền tảng của các cơ sở dữ liệu quan hệ. Hãy chuẩn bị sổ tay ảo của bạn và cùng tôi khám phá!

SQL - Foreign Key

Khóa Ngoại trong SQL: Kết Nối Các Điểm

Hãy tưởng tượng bạn đang tổ chức một thư viện khổng lồ. Bạn có một kệ sách cho sách và một kệ khác cho tác giả. Đó có phải là điều tuyệt vời nếu bạn có thể liên kết mỗi cuốn sách với tác giả của nó mà không cần viết đầy đủ chi tiết của tác giả trên mỗi cuốn sách không? Đó chính xác là điều mà Khóa Ngoại trong SQL làm!

Khóa Ngoại Là Gì?

Khóa Ngoại là một cột (hoặc một bộ các cột) trong một bảng mà tham chiếu đến Khóa Chính trong bảng khác. Nó giống như một cây cầu giữa hai bảng, thiết lập mối quan hệ giữa chúng.

Hãy xem một ví dụ đơn giản:

CREATE TABLE TacGia (
TacGiaID INT PRIMARY KEY,
TenTacGia VARCHAR(100)
);

CREATE TABLE Sach (
SachID INT PRIMARY KEY,
TenSach VARCHAR(200),
TacGiaID INT,
FOREIGN KEY (TacGiaID) REFERENCES TacGia(TacGiaID)
);

Trong ví dụ này, TacGiaID trong bảng Sach là Khóa Ngoại mà tham chiếu đến TacGiaID trong bảng TacGia. Điều này có nghĩa là mỗi cuốn sách được liên kết với một tác giả, nhưng chúng ta không cần phải lặp lại tất cả các chi tiết của tác giả cho mỗi cuốn sách.

Tại Sao Sử Dụng Khóa Ngoại?

  1. Đ完整性 Dữ liệu: Khóa Ngoại đảm bảo rằng bạn không thể thêm một cuốn sách với một tác giả không tồn tại.
  2. Mối Quan Hệ: Chúng cho phép bạn tạo ra các mối quan hệ có ý nghĩa giữa các bảng.
  3. Hiệu Suất: Bạn có thể lưu trữ dữ liệu một lần và tham chiếu nó nhiều lần, tiết kiệm không gian và giảm thiểu trùng lặp.

Đặt Ràng Buộc Khóa Ngoại Trên Cột Hiện Có

Đôi khi, bạn có thể muốn thêm một ràng buộc Khóa Ngoại vào một cột hiện có. Đừng lo lắng, SQL sẽ hỗ trợ bạn! Dưới đây là cách bạn có thể làm điều đó:

ALTER TABLE Sach
ADD CONSTRAINT FK_TacGiaID
FOREIGN KEY (TacGiaID) REFERENCES TacGia(TacGiaID);

Lệnh này thêm một ràng buộc Khóa Ngoại vào cột TacGiaID hiện có trong bảng Sach. Chúng tôi đã đặt tên ràng buộc của chúng tôi là FK_TacGiaID - luôn là một thói quen tốt để đặt tên có ý nghĩa cho các ràng buộc của bạn.

Lời Cảnh Báo

Trước khi thêm một ràng buộc Khóa Ngoại vào một cột hiện có, hãy chắc chắn rằng tất cả các giá trị trong cột đó có giá trị tương ứng trong bảng tham chiếu. Ngược lại, SQL sẽ tạo ra lỗi!

Xóa Khóa Ngoại: Đánh R破了 Không Khó

Đôi khi, mối quan hệ thay đổi và bạn có thể cần xóa bỏ một ràng buộc Khóa Ngoại. Dưới đây là cách bạn có thể làm điều đó:

ALTER TABLE Sach
DROP FOREIGN KEY FK_TacGiaID;

Lệnh này xóa bỏ ràng buộc Khóa Ngoại mà chúng ta đã thêm trước đó. Lưu ý rằng lệnh này không xóa cột hoặc dữ liệu của nó - nó chỉ loại bỏ mối quan hệ giữa các bảng.

Khóa Chính vs Khóa Ngoại: Cặp Đôi Động

Hãy tưởng tượng Khóa Chính và Khóa Ngoại là một cặp đôi động trong thế giới của cơ sở dữ liệu. Cả hai đều có vai trò riêng, nhưng chúng hoạt động tốt nhất khi cùng nhau. Hãy phân tích:

Khóa Chính

  • Độc nhất xác định mỗi bản ghi trong bảng
  • Phải chứa các giá trị Độc nhất và không thể chứa NULL
  • Một bảng chỉ có thể có một Khóa Chính

Khóa Ngoại

  • Tham chiếu đến Khóa Chính trong bảng khác
  • Có thể chứa các giá trị trùng lặp và NULL
  • Một bảng có thể có nhiều Khóa Ngoại

Dưới đây là bảng tóm tắt các khác biệt chính:

Tính Năng Khóa Chính Khóa Ngoại
Độc nhất Phải độc nhất Có thể trùng lặp
NULL Không thể NULL Có thể NULL
Số lượng mỗi bảng Chỉ một Có thể nhiều
Mục Đích Xác định bản ghi trong bảng của nó Tham chiếu đến bản ghi trong bảng khác

Hãy xem chúng trong hành động với một ví dụ phức tạp hơn:

CREATE TABLE KhachHang (
KhachHangID INT PRIMARY KEY,
Ten VARCHAR(100),
Email VARCHAR(100)
);

CREATE TABLE DonHang (
DonHangID INT PRIMARY KEY,
NgayDat DATE,
KhachHangID INT,
FOREIGN KEY (KhachHangID) REFERENCES KhachHang(KhachHangID)
);

CREATE TABLE ChiTietDonHang (
ChiTietDonHangID INT PRIMARY KEY,
DonHangID INT,
TenSanPham VARCHAR(100),
SoLuong INT,
FOREIGN KEY (DonHangID) REFERENCES DonHang(DonHangID)
);

Trong ví dụ này, chúng ta có ba bảng:

  1. KhachHang với KhachHangID là Khóa Chính
  2. DonHang với DonHangID là Khóa Chính và KhachHangID là Khóa Ngoại tham chiếu đến KhachHang
  3. ChiTietDonHang với ChiTietDonHangID là Khóa Chính và DonHangID là Khóa Ngoại tham chiếu đến DonHang

Cấu trúc này cho phép chúng ta theo dõi khách hàng nào đã đặt đơn hàng nào, và các mặt hàng trong mỗi đơn hàng, mà không cần lặp lại thông tin khách hàng hoặc đơn hàng không cần thiết.

Kết Luận: Kết Nối Mọi Thing

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của Khóa Ngoại, từ việc tạo ra đến việc thay đổi và xóa bỏ chúng. Chúng ta đã thấy cách chúng hoạt động cùng với Khóa Chính để tạo ra cấu trúc cơ sở dữ liệu mạnh mẽ và hiệu quả.

Nhớ rằng, Khóa Ngoại giống như những hàng xóm thân thiện trong khu phố cơ sở dữ liệu của bạn - chúng giúp các bảng giao tiếp và làm việc cùng nhau một cách hài hòa. Chúng đảm bảo tính toàn vẹn dữ liệu, tạo ra các mối quan hệ có ý nghĩa và giữ cho cơ sở dữ liệu của bạn hoạt động mượt mà.

Khi bạn tiếp tục hành trình SQL của mình, hãy thử tạo ra các bảng của riêng bạn, thêm các ràng buộc Khóa Ngoại và xem chúng ảnh hưởng như thế nào đến các thao tác dữ liệu. Càng thực hành nhiều, bạn sẽ càng thấy tự nhiên hơn.

Chúc các bạn mã hóa vui vẻ, và hy vọng các truy vấn của bạn luôn trả về kết quả mà bạn mong đợi!

Credits: Image by storyset