Baixe o app para aproveitar ainda mais
Prévia do material em texto
Mapeamento Objeto/Relacional Marcio Aguiar Ribeiro marcio@les.inf.puc-rio.br © LES/PUC-Rio Roteiro • Introdução • Informações básicas – Shadow information • Mapeando relações – Tipos de relações – Relações objeto vs. relacional • Um para um • Um para muitos • Muitos para muitos – Relações ordenadas • Mapeando herança – Tabela por hierarquia – Tabela por classe concreta – Tabela por classe – Comparação das estratégias • Performance – Carga preguiçosa © LES/PUC-Rio Introdução • Problema de impedância – Modelo de objeto é diferente do modelo relacional • Posição memória vs. Chave primária • Referências vs. Chave estrangeira • Herança • Java GC © LES/PUC-Rio Introdução © LES/PUC-Rio Shadow Information • Informações necessárias na persistência que vão além do domínio do objeto – IDs, data de criação, última atualização, versionamento... © LES/PUC-Rio Relacionamentos • Multiplicidade – One-to-One – One-to-Many – Many-to-Many • Navegabilidade – Unidirecional – Bidirecional • E/R todas as relações são bidirecionais © LES/PUC-Rio Relacionamentos - Objetos One-to-one One-to-Many Many-to-Many Unidirecional Bidirecional Bidirecional © LES/PUC-Rio Relacionamentos - ER SELECT * FROM Position, Employee WHERE Position.EmployeePOID = Employee.EmployeePOID SELECT * FROM Position, Employee WHERE Position.PositionPOID = Employee.PositionPOID © LES/PUC-Rio Herança • Abordagens – Tabela por hierarquia – Tabela por classe concreta – Tabela por classe – Estrutura genérica © LES/PUC-Rio Herança - Objetos © LES/PUC-Rio Herança – Tabela por hierarquia • Todos os atributos são colocados em uma única tabela • Necessita uma coluna para identificar o tipo © LES/PUC-Rio Herança – Tabela por hierarquia 1) 2) © LES/PUC-Rio Herança – Tabela por hierarquia • Vantagem – Simples implementação – Fácil inclusão de classes – Bom suporte a polimorfismo – Acesso rápido • Desvantagens – A modificação de uma classe pode afetar outras classes na hierarquia – Desperdicio de espaço – Pode gerar tabelas muito grandes – Atributos não podem ter restrições do tipo not-null • Quando usar – Hierarquias simples © LES/PUC-Rio Herança – Table por classe concreta • Cada classe concreta é mapeada para uma tabela © LES/PUC-Rio Herança – Table por classe concreta • Vantagem – Boa performance para acesso de um único objeto • Desvantagem – Modificação de uma classe acarreta na modificação de sua tabela e todas as classes filhas – Dificuldade de manter diversos papeis para um único objeto – Dificuldade de modificar um papel de um objeto • Quando usar – Quando a troca de tipos e/ou overlap de tipos é rara © LES/PUC-Rio Herança – Tabela por classe • Uma tabela por classe © LES/PUC-Rio Herança – Tabela por classe • Vantagem – Fácil compreensão – Bom suporte para polimorfismo – Facilidade para modificar superclasses e adicionar subclasses – Crescimento de dados é proporcional ao número de objetos • Desvantagem – Muitas tabelas – Potencialmente lento • Quando usar – Quando o overlap entre os tipos é significativo – Mudanca nos tipos é comum © LES/PUC-Rio Referências • Scott Ambler – Object Mapping 101 – http://www.agiledata.org/essays/mappingObjects.html
Compartilhar