Đã có rất nhiều câu trả lời hay cho vấn đề này khá nhiều khi nói về "Tùy thuộc vào hoàn cảnh" và tôi không thể thêm bất cứ điều gì vào đó.
Tuy nhiên, một điều chưa được đề cập mà tôi nghĩ cần phải đề cập, đó là bạn không bao giờ nên sử dụng lại các khóa chính đã được tạo bởi một chuỗi hoặc hệ thống AUTO_INCREMENT.
Khi bạn xóa một mục đã được gán một khóa chính bởi một hệ thống như vậy, sẽ có những khoảng trống trong cột khóa chính, còn lại bởi dữ liệu bị xóa. Có một sự cám dỗ lớn để gán lại những khoảng trống đó cho các mục mới khi chúng được thêm vào, hoặc thậm chí tệ hơn, để xáo trộn dữ liệu hiện có để cung cấp ID mới để xóa các khoảng trống, nhưng làm như vậy sẽ làm phát sinh các vấn đề mà bạn không bao giờ phải đối phó nếu bạn chỉ để lại chìa khóa.
Giả sử bạn đang giữ một cơ sở dữ liệu của máy in để quản lý hàng tiêu dùng sắp xếp lại. Máy in 13, một máy in laser cũ, bị hỏng ngoài sửa chữa kinh tế nên bạn vứt nó đi. Trong khi đó, vì một lý do không liên quan, ai đó đã đặt mua một máy in nhiệt mới để thực hiện in mã vạch trong kho và máy in đó sẽ đến trước khi thay thế máy in 13. Quản trị viên đăng nhập máy in mới vào cơ sở dữ liệu và vì 13 hiện đang miễn phí và bạn đang tái chế ID, máy in nhiệt mới được phân bổ 13 làm ID của nó.
Bây giờ ai đó nói với bạn rằng máy in 13 sắp hết mực. Bạn nhớ rằng máy in 13 là máy in laser, vì vậy bạn không cần tìm kiếm nó trong cơ sở dữ liệu và bạn đặt hàng cho hộp mực. Chỉ có bạn thực sự cần thiết để đặt một gói mực nhiệt vì máy in 13 không còn là máy in laser nữa. Khi hộp mực đến, bạn không thể sử dụng nó vì đó là việc đổ mực sai cho máy in, bạn không thể in thêm bất kỳ mã vạch nào và bạn không thể gửi bất kỳ đơn đặt hàng nào đang chờ để được gửi đi.
Thậm chí tệ hơn, điều gì xảy ra nếu bạn xóa máy in 13 và xáo trộn tất cả các máy in đi sau nó để lấp đầy khoảng trống? Máy in 14 (một số ma trận điểm cũ cũ) trở thành máy in 13, máy in 15 trở thành máy in 14, v.v.
Tất cả các máy in đều có nhãn trên đó để chúng có thể được tham chiếu chéo với cơ sở dữ liệu, nhưng bây giờ tất cả các nhãn đã hết hạn. Bạn sẽ phải đi lòng vòng, định vị mọi máy in trong doanh nghiệp (có thể chạy vào hàng trăm!) Và đặt lại tên cho chúng. Đó hầu như không phải là cách sử dụng hiệu quả thời gian. Và đó cũng là một quá trình dễ bị lỗi, và điều gì xảy ra nếu nó không bao giờ được thực hiện? Ai đó gọi để nói rằng máy in 14 đã bị hỏng và cần sửa chữa khẩn cấp, vì vậy bạn tìm nó và thấy rằng máy in 14 là một máy in phun trong Lễ tân. Chỉ vì bạn đã xáo trộn các ID xung quanh, nó thực sự là máy in ma trận điểm cần sửa chữa khẩn cấp. Anh chàng gặp vấn đề bị treo cổ, trong khi nhân viên tiếp tân có một anh chàng hỗ trợ công nghệ, cô không bao giờ gọi đến để sửa máy in bị hỏng.
Bạn nên nghĩ rằng các ID được chỉ định bởi một hệ thống tăng tự động là vĩnh viễn, chúng không thay đổi và không thể được sử dụng lại, ngay cả khi điều mà ID đề cập đến không còn tồn tại. Một số người tuyên bố rằng họ không muốn phải lo lắng về việc hết ID, nhưng ngay cả với hệ thống 32 bit và ID đã ký, vẫn có sẵn 2 tỷ ID. Nếu bạn có thể làm cho cột ID không dấu thì con số này tăng gấp đôi lên 4 tỷ và trên các hệ thống 64 bit, số ID có sẵn theo nghĩa đen lớn hơn số lượng sao trên bầu trời. Bạn sẽ không hết ID.