Trong bài viết này, chúng ta sẽ tìm hiểu về các ràng buộc NGOẠI KHÓA và cách xác định ràng buộc NGOẠI KHÓA để xây dựng mối quan hệ giữa hai bảng.
Trong Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS), NGOẠI KHÓA là một trường hoặc nhiều trường được sử dụng để xây dựng mối quan hệ giữa hai bảng hoặc nối hai bảng.
- FOREIGN KEY còn được gọi là khóa tham chiếu trong RDBMS
- Sử dụng ràng buộc NGOẠI KHÓA giữa hai bảng, chúng tôi xác định mối quan hệ cha-con giữa hai bảng.
- Trường xác định các ràng buộc CHÍNH CHÍNH trong bảng được gọi là bảng mẹ, trong khi trường tương tự xác định các ràng buộc NGOẠI KHÓA trong một bảng khác được gọi là bảng con.
- Có thể chỉ có một TỪ KHÓA CHÍNH trong bảng, nhưng không có giới hạn xác định cho TỪ KHÓA NGOẠI TỆ. Chúng ta có thể có một hoặc nhiều TỪ KHÓA NGOẠI TỆ trên bàn.
- Chúng tôi có thể xác định các ràng buộc NGOẠI KHÓA trong khi tạo bảng hoặc xác định các ràng buộc NGOẠI KHÓA trên bảng đã có.
Hãy lấy một ví dụ để hiểu và tìm hiểu về các ràng buộc NGOẠI KHÓA.
Ví dụ:
Ở đây, chúng ta có hai bảng một là bảng Khóa học và bảng thứ hai là bảng Sinh viên:
Các sinh viên lựa chọn các khóa học. Ví dụ về ràng buộc NGOẠI KHÓA sau đây được xác định trên một trường.
Bảng số một:Bảng học sinh
Student_Id | First_Name | Last_Name | Email_Id | Thành phố |
101 | Kareena | Sayyed | [email protected] | Hyderabad |
102 | Anmol | Temani | [email protected] | Jalgaon |
103 | Gây chết người | Patel | [email protected] | Mumbai |
104 | Sakshi | Máy hút mùi | [email protected] | Pune |
105 | Suresh | Kohli | [email protected] | Hyderabad |
Bảng số hai:Bảng khóa học
Course_Id | Course_Name | Student_Id |
C101 | Java | 101 |
C102 | SQL | 102 |
C103 | SOA | Không có |
C104 | SAP | 104 |
C105 | MuleSoft | 103 |
C101 | Java | 105 |
Trong bảng Student, trường Student_Id là KHÓA CHÍNH và trong bảng Course, Student_Id là NGOẠI KHÓA.
FOREIGN KEY
ràng buộc ngăn không cho dữ liệu không hợp lệ được chèn vào cột khóa ngoại vì nó phải là một trong những giá trị có trong bảng mẹ.
Xác định Ràng buộc NGOẠI KHÓA trên TẠO BẢNG
Ví dụ sau xác định một TỪ KHÓA NGOẠI TỆ trên bảng Khóa học.
Đầu tiên, chúng tôi đã tạo bảng Sinh viên với các trường sau:
CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50), City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));
Ví dụ sau đây cho thấy cách xác định các ràng buộc NGOẠI KHÓA trên bảng khác.
Khóa học tên bảng:
CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));
Trong bảng Khóa học, chúng tôi không xác định bất kỳ TỪ KHÓA CHÍNH. Chỉ cần xác định các ràng buộc NGOẠI KHÓA trên Student_Id.
Ví dụ về ràng buộc FOREIGN KEY sau đây được xác định trên nhiều trường.
Giả sử chúng ta có ba bảng, một bảng là bảng Gói, bảng thứ hai là bảng Dữ liệu và bảng thứ ba là bảng Talk_time:
Bảng 1:Gói:
Package_Id | Data_Id | Talktime_Id |
P1001 | D1003 | T1001 |
P1002 | D1001 | T1002 |
P1003 | D1002 | T1003 |
P1004 | D1003 | T1004 |
P1005 | D1004 | T1005 |
Bảng 2:Dữ liệu:
Data_Id | Data_Limit | Data_Price |
D1001 | 5 | 120 |
D1002 | 3 | 75 |
D1003 | 6 | 150 |
D1004 | 10 | 240 |
D1005 | 15 | 320 |
Bảng 3:Talk_Time:
Talk_Time_Id | Talk_Time _Limit | Talk_Time _Price |
T1001 | 120 | 130 |
T1002 | 70 | 105 |
T1003 | 60 | 90 |
T1004 | 200 | 220 |
T1005 | 150 | 170 |
Trong bảng Talk_Time, Talk_Time_Id là CHÌA KHÓA CHÍNH.
Trong bảng Dữ liệu, Data_Id là TỪ KHÓA CHÍNH.
Trong khi trong bảng Gói, Talk_Time_Id và Data_Id là các khóa FOREIGN
Bảng số một:Dữ liệu:
CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));
Bảng số hai:Talk_Time:
CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));
Bảng số ba:Gói:
CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));
Ràng buộc NGOẠI KHÓA sử dụng BẢNG ALTER:
Giả sử chúng ta đã tạo bảng và muốn xác định các ràng buộc NGOẠI KHÓA trên trường. Chúng tôi sẽ sử dụng truy vấn ALTER TABLE để thêm các ràng buộc NGOẠI KHÓA trong trường hợp như vậy.
Truy vấn sau được sử dụng để thêm các ràng buộc NGOẠI KHÓA trên trường Student_Id.
ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);
ADD Keyword được sử dụng sau tên bảng để thêm các ràng buộc NGOẠI KHÓA vào bảng đã tồn tại.
DROP ràng buộc NGOẠI KHÓA khỏi bảng
Sử dụng truy vấn sau để xóa ràng buộc NGOẠI KHÓA khỏi bảng.
ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;
Từ khóa Drop được sử dụng để xóa các ràng buộc FOREIGN KEY khỏi trường Student_Id.
course_ibfk_1 là tên ràng buộc khóa ngoài.
Chúng ta có thể có giá trị null trong trường ràng buộc NGOẠI KHÓA. Chúng tôi có thể có các giá trị trùng lặp trong trường ràng buộc NGOẠI KHÓA.