Cả SQL và mô hình quan hệ đều không bị xáo trộn bởi các khóa ngoại tham chiếu khóa tự nhiên. Trong thực tế, tham chiếu các phím tự nhiên thường cải thiện đáng kể hiệu suất. Bạn sẽ ngạc nhiên về mức độ thường xuyên thông tin bạn cần được chứa hoàn toàn trong một khóa tự nhiên; tham chiếu khóa đó giao dịch một phép nối cho một bảng rộng hơn (và do đó làm giảm số lượng hàng bạn có thể lưu trữ trong một trang).
Theo định nghĩa, thông tin bạn cần luôn được chứa hoàn toàn trong khóa tự nhiên của mỗi bảng "tra cứu". (Bảng tra cứu thuật ngữ là không chính thức. Trong mô hình quan hệ, tất cả các bảng chỉ là bảng. Một bảng mã bưu chính của Hoa Kỳ có thể có các hàng trông như thế này: {AK, Alaska}, {AL, Alabama}, {AZ, Arizona} , v.v ... Hầu hết mọi người sẽ gọi đó là bảng tra cứu.)
Trên các hệ thống lớn, không có gì lạ khi tìm thấy các bảng có nhiều hơn một khóa ứng cử viên. Cũng không có gì lạ khi các bảng phục vụ một bộ phận của doanh nghiệp tham chiếu một khóa ứng viên và các bảng phục vụ một phần khác của doanh nghiệp để tham chiếu một khóa ứng viên khác. Đây là một trong những điểm mạnh của mô hình quan hệ và nó là một phần của mô hình quan hệ mà SQL hỗ trợ khá tốt.
Bạn sẽ gặp hai vấn đề khi bạn tham chiếu các khóa tự nhiên trong các bảng cũng có khóa thay thế.
Đầu tiên, bạn sẽ làm mọi người ngạc nhiên. Mặc dù tôi thường vận động mạnh mẽ cho Nguyên tắc bất ngờ tối thiểu , đây là một tình huống mà tôi không làm mọi người ngạc nhiên. Khi vấn đề là các nhà phát triển ngạc nhiên về việc sử dụng hợp lý các khóa ngoại, giải pháp là giáo dục chứ không phải thiết kế lại.
Thứ hai, các ORM thường không được thiết kế xung quanh mô hình quan hệ và đôi khi chúng thể hiện các giả định không phản ánh thực tiễn tốt nhất. (Trên thực tế, chúng dường như thường được thiết kế mà không bao giờ có đầu vào từ một chuyên gia cơ sở dữ liệu.) Yêu cầu số ID trong mỗi bảng là một trong những giả định đó. Một người khác đang giả định rằng ứng dụng ORM "sở hữu" cơ sở dữ liệu. (Vì vậy, nó miễn phí để tạo, thả và đổi tên bảng và cột.)
Tôi đã làm việc trên một hệ thống cơ sở dữ liệu phục vụ dữ liệu cho hàng trăm chương trình ứng dụng được viết bằng ít nhất hai chục ngôn ngữ trong khoảng thời gian 30 năm. Cơ sở dữ liệu đó thuộc về doanh nghiệp, không thuộc ORM.
Một ngã ba giới thiệu các thay đổi phá vỡ nên là một điểm dừng hiển thị.
Tôi đo hiệu suất với cả khóa tự nhiên và khóa thay thế tại một công ty tôi từng làm việc. Có một điểm bùng phát tại đó các khóa thay thế bắt đầu tốt hơn các khóa tự nhiên. (Giả sử không có nỗ lực bổ sung nào để duy trì hiệu suất khóa tự nhiên cao, như phân vùng, chỉ mục một phần, chỉ mục dựa trên chức năng, không gian bảng bổ sung, sử dụng đĩa trạng thái rắn, v.v.) Theo ước tính của tôi cho công ty đó, họ sẽ đạt đến điểm tới hạn đó khoảng năm 2045. Trong khi đó, chúng có hiệu suất tốt hơn với các phím tự nhiên.
Các câu trả lời có liên quan khác: Trong Cơ sở dữ liệu Lược đồ khó hiểu