Ngược lại, Không, bạn KHÔNG cần phải luôn có PK AutoInc số.
Nếu bạn phân tích dữ liệu của mình một cách cẩn thận, bạn thường xác định các khóa tự nhiên trong dữ liệu. Đây thường là trường hợp khi dữ liệu có ý nghĩa nội tại đối với doanh nghiệp. Đôi khi các PK là đồ tạo tác từ các hệ thống cổ xưa mà người dùng doanh nghiệp sử dụng làm ngôn ngữ thứ hai để mô tả các thuộc tính của hệ thống của họ. Tôi đã thấy số VIN xe được sử dụng làm khóa chính của bảng "Xe" trong hệ thống quản lý đội xe chẳng hạn.
Tuy nhiên, nó có nguồn gốc, NẾU bạn đã có một định danh duy nhất, hãy sử dụng nó. Đừng tạo khóa chính thứ hai, vô nghĩa; nó lãng phí và có thể gây ra lỗi.
Đôi khi bạn có thể sử dụng PK AutoInc để tạo giá trị có ý nghĩa cho khách hàng, ví dụ Số chính sách. Đặt giá trị bắt đầu cho một cái gì đó hợp lý và áp dụng các quy tắc kinh doanh về số không hàng đầu, v.v ... Đây có lẽ là một cách tiếp cận "tốt nhất của cả hai thế giới".
Khi bạn có số lượng nhỏ các giá trị tương đối tĩnh, hãy sử dụng các giá trị có ý nghĩa với người dùng hệ thống. Tại sao nên sử dụng 1,2,3 khi bạn có thể sử dụng L, C, H trong đó L, H và C đại diện cho Cuộc sống, Xe hơi và Nhà trong bối cảnh "Loại chính sách" bảo hiểm hoặc quay lại ví dụ về VIN, về cách sử dụng "TO "Cho Toyota? Tất cả các xe Toyata đều có số VIN bắt đầu "ĐẾN" Đó là một điều ít người dùng cần nhớ, khiến họ ít có khả năng giới thiệu lỗi lập trình và người dùng và thậm chí có thể là đại diện thay thế có thể sử dụng để mô tả đầy đủ trong báo cáo quản lý giúp báo cáo đơn giản hơn để viết và có thể nhanh hơn để tạo ra.
Một sự phát triển hơn nữa của điều này có lẽ là "một cây cầu quá xa" và tôi thường không khuyên bạn nhưng tôi bao gồm nó để hoàn thiện và bạn có thể tìm thấy một cách sử dụng tốt cho nó. Đó là, sử dụng Mô tả làm Khóa chính. Đối với dữ liệu thay đổi nhanh chóng, đây là một sự gớm ghiếc. Đối với dữ liệu rất tĩnh được báo cáo trên All The Time , có thể không. Chỉ cần đề cập đến nó là nó có thể ngồi đó như một khả năng.
Tôi sử dụng PK AutoInc, tôi chỉ cần tham gia vào bộ não của mình và tìm kiếm các lựa chọn thay thế tốt hơn trước. Nghệ thuật thiết kế cơ sở dữ liệu đang làm cho một cái gì đó có ý nghĩa có thể được truy vấn nhanh chóng. Có quá nhiều tham gia cản trở điều này.
EDIT Một trường hợp quan trọng khác mà bạn không cần PK tự động là trường hợp các bảng biểu thị giao điểm của hai bảng khác. Để gắn bó với sự tương tự xe hơi, A Car có 0..n Phụ kiện, Mỗi phụ kiện có thể được tìm thấy trên nhiều chiếc xe. Vì vậy, để thể hiện điều này Bạn tạo một bảng Car_Accessory chứa PK từ Xe hơi và Phụ kiện và các thông tin liên quan khác về các Ngày liên kết, v.v.
Những gì bạn không (thường) cần là một AutoInc PK trên bàn này - nó sẽ chỉ được truy cập qua ô tô "cho tôi biết phụ kiện nào trên chiếc xe này" hoặc từ Phụ kiện "cho bạn biết xe nào có phụ kiện này"