Pessoal,
Desculpem se a mensagem não é para este forum. É minha primeira vez aqui e não trabalho com Java (diretamente…). Bem, será um longo post… desculpem.
Meu objetivo aqui é tirar uma dúvida sobre uma modelagem apresentada por uma equipe que não batendo com o que temos que fazer no banco de dados. Explico melhor:
A equipe modelou o seguinte ( nomes de CLASSES fictícios ):
Classe COISA
Classe CARRO ( Herdaria de COISA )
Classe AVIÃO ( Herdaria de COISA )
Classe NAVIO ( Herdaria de COISA )
Em elemento, só existe o ID e Tipo, para saber se é CARRO, AVIÃO ou NAVIO ( imagino que seja … rsrrs )
Em cima destes elementos serão realizadas análises. Eles tem uma CLASSE TESTE associada a esta de COISA. É algo tipo: Será feito um teste em cima de uma coisa. “Uma coisa” pode ser um carro, avião ou navio.
Só que CARRO, AVIÃO e NAVIO são conceitos fortes na empresa e são TABELAS CORPORATIVAS, diferentes uma das outras.
A modelagem de DADOS apresentada pela equipe de ADs foi:
TABELA TESTE
ID_TESTE
(…campos pertinentes ao TESTE…)
ID_COISA ( FK para tabela COISA )
TABELA COISA
ID_COISA ( PK )
TIPO ( OBRIGATORIO: C, A ou N )
ID_CARRO NULL ( FK para a tabela de CARRO )
ID_AVIAO NULL ( FK para a tabela de AVIÃO )
ID_NAVIO NULL ( FK para a tabela de NAVIO )
A partir daí o mundo acabou… rsrsrs Parece que o Hibernate só trabalha com um campo de ID para a classe pai e que se estende para a classe filho, o que acho coerente, desde os filhos sejam da mesma natureza do pai.
A equipe de desenvolvimento quer o seguinte:
TABELA COISA
ID_COISA ( PK )
TIPO ( OBRIGATORIO: C, A ou N )
onde o ID_COISA pode ser o ID_CARRO ou ID_AVIAO ou ID_NAVIO.
Só que isso fere as formas normais da modelagem de dados, pois o atributo não é atomico e fica dependente do Tipo. Catastrófico para o modelo e para a integridade do banco.
Pergunto:
A herança que eles estão aplicando é coerente ?
Parece-me que COISA seria uma classe abstrata e nem precisaria existir no banco. Podendo ser apenas para tratar os métodos que serão herdados pelos “filhos”. COISA é como eles enxergam o negócio e não como o negócio é, corporativamente falando.
Caso tenha conseguido explicar o problema, gostaria de saber a opinião de vocês:
- Alguém já passou por algo parecido ?
- Isto pode ser resolvido pela equipe de desenvolvimento com a modelagem proposta pelos ADs ? Ou seja, dá pra fazer com o modelo proposto, no hibernate ?
Eu avisei que seria longo . Para quem leu até aqui, obrigado pela atenção.
Luis