Capítulo 05: Relacionamentos 1 para N: Chaves Estrangeiras e a Janela de Relações
🎯 Objetivo da Aula
Nesta aula que inaugura o Módulo 2, você aprenderá como transformar tabelas isoladas em um verdadeiro Banco de Dados Relacional. No laboratório de informática, você utilizará a Janela de Relações (Relationships Window) do Microsoft Access, compreenderá o conceito de Chave Estrangeira (Foreign Key - FK) e a cardinalidade 1:N (Um para Muitos). Você ativará a Integridade Referencial, a regra magna dos SGBDs que impede que o operador cadastre fretes para clientes fantasmas ou veículos inexistentes.
Ao final desta aula, seu banco de dados possuirá um diagrama de relacionamentos ativo com os símbolos matemáticos $1$ e $\infty$, garantindo a consistência das ordens de frete da FastLog S.A.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Antes da implantação do Access, um faturista na pressa digitou uma ordem de transporte no valor de R$ 18.500,00 digitando o código do cliente como 9999. No final do mês, quando o departamento de cobrança foi emitir o boleto bancário, descobriu que o cliente 9999 simplesmente não existia no cadastro comercial da empresa. Ninguém sabia para quem a carga de eletrodomésticos havia sido entregue, gerando um prejuízo de R$ 18.500,00 e uma sindicância interna por suspeita de desvio de carga (Problema de Registros Órfãos).
Sua Missão: Como DBA da FastLog, você abrirá a Janela de Relações do Access, vinculará a tabela tbl_Clientes à tabela tbl_OrdensFrete e ativará a Integridade Referencial, fazendo com que o SGBD bloqueie sumariamente qualquer tentativa de gravar fretes para clientes inexistentes.
🧠 Fundamentos: A Teoria Traduzida
1. Cardinalidade 1:N (Um para Muitos)
No mundo corporativo da logística, os relacionamentos mais comuns são do tipo 1 para N:
- Um Cliente pode contratar Muitas Ordens de Frete. (Mas cada Ordem de Frete pertence a um único Cliente).
- Um Veículo pode realizar Muitas Viagens. (Mas cada Ordem de Frete utiliza um único Veículo tracionador).
- Um Motorista pode executar Muitos Despachos. (Mas cada viagem possui um único Motorista titular).
erDiagram
tbl_Clientes ||--o{ tbl_OrdensFrete : "1 : N (emite fretes)"
tbl_Veiculos ||--o{ tbl_OrdensFrete : "1 : N (transporta cargas)"
tbl_Motoristas ||--o{ tbl_OrdensFrete : "1 : N (conduz carretas)"
tbl_Clientes {
Autonumber ID_Cliente PK
ShortText Razao_Social
ShortText CNPJ
}
tbl_OrdensFrete {
Autonumber ID_OrdemFrete PK
Long ID_Cliente FK
ShortText Placa_Veiculo FK
Long ID_Motorista FK
Currency Valor_Frete
}
tbl_Veiculos {
ShortText Placa PK
ShortText Modelo_Cavalo
}
tbl_Motoristas {
Autonumber ID_Motorista PK
ShortText Nome_Motorista
}2. O Conceito de Chave Estrangeira (Foreign Key - FK)
Uma Chave Estrangeira (FK) é uma coluna presente em uma tabela filha que faz referência direta à Chave Primária (PK) de uma tabela mãe:
- Na tabela
tbl_Clientes, o campoID_Clienteé PK (Chave Primária). - Na tabela
tbl_OrdensFrete, o campoID_Clienteé FK (Chave Estrangeira).
⚠️ A Regra de Ouro da Compatibilidade de Tipos:
Para que o relacionamento funcione no Access:
- Se a PK na tabela mãe for Autonumeração, a FK na tabela filha DEVE ser do tipo Número, com Tamanho do Campo: Inteiro Longo (Long Integer).
- Se a PK na tabela mãe for Texto Curto (7 caracteres) (como o campo
Placa), a FK na tabela filha DEVE ser Texto Curto (7 caracteres). Se os tamanhos forem diferentes, o Access recusará a criação do relacionamento!
3. A Integridade Referencial (Referential Integrity)
A Integridade Referencial é um sistema de regras que o Access utiliza para garantir que as relações entre os registros sejam válidas e que você não exclua ou altere acidentalmente dados relacionados.
- O que ela garante: O banco de dados PROÍBE a inserção de um valor no campo FK que não exista previamente na tabela da PK correspondente.
- Símbolos no Diagrama: Quando ativada, a linha de relacionamento exibe o número
1na ponta da tabela mãe e o símbolo do infinito∞na ponta da tabela filha.
📖 Exemplo Guiado: Passo a Passo no Laboratório
Abra o arquivo FastLog_Database.accdb.
Passo 1: Abrindo a Janela de Relações
- Certifique-se de que todas as tabelas estão fechadas (se houver alguma aba de tabela aberta, feche-a, senão o Access bloqueará a edição das relações!).
- Na faixa de opções superior, clique na guia Ferramentas de Banco de Dados (Database Tools).
- No grupo Relações, clique no botão Relações (Relationships).
- Uma tela com fundo cinza e a janela flutuante Adicionar Tabelas será exibida.
Passo 2: Adicionando as Tabelas ao Diagrama
- Na lista de tabelas, selecione com duplo clique:
tbl_Clientestbl_Veiculostbl_Motoristastbl_OrdensFrete
- Feche a janelinha Adicionar Tabelas.
- Redimensione e organize as caixas das tabelas na tela para visualizar todos os campos com clareza.
🛠️ Prática Obrigatória 1: Criando a Relação 1:N com Integridade Referencial
Você conectará a tabela mãe tbl_Clientes à tabela filha tbl_OrdensFrete.
Passo a Passo no Computador:
- Na caixa de
tbl_Clientes, posicione o cursor do mouse sobre o campoID_Cliente(que possui o ícone da chave 🔑). - Clique com o botão esquerdo do mouse, mantenha pressionado e arraste o cursor até soltá-lo exatamente sobre o campo
ID_Clientedentro da caixa detbl_OrdensFrete. - A janela modal Editar Relações (Edit Relationships) será aberta:
- Coluna da Esquerda (Tabela/Consulta):
tbl_Clientes➔ Campo:ID_Cliente - Coluna da Direita (Tabela/Consulta Relacionada):
tbl_OrdensFrete➔ Campo:ID_Cliente
- Coluna da Esquerda (Tabela/Consulta):
- Na parte inferior da janela, localize e marque a caixinha:
- ☑ Exigir Integridade Referencial (Enforce Referential Integrity)
- Observe que o campo Tipo de Relação na parte inferior exibirá automaticamente: Um para Vários (1:N).
- Clique no botão Criar.
- Repita o mesmo procedimento para as outras tabelas:
- Arraste
Placadetbl_VeiculosparaPlaca_Veiculodetbl_OrdensFrete➔ Marque: ☑ Exigir Integridade Referencial ➔ Criar. - Arraste
ID_Motoristadetbl_MotoristasparaID_Motoristadetbl_OrdensFrete➔ Marque: ☑ Exigir Integridade Referencial ➔ Criar.
- Arraste
- Salve o diagrama pressionando
Ctrl + Be feche a janela de relações.
✅ Resultado Esperado (Prática 1):
A Janela de Relações exibe as três conexões com linhas pretas contínuas exibindo o símbolo 1 nas pontas das tabelas mestres e o símbolo ∞ na tabela tbl_OrdensFrete.
🛠️ Prática Obrigatória 2: Teste de Fogo da Integridade Referencial
Agora você comprovará que a transportadora está protegida contra erros humanos e clientes fantasmas.
Passo a Passo no Computador:
- Abra a tabela
tbl_Clientesno Modo Folha de Dados e verifique quais IDs existem cadastrados (ex: ID1e ID2). - Feche
tbl_Clientese abra a tabelatbl_OrdensFreteno Modo Folha de Dados. - Tente inserir um novo frete tentando burlar o sistema:
Data_Despacho:15/10/2026Data_Entrega_Prevista:18/10/2026Valor_Frete:12000Peso_Liquido_Kg:15000Status_Ordem:AgendadoID_Cliente: Digite o código999(um cliente que NÃO existe!)Placa_Veiculo: Digite uma placa existente (ex:BRA2E19)ID_Motorista: Digite um motorista existente (ex:1)
- Tente passar para a próxima linha ou fechar a tabela.
- Veja a reação do Access: Uma mensagem de alerta oficial do motor relacional surgirá na tela: “Não é possível adicionar ou alterar o registro porque é necessário um registro relacionado na tabela ’tbl_Clientes’.”
- O Access bloqueia a gravação. O frete fantasma jamais entrará no sistema!
- Altere o valor de
ID_Clientepara o número1(cliente real existente) e a gravação será efetuada instantaneamente com sucesso.
✅ Resultado Esperado (Prática 2):
A integridade referencial rejeita com sucesso chaves estrangeiras inexistentes, eliminando 100% dos riscos de registros órfãos na FastLog.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o banco de dados e feche o Access.
- Nomeie o arquivo:
FastLog_BD_Cap05_SeuNome_SeuSobrenome.accdb. - Acesse o Microsoft Teams na sua turma.
- Abra a tarefa: “Banco de Dados - Cap 05: Relacionamentos 1:N e Integridade”.
- Anexe o seu arquivo
.accdbe clique em Entregar (Turn In).
💡 Checkpoint de Gestão & TI
Por que esta funcionalidade do Access vale milhões para uma empresa de logística? No Excel, qualquer colaborador pode inventar um código de cliente ou apagar uma linha por engano. Com a Integridade Referencial ativa no SGBD, o software assume o papel de guardião legal das regras comerciais, impedindo desvios, falhas operacionais e inconsistências contábeis antes que elas cheguem ao cliente final.
🔥 Desafio de Fixação: Estabelecendo a Conexão com Filiais
Na tabela tbl_OrdensFrete, temos duas chaves estrangeiras que apontam para a tabela mãe tbl_Filiais:
ID_Filial_Origem(onde o caminhão é carregado).ID_Filial_Destino(onde a mercadoria será descarregada).
Abra a Janela de Relações do Access e execute as seguintes ações:
- Como a tabela
tbl_Filiaisprecisará ser conectada duas vezes, clique no botão Adicionar Tabelas e dê duplo clique emtbl_Filiaisnovamente. O Access criará um atalho chamadotbl_Filiais_1. - Conecte
ID_Filialdetbl_Filiaisao campoID_Filial_Origemdetbl_OrdensFretecom Integridade Referencial ativa. - Conecte
ID_Filialdetbl_Filiais_1ao campoID_Filial_Destinodetbl_OrdensFretecom Integridade Referencial ativa. - Salve o diagrama atualizado.
📝 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.
- O que significa a cardinalidade 1:N (Um para Muitos) no contexto de uma transportadora de cargas?
- Defina com suas próprias palavras o que é uma Chave Estrangeira (Foreign Key - FK) e qual é a sua finalidade em um banco de dados.
- Qual é a regra técnica de compatibilidade de tipos entre uma Chave Primária do tipo Autonumeração e sua respectiva Chave Estrangeira?
- No Cenário Prático da FastLog, o que gerou o problema do chamado “Registro Órfão” e qual foi o prejuízo financeiro causado?
- Em qual guia da faixa de opções do Microsoft Access encontramos o botão para abrir a Janela de Relações?
- Por que todas as tabelas devem estar obrigatoriamente fechadas antes de criarmos ou editarmos relacionamentos na Janela de Relações?
- O que representa a opção ☑ Exigir Integridade Referencial na janela de configuração de relações?
- Quais símbolos gráficos surgem nas extremidades de uma linha de relacionamento quando a integridade referencial está devidamente ativada?
- O que ocorreu na Prática Obrigatória 2 quando você tentou inserir uma ordem de frete vinculada ao
ID_Cliente = 999? - No Desafio de Fixação, por que foi necessário adicionar uma cópia visual da tabela
tbl_Filiais(denominadatbl_Filiais_1) na Janela de Relações?