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
- 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.
- 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
- Uma tabela por hierarquia:
- Toda a hierarquia de classes representada numa única tabela.
- Problemas: Normalização ausente e campos nulos excessivos.
- 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.
- 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
- Classes e Atributos:
- Apenas classes que armazenam dados precisam ser persistidas.
- Atributos podem ser mapeados para colunas únicas ou múltiplas.
- 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.
- Agregações e Composições:
- Utilizam chaves primárias e estrangeiras para relacionar componentes e compostos.
- 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
ougetAluno
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
- Classes:
- Membro (nº, nome, tipo).
- Subclasses:
Docente
,Funcionario
,Aluno
(e subclasses deAluno
comoAluno1C
,Aluno2C
, etc.).
- Tabelas Relacionais:
Membro
,Aluno
,Docente
, com chaves estrangeiras ligando subclasses à superclasse.
- Associações:
- Tabelas intermediárias como
TurmaAlunos
(relacionamento entreTurma
eAluno
).
- Tabelas intermediárias como