Câu trả lời này đưa ra câu hỏi "thêm khóa ngoại vào table3
"có nghĩa là một FK (khóa ngoại) đã được thêm vào table3
tham chiếu đến một trong các cột của PK tổng hợp (khóa chính) của table4
. Trong SQL tiêu chuẩn, một FK có thể tham chiếu đến một tập hợp con thích hợp / nhỏ hơn của một PK.
Câu trả lời khác này
có lẽ lấy "thêm khóa ngoại vào table3
"nghĩa là FK đã được thêm vào table4
với một trong các cột của tham chiếu PK table3
. Tập hợp cột FK trong bảng độc lập với bất kỳ khai báo PK hoặc DUY NHẤT nào trong đó.
Trong SQL tiêu chuẩn, một FK có thể tham chiếu đến một tập hợp con thích hợp / nhỏ hơn của một PK.
Danh sách cột được tham chiếu phải được khai báo CHÍNH hoặc DUY NHẤT. (PRIMARY KEY tạo ra ràng buộc UNIQUE NOT NULL.) (Ràng buộc phải rõ ràng, mặc dù bất kỳ tập hợp cột NOT NULL nào chứa tập hợp UNIQUE phải là duy nhất.)
Thật không may, MySQL cho phép bạn khai báo một FK tham chiếu đến một danh sách cột không phải là DUY NHẤT. Mặc dù FK hoặc một tham chiếu cột không phải NULL như vậy (OK trong SQL tiêu chuẩn) không được triển khai đúng cách và bản thân tài liệu khuyên bạn không nên làm điều đó:
(Bạn có thể suy ngẫm về những thao tác được và không phải là những thao tác được xác định rõ ràng, vì tài liệu không thực sự làm rõ.)
1.8.2.3 Sự khác biệt Khóa Ngoại
13.1.18 TẠO BẢNG Cú pháp
13.1.18.6 Sử dụng FOREIGN Các ràng buộc chính
PS Re quan hệ so với SQL
Trong mô hình quan hệ, FK tham chiếu đến một CK (khóa ứng viên). Superkey là một tập hợp cột duy nhất. CK là một superkey không chứa superkey nhỏ hơn. Một CK có thể được gọi là PK (khóa chính). Khi các giá trị của tập hợp cột phải xuất hiện ở nơi khác, chúng tôi nói rằng có IND (phụ thuộc bao gồm). FK là IND đối với CK. Khi IND là siêu khóa, chúng ta có thể gọi đó là "siêu khóa ngoại".
Một PK
trong SQL hoặc UNIQUE NOT NULL
khai báo một superkey. Nó là một CK khi nó không chứa tập hợp cột nhỏ hơn được khai báo là SQL PK
hoặc UNIQUE NOT NULL
. SQL FK
khai báo một superkey nước ngoài. Vì vậy, một PK SQL thực sự có thể là một PK quan hệ (do đó CK) và một PK KHÔNG ĐÚNG NHẤT có thể thực sự là một CK. SQL FK cho một trong những điều này thực sự là một FK quan hệ.