Đây là một chút của một cuộc tranh luận tôn giáo. Sở thích cá nhân của tôi là có các khóa chính tổng hợp hơn là các khóa chính tự nhiên nhưng có các đối số tốt ở cả hai bên. Thực tế, miễn là bạn nhất quán và hợp lý, một trong hai cách tiếp cận có thể hoạt động tốt.
Nếu bạn sử dụng khóa tự nhiên, hai nhược điểm chính là sự hiện diện của các phím tổng hợp và làm thay đổi giá trị khóa chính.Nếu bạn có các khóa chính kết hợp, bạn rõ ràng phải có nhiều cột trong mỗi bảng con. Điều đó có thể trở nên khó sử dụng từ góc độ mô hình dữ liệu khi có nhiều mối quan hệ giữa các thực thể. Nhưng nó cũng có thể gây đau buồn cho những người đang phát triển truy vấn-- thật dễ dàng để tạo các truy vấn sử dụng N-1 của N điều kiện tham gia và nhận được kết quả gần như đúng. Nếu bạn có khóa tự nhiên, bạn chắc chắn sẽ gặp phải tình huống mà giá trị khóa tự nhiên thay đổi và sau đó bạn phải gợn sóng thay đổi đó qua nhiều thực thể khác nhau-- phức tạp hơn nhiều so với thay đổi giá trị duy nhất trong bảng. Mặt khác, nếu bạn sử dụng khóa tổng hợp, bạn đang lãng phí dung lượng bằng cách thêm các cột bổ sung, bổ sung thêm chi phí để duy trì chỉ mục bổ sung và bạn đang tăng nguy cơ bạn sẽ nhận được kết quả trùng lặp về chức năng. Thật dễ dàng để quên tạo một ràng buộc duy nhất trên khóa nghiệp vụ hoặc để thấy rằng có một chỉ mục không duy nhất trên kết hợp và chỉ giả định rằng đó là một chỉ mục duy nhất. Tôi thực sự chỉ bị cắn bởi điều này đặc biệt không một vài ngày trước-- Tôi đã lập chỉ mục chìa khóa tự nhiên tổng hợp (với một chỉ số không duy nhất) thay vì tạo ra một ràng buộc duy nhất. Câm lầm sai lầm nhưng một trong đó là tương đối dễ dàng để thực hiện.
Từ quan điểm viết và đặt tên quy ước, tôi cũng có khuynh hướng thích khóa tổng hợp hơn vì bạn biết khi bạn tham gia các bảng mà khóa chính của A sẽ là A_ID và khóa chính của B là sẽ là B_ID. Việc tự ghi nhiều hơn là cố gắng nhớ rằng khóa chính của A là sự kết hợp giữa A_NAME và A_REVISION_NUMBER và khóa chính của B là B_CODE.
Nguồn
2011-02-10 17:20:16
Đôi khi rất khó để xác định câu trả lời - tất cả đều rất tốt :) –
Vâng, chúng là, tôi đồng ý. =) Và cách SO hoạt động là bằng phiếu và chấp nhận câu trả lời. Hãy là một thẩm phán tốt và chọn một thẩm phán hoàn chỉnh hơn. Đi chỗ ngồi của người mới bắt đầu và đọc chúng, và cố gắng tìm ra câu trả lời bạn đã học hoặc có thể học được nhiều nhất. Không ai sẽ giận bạn! ;-) Hơn nữa, mọi người sẽ vui vẻ phấn đấu để giúp bạn bằng cách trả lời các câu hỏi của bạn khi họ có cơ hội tốt hơn để tăng danh tiếng của họ (khi họ chỉ xứng đáng được hưởng). Hãy chăm sóc và có một ngày tốt/đêm! =) –