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.
-
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).
-
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ế)).