Olá pessoal!
Tenho uma dúvida que é totalmente conceitual, principalmente, do ponto de vista das boas práticas.
Estou desenvolvendo um sistema para apuração de custos através de documentos(Contratos, requisição de materiais, folha de pagamento etc).
Analisando esses documentos notei que existem um grupo de informações idênticas entre eles e que não são grandes as informações que variam, sendo assim, optei por criar uma tabela “Documento” que contem todos os atributos de todos os documentos que serão tratados no sistema. Até ai, beleza! A dúvida é como tratar isso na aplicação:
Estou utilizando vRaptor3 com Hibernate, então pensei em criar uma superclasse “Documento” com os atributos que são comuns a todos os documentos e criar subclasses para cada tipo de documento(Contratos, requisição de materiais, folha de pagamento etc) herdando os atributos da classe documento, porém, não tenho certeza se essa é a melhor forma de tratar a questão.
Fiz uma pesquisa na net e achei um artigo do Paulo Silveira http://blog.caelum.com.br/jpa-com-hibernate-heranca-e-mapeamentos/ que diz: Muitos administradores de banco de dados reclamam dessa estratégia, sendo que a mais elegante é a InheritanceType.JOINED, onde cada classe terá uma tabela, mas sem repetir colunas. As tabelas que representam as classes filhas possuem uma chave estrangeira para a tabela que representa a mãe, normalizando o banco nesse aspecto.
Não sei se entendi direito e nem se os meus conhecimentos de modelagem e normalização de dados estão atualizados, mas olhando para o banco de dados, não achei que ter uma tabela “Documento” com meia dúzia de atributos e uma outra tabela “DocumentoContrato” com o restante dos atributos fosse necessário e muito menos funcional/performático.
No fundo, eu quero é a opinião dos colegas sobre a forma mais adequada, tanto do ponto de vista da “elegância” como da performance e também das futuras manutenções nessa aplicação e, caso eu tenha entendido errado o texto do artigo, se alguém pode me indicar alguma material pra eu me aprofundar nesse assunto.
Desde já agradeço os que puderem opinar.
Mauricio