Mapeamento Objeto-Relacional

Desenvolvimento de Sistemas de Software

By Pedro Pereira13-11-2024

Mapeamento Objeto-Relacional (ORM)

1. Introdução ao ORM

O Object-Relational Mapping (ORM) é uma técnica para mapear paradigmas orientados a objetos (OO) e relacionais, que são incompatíveis diretamente.

  • Paradigma OO:
    • Usado na lógica de negócios com características como polimorfismo e identidade.
  • Paradigma Relacional:
    • Usado na persistência de dados com tabelas, linhas e colunas.
  • Objetivo do ORM:
    • Facilitar a persistência de objetos OO em bases de dados relacionais, garantindo separação entre a lógica de negócios e a camada de persistência.

2. Abordagens ao ORM

  1. Derivar Objetos a partir de Tabelas:
    • A lógica de negócios depende diretamente do modelo relacional, dificultando o uso completo do paradigma OO.
    • Útil em sistemas simples, mas não favorece modularidade.
  2. Derivar Tabelas a partir de Objetos:
    • Lógica de negócios desenvolvida independentemente do modelo relacional.
    • Base de dados atua como serviço de persistência.
    • Ideal para sistemas com lógica de negócios complexa.

3. Estratégias de Mapeamento de Classes para Tabelas

  1. Uma tabela por hierarquia:
    • Toda a hierarquia de classes representada numa única tabela.
    • Problemas: Normalização ausente e campos nulos excessivos.
  2. Uma tabela por classe concreta:
    • Cada classe concreta tem sua própria tabela.
    • Problemas: Redundância de dados e dificuldade em fazer cast de objetos.
  3. Uma tabela por classe (estratégia recomendada):
    • Cada classe, incluindo superclasses e subclasses, é mapeada para uma tabela.
    • Uso de chaves estrangeiras para relacionar tabelas e identificar tipos concretos.
    • Vantagens: Melhor organização e performance.

4. Regras de Mapeamento

  1. Classes e Atributos:
    • Apenas classes que armazenam dados precisam ser persistidas.
    • Atributos podem ser mapeados para colunas únicas ou múltiplas.
  2. Associações:
    • 1-para-1: Chave estrangeira numa das tabelas.
    • 1-para-n: Chave estrangeira na tabela "n".
    • n-para-n: Criação de uma tabela intermediária.
  3. Agregações e Composições:
    • Utilizam chaves primárias e estrangeiras para relacionar componentes e compostos.
  4. Generalizações/Especializações:
    • Subclasses podem herdar chaves primárias ou ter identidade própria.

5. Arquiteturas com Persistência

  • DAO (Data Access Object):
    • Separa o acesso à base de dados da lógica de negócios.
    • Exemplos de camadas:
      • AlunoDAO, TurmaDAO, UCDAO.
    • Métodos como getTurma ou getAluno constroem objetos a partir da base de dados.

6. Impactos no Sistema

  • Vantagens da Separação:
    • Melhoria na escalabilidade, manutenção e depuração.
  • Desafios:
    • Reconstrução de objetos pode ser custosa se não for controlada.
    • Risco de carregar excessivamente a memória (problema de caching).

7. Exemplo de Mapeamento

  1. Classes:
    • Membro (nº, nome, tipo).
    • Subclasses: Docente, Funcionario, Aluno (e subclasses de Aluno como Aluno1C, Aluno2C, etc.).
  2. Tabelas Relacionais:
    • Membro, Aluno, Docente, com chaves estrangeiras ligando subclasses à superclasse.
  3. Associações:
    • Tabelas intermediárias como TurmaAlunos (relacionamento entre Turma e Aluno).

Apresentação de conteúdos concisos.