Generalização/Especialização

Já li alguns artigos sobre Generalização/Especialização na modelagem de dados, mas algumas dúvidas surgiram: a chave primária da generalização é, também, chave primária das especializações - isto é, as especializações podem conter chaves primárias próprias? Se sim, como se dão os relacionamentos entre elas? Uma entidade especializada deve possuir, obrigatóriamente, atributos - poderia usa-los apenas como um meio de diferenciar duas coisas parecidas, porém diferentes? Quando devo e não devo especializar uma entidade? Poderia, em certos casos, ultilizar, simplesmente, uma FK que ligasse a tabela que eu quisesse generelizar em outra chamada “TIPO”, e esta entidade se ligasse às “especializações” (ou seja, eu possuíria o tipo 1 q se ligasse a entidade A, tipo 2 à B, etc)?

Sua questao está abstrata. Dá um exemplo real, o que precisa atender no momento?

1 curtida

Não entendi muito bem se é uma dúvida conceitual ou relacionada ao funcionamento da JPA com relação à herança. Vou tentar responder pelo que entendi.

O Id da especialização pode ser o mesmo atributo declarado na superclasse. Existem algumas estratégias que devem ser adotadas que definirão como serão criadas ou não as tabelas no banco. Por exemplo, se você tiver uma classe abstrata Transporte anotada com um MappedSuperClass e que tem como herdeira uma classe Automovel e uma classe Moto, o ORM irá criar uma tabela para cada uma das entidades com os atributos especificados na generalização e nas especificações.

Por outro lado, se for utilizado a estratégia SINGLE_TABLE da anotação Inheritance, uma única tabela será criada com todos os atributos de todas as tabelas.

Esse artigo exemplifica cada uma das estratégias usadas.

Quanto à sua última pergunta, vai muito de caso à caso. Há quem defenda à sempre usar composição ao invés de herança. Por exemplo, ao invés de criar uma classe abstrata Pessoa e herdeiras PessoaFisica e PessoaJuridica, criar uma única classe concreta Pessoa e utilizar um enum definindo o Tipo. Acho que vai muito de caso à caso.