Estamos trabalhando em um aplicativo Web, ainda não acessível aos usuários. Meu chefe percebeu que os registros recém-criados recebem um ID acima de 10.000, mesmo que tenhamos apenas menos de 100 registros na tabela. Ela assumiu que, por algum motivo, a interface da web cria mais de 100 vezes mais registros temporários do que os reais (e os exclui) e que isso pode nos levar a ficar fora do alcance alguns meses após o lançamento.
Não acho que ela esteja certa sobre a causa da inflação de identidade (a colega que pode responder a isso está de férias, então não sabemos ao certo), mas vamos supor que sim. Ela disse que odiaria usar uma coluna bigint e que gostaria que parássemos de aumentar automaticamente a coluna ID e escrevesse o código do servidor que escolhe o primeiro número inteiro "não utilizado" e o usa como ID.
Sou um estudante de ciências da computação com pouca experiência prática, desempenhando um papel de desenvolvedor júnior. Ela tem anos de experiência no gerenciamento de todos os bancos de dados de nossa organização e no design da maioria deles. Eu acho que ela está incorreta nesse caso, que um ID grande não é motivo para temer e que imitar a funcionalidade DBMS cheira a um antipadrão. Mas ainda não confio no meu julgamento.
Quais são os argumentos a favor e contra cada posição? Que coisas ruins podem acontecer se usarmos um bigint e quais são os perigos de reinventar a funcionalidade de incremento automático da roda ? Existe uma terceira solução que é melhor que uma? Quais poderiam ser as razões dela para evitar uma inflação dos valores de face do DI? Também estou interessado em ouvir sobre razões pragmáticas - talvez grandes identificações funcionem na teoria, mas causem dores de cabeça na prática?
Não é esperado que o aplicativo processe quantidades muito grandes de dados. Duvido que atingirá 10.000 registros reais nos próximos anos.
Se isso fizer alguma diferença, estamos usando o Microsoft SQL Server. O aplicativo é escrito em C # e usa Linq to SQL.
Atualizar
Obrigado, achei as respostas e comentários existentes interessantes. Mas receio que você tenha entendido mal a minha pergunta, então eles contêm o que eu queria saber.
Não estou realmente preocupado com o verdadeiro motivo das altas identificações. Se não conseguirmos encontrar por conta própria, eu poderia fazer uma pergunta diferente. O que me interessa é entender o processo de decisão neste caso. Para isso, suponha que o aplicativo esteja gravando 1000 registros por dia e excluindo 9999 deles . Tenho quase certeza de que não é esse o caso, mas é nisso que minha chefe acredita quando ela faz seu pedido. Portanto, nessas circunstâncias hipotéticas, quais seriam os prós e os contras de usar bigint ou escrever nosso próprio código que atribuirá IDs (de uma maneira que reutilize as IDs de registros já excluídos, para garantir que não haja lacunas)?
Quanto ao motivo real, suspeito fortemente que isso tenha acontecido porque uma vez escrevemos código para importar dados de outro banco de dados, como prova de conceito de que uma migração posterior pode ser realizada até certo ponto. Acho que meu colega realmente criou vários milhares de registros durante a importação e depois os excluiu. Preciso confirmar se esse foi realmente o caso, mas, se for, não há necessidade de ação.