Sequencia Numerica Ate 100 - Atividade Sequencia Numerica Ate 100 - FDPLEARN
Atividade Sequencia Numerica Ate 100 - FDPLEARN

A verdadeira sequencia numerica ate 100 que a maioria das pessoas ignora

Eu passei uma tarde inteira tentando organizar registros de estoque num sistema legado quando percebi que a forma como eu estava usando a sequencia numerica ate 100 estava errada desde o começo. Não era sobre contar de um em um. Era sobre como esses números se relacionavam com chaves estrangeiras, índices de banco de dados e a famosa armadilha do zero-based indexing que todo mundo conhece, mas poucos respeitam na prática. O problema surgiu quando precisei gerar IDs sequenciais para migrar dados de uma tabela com mais de 40 mil linhas. O código que eu tinha era simplesmente range(1, 101) em Python, achando que resolveria tudo. Erro clássico. O verdadeiro desafio veio quando identifiquei que alguns registros já existiam no sistema novo com IDs entre 50 e 89 preenchidos por um processo anterior de teste mal documentado. Se eu simplesmente começasse do 1, ia ter duplicatas. Comecei do 101, certo? Também não. O sistema legado usava um contador de 32 bits com overflow, então os IDs maiores que 2 bilhões precisavam de tratamento especial com decimal.Decimal.

Como construir uma sequencia numerica ate 100 que realmente funciona

Vou mostrar o método que funcionei depois de dois dias de debugging. Primeiro, você precisa entender que gerar números de 1 a 100 é trivial. O que pega todo mundo desprevenido é o gap detection: descobrir quais números faltam e corrigir a sequência sem quebrar integridade referencial. Passo 1: Identificar os gaps existentes

Se você está lidando com uma base de dados SQL, execute esta query antes de qualquer coisa. É mais rápido do que importar tudo para uma planilha e tentar achar manualmente: SELECT n FROM generate_series(1, 100) AS n LEFT JOIN sua_tabela t ON n = t.sequencia WHERE t.sequencia IS NULL;

Isso retorna exatamente os números ausentes. Eu tinha perdido esse passo na primeira vez e gastei três horas achando duplicatas em produção. A query acima custa menos de 200 milissegundos num banco de qualquer tamanho razoável. Passo 2: Calcular o próximo disponível de forma segura

A tentação é usar MAX(sequencia) + 1. Não faça isso. Em cenários de concorrência real, dois processos podem ler o mesmo MAX ao mesmo tempo e gerar o mesmo ID. Use uma SEQUENCE nativa do banco. No PostgreSQL, seria ALTER SEQUENCE sua_seq RESTART WITH 101 se o maior ID atual for 100 e não houver gaps. Simples, mas só funciona se o passo 1 estiver limpo. Passo 3: Preencher gaps de forma não destrutiva

👉 Clique no botão abaixo para saber mais sobre o assunto!

Aqui está o insight que ninguém conta em tutoriais básicos. Se você precisa manter a ordem original e não pode simplesmente reatribuir IDs, use uma coluna temporária para rebatização antes de substituir. Eu fiz assim: Primeiro criei uma tabela espelho com os 100 IDs corretos. Depois rodei um UPDATE em batches de 500 linhas, não de uma vez. Batches grandes travam locks em tabelas grandes por segundos que geram timeout no cliente. 500 linhas levam cerca de 15 milissegundos, praticamente invisível.

Passo 4: Validação pós-migração Confira se todos os 100 números estão presentes e únicos. A query abaixo leva menos de 100ms e evita que você descubra o problema em produção:

SELECT sequencia, COUNT(*) FROM sua_tabela GROUP BY sequencia HAVING COUNT(*) > 1; Se retornar algo, você tem duplicatas e precisa parar antes de subir pra produção. Eu descobri uma duplicata dessa forma e ainda bem que a query existia no meu checklist, senão teria sido uma chamada às 3 da manhã.

Existem situações onde esse método não resolve. Se você trabalha com sistemas distribuídos onde múltiplos nós geram IDs simultaneamente, sequências centrais viram gargalo. Nesses casos,flake ID ou UUID v7 são mais adequados, mas aí você abandona a ideia de uma sequencia numerica ate 100 convencional completamente. Não adianta forçar o quadrado no círculo redondo. Também tem o caso limite onde os IDs precisam seguir um padrão legível, como Ano-Mês-Seq. Aí a contagem simples de 1 a 100 não serve. Você precisa calcular o próximo número baseado no timestamp atual, o que quebra a premissa básica. Nesse cenário específico, eu recomendo manter uma visão materializada com os IDs já formados e apenas referenciá-la, em vez de recomputar tudo a cada request.

O ponto prático que Leva mais tempo do que parece é a validação. Nunca pule o passo 4. Eu vi engenheiros experientes pularem essa etapa e descobrirem problemas semanas depois quando o relatório mensal saiu errado. Cinco minutos de query valem muito mais do que horas de hotfix.