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

MySQL PRIMARY KEY so với các ràng buộc UNIQUE

Như lời nói đầu, hãy lưu ý rằng Khóa chính không cần phải là một cột duy nhất:nó có thể bao gồm nhiều cột:đây được gọi là Khóa tổng hợp. Cũng lưu ý rằng không phải mọi bảng đều có AUTO_INCREMENT / IDENTITY ở tất cả, và bạn có thể có một UNIQUE ràng buộc trên một cột duy nhất bên trong một khóa tổng hợp.

  1. Không có gì cả - nhưng sẽ không hợp lý khi một DBMS cấm sự dư thừa như vậy hoặc bởi vì bạn cần thêm logic và độ phức tạp để xử lý điều kiện đó, trong khi không có tác hại thực sự nào khi có cả hai (bên cạnh tác động hiệu suất của việc phải duy trì hai chỉ mục).

  2. Như đã nói ở trên:bởi vì chi phí cơ hội phát hiện và ngăn chặn sự dư thừa đó không đáng có.

Một điều khác cần xem xét là định nghĩa khóa chính của một bảng không phải là bất biến và do đó có thể thay đổi. Một bảng có thể đã có các cột với UNIQUE thiết lập ràng buộc và sau đó người thiết kế cơ sở dữ liệu quyết định đưa điều đó vào một định nghĩa mới về khóa chính - sẽ không thân thiện với người dùng nếu yêu cầu loại bỏ ràng buộc cũ trước tiên, đặc biệt nếu các phần khác của hệ thống ứng dụng của họ phụ thuộc vào ràng buộc DUY NHẤT đang ở đó (ví dụ:1:0..1 định nghĩa mối quan hệ).

(Ngoài ra, AUTO_INCREMENT không bao gồm lẫn nhau với UNIQUE hoặc PRIMARY KEY :bạn có thể sử dụng AUTO_INCREMENT với các cột không phải là duy nhất (ví dụ:if AUTO_INCREMENT được thêm vào sau khi một bảng đã chứa dữ liệu) và ngược lại là PRIMARY KEY có thể sử dụng các giá trị duy nhất có nguồn gốc từ nơi khác, chẳng hạn như cột nhận dạng khác làm khóa ngoại (khóa chính tổng hợp có thể chứa khóa ngoại!) hoặc nguồn dữ liệu "tự nhiên", chẳng hạn như sử dụng Số an sinh xã hội của Hoa Kỳ làm Khóa chính (tất nhiên bạn không nên không bao giờ làm điều này trong thực tế)).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu thời gian và ngày tháng trong một hàng bảng MySQL

  2. Lọc dữ liệu để hiển thị từ cơ sở dữ liệu trong javafx

  3. My MySQL trigger không hoạt động, cú pháp đơn giản, không phức tạp

  4. Làm thế nào để viết một API REST?

  5. Thiết kế cơ sở dữ liệu để phân nhóm