Capa do Ebook gratuito Analista Judiciário - Tecnologia da Informação: Preparação Completa para Concursos do Judiciário

Analista Judiciário - Tecnologia da Informação: Preparação Completa para Concursos do Judiciário

Novo curso

24 páginas

Banco de Dados para Analista Judiciário - TI: modelagem conceitual e lógica (ER e relacional)

Capítulo 6

Tempo estimado de leitura: 11 minutos

+ Exercício

Na modelagem de dados, o objetivo é representar o domínio do problema de forma precisa e consistente, para que o banco de dados suporte consultas, relatórios e regras de negócio sem ambiguidades. Em concursos, é comum cobrar a passagem do modelo Entidade-Relacionamento (conceitual) para o modelo relacional (lógico), além de chaves, cardinalidades e integridade.

1) Modelagem conceitual (ER): elementos fundamentais

Entidades

Entidade é um “tipo de objeto” do mundo real sobre o qual se deseja armazenar dados. No domínio judicial, exemplos típicos são: Processo, Unidade (vara, gabinete, secretaria), Movimentação, Intimação, Servidor, Lotação.

  • Entidade forte: existe independentemente (ex.: Processo).
  • Entidade fraca: depende de outra para existir/ser identificada (ex.: ItemMovimentacao se for identificado apenas por (Processo, Sequência)).

Atributos

Atributos descrevem propriedades de uma entidade/relacionamento.

  • Simples: atômico (ex.: numeroProcesso).
  • Composto: pode ser decomposto (ex.: endereço em logradouro, número, bairro).
  • Multivalorado: múltiplos valores (ex.: telefones). No relacional, costuma virar tabela própria.
  • Derivado: calculado (ex.: prazoRestante). Geralmente não se armazena, calcula-se.

Exemplo de atributos de Processo: idProcesso, numeroCNJ, classe, assunto, dataDistribuicao, segredoJustica (S/N), status.

Relacionamentos

Relacionamento liga entidades e representa uma associação do domínio.

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

  • Processo “tramita em” Unidade.
  • Processo “possui” Movimentação.
  • Intimação “refere-se a” Processo e “destina-se a” uma parte/advogado (se modelado).
  • Servidor “está lotado em” Unidade (via entidade associativa Lotação).

Cardinalidade e participação

Cardinalidade define quantas ocorrências de uma entidade podem se associar a outra.

  • 1:1: raro no domínio, mas pode ocorrer (ex.: Processo ↔ Distribuição, se houver exatamente uma distribuição por processo).
  • 1:N: muito comum (ex.: Processo 1:N Movimentação).
  • N:N: comum e exige tabela associativa no relacional (ex.: Servidor N:N Unidade ao longo do tempo, via Lotação).

Participação (obrigatória/opcional) indica se a entidade precisa participar do relacionamento.

  • Ex.: toda Movimentação deve estar associada a um Processo (participação obrigatória de Movimentação).
  • Um Processo pode existir sem movimentações no instante inicial (participação opcional de Processo no relacionamento “possui”).

Chaves no modelo conceitual

No ER, define-se um identificador (chave) para distinguir univocamente cada ocorrência.

  • Chave natural: existe no domínio (ex.: numeroCNJ pode ser candidato, mas cuidado com formatação/validação e possíveis exceções).
  • Chave substituta (surrogate): id numérico/UUID (ex.: idProcesso). Muito usada para simplificar FKs.
  • Chave composta: combinação de atributos (ex.: (idProcesso, sequenciaMov) para Movimentação).

2) Integridade: regras que o modelo deve garantir

Integridade de entidade

Chave primária (PK) não pode ser nula e deve ser única. No domínio judicial, isso evita duplicidade de processos, unidades, movimentações etc.

Integridade referencial

Chave estrangeira (FK) deve referenciar uma PK existente (ou ser nula, se permitido). Ex.: toda movimentação deve apontar para um processo válido.

Integridade de domínio e restrições

Restrições típicas:

  • NOT NULL para campos obrigatórios (ex.: dataDistribuicao).
  • UNIQUE para evitar duplicidade (ex.: numeroCNJ).
  • CHECK para valores controlados (ex.: segredoJustica IN ('S','N')).
  • Regras temporais: em Lotação, dataFim deve ser maior que dataInicio (CHECK) e pode haver regra de “não sobreposição” (geralmente via trigger/constraint avançada).

3) Do ER para o relacional: regras de transformação

A transformação ER → Relacional é um roteiro muito cobrado. A seguir, um passo a passo prático com regras gerais.

Passo 1: cada entidade vira uma tabela

Para cada entidade forte, crie uma tabela com seus atributos atômicos e defina a PK.

PROCESSO(id_processo PK, numero_cnj UNIQUE, classe, assunto, data_distribuicao, segredo_justica, status)
UNIDADE(id_unidade PK, nome, sigla, tipo)

Passo 2: atributos multivalorados viram tabela própria

Se uma entidade possui um atributo multivalorado, crie uma tabela para ele, com FK para a entidade “dona”.

Exemplo (hipotético): se UNIDADE tiver vários telefones:

UNIDADE_TELEFONE(id_unidade FK, telefone, PK(id_unidade, telefone))

Passo 3: relacionamento 1:N vira FK no lado N

Se um Processo possui várias Movimentações (1:N), a FK fica em MOVIMENTACAO apontando para PROCESSO.

MOVIMENTACAO(id_mov PK, id_processo FK NOT NULL, data_hora, tipo, descricao)

Se a regra exigir ordenação por sequência dentro do processo, pode-se usar chave composta ou restrição UNIQUE:

MOVIMENTACAO(id_mov PK, id_processo FK NOT NULL, sequencia NOT NULL, data_hora, tipo, descricao, UNIQUE(id_processo, sequencia))

Passo 4: relacionamento 1:1 vira FK com UNIQUE (ou fusão de tabelas)

Em 1:1, você pode:

  • Colocar FK em uma das tabelas e marcar como UNIQUE.
  • Fundir as tabelas (se fizer sentido e não houver muitos nulos).

Exemplo: se cada Processo tiver exatamente um registro de Distribuição:

DISTRIBUICAO(id_processo PK/FK, data_distribuicao, criterio)

Passo 5: relacionamento N:N vira tabela associativa

Relacionamentos N:N exigem uma tabela de junção com FKs para as duas entidades. Se o relacionamento tiver atributos (ex.: período), eles ficam nessa tabela.

Exemplo: Servidor lotado em Unidade ao longo do tempo (N:N com atributos):

SERVIDOR(id_servidor PK, nome, matricula UNIQUE)
LOTACAO(id_servidor FK, id_unidade FK, data_inicio, data_fim, PK(id_servidor, id_unidade, data_inicio))

Observação: a PK inclui data_inicio para permitir múltiplas lotações do mesmo servidor na mesma unidade em períodos diferentes. Alternativamente, use id_lotacao como PK e imponha UNIQUE conforme a regra.

Passo 6: entidade fraca vira tabela com PK composta (inclui a PK da forte)

Se MOVIMENTACAO for identificada por (Processo, Sequência), ela pode ser modelada como fraca:

MOVIMENTACAO(id_processo FK, sequencia, data_hora, tipo, descricao, PK(id_processo, sequencia))

Passo 7: especialização/generalização (se aparecer)

Se houver supertipo/subtipo (ex.: USUARIO como supertipo e SERVIDOR/ADVOGADO como subtipos), há estratégias:

  • Tabela por hierarquia: uma tabela com coluna “tipo” (pode gerar muitos nulos).
  • Tabela por tipo: supertipo + tabelas de subtipos com PK=FK.
  • Tabela por classe concreta: uma tabela para cada subtipo (replica atributos comuns).

Em provas, a estratégia “supertipo + subtipos com PK=FK” é frequente por manter integridade e reduzir nulos.

4) Exemplo completo (ER conceitual → relacional lógico)

Descrição conceitual (texto do ER)

  • Entidades: PROCESSO, UNIDADE, MOVIMENTACAO, INTIMACAO.
  • Relacionamentos: PROCESSO 1:N MOVIMENTACAO; PROCESSO N:1 UNIDADE (processo tramita em uma unidade atual); PROCESSO 1:N INTIMACAO.
  • Regras: toda MOVIMENTACAO pertence a um PROCESSO; toda INTIMACAO pertence a um PROCESSO; PROCESSO pode existir sem MOVIMENTACAO; UNIDADE pode ter zero ou muitos PROCESSOS.

Modelo relacional resultante (tabelas e restrições)

UNIDADE( id_unidade PK, nome NOT NULL, sigla UNIQUE, tipo NOT NULL )
PROCESSO( id_processo PK, numero_cnj UNIQUE NOT NULL, classe NOT NULL, assunto, data_distribuicao NOT NULL, segredo_justica NOT NULL CHECK (segredo_justica IN ('S','N')), status NOT NULL, id_unidade_atual FK NOT NULL REFERENCES UNIDADE(id_unidade) )
MOVIMENTACAO( id_mov PK, id_processo FK NOT NULL REFERENCES PROCESSO(id_processo), data_hora NOT NULL, tipo NOT NULL, descricao, sequencia NOT NULL, UNIQUE(id_processo, sequencia) )
INTIMACAO( id_intimacao PK, id_processo FK NOT NULL REFERENCES PROCESSO(id_processo), data_envio NOT NULL, meio NOT NULL, status NOT NULL, prazo_dias INT CHECK (prazo_dias >= 0) )

Note como as cardinalidades 1:N viraram FKs no lado N (MOVIMENTACAO e INTIMACAO). O relacionamento “processo tramita em unidade” foi representado por uma FK em PROCESSO (id_unidade_atual). Se fosse necessário histórico de tramitação por unidade, isso mudaria para uma tabela de histórico (N:N ao longo do tempo) com datas.

5) Exercícios (ER → relacional) com gabarito comentado

Exercício 1: Processo e Partes (N:N)

Enunciado (ER em texto): Um Processo envolve uma ou mais Partes. Uma Parte pode participar de vários Processos. No relacionamento, existe o atributo “papel” (AUTOR, RÉU, TERCEIRO) e “data_entrada”.

Pede-se: transformar para o modelo relacional com PKs, FKs e restrições básicas.

Gabarito (uma solução possível):

PARTE( id_parte PK, nome NOT NULL, documento UNIQUE )
PROCESSO( id_processo PK, numero_cnj UNIQUE NOT NULL, ... )
PROCESSO_PARTE( id_processo FK NOT NULL REFERENCES PROCESSO(id_processo), id_parte FK NOT NULL REFERENCES PARTE(id_parte), papel NOT NULL CHECK (papel IN ('AUTOR','REU','TERCEIRO')), data_entrada NOT NULL, PK(id_processo, id_parte, papel) )

Comentário: como uma mesma parte pode ter mais de um papel no mesmo processo (situação possível em alguns cenários), incluir “papel” na PK evita colisões. Se a regra do domínio proibir múltiplos papéis, a PK poderia ser (id_processo, id_parte) e “papel” seria atributo comum.

Exercício 2: Lotação com período (N:N com atributos temporais)

Enunciado: Servidor pode ser lotado em várias Unidades ao longo do tempo. Cada lotação tem data_inicio e data_fim (opcional, nula quando vigente). Não pode haver duas lotações vigentes simultâneas do mesmo servidor.

Pede-se: modelo relacional e uma restrição para “data_fim > data_inicio”.

Gabarito:

SERVIDOR( id_servidor PK, matricula UNIQUE NOT NULL, nome NOT NULL )
UNIDADE( id_unidade PK, nome NOT NULL, ... )
LOTACAO( id_lotacao PK, id_servidor FK NOT NULL REFERENCES SERVIDOR(id_servidor), id_unidade FK NOT NULL REFERENCES UNIDADE(id_unidade), data_inicio NOT NULL, data_fim, CHECK (data_fim IS NULL OR data_fim > data_inicio) )

Comentário: a regra “não pode haver duas lotações vigentes simultâneas do mesmo servidor” normalmente exige lógica adicional (índices parciais, exclusão por intervalo, trigger), pois não é garantida apenas com PK/FK/CHECK simples.

Exercício 3: Movimentação como entidade fraca

Enunciado: Movimentação é identificada pela combinação (Processo, sequencia). Cada Movimentação tem data_hora e descricao. Um Processo pode ter zero ou muitas Movimentações.

Gabarito:

PROCESSO( id_processo PK, numero_cnj UNIQUE NOT NULL, ... )
MOVIMENTACAO( id_processo FK NOT NULL REFERENCES PROCESSO(id_processo), sequencia NOT NULL, data_hora NOT NULL, descricao, PK(id_processo, sequencia) )

Comentário: aqui não há necessidade de id_mov substituto, pois a identificação natural do domínio já é composta.

6) Anomalias de modelagem (o que a prova costuma explorar)

Anomalias são problemas típicos de um modelo relacional mal estruturado (frequentemente por mistura de entidades/relacionamentos em uma tabela só), levando a inconsistências.

Anomalia de inserção

Ocorre quando não é possível inserir um fato sem inserir outro indevido.

Exemplo ruim: uma tabela única PROCESSO_UNIDADE com colunas (numero_cnj, classe, unidade_nome, unidade_sigla). Se ainda não houver processo, você não consegue cadastrar uma unidade sem “inventar” um processo.

Correção: separar UNIDADE e PROCESSO, relacionando por FK.

Anomalia de atualização

Ocorre quando o mesmo dado é repetido em várias linhas e precisa ser atualizado em vários lugares.

Exemplo ruim: armazenar nome e sigla da unidade em cada linha de PROCESSO. Se a sigla mudar, é preciso atualizar todos os processos daquela unidade.

Correção: PROCESSO guarda apenas id_unidade_atual (FK). O nome/sigla ficam em UNIDADE.

Anomalia de exclusão

Ocorre quando ao excluir um registro você perde informação que deveria permanecer.

Exemplo ruim: se MOVIMENTACAO guardar também dados do PROCESSO (classe, assunto) e você apagar a última movimentação, pode perder os dados do processo.

Correção: PROCESSO e MOVIMENTACAO em tabelas separadas, com FK.

Exercício 4: identificar anomalias e corrigir

Enunciado: Considere a tabela abaixo:

REGISTRO( numero_cnj, classe, assunto, unidade_sigla, unidade_nome, mov_data_hora, mov_tipo, mov_descricao )

Há uma linha por movimentação. Identifique pelo menos 2 anomalias e proponha um modelo corrigido (tabelas).

Gabarito (exemplo de resposta):

  • Anomalia de atualização: unidade_nome e unidade_sigla repetem a cada movimentação; mudança de nome exige atualizar várias linhas.
  • Anomalia de exclusão: ao excluir a última movimentação, perde-se o cadastro do processo/unidade.
  • Anomalia de inserção: não dá para cadastrar um processo sem movimentação (se a tabela exige mov_* preenchido).

Modelo corrigido:

UNIDADE( id_unidade PK, sigla UNIQUE, nome, ... )
PROCESSO( id_processo PK, numero_cnj UNIQUE, classe, assunto, id_unidade_atual FK )
MOVIMENTACAO( id_mov PK, id_processo FK, data_hora, tipo, descricao )

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

Ao transformar um relacionamento N:N do modelo ER para o modelo relacional, especialmente quando o relacionamento possui atributos próprios (como papel e data_entrada), qual é a modelagem correta?

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

Você errou! Tente novamente.

Relacionamentos N:N no modelo relacional exigem uma tabela de junção com FKs para as entidades participantes. Se o relacionamento tem atributos (ex.: papel, data_entrada), eles devem ficar nessa tabela, com PK/UNIQUE coerente para garantir integridade.

Próximo capitúlo

SQL para Analista Judiciário - TI: consultas, filtros, agregações e subconsultas

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