Escolhendo chaves e tipos
Escolha entre chaves primárias BIGSERIAL e UUID, decida entre TEXT e VARCHAR(n) e selecione o tipo certo para cada coluna.
Escolhendo chaves e tipos é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Escolhendo uma PK
Três opções reais:
- BIGSERIAL — inteiro de 64 bits que aumenta monotonicamente
- UUID — identificador globalmente exclusivo de 128 bits
- Chave natural — um identificador do mundo real (e-mail, ISBN)
Quando BIGSERIAL é a melhor opção
Opção padrão para a maioria das aplicações:
- Pequeno (8 bytes), índice rápido, favorável ao cache
- Monotônico → os dados recentes se agrupam no final do índice
- Legível em URLs (por exemplo,
/posts/42)
Quando UUID é a melhor opção
Escolha UUID quando:
- Você precisar de identificadores globalmente exclusivos (vários datacenters, aplicações que funcionam primeiro offline)
- Não quiser que os identificadores revelem o volume do negócio nas URLs
- Quiser gerar o identificador no lado do cliente antes da inserção
Custo: 16 bytes (contra 8 para BIGINT), e UUIDs v4 aleatorizam as inserções no índice.
Por que chaves naturais são arriscadas
Os e-mails mudam. Os SKUs são renomeados. Códigos de país são divididos. Use uma chave substituta como PK e uma restrição UNIQUE na chave natural.
Tipos de coluna: texto
Para a maioria das colunas de texto:
VARCHAR(n)— quando houver um limite superior rígido (e-mails, códigos)TEXT— para conteúdo livre e longoCITEXT— quando a comparação sempre deverá ignorar maiúsculas e minúsculas (e-mails!)
Tipos de coluna: números
Para colunas numéricas:
BIGINTpara identificadores e contadoresNUMERIC(p, s)para valores monetáriosREAL/DOUBLE PRECISIONsomente para ciência
Tipos de coluna: tempo
Para colunas de tempo:
TIMESTAMPTZpara eventos (padrão)DATEpara dias do calendário (datas de nascimento, feriados)TIMEpara horários do dia sem uma data (horários de funcionamento de lojas)
Booleano versus estado
Se uma coluna tiver mais de dois estados futuros, prefira um texto de estado com CHECK em vez de um booleano:
-- Will probably grow:
status TEXT NOT NULL CHECK (status IN ('draft','published','archived'))
-- vs the trap of "is_published BOOLEAN" when you later need a third state.Restrições essenciais
Toda coluna deve ter:
- O tipo mais restrito que seja adequado
NOT NULL, a menos que NULL tenha significado- Um
DEFAULTse a coluna tiver quase sempre o mesmo valor - Um
CHECKse houver uma regra de domínio - Um índice se for usada em WHERE/JOIN/ORDER
Implicações de armazenamento
Tipos menores = linhas menores = mais linhas por página = melhor taxa de acerto do cache. Trocar TEXT por VARCHAR(20) não economiza espaço (o armazenamento é o mesmo). Trocar BIGINT por INT reduz pela metade a largura da coluna.
Os tipos das chaves estrangeiras devem corresponder
Os tipos das colunas de chaves estrangeiras devem corresponder exatamente ao tipo da PK referenciada:
-- Wrong (silently won't use the index efficiently):
user_id INT REFERENCES users(id) -- where users.id is BIGINT
-- Right:
user_id BIGINT REFERENCES users(id)Resumo
A escolha do tipo faz parte do design.
- BIGSERIAL ou UUID para PK
- NUMERIC para valores monetários
- TIMESTAMPTZ para eventos
- TEXT com CHECK para estados que evoluem
- NOT NULL por padrão
Verificação rápida
Você está armazenando os horários dos eventos de usuários em vários fusos horários. Qual tipo deve usar?
Perguntas Frequentes
A aula “Escolhendo chaves e tipos” é grátis?
Sim — o texto completo de “Escolhendo chaves e tipos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Escolhendo chaves e tipos”?
Escolha entre chaves primárias BIGSERIAL e UUID, decida entre TEXT e VARCHAR(n) e selecione o tipo certo para cada coluna. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Escolhendo chaves e tipos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Modelando um blog: usuários, publicações e comentários
- Escolhendo chaves e tipos
- Índices para consultas comuns
- Populando o banco de dados com dados de teste