Capítulo 04: Normalização de Dados na Prática Logística: 1FN, 2FN e 3FN

🎯 Objetivo da Aula

Nesta aula fundamental, você dominará o conceito mais importante da engenharia de banco de dados relacional: a Normalização de Dados. No laboratório de informática, você aprenderá a identificar as três anomalias clássicas de sistemas desorganizados (Inserção, Atualização e Exclusão) e aplicará passo a passo as Três Primeiras Formas Normais (1FN, 2FN e 3FN). Você pegará uma planilha corporativa plana e desordenada da FastLog S.A. e a decomporá em uma arquitetura relacional elegante, eficiente e livre de redundâncias.

Ao final desta aula, você terá concluído o Módulo 1 com a estrutura de dados mais refinada e profissional possível, pronta para receber relacionamentos e integridade no Módulo 2.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: A diretoria de operações utilizava uma planilha gigante chamada Manifesto_Geral_Fretes.xlsx contendo mais de 35 colunas por linha: CodFrete, Data, Placa, ModeloCaminhao, Eixos, NomeMotorista, CNH, ValidadeCNH, CodFilialOrigem, NomeFilial, GerenteFilial, CidadeOrigem, UFOrigem, CodFilialDestino....
Quando o gerente da filial de Curitiba foi substituído, o assistente precisou atualizar 4.200 linhas antigas no Excel; como esqueceu algumas páginas de 2024, metade dos relatórios da empresa passou a apontar o gerente antigo e a outra metade o gerente novo (Anomalia de Atualização). Além disso, quando a transportadora vendeu o caminhão de placa FLG-1000 e o operador apagou a linha dele, o sistema perdeu para sempre o cadastro do cliente e da rota que estavam registrados apenas naquela viagem (Anomalia de Exclusão).
Sua Missão: Como arquiteto de dados, você aplicará as regras da 1FN, 2FN e 3FN para decompor essa planilha caótica em tabelas atômicas e independentes no Microsoft Access.


🧠 Fundamentos: A Teoria Traduzida

1. As 3 Anomalias que Destroem Bancos de Dados Desnormalizados

A teoria da normalização foi formulada pelo matemático Edgar F. Codd em 1970 para eliminar três dores corporativas:

  1. Anomalia de Inserção: Impossibilidade de cadastrar uma nova filial ou novo caminhão sem antes criar um frete fictício para ele.
  2. Anomalia de Atualização: Se os dados de um motorista ou filial mudarem, você é obrigado a alterar centenas de linhas. Se esquecer uma única linha, a base fica inconsistente.
  3. Anomalia de Exclusão: Se você excluir o registro de uma viagem cancelada, você apaga acidentalmente do banco o histórico de endereço do cliente ou a ficha do caminhão.
flowchart TD
    TABELA_PLANA["📄 Tabela Plana Não-Normalizada (Excel)<br/>CodFrete | Motorista | CNH | Placa | Filial | GerenteFilial"]
    
    TABELA_PLANA -->|"1FN: Atomicidade & Fim de Listas"| F1["1ª Forma Normal (1FN)"]
    F1 -->|"2FN: Eliminação de Dependência Parcial"| F2["2ª Forma Normal (2FN)"]
    F2 -->|"3FN: Eliminação de Dependência Transitiva"| F3["3ª Forma Normal (3FN)"]

    subgraph ARQUITETURA_3FN["Arquitetura 3FN Final no Access"]
        F3 --> T1[("tbl_Filiais")]
        F3 --> T2[("tbl_Motoristas")]
        F3 --> T3[("tbl_Veiculos")]
        F3 --> T4[("tbl_OrdensFrete")]
    end

    style TABELA_PLANA fill:#f8d7da,stroke:#721c24,stroke-width:2px,color:#721c24
    style F1 fill:#fff3cd,stroke:#856404,stroke-width:2px,color:#856404
    style F2 fill:#d1ecf1,stroke:#0c5460,stroke-width:2px,color:#0c5460
    style F3 fill:#d4edda,stroke:#155724,stroke-width:2px,color:#155724
    style ARQUITETURA_3FN fill:#e9ecef,stroke:#495057,stroke-width:2px

2. O Passo a Passo das Formas Normais

📌 1ª Forma Normal (1FN) - Atomicidade dos Campos

  • Regra 1: Todos os campos devem ser atômicos (conter um único valor indivisível por célula).
    • Violação: Campo Produtos_Transportados com valor "100 Sacas Soja, 50 Caixas Óleo, 20 Fardos Açúcar".
    • Solução: Cada produto deve ser um registro separado.
  • Regra 2: Eliminar colunas repetitivas ou vetores na tabela.
    • Violação: Criar colunas Telefone1, Telefone2, Telefone3 ou Item1, Item2, Item3.
  • Regra 3: Definir formalmente uma Chave Primária (PK).

📌 2ª Forma Normal (2FN) - Dependência Funcional Total

  • Pré-requisito: A tabela já deve estar na 1FN.
  • Regra: Todos os atributos que não são chave devem depender da Chave Primária por completo, e não apenas de parte dela (aplicável em tabelas com chave primária composta).
    • Exemplo: Em uma tabela de fretes com chave composta (ID_OrdemFrete, ID_Produto), o atributo Descricao_Produto depende apenas de ID_Produto, e não de ID_OrdemFrete. Portanto, a descrição do produto deve ser movida para a tabela tbl_Produtos!

📌 3ª Forma Normal (3FN) - Eliminação de Dependências Transitivas

  • Pré-requisito: A tabela já deve estar na 2FN.
  • Regra de Ouro: Nenhum atributo não-chave pode depender de outro atributo não-chave. Todos os atributos devem depender exclusivamente e diretamente da Chave Primária.
    • A famosa máxima de Bill Kent: “O dado deve fornecer um fato sobre a chave, a chave inteira e nada mais além da chave!”.
    • Violação: Na tabela de fretes, ter as colunas CodFilial, NomeFilial e GerenteFilial. O nome e o gerente dependem de CodFilial, e não do ID_OrdemFrete.
    • Solução: Mover NomeFilial, Cidade e Gerente para uma tabela separada: tbl_Filiais.

📖 Exemplo Guiado: Passo a Passo no Laboratório

Abra o arquivo FastLog_Database.accdb. Vamos transformar a entidade “Filiais” em uma tabela normalizada 3FN para suportar as ordens de despacho.

Passo 1: Criando a Tabela tbl_Filiais (3FN)

  1. Clique em Criar ➔ Design da Tabela.
  2. Adicione os campos da unidade operacional:
    • ID_Filial: Autonumeração, Chave Primária 🔑.
    • Codigo_Filial: Texto Curto, Tamanho: 6, Requerido: Sim, Indexado: Sim (Sem Duplicação) (Ex: “FIL-CP”, “FIL-CT”).
    • Nome_Filial: Texto Curto, Tamanho: 50, Requerido: Sim.
    • Cidade: Texto Curto, Tamanho: 40, Requerido: Sim.
    • UF: Texto Curto, Tamanho: 2, Máscara: >LL, Requerido: Sim.
    • Nome_Gerente: Texto Curto, Tamanho: 60.
    • Telefone_Operacional: Texto Curto, Tamanho: 15, Máscara: \(00\) 0000\-0000;0;_.
  3. Salve a tabela como: tbl_Filiais.

🛠️ Prática Obrigatória 1: Povoando a Tabela de Filiais Normalizada

Cadastre as filiais centrais da FastLog para verificar a ausência de redundâncias.

Passo a Passo no Computador:

  1. Abra tbl_Filiais no Modo Folha de Dados.
  2. Insira os 3 registros mestres:
    • Linha 1: Código: FIL-SP | Nome: Hub Matriz São Paulo | Cidade: São Paulo | UF: SP | Gerente: Rodrigo Peçanha | Telefone: (11) 3200-4000
    • Linha 2: Código: FIL-CP | Nome: Centro Logístico Campinas | Cidade: Campinas | UF: SP | Gerente: Vanessa Martins | Telefone: (19) 3800-9100
    • Linha 3: Código: FIL-CT | Nome: Terminal Sul Curitiba | Cidade: Curitiba | UF: PR | Gerente: Eduardo Fontes | Telefone: (41) 3300-8800
  3. Observe que agora, se o gerente de Curitiba mudar de cargo, alteramos uma única célula na linha 3, e todas as futuras ordens de frete associadas à filial FIL-CT estarão automaticamente atualizadas!

✅ Resultado Esperado (Prática 1):

A tabela tbl_Filiais armazena os dados das unidades logísticas sem nenhuma duplicação de cidades ou telefones em fretes individuais.


🛠️ Prática Obrigatória 2: Adequação da Tabela de Ordens de Frete para 3FN

Agora você refatorará a tabela tbl_OrdensFrete que criamos no Capítulo 03 para que ela armazene apenas as Chaves Estrangeiras (FK) que apontam para as tabelas mestres.

Passo a Passo no Computador:

  1. Abra tbl_OrdensFrete no Modo Design.
  2. Adicione as colunas de ligação relacional:
    • Insira a linha: ID_Cliente ➔ Tipo: Número ➔ Tamanho do Campo: Inteiro Longo, Requerido: Sim.
    • Insira a linha: Placa_Veiculo ➔ Tipo: Texto Curto ➔ Tamanho do Campo: 7, Máscara: >LLL0A00;;_, Requerido: Sim.
    • Insira a linha: ID_Motorista ➔ Tipo: Número ➔ Tamanho do Campo: Inteiro Longo, Requerido: Sim.
    • Insira a linha: ID_Filial_Origem ➔ Tipo: Número ➔ Tamanho do Campo: Inteiro Longo, Requerido: Sim.
    • Insira a linha: ID_Filial_Destino ➔ Tipo: Número ➔ Tamanho do Campo: Inteiro Longo, Requerido: Sim.
  3. Compreensão Arquitetural:
    • Observe que em tbl_OrdensFrete NÃO EXISTEM MAIS colunas como NomeCliente, CNPJ, ModeloVeiculo, NomeMotorista ou CidadeFilial!
    • Todos esses dados descritivos agora residem com exclusividade em suas tabelas mestres (tbl_Clientes, tbl_Veiculos, tbl_Motoristas e tbl_Filiais).
  4. Salve e feche a tabela.

✅ Resultado Esperado (Prática 2):

A tabela tbl_OrdensFrete atinge a plenitude da 3ª Forma Normal (3FN), contendo apenas os dados do fato do transporte (datas, valor, peso) e as chaves numéricas de referência.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o banco de dados e feche o Access.
  2. Nomeie o arquivo: FastLog_BD_Cap04_SeuNome_SeuSobrenome.accdb.
  3. No Microsoft Teams, abra a atividade: “Banco de Dados - Cap 04: Normalização 1FN, 2FN e 3FN”.
  4. Envie o arquivo .accdb e clique em Entregar (Turn In).

💡 Checkpoint de Gestão & TI

Por que a Normalização é um divisor de águas na carreira de um gestor de logística? Porque dados normalizados ocupam até 70% menos espaço em disco, reduzem o tráfego de rede corporativa e eliminam o pesadelo de relatórios conflitantes que mostram números diferentes para o mesmo indicador em reuniões de diretoria. Um banco 3FN é a garantia de integridade corporativa.


🔥 Desafio de Fixação: Decomposição de Manifesto de Carga

Uma transportadora parceira enviou a seguinte linha de planilha desnormalizada: CodCarga: 8810 | Data: 10/10/2026 | ID_Filial: 3 | NomeFilial: Curitiba | TelefoneFilial: (41) 3300-8800 | ID_Motorista: 15 | NomeMotorista: Carlos Mendes | CNH: 123456789 | ID_Cliente: 42 | RazaoSocial: Nestlé Brasil | ValorFrete: 8.500,00

Demonstre a separação formal dessa linha nas quatro tabelas normalizadas em 3FN criadas no seu banco de dados, indicando qual tabela armazena cada campo e qual campo atua como chave de ligação.


🔑 Revelar Gabarito Oficial e Material de Apoio da Aula (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Mapeamento 3FN Oficial do Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
1. Tabela 'tbl_Filiais' (Entidade Filial):
   - ID_Filial (PK): 3
   - NomeFilial: Curitiba
   - TelefoneFilial: (41) 3300-8800

2. Tabela 'tbl_Motoristas' (Entidade Motorista):
   - ID_Motorista (PK): 15
   - NomeMotorista: Carlos Mendes
   - CNH: 123456789

3. Tabela 'tbl_Clientes' (Entidade Cliente):
   - ID_Cliente (PK): 42
   - RazaoSocial: Nestlé Brasil

4. Tabela 'tbl_OrdensFrete' (Tabela de Fatos da Viagem):
   - ID_OrdemFrete (PK): 8810
   - Data_Despacho: 10/10/2026
   - Valor_Frete: 8.500,00
   - ID_Filial_Origem (FK): 3   --> Aponta para tbl_Filiais
   - ID_Motorista (FK): 15       --> Aponta para tbl_Motoristas
   - ID_Cliente (FK): 42         --> Aponta para tbl_Clientes

📥 Download dos Scripts desta Aula:
Baixe o arquivo de script Capitulo_04.sql ou o pacote compactado (.zip) com os comandos SQL e esquemas da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.

  1. Quem formulou a Teoria da Normalização de Dados e em qual década essa metodologia foi apresentada ao mundo?
  2. Descreva com um exemplo prático de logística o que é a Anomalia de Atualização em uma planilha de fretes.
  3. Como ocorre a Anomalia de Exclusão quando apagamos um registro de uma tabela não-normalizada?
  4. Quais são as três exigências fundamentais para que uma tabela seja considerada na 1ª Forma Normal (1FN)?
  5. O que significa o princípio da Atomicidade de Campos na 1FN?
  6. Qual é a regra essencial para que uma tabela atinja a 2ª Forma Normal (2FN) e quando ela é aplicada?
  7. Explique a regra de ouro da 3ª Forma Normal (3FN) formulada por Bill Kent.
  8. Por que campos como NomeCliente e TelefoneMotorista NÃO devem existir dentro da tabela tbl_OrdensFrete em uma arquitetura 3FN?
  9. Na Prática Obrigatória 2, por que os campos ID_Cliente e ID_Motorista foram configurados com o tipo de dados “Número (Inteiro Longo)” em vez de Autonumeração?
  10. No Desafio de Fixação, como as quatro tabelas normalizadas conseguem se reconectar para gerar o relatório final de manifesto de carga?