Pular para o conteúdo principal

Questão de Banco de Dados — Modelagem e Mapeamento ER-relacional — FUNDATEC 2025

Banco de DadosModelagem e Mapeamento ER-relacional
Código
qa699106
Banca
FUNDATEC
Órgão
BRDE
Ano
2025
Cargo
Ana Sist ( )
Ao projetar a tabela Clientes para um sistema bancário, um administrador de banco de dados deve definir o tipo da coluna CPF. Considerando os princípios de integridade e performance, qual é a melhor escolha entre as alternativas abaixo?
  1. AVARCHAR(15)
  2. BNUMBER
  3. CVARCHAR2(11)
  4. DCHAR(11)
  5. ECLOB
Revelar gabarito e comentário

GabaritoD — CHAR(11)

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Tipos de dados para CPF em banco de dados relacional

Gabarito: letra D. Para armazenar o CPF em uma tabela de banco de dados relacional, a melhor escolha é o tipo CHAR(11), pois o CPF é um dado alfanumérico de comprimento fixo (11 dígitos, sem máscara), e o CHAR(11) garante armazenamento exato e eficiente, além de facilitar a indexação e a comparação exata. As demais alternativas apresentam problemas de tamanho, tipo ou flexibilidade inadequados para a integridade e performance esperadas.

O CPF (Cadastro de Pessoas Físicas) é um identificador único de pessoas físicas no Brasil, composto por 11 dígitos numéricos. Em bancos de dados relacionais, a escolha do tipo de dado para uma coluna como CPF deve considerar dois princípios fundamentais: integridade (garantir que os dados armazenados sejam válidos e consistentes) e performance (otimizar o armazenamento e a recuperação dos dados).

O tipo CHAR(n) é um tipo de dado de caractere de comprimento fixo. Isso significa que, independentemente do valor armazenado, o banco reserva exatamente n bytes (ou caracteres) para cada registro. Para o CPF, que tem exatamente 11 caracteres (quando armazenado sem máscara, apenas os dígitos), o CHAR(11) é ideal: ele ocupa exatamente o espaço necessário, sem desperdício, e permite que o banco faça comparações e buscas de forma muito rápida, pois o tamanho é conhecido e fixo. Além disso, o CHAR(11) é compatível com a criação de índices eficientes, o que acelera consultas que filtram por CPF.

Por outro lado, o tipo VARCHAR(n) é um tipo de comprimento variável: ele armazena apenas os caracteres efetivamente usados, mais um ou dois bytes extras para indicar o tamanho. Embora isso possa economizar espaço em colunas com tamanhos variáveis, para o CPF (que é sempre 11 dígitos) o VARCHAR(11) não traz benefício de espaço e ainda adiciona uma pequena sobrecarga de processamento para gerenciar o comprimento variável. Além disso, o VARCHAR(15) (alternativa A) é ainda pior, pois reserva espaço para 15 caracteres, desperdiçando 4 bytes por registro em uma tabela que pode ter milhões de linhas.

O tipo NUMBER é um tipo numérico, usado para valores que serão submetidos a operações aritméticas. O CPF, apesar de ser composto por dígitos, não é um número no sentido matemático: ele não é usado em cálculos, e armazená-lo como NUMBER pode causar problemas de precisão (CPFs podem ter zeros à esquerda, que seriam perdidos) e dificultar a validação de formato. Além disso, a comparação de igualdade em NUMBER é menos eficiente que em CHAR para esse tipo de dado.

O tipo CLOB (Character Large Object) é projetado para armazenar grandes volumes de texto (até gigabytes). Usar CLOB para um CPF é um absurdo técnico: desperdiça enormemente o espaço, torna as operações de comparação e indexação extremamente lentas e não é apropriado para dados de tamanho fixo e pequeno.

Portanto, a alternativa D (CHAR(11)) é a mais adequada, pois combina tamanho exato, eficiência de armazenamento e performance de consulta, atendendo aos princípios de integridade e performance mencionados no enunciado.

1CHAR(11) ✅
Tamanho fixo (11 dígitos)
Integridade (rejeita tamanho diferente)
Performance (indexação otimizada)
2VARCHAR(n)
Tamanho variável
Não garante 11 dígitos
Sobrecarga de gerenciamento
3NUMBER
Perde zeros à esquerda
Não é usado em cálculos
4CLOB
Desperdício de espaço
Comparação/indexação lentas
Tipos de dados para CPF
LEVELsoulevel.com.br
Tipos de dados para CPF: CHAR(11) ✅ (Tamanho fixo (11 dígitos), Integridade (rejeita tamanho diferente), Performance (indexação otimizada)); VARCHAR(n) (Tamanho variável, Não garante 11 dígitos, Sobrecarga de gerenciamento); NUMBER (Perde zeros à esquerda, Não é usado em cálculos); CLOB (Desperdício de espaço, Comparação/indexação lentas)

Alternativa A — ❌ Incorreta

VARCHAR(15) é um tipo de comprimento variável que reserva até 15 caracteres. Para o CPF, que tem exatamente 11 dígitos, isso desperdiça espaço (4 caracteres extras por registro) e adiciona a sobrecarga de gerenciamento de comprimento variável, prejudicando a performance em tabelas grandes. Além disso, o VARCHAR não garante que o valor tenha exatamente 11 caracteres, o que pode comprometer a integridade dos dados (aceitaria CPFs com menos ou mais dígitos).

Alternativa B — ❌ Incorreta

NUMBER é um tipo numérico, inadequado para o CPF porque: (1) o CPF não é usado em operações aritméticas; (2) números podem perder zeros à esquerda (ex.: CPF 012.345.678-90 seria armazenado como 1234567890, perdendo o zero inicial); (3) a comparação e a indexação de números são menos eficientes que as de strings de tamanho fixo para esse tipo de dado. A integridade do formato do CPF seria comprometida.

Alternativa C — ❌ Incorreta

VARCHAR2(11) é um tipo de comprimento variável específico do Oracle, que armazena apenas os caracteres usados. Embora o tamanho máximo seja 11, ele não garante que o valor tenha exatamente 11 caracteres, permitindo CPFs inválidos (com menos dígitos). Além disso, a sobrecarga de comprimento variável torna as operações de comparação e indexação ligeiramente menos eficientes que o CHAR(11). O CHAR(11) é superior por ser de tamanho fixo e exato.

Alternativa D — ✅ Correta ⟵ GABARITO

CHAR(11) é o tipo de caractere de comprimento fixo que armazena exatamente 11 caracteres. Para o CPF, que tem exatamente 11 dígitos, isso garante: (1) integridade: o banco rejeita valores com tamanho diferente de 11 (a menos que haja regra de preenchimento, mas em geral o CHAR preenche com espaços, o que pode ser tratado com CHECK); (2) performance: o tamanho fixo permite comparações e buscas mais rápidas, e a criação de índices é otimizada. É a escolha padrão recomendada para códigos de tamanho fixo como CPF, CNPJ, CEP, etc.

Alternativa E — ❌ Incorreta

CLOB é um tipo de objeto grande de caractere, projetado para armazenar grandes volumes de texto (até gigabytes). Usar CLOB para um CPF de 11 caracteres é extremamente ineficiente: desperdiça espaço, torna as operações de comparação e indexação extremamente lentas e não é apropriado para dados de tamanho fixo e pequeno. É um erro grave de modelagem.

NÃO CAIA NESSA!

A banca explora a confusão entre CHAR e VARCHAR. Muitos candidatos escolhem VARCHAR(11) por achar que "economiza espaço", mas para um dado de comprimento fixo como o CPF, o CHAR(11) é mais eficiente: o VARCHAR adiciona sobrecarga de gerenciamento de tamanho e não garante a integridade do comprimento. Lembre-se: CHAR para tamanho fixo, VARCHAR para tamanho variável.

PEGA ESSA DICA!

Na prova, ao escolher o tipo de dado para um campo que tem tamanho fixo e bem definido (CPF, CNPJ, CEP, UF, etc.), prefira CHAR(n). Para campos de tamanho variável (nome, endereço, e-mail), use VARCHAR(n). Essa distinção é clássica em questões de modelagem de banco de dados.

Gabarito: letra D

Link permanente: /questoes/qa699106