Chào mừng các bạn đến với bài viết mới của chúng tôi! Trong bài này, chúng ta sẽ tìm hiểu về khái niệm khóa ngoại (Foreign Key) trong MySQL và cách tạo khóa ngoại trong CSDL. Hãy cùng khám phá nhé!
1. Khóa ngoại (Foreign Key) là gì?
Khóa ngoại là mối quan hệ giữa hai bảng trong CSDL, trong đó một bảng sẽ đóng vai trò là bảng cha và bảng còn lại sẽ đóng vai trò là bảng con. Khóa ngoại có thể xuất hiện trong tất cả các hệ quản trị CSDL như MySQL, SQL Server, Oracle, Access, v.v.
Thông thường, chúng ta có hai loại khóa ngoại: khóa ngoại giữa hai bảng và khóa ngoại trỏ đến chính bảng đó. Mối quan hệ giữa các bảng sẽ được thể hiện thông qua khóa ngoại.
Khóa ngoại giữa hai bảng
Xét ví dụ sau đây:
Trong ví dụ này, bảng "customers" và "orders" có một mối quan hệ với nhau. Mỗi order thuộc về một customer cụ thể. Đây là một mối quan hệ 1-n, trong đó một customer có thể có nhiều orders và mỗi order chỉ thuộc về một customer duy nhất. Để thể hiện mối quan hệ này, chúng ta sẽ sử dụng khóa ngoại. Trong trường hợp này, bảng "orders" có trường "customerNumber" trỏ đến khóa chính của bảng "customers".
Khóa ngoại trỏ đến chính bảng đó
Xét ví dụ sau đây:
Trong ví dụ này, khóa ngoại "reportsTo" trỏ đến chính khóa chính của bảng "employees". Mối quan hệ này cho phép mỗi nhân viên có thể là một nhân viên bình thường hoặc là người quản lý của một nhân viên khác. Hằng ngày, nhân viên được quản lý sẽ báo cáo (reportsTo) tới nhân viên quản lý của mình. Đây là một mối quan hệ đệ quy.
2. Cách tạo khóa ngoại (Foreign Key) trong MySQL
Trong MySQL, chúng ta có thể tạo khóa ngoại bằng nhiều cách khác nhau. Dưới đây là một số cách tạo khóa ngoại thông dụng:
Tạo khóa ngoại trong lệnh tạo bảng (CREATE TABLE)
CREATE TABLE orders ( orderID INT AUTO_INCREMENT, customerID INT, orderDate DATE, ... FOREIGN KEY (customerID) REFERENCES customers(customerID) );
Trong ví dụ trên, chúng ta sử dụng từ khóa FOREIGN KEY để tạo khóa ngoại. Trường "customerID" trong bảng "orders" sẽ tham chiếu đến khóa chính "customerID" trong bảng "customers".
Tạo khóa ngoại bằng lệnh ALTER TABLE
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customerID) REFERENCES customers(customerID);
Trong ví dụ trên, chúng ta sử dụng từ khóa CONSTRAINT để đặt tên cho khóa ngoại. Tên của khóa ngoại là "fk_customer".
Tạo khóa ngoại trường hợp tham chiếu chính nó
CREATE TABLE employees ( employeeID INT, reportsTo INT, ... FOREIGN KEY (reportsTo) REFERENCES employees(employeeID) );
Trong ví dụ trên, chúng ta thấy khóa ngoại "reportsTo" trỏ đến chính khóa chính "employeeID" của bảng "employees". Đây là một trường hợp đặc biệt của khóa ngoại.
3. Xóa (Drop) khóa ngoại (Foreign Key)
Để xóa khóa ngoại, chúng ta cần biết tên của khóa ngoại đó. Tuy nhiên, tên của khóa ngoại chỉ tồn tại trong trường hợp ta đã đặt tên cho khóa ngoại khi tạo. Để xóa khóa ngoại, chúng ta sẽ sử dụng cú pháp sau:
ALTER TABLE orders DROP FOREIGN KEY fk_customer;
Lưu ý quan trọng: Bạn chỉ có thể xóa khóa ngoại khi không có bất kỳ bảng con nào tham chiếu đến khóa ngoại đó.
4. Lời kết
Trong bài viết này, chúng ta đã tìm hiểu về khái niệm khóa ngoại (Foreign Key) trong MySQL và cách tạo khóa ngoại trong CSDL. Hy vọng rằng những kiến thức này sẽ giúp bạn hiểu rõ hơn về khóa ngoại và áp dụng chúng vào công việc thực tế.
Chúng tôi sẽ tiếp tục khám phá các lệnh ALTER TABLE trong bài viết tiếp theo. Hẹn gặp lại các bạn trong bài viết đó!