Ở cấp độ logic , email là chìa khóa tự nhiên. Ở cấp độ vật lý , do bạn đang sử dụng cơ sở dữ liệu quan hệ, khóa tự nhiên không phù hợp với khóa chính. Lý do chủ yếu là các vấn đề hiệu suất được đề cập bởi những người khác.
Vì lý do đó, thiết kế có thể được điều chỉnh. Khóa tự nhiên trở thành khóa thay thế (UNIQUE, KHÔNG NULL) và bạn sử dụng khóa thay thế / nhân tạo / kỹ thuật làm khóa chính, có thể là tự động tăng trong trường hợp của bạn.
hệ thống hỏi,
Nếu ai đó muốn thay đổi địa chỉ email của mình thì sao? Bạn sẽ thay đổi tất cả các khóa ngoại?
Đó là những gì tầng dành cho.
Một lý do khác để sử dụng khóa thay thế số làm khóa chính có liên quan đến cách lập chỉ mục hoạt động trong nền tảng của bạn. Ví dụ, trong InnoDB của MySQL, tất cả các chỉ mục trong bảng đều có khóa chính được cấp trước cho chúng, vì vậy bạn muốn PK càng nhỏ càng tốt (đối với các tốc độ và kích thước). Cũng liên quan đến điều này, InnoDB nhanh hơn khi khóa chính được lưu theo trình tự và một chuỗi sẽ không giúp ích gì ở đó.
Một điều khác cần xem xét khi sử dụng một chuỗi làm khóa thay thế, đó là sử dụng hàm băm của chuỗi thực tế mà bạn muốn có thể nhanh hơn, bỏ qua những thứ như chữ hoa và chữ thường của một số chữ cái. (Tôi thực sự đã hạ cánh ở đây trong khi tìm kiếm một tài liệu tham khảo để xác nhận những gì tôi vừa nói; vẫn đang tìm kiếm ...)