Capa do Ebook gratuito Preparatório para Analista de TI do DETRAN

Preparatório para Analista de TI do DETRAN

Novo curso

15 páginas

Modelagem de Dados e Banco de Dados para sistemas do DETRAN

Capítulo 3

Tempo estimado de leitura: 11 minutos

+ Exercício

Modelagem conceitual: entidades, atributos e relacionamentos

Modelagem de dados descreve, de forma estruturada, as informações que o sistema precisa armazenar e como elas se conectam. Em sistemas do DETRAN, é comum lidar com cadastros (cidadão, veículo) e eventos/vínculos (infração, atendimento, propriedade, agendamento), exigindo regras rígidas de integridade.

Entidade

Entidade representa um conjunto de objetos do mundo real sobre os quais se deseja guardar dados. Exemplos típicos: Cidadão, Veículo, Infração, Atendimento, Unidade (posto), Agente.

Atributo

Atributo é uma característica da entidade. Exemplos: Cidadão(nome, cpf, data_nascimento), Veículo(placa, renavam, chassi, ano_fabricacao), Infração(data_hora, enquadramento, valor_base).

Relacionamento

Relacionamento liga entidades e expressa um vínculo. Em DETRAN, muitos vínculos são temporais e precisam de histórico (ex.: propriedade de veículo muda ao longo do tempo). Exemplos: Cidadão possui Veículo; Veículo recebe Infração; Cidadão solicita Atendimento.

Cardinalidade e opcionalidade

Cardinalidade define quantas ocorrências de uma entidade podem se associar a outra. Opcionalidade define se a associação é obrigatória ou pode ser nula.

Continue em nosso aplicativo

Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

ou continue lendo abaixo...
Download App

Baixar o aplicativo

  • 1:1: raro em cadastros; pode ocorrer em extensões (ex.: Veículo e VeículoComplemento).
  • 1:N: comum (um Cidadão pode ter vários Atendimentos; um Veículo pode ter várias Infrações).
  • N:N: comum em vínculos (Cidadão e Veículo via Propriedade; Atendimento e Serviço via AtendimentoServico).

Chaves: identificação, unicidade e rastreabilidade

Chave primária (PK)

Identifica unicamente cada registro. Pode ser natural (cpf, renavam) ou substituta (id_cidadao). Em ambientes corporativos, é comum usar PK substituta para estabilidade e manter chaves naturais como UNIQUE.

Chave candidata e chave alternativa

Chaves candidatas são atributos que poderiam identificar unicamente (ex.: cpf). A escolhida vira PK; as demais viram chaves alternativas com restrição de unicidade.

Chave estrangeira (FK)

Implementa relacionamentos no modelo relacional, garantindo integridade referencial (ex.: infracao.id_veiculo referencia veiculo.id_veiculo).

Chave composta

Usada quando a identificação depende de múltiplos atributos, muito comum em tabelas de associação (ex.: atendimento_servico(id_atendimento, id_servico)).

Do conceitual ao lógico: passo a passo prático

A seguir, um roteiro prático para sair de um cenário típico do DETRAN e chegar a um esquema relacional consistente.

Passo 1: levantar entidades e eventos

Separe cadastros (entidades estáveis) de eventos (ocorrências no tempo).

  • Cadastros: Cidadão, Veículo, Unidade, Agente, Serviço.
  • Eventos/vínculos: Propriedade (histórico), Infração, Atendimento, Pagamento, Agendamento.

Passo 2: definir atributos e domínios

Para cada atributo, defina tipo, obrigatoriedade, formato e domínio. Exemplos:

  • cpf: 11 dígitos, obrigatório, único, validação de dígito verificador.
  • placa: padrão Mercosul, obrigatório, único (com regra de formato).
  • data_hora_infracao: timestamp, obrigatório.
  • valor_multa: numérico com escala, não negativo.

Passo 3: identificar relacionamentos e cardinalidades

  • Cidadão 1:N Atendimento (um cidadão pode ter vários atendimentos; um atendimento pertence a um cidadão).
  • Veículo 1:N Infração (um veículo pode ter várias infrações; uma infração está vinculada a um veículo).
  • Cidadão N:N Veículo ao longo do tempo (resolver com entidade associativa Propriedade).

Passo 4: resolver N:N com entidade associativa

Quando houver N:N, crie uma nova entidade/tabela com FKs e atributos do vínculo. Para propriedade de veículo, atributos do vínculo são essenciais: data_inicio, data_fim, tipo_posse, indicador_principal.

Passo 5: mapear para o modelo relacional

Regras gerais de tradução:

  • Entidade vira tabela.
  • Atributos viram colunas.
  • Relacionamento 1:N vira FK no lado N.
  • Relacionamento N:N vira tabela associativa com duas FKs (e possivelmente PK composta).
  • Atributos multivalorados viram tabela própria (ex.: telefones do cidadão).

Representando cadastros e vínculos do DETRAN

Cidadão

Cadastro central para serviços, atendimentos e vínculos com veículos. Recomenda-se separar dados sensíveis e dados de contato quando houver políticas específicas.

cidadao( id_cidadao PK, cpf UNIQUE NOT NULL, nome NOT NULL, data_nascimento, email, data_cadastro NOT NULL )

Veículo

Veículo possui identificadores fortes (renavam, chassi, placa). Em geral, renavam e chassi devem ser únicos; placa pode mudar (troca de placa), então pode exigir histórico dependendo do escopo.

veiculo( id_veiculo PK, renavam UNIQUE NOT NULL, chassi UNIQUE NOT NULL, placa UNIQUE NOT NULL, ano_fabricacao, marca_modelo, uf_registro )

Vínculo Cidadão–Veículo (Propriedade com histórico)

Para manter histórico, não basta uma FK direta em veiculo. Use uma tabela de vínculo com período de vigência e regra de não sobreposição.

propriedade_veiculo( id_propriedade PK, id_cidadao FK NOT NULL, id_veiculo FK NOT NULL, data_inicio NOT NULL, data_fim, tipo_posse NOT NULL )

Regras típicas:

  • data_fim pode ser nula para vínculo vigente.
  • Não pode haver dois vínculos vigentes simultâneos para o mesmo veículo (dependendo da regra do órgão).
  • Não pode haver sobreposição de períodos para o mesmo veículo e mesmo tipo de posse.

Infração

Infração é um evento associado a veículo (e frequentemente a um agente, local e enquadramento). Evite duplicar dados de enquadramento na infração; use tabela de referência.

enquadramento( id_enquadramento PK, codigo UNIQUE NOT NULL, descricao NOT NULL, valor_base NOT NULL )
infracao( id_infracao PK, id_veiculo FK NOT NULL, id_enquadramento FK NOT NULL, data_hora NOT NULL, local_descricao, status NOT NULL )

Atendimento

Atendimento representa interação do cidadão com o órgão (presencial, online). Pode envolver múltiplos serviços no mesmo protocolo, então é comum modelar cabeçalho e itens.

atendimento( id_atendimento PK, id_cidadao FK NOT NULL, id_unidade FK, canal NOT NULL, data_abertura NOT NULL, status NOT NULL )
servico( id_servico PK, codigo UNIQUE NOT NULL, nome NOT NULL )
atendimento_servico( id_atendimento FK NOT NULL, id_servico FK NOT NULL, PRIMARY KEY(id_atendimento, id_servico) )

Regras de integridade e constraints

Integridade de entidade

PK não pode ser nula e deve ser única. Em tabelas associativas, PK composta impede duplicidade do vínculo.

Integridade referencial

FK garante que não existam registros órfãos. Decida políticas de deleção/atualização:

  • RESTRICT/NO ACTION: impede exclusão de pai com filhos (comum para histórico e auditoria).
  • CASCADE: útil em tabelas dependentes puras, mas perigoso para dados legais/históricos.
  • SET NULL: quando o vínculo é opcional e faz sentido manter o registro sem referência (ex.: atendimento sem unidade em canal digital, se permitido).

Constraints de domínio (CHECK) e NOT NULL

Use constraints para impedir valores inválidos na origem:

  • CHECK(valor_base >= 0)
  • CHECK(status IN ('ABERTO','ENCERRADO','CANCELADO'))
  • NOT NULL em campos essenciais (cpf, renavam, data_hora).

Unicidade (UNIQUE) e chaves naturais

Mesmo com PK substituta, mantenha unicidade em identificadores oficiais:

  • cidadao.cpf UNIQUE
  • veiculo.renavam UNIQUE
  • enquadramento.codigo UNIQUE

Regras complexas: sobreposição de períodos

Algumas regras não cabem apenas em FK/UNIQUE. Exemplo: impedir sobreposição de propriedade vigente para o mesmo veículo. Soluções comuns:

  • Trigger que valida intervalos antes de INSERT/UPDATE.
  • Constraint de exclusão por intervalo (quando o SGBD suporta).
  • Validação na camada de aplicação com transação e bloqueio adequado, complementada por mecanismos no banco.

Normalização aplicada ao cenário

1FN: atomicidade

Evite colunas com listas (ex.: telefones em um único campo). Modele como tabela:

cidadao_telefone( id_cidadao FK NOT NULL, telefone NOT NULL, tipo, PRIMARY KEY(id_cidadao, telefone) )

2FN: dependência total da chave

Em tabelas com PK composta, nenhum atributo não-chave deve depender apenas de parte da PK. Exemplo: em atendimento_servico(id_atendimento, id_servico), não coloque nome_servico (depende só de id_servico).

3FN: sem dependências transitivas

Se veiculo guarda id_marca e marca_nome, há redundância. Mantenha marca em tabela própria e referencie por FK.

Desnormalização controlada

Em consultas operacionais intensas (painéis, relatórios), pode-se criar visões materializadas ou tabelas de apoio para performance, mantendo o dado mestre normalizado e com trilha de auditoria.

Exercícios: DER e tradução para esquema relacional

Exercício 1: DER (conceitual) para atendimento com múltiplos serviços

Enunciado: Um Cidadão pode abrir vários Atendimentos. Cada Atendimento pode incluir um ou mais Serviços. Um Serviço pode aparecer em muitos Atendimentos. Modele entidades, relacionamentos e cardinalidades. Depois traduza para tabelas.

Gabarito esperado (conceitual):

  • Entidades: Cidadão, Atendimento, Serviço.
  • Relacionamentos: Cidadão 1:N Atendimento; Atendimento N:N Serviço.

Tradução para relacional (uma solução):

cidadao( id_cidadao PK, cpf UNIQUE, nome, ... )
atendimento( id_atendimento PK, id_cidadao FK NOT NULL, data_abertura, status, ... )
servico( id_servico PK, codigo UNIQUE, nome )
atendimento_servico( id_atendimento FK NOT NULL, id_servico FK NOT NULL, PRIMARY KEY(id_atendimento, id_servico) )

Exercício 2: DER para infração e enquadramento

Enunciado: Um Veículo pode ter várias Infrações. Cada Infração pertence a um único Veículo. Cada Infração referencia um Enquadramento (tabela de códigos). Um Enquadramento pode ser usado por várias Infrações. Modele e traduza.

Tradução para relacional (uma solução):

veiculo( id_veiculo PK, renavam UNIQUE, placa UNIQUE, ... )
enquadramento( id_enquadramento PK, codigo UNIQUE NOT NULL, descricao NOT NULL, valor_base NOT NULL )
infracao( id_infracao PK, id_veiculo FK NOT NULL, id_enquadramento FK NOT NULL, data_hora NOT NULL, status NOT NULL )

Exercício 3: vínculo de propriedade com histórico e regra de vigência

Enunciado: Um Cidadão pode ser proprietário de vários Veículos ao longo do tempo. Um Veículo pode trocar de proprietário. É necessário histórico com data_inicio e data_fim. Modele o relacionamento e traduza para relacional. Inclua uma regra para impedir dois proprietários vigentes para o mesmo veículo.

Tradução para relacional (uma solução):

propriedade_veiculo( id_propriedade PK, id_cidadao FK NOT NULL, id_veiculo FK NOT NULL, data_inicio NOT NULL, data_fim, tipo_posse NOT NULL )

Constraint/regra (exemplo conceitual): para cada id_veiculo, deve existir no máximo um registro com data_fim nula.

-- Exemplo (quando suportado): índice único parcial para vínculo vigente (pseudoexemplo, varia por SGBD) UNIQUE(id_veiculo) WHERE data_fim IS NULL

Qualidade de dados: consistência, completude e rastreabilidade

Dimensões práticas de qualidade

  • Completude: campos essenciais preenchidos (cpf, renavam, datas).
  • Consistência: regras respeitadas (status válidos, FKs existentes, formatos corretos).
  • Unicidade: evitar duplicidade de cidadão por variações de nome; usar cpf como chave alternativa e rotinas de deduplicação.
  • Acurácia: validações (DV de CPF, formato de placa, faixas de valores).
  • Atualidade: dados de contato atualizados; histórico preservado para dados legais.

Estratégias no banco e no processo

  • Constraints (NOT NULL, UNIQUE, CHECK) como primeira barreira.
  • Padronização de domínios (tabelas de referência para status, tipos, códigos).
  • Auditoria: colunas como criado_em, criado_por, atualizado_em, atualizado_por.
  • Trilha de histórico: tabelas de vigência (data_inicio/data_fim) para vínculos e atributos que mudam.

Dicionário de dados e governança de metadados

Dicionário de dados

Dicionário de dados documenta cada tabela e coluna: significado, tipo, tamanho, obrigatoriedade, regras, origem e exemplos. Em ambientes do DETRAN, isso reduz ambiguidades entre áreas (atendimento, fiscalização, veículos) e melhora integrações.

Campos recomendados no dicionário:

  • Nome lógico e nome físico (ex.: Cidadão.cpf vs cidadao.cpf).
  • Descrição de negócio.
  • Tipo e formato (ex.: CHAR(11)).
  • Domínio/valores permitidos.
  • Regra de preenchimento (obrigatório, condicional).
  • Chaves e relacionamentos (PK/FK/UNIQUE).
  • Classificação do dado (pessoal, sensível, público) e política de acesso.

Metadados e governança

Governança de metadados define responsabilidades e processos para manter o modelo confiável:

  • Data owner: responsável pelo significado e uso do dado (negócio).
  • Data steward: cuida da qualidade, padronização e catálogo.
  • Equipe técnica: implementa constraints, versiona modelos e garante performance.
  • Catálogo: centraliza definições, linhagem (data lineage) e impactos de mudança.

Versionamento de modelos em ambientes corporativos

O que versionar

  • Arquivos do modelo lógico (DER e definições).
  • Scripts DDL (CREATE/ALTER), migrações e rollback.
  • Dicionário de dados (como artefato versionado).
  • Contratos de integração (views, APIs, eventos) que dependem do esquema.

Boas práticas de evolução do esquema

  • Evitar mudanças destrutivas sem migração: renomear coluna exige compatibilidade (views, colunas duplicadas temporárias).
  • Migrações incrementais: cada alteração com script idempotente quando possível.
  • Controle de impacto: mapear quais sistemas/relatórios usam cada tabela/coluna.
  • Ambientes: aplicar em desenvolvimento, homologação e produção com o mesmo pipeline e validações.
  • Testes de dados: checar constraints, cardinalidades e amostras de integridade após migração.

Agora responda o exercício sobre o conteúdo:

Ao modelar o vínculo de propriedade entre Cidadão e Veículo com necessidade de histórico (data_inicio e data_fim) e evitando dois proprietários vigentes para o mesmo veículo, qual abordagem é a mais adequada no modelo relacional?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Como o vínculo é N:N ao longo do tempo e exige histórico, deve-se usar uma tabela associativa com atributos de vigência. Para evitar dois proprietários vigentes, aplica-se uma regra/constraint (ou trigger) que limite um registro com data_fim nula por veículo.

Próximo capitúlo

SQL e manipulação de dados em bases do DETRAN

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.