Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chỉ một khóa từ khóa chính tổng hợp làm khóa ngoại

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ể một PK quan hệ (do đó CK) và một PK KHÔNG ĐÚNG NHẤT có thể thực sự một CK. SQL FK cho một trong những điều này thực sự một FK quan hệ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python có hỗ trợ các câu lệnh chuẩn bị sẵn của MySQL không?

  2. Kết nối MySQL với ứng dụng Spring

  3. Có vấn đề liên kết các tham số với Tuyên bố PDO

  4. MySQL - Loại bỏ giá trị mặc định cho trường Datetime

  5. Làm cách nào để tạo chỉ mục DESC trong MySQL?