0Pricing
SQL Academy · Aula

Chaves primárias e unicidade

Entenda chaves primárias, chaves substitutas e naturais, chaves compostas e por que toda linha precisa de um identificador único em que você possa confiar.

Chaves primárias e unicidade é 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.

Por que toda linha precisa de um ID exclusivo

Para atualizar ou excluir uma linha específica com segurança, você precisa conseguir apontar para ela sem ambiguidades.

  • Podem existir dois usuários chamados "Alice Adams"
  • Mas não podem existir dois usuários com id = 42
  • O identificador exclusivo é chamado de chave primária

Declarando uma chave primária

Você marca uma coluna como chave primária ao criar a tabela:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

Chave primária = NOT NULL + UNIQUE

Uma PRIMARY KEY impõe automaticamente:

  • NOT NULL — os valores da chave primária não podem estar ausentes
  • UNIQUE — duas linhas não podem compartilhar o mesmo valor de chave primária

O banco de dados também cria um índice exclusivo na chave primária, portanto as buscas por ID são rápidas.

Chaves substitutas versus naturais

Você tem duas opções para a chave primária:

  • Substituta — um ID sintético gerado pelo banco de dados (BIGSERIAL, UUID). É a opção mais comum em aplicativos modernos.
  • Natural — um identificador do mundo real (e-mail, ISBN). É arriscado: as pessoas mudam de endereço de e-mail.

Boa prática: use um ID substituto e coloque uma restrição UNIQUE na chave natural.

BIGSERIAL: inteiros com incremento automático

No PostgreSQL, BIGSERIAL cria uma coluna de 64 bits com incremento automático, apoiada por uma sequência.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

Chaves primárias UUID

Uma alternativa é um UUID de 128 bits, útil quando os IDs precisam ser exclusivos entre sistemas ou ser gerados no lado do cliente.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

Chaves primárias compostas

Às vezes, o identificador natural é uma combinação de colunas:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

Restrições UNIQUE versus chave primária

Você pode declarar outras colunas como exclusivas sem torná-las a chave primária:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

O que acontece em uma inserção duplicada

Se você tentar inserir uma chave primária duplicada, o banco de dados rejeitará toda a instrução:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

Isso é bom — impede a corrupção silenciosa dos dados.

Consultar linhas pela chave primária é rápido

O índice exclusivo na chave primária fornece buscas O(log n), mesmo em uma escala de bilhões de linhas.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

Não reutilize IDs

Mesmo quando você exclui uma linha, NÃO reutilize sua chave primária. Outras tabelas ou sistemas externos ainda podem fazer referência a ela. Deixe a sequência continuar aumentando — IDs são baratos.

Recapitulação

As chaves primárias fornecem a cada linha uma referência estável e exclusiva.

  • Prefira chaves substitutas (BIGSERIAL ou UUID)
  • Use UNIQUE para chaves naturais que não podem ser duplicadas
  • Chaves primárias compostas representam a regra "este par deve ser exclusivo"

Verificação rápida

O que é imposto implicitamente por uma PRIMARY KEY?

Perguntas Frequentes

A aula “Chaves primárias e unicidade” é grátis?

Sim — o texto completo de “Chaves primárias e unicidade” é 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 “Chaves primárias e unicidade”?

Entenda chaves primárias, chaves substitutas e naturais, chaves compostas e por que toda linha precisa de um identificador único em que você possa confiar. 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 “Chaves primárias e unicidade”?

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

  1. O que é um RDBMS e por que as tabelas são importantes
  2. Chaves primárias e unicidade
  3. NULL: o terceiro valor lógico
  4. Visão geral dos tipos de dados: INT VARCHAR DATE BOOLEAN
← Voltar para SQL Academy