Mapeamento OO x Relacional - Hibernate

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