1
resposta

Orientação a Objetos, Herança e Banco de dados

Pessoal, sobre OO e Banco de Dados, eu sempre leio na internet prefira composição em vez de herança, e vários livros de melhores práticas sempre abordam isso, tenha cuidado com herança, herança apenas se um tipo realmente for do outro tipo mesmo, não use herança por preguiça de escrever menos código e tals...

a querida JPA trabalha com Herança "super bem" para o banco de dados, tem algumas abordagens: SINGLETABLE, JOINED, TABLEPERCLASS, ambas com seus prós e contras... lendo o livro de JPA eficaz do Hebert Coelho, e outros materiais não vi vantagem de usar Herança para o Banco de Dados, mas para o Java achei bom, pra reaproveitar alguma coisa... e seguir os conceitos de OO.

Nos projetos de vocês se vcs tem lá o caso clássico: Animal -> Cachorro, Gato, Pássaro, e tivessem q mapear essas classes usariam Herança para o banco de dados, ou usaria composição e descartaria o uso de herança, como vcs lidam com isso em Projetos OO com Java e Mysql por exemplo.

1 resposta

Olá Thiago,

Acho que a decisão de usar ou não herança no JPA vai depender muito do que você pretende fazer com as suas queries.

Se você tem a necessidade ou se o uso de polimorfismo nas queries do seu sistema vai facilitar bastante a execução de tarefas mais complexas, então podemos dizer que vale a pena usar herança. Agora, se você não precisa desse tipo de recurso, o aumento do custo da execução das queries com polimorfismo pode afetar negativamente o seu sistema. Se estiver usando a estratégia SINGLE_TABLE então aí o prejuízo vai ser mais na questão de espaço de armazenamento.

Uma coisa que devemos ter sempre em mente é que o mundo orientado a objetos e o mundo relacional não possuem e não precisam ter um mapeamento um para um de todas as suas características. Apenas representar no mundo relacional a relação de herança entre as classes apenas para replicar o modelo orientado a objetos não faz sentido, precisamos ter mais alguma vantagem para adotar esse tipo de representação.