Programação

segunda-feira, 23 de fevereiro de 2026

MODELO RELACIONAL e NORMALIZAÇÃO

         MODELO RELACIONAL 

O modelo relacional de Bases de Dados é um dos modelos mais utilizados atualmente pois é adotado pela maioria dos SGBDcomo MySQL, PostgreSQL, Oracle Database e SQL Server, entre outros.

  • Desenvolvido por Edgar F. Codd, na década de 1970

📌 Definição

Modelo Relacional de Bases de Dados armazena organiza os dados em tabelas (relações), que se relacionam entre si através de chaves primárias (PK) e estrangeiras (FK)


                            Tabela ALUNOS da entidade ALUNO


📌CARACTERÍSTICAS 
  • os dados são armazenados em tabelas (linhas e colunas)
  • Cada tabela representa uma entidade do mundo real (por exemplo: AlunoProdutoConsulta
  • Cada linha corresponde a um registo (tuplo)
  • Cada coluna/campo corresponde a um atributo.
  • utiliza chaves primárias para identificar de forma única cada registo da tabela
  • utiliza chaves estrangeiras para criar relações entre as tabelas
  • Permite a manipulação dos dados através da linguagem SQL.


            Relacionamento da Tabela ALUNOS com a Tabela CURSOS

📌 Vantagens do modelo relacional

  • Boa organização dos dados - Os dados são estruturados em tabelas (ou relações), facilitando o entendimento e a gestão das informações.

  • Redução da redundância de dados - Evita a duplicação de informações, economizando espaço e prevenindo inconsistências.

  • Garante a integridade e consistência dos dados – Regras como chaves primárias e estrangeiras garantem que os dados permaneçam corretos e confiáveis.

  • Facilita a pesquisa e atualização da informação - A linguagem SQL permite consultas complexas, além de inserções, alterações e exclusões de dados de forma eficiente.

  • Permite segurança e controlo de acessos – É possível definir quem pode ler, inserir ou alterar informações, garantindo proteção e privacidade dos dados.

  • Amplamente utilização - É o modelo mais adotado em sistemas atuais, com grande suporte de ferramentas e profissionais especializados.


    🔹 Estrutura das tabelas 

🧠 Nome da tabela: deve refletir os dados que ela guarda

TABELA:    Estrutura bidimensional que armazena dados de uma entidade.

LINHA ou REGISTO:  Representa uma ocorrência específica de uma entidade (linha de dados)

CAMPO ou COLUNA: representa as características/ propriedades (atributoda entidade.

DOMÍNIO: Define os valores permitidos para um atributo.    

(ex: no campo IdCurso,  os domínios são os valores: 290 , 122 ,etc  )


🔑 Chave Primária (Primary Key - PK)
✅ Definição
  Campo (ou conjunto de campos) que Identifica de forma única cada registo de uma tabela.

✔️ Características

  • Não pode repetir valores
  • Não pode ser nula (vazia)
  • Existe apenas uma PK por tabela

🔗 Chave Estrangeira (Foreign Key – FK)

Definição

Campo que liga uma tabela a outra, referenciando a chave primária de outra tabela.

✔️ Serve para:

  • criar relações entre tabelas
  • manter integridade dos dados

🔑 Chave Candidata (Candidate Key)

✅ Definição:

É qualquer campo (ou conjunto de campos) que identificar de forma única cada registo de uma tabela e que pode ser selecionado para ser a chave primária.

👉 EXEMPLO: 

Na tabela Alunos podemos ter vários campos podem ser candidatos a PK:   NProcesso, NIF, CC

Deve escolher a que melhor representa a respetiva tabela para ser a chave primária


🔑 Chave Composta (Composite Key)

✅ Definição:

👉 É uma chave primária formada por dois ou mais campos, cuja combinação identifica de forma única cada registo de uma tabela.

Exemplo:

 É o caso mais comum.

Tabela Inscrições

NProcesso        IdDisciplina
123
123
          SI
          OEAG      
👉 Assim, a  chave primária é formada por 2 campos (chave composta).
    🔑 PK = (NProcesso + idDisciplina)
Atualmente, usa-se pouco a chave composta, sendo substituída um campo único (chave artificial)
 🔑 PK = IdInscricao (auto-incremento)

RESUMO 
  • Numa relação de 1 :1 normalmente o modelo ER converte em 1 ou 2 tabelas
  • Numa relação de 1 : M o modelo E-R transforma-se em 2 tabelas
  • Numa relação de M:M o modelo E-R é convertido em 3 tabelas
A normalização poderá forçar a criação de novas tabelas, dependendo dos dados que estamos a tratar 

NORMALIZAÇÃO

✅ Definição:

Normalização é o processo de organizar os dados em uma Base de Dados Relacional para eliminar redundâncias e garantir consistência e a integridade dos dados, através da aplicação de um conjunto de regras chamadas Formas Normais.

Principais objetivos da normalização

  1. Eliminar redundância de dados
    → Evita dados repetidos 

  2. Evitar inconsistências
    → Impede que o mesmo dado tenha valores diferentes em tabelas distintas.

  3. Facilitar manutenção
    → Inserir, atualizar e apagar dados torna-se mais simples.

  4. Melhorar organização
    → Os dados ficam divididos em tabelas lógicas e bem relacionadas.


📊 As 3 Formas Normais  

🔹 1ª Forma Normal (1FN)  - 
      • Regra:
Cada campo deve ter apenas um único valor (valor atómico)
Não pode haver multivalores dentro de uma célula 
Se houver atributos com valores compostos (ex: Endereço) devem dividir em campos de valores atómicos
Se houver atributos com valores multivalores devem colocá-los em nova tabela e relacioná-la com a anterior.


🔹 2ª Forma Normal (2FN)
                       Regra:
-Deve estar na 1FN 
  • - todos os campos não-chave dependem da chave primária.
  • - Não existem dependências parciais — cada campo deve depender de toda a chave, não só de um componente dela.  
  • (A 2FN só é um problema quando a tabela tem chave primária composta)

 👉 Nota: Se a chave primária não for composta (for só um campo), a tabela já está automaticamente na 2FN.
Atualmente, usa-se pouco a chave composta, sendo substituída um campo único (chave artificial) auto-incremento.

  • 🔹 3ª Forma Normal (3FN)
Regra:

-a tabela deve estar na 2FN
  • - Nenhum campo depende de outro campo que não seja chave primária, ou seja, 
  • não existem dependências transitivas  A → B → C
  • (atributo não pode depender de outro atributo que não seja chave)
  •  
  • Resumo das 3 Formas Normais

    Forma NormalRegra principalObjetivo
    1FN – Primeira Forma NormalCada campo deve ter apenas um único valor (valores atómicos), sem multivalores ou grupos repetidosEvitar campos múltiplos e organizar dados
    2FN – Segunda Forma NormalTodos os atributos devem depender da chave primária completa (não só parte dela)Evitar dependências parciais em chaves compostas
    3FN – Terceira Forma NormalNenhum atributo deve depender de outro atributo que não seja a chave primáriaEvitar dependências transitivas e garantir consistência





    •  Situação inicial (não normalizada)


    • IdClient

      Name

      Address

      DateBirth

      Produt

      Price

      PurchaseDate

      1

      Anne Matos

      Rua Prata, 4, R/ch A, Sacavém

      03/03/2000

      Mouse Gaming, Computer

      20,00 €  ,        1 123,00 €

      08/01/2026

      2

      Artur Lopes

      Rua Paz, 7, 3ºEsq Portela

      25/07/1999

      Pen 128GB

               10,00 €

      09/01/2026

      3

      Charles Sal

      Av. Luz  3, 5ºA  Olivais

      12/12/2001

      Keyboard

               55,99 €

      10/01/2026

      3

      Charles Sal

      Av. Luz  3, 5ºA  Olivais

      12/12/2001

      Mouse Gaming

               20 €

      10/01/2026

      4

      Pedro Sousa

      Rua Sol 4, 1ºDt  Moscavide

      08/08/2000

      Tablet

             234,00 €

      11/01/2026

      4

      Pedro Sousa

      Rua Sol 4, 1ºDt  Moscavide

      08/08/2000

      Pen  128GB

                  10 €

      11/01/2026


      Problema 
  1.  campos Address, Name com valores não atómico  
  2. campos com multivalores (Product, Price
  3. Dados repetidos (IdCliente; Name..)
    • Solução: 
      • Valores compostos à novos campos/colunas
      • Multivalores à Valores repetidos  à novas tabelas



    • -Não podem haver valores repetidos nas colunas, devemos separar em tabelas



    •  Locality tem valores repetidos à Criar nova tabela

      Já está na 1FN


    • Para a 2FN 

      - Estar na 1FN

      - Todos os valores dos campos não-chave devem depender unicamente da chave primária (PK) da tabela

      As tabelas devem ter uma única PK que identifique a tabela e seus atributos dependam dela 

    •  Estas 3 tabelas estão na 2FN


    • A anterior tabela COMPRAS tem chave primária composta pelo que é um problema 
       

    • temos de criar o campo chave primária  IdPurchase, para que fique na 2FN


    • -------------------------------------------------------------------------------------------------------------------------------------

    • 3FN

       Estar na 2FN

      Os valores dos campos da tabela, não dependem de outros campos que não seja a PK (dependência transitiva)


    • Neste exercício as tabelas já estão na 3FN

    • -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    • Código | NomeApelido       | Profissão                             | HorasTrabalhadas
      -----------------------------------------------------------------------------------------------------
      001      | Vitor    Duque         | Engenheiro   , Professor       | 100 ,     300
      002      | Carlos Fontes         | Pintor     , Carpinteiro           | 200   ,  50
      003      | David    Martínez    | Soldador                               | 3000

    • Transformando para 1FN


    • Código   Nome  Apelido             Profissão            HorasTrabalhadas

          1         Vítor        Duque                 Engenheiro        100

          1         Vítor        Duque                 Professor            300

          2         Carlos     Fontes                 Pintor                   200

         2         Carlos     Fontes                 Carpinteiro           50

      3    David      Martínez            Engenheiro          300

       Agora está em 1FN porque:

      • Cada célula contém um único valor.

      • Não há listas ou múltiplos valores em uma mesma célula.




    • Transformando para 2FN

    • Solução: separar em duas tabelas

    • 1️⃣ Tabela de Funcionários

      CodFuncNomeApelido
        1  Vitor Duque
        2Carlos Fontes
        3David    Martínez
    • Chave primária: Código

    • Contém apenas dados que dependem somente do código do funcionário.

    •  2️⃣ Tabela de Profissões 

      CodProfissão  

       Profissão

      P1

      Engenheiro

      P2

      Professor

      P3

       Pintor

      P4

      Carpinteiro




    • Transformando para 3FN

    • ✅Tabela de Funcionários  já está em 3FN.

    • ✅Tabela Profissões

      • ✅Tabela ProfissõesPessoas
    • CodFunc

      CodProf  

       

       

      P1

       

       

      P2

       

       

      P3

        

       

      P4

       

       

       P5

       

    • Exemplo de dados numa Tabela  (antes da normalização, com dados todos na mesma tabela):

      IdCliente

      NomeCliente

      Produto

      Quantidade

      Preço

      CodigoPostal

      Cidade

      1

      Ana

      Telemóvel,  Capa 

      1 , 1 

      300€ , 20€

      1000

      Lisboa

      3

      2

      Bruno

      Telemóvel

      1

      300

      2000

      Porto

       Problemas:

      • Campos com dados repetidos (NomeCliente, CodigoPostal, Cidade)

      • Lista de produtos por cliente → repetição






IdCliente

NomeCliente

Produto

Quantidade

Preço

CodigoPostal

Cidade

1

Ana

Telemóvel,  Capa 

1 , 1 

300€ , 20€

1000

Lisboa

1

Ana

Capa

1

20

1000

Lisboa

2

Bruno

Telemóvel

1

300

2000

Porto