2009-12-01 24 views
16

Tôi được một người bạn nói:Có tệ khi sử dụng tên người dùng làm khóa chính trong thiết kế cơ sở dữ liệu?

Bạn sử dụng khóa duy nhất nào? Tôi hy vọng bạn không lưu toàn bộ tên người dùng --- điều này sẽ sử dụng quá nhiều không gian bảng! Chỉ định userID duy nhất cho mỗi (duy nhất) userNAME và lưu userID này (phải được INTEGER UNSIGNED auto_increment hoặc BIGINT UNSIGNED auto_increment). Đừng quên tạo ra một tài liệu tham khảo

FOREIGN KEY (userID) THAM KHẢO usertable (userID) trong tất cả các bảng sử dụng userID.

Tuyên bố trên có đúng không? Tại sao hay tại sao không?

Trả lời

36

Tôi nghĩ anh ấy đúng (vì lý do sai) vì khóa chính không thể thay đổi, nhưng username có thể thay đổi. Vì vậy, bạn nên sử dụng userid vì nó sẽ không thay đổi.

+2

Khóa chính không thể thay đổi. Hoặc nó không phải là "chính". Chìa khóa nên được hệ thống giao, để đảm bảo rằng nó không bao giờ có thể thay đổi. Các trường khác (như tên) có thể có các chỉ mục duy nhất, nhưng không thể là khóa chính - theo định nghĩa. –

+0

Ứng dụng chỉ định một số trường làm khóa chính và do đó không thay đổi. Sau đó, ứng dụng có thể thay đổi, tạo một trường ban đầu được định nghĩa là duy nhất và không thay đổi, để cho phép trùng lặp hoặc thay đổi, đó là điểm ở đây. –

+1

Đó cũng là sự thật cho bảng tham gia? Nói cách khác, tôi có nên tạo ID cho mỗi mục nhập trong bảng kết hợp vì sự kết hợp các khóa chính có thể thay đổi không? –

13

Anh ấy đúng vì lý do sai. Không gian bảng là thứ yếu đối với thực tế là sau này ứng dụng của bạn có thể ủy quyền rằng tên người dùng có thể được thay đổi hoặc thậm chí dừng là duy nhất (bạn có thể hình dung ứng dụng không yêu cầu tên người dùng duy nhất, như Stack Overflow) và do đó ứng dụng của bạn sẽ cần tái cấu trúc và di chuyển dữ liệu thay vì thay đổi ánh sáng trong trường hợp khác (số nguyên PK).

Các vấn đề liên quan