Durante uma das últimas lições da universidade (eu sou estudante), o palestrante nos pediu para desenvolver um banco de dados (MySQL Server, se necessário) e um pequeno aplicativo cliente que consumiria o banco de dados como fonte de dados.
Um dos requisitos era que a coluna de identidade (que é a PK em todas as tabelas) deve ser seqüencial, porque é uma boa prática (conforme palavras do professor). Ou seja, quando a linha da tabela é excluída, sua PK deve ser reutilizada nas inserções subsequentes. Tenho conhecimento médio em RDBMS, PKs e colunas de identidade. Pelo que entendi, essa coluna de identidade é apenas uma maneira de permitir que o DB gere automaticamente PKs ao inserir linhas e nada mais. E o valor da coluna de identidade não deve estar relacionado aos atributos da linha de forma alguma (desde que não seja uma chave natural).
Esse requisito (coluna de identidade estritamente sequencial) era suspeito para mim. Tentei perguntar ao professor o que havia de errado se a identidade não fosse seqüencial (com brechas causadas por exclusões), mas obtive uma resposta muito abstrata como "é conveniente para os usuários e útil para administradores de banco de dados que mantêm o banco de dados". Não há exemplos específicos. O argumento "conveniente para os usuários" parece tolo, porque não tem nenhum significado no domínio comercial.
Portanto, estou curioso para saber se esses motivos são reais? Só consigo pensar em um caso em que é necessária a nova propagação da coluna de identidade - quando o espaço de identidade está esgotado. Mas isso é mais um problema de design quando o tipo de coluna de identidade foi escolhido incorretamente, digamos simples em int
vez de bigint
ou uniqueidentifier
quando a tabela contém bilhões de linhas. Suponha que uma coluna de identidade seja um índice em cluster: as falhas na coluna de identidade podem afetar o desempenho do índice? Talvez haja outras razões do mundo real para a nova propagação automática da coluna de identidade após cada exclusão que não conheço?
Desde já, obrigado!