Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O que devo usar em vez de sequência para evitar lacunas?


O principal objetivo das sequências é fornecer uma fonte de informações garantidas identificadores exclusivos. Estas são chaves técnicas e, em geral, seu valor real deve ser irrelevante. Quero dizer - você ainda precisa mostrar o número da pasta para o usuário?

Se você está tão incomodado, use NOCACHE. Isso minimizará as lacunas que você está vendo e, desde que você não crie pastas com muita frequência, não notará o impacto no desempenho de não armazenar em cache um punhado de números ociosos. Você ainda pode obter lacunas, se uma transação for revertida ou falhar por qualquer outro motivo, mas elas não devem ser frequentes; se não forem, você tem coisas maiores para se preocupar do que a numeração de suas pastas!

Outras formas de gerar uma série de incrementos monotônicos são complicadas de implementar (dispara sobre tabelas de controle de código) ou não são garantidas como únicas (usando max(id)+1 em um gatilho). Se você quiser usar uma tabela de controle de código - que é uma tabela que rastreia especificamente o último ID de pasta atribuído - você deve dar uma olhada em uma resposta anterior que escrevi que deve como fazer implementar um. A única vantagem de uma tabela de controle de código é que podemos manter contagens com um grupo. Assim, você pode ter uma série de IDs de pasta para cada usuário e incrementá-los independentemente.