Boa noite amigo.
Primeiramente, considere o seguinte esquema
[code]public class Pessoa {
int id;
String nome;
String telefone;
}
public class PessoaFisica extends Pessoa {
String RG;
String CPF;
}
public class PessoaJuridica extends Pessoa {
String CNPJ;
String inscricaoEstadual;
}
[/code]
Agora considere as três possibilidades de mapeamento das classes acima:
1 - Usando uma tabela por classe concreta, nesse caso você terá uma tabela PessoaFisica e uma tabela PessoaJuridica. Neste caso, os campos herdados de Pessoa estarão contidos em ambas as tabelas. Usando esse esquema é possível que uma Pessoa Fisica possua ID igual ao de uma Pessoa Juridica.
Portanto, PessoaFisica[id, nome, telefone, RG, CPF] e PessoaJuridica[id, nome, telefone, CNPJ, inscricaoEstadual].
2 - Usando um tabela para todas as classes, neste caso, você sempre terá campos vazios de acordo com a entidade. Por exemplo, ao salvar uma PessoaFisica os campos CNPJ e inscricaoEstadual ficarão vazio, e quando salvar uma PessoaJuridica os campos RG e CPF ficaram vazios. Usando esse esquema não e possível que uma Pessoa Fisica tenha ID igual ao de uma Pessoa Juridica.
Portanto, Pessoa[id, nome, telefone, RG, CPF, CNPJ, inscricaoEstadual, DTYPE]
OBS: O campo DTYPE é utilizado para identificar à qual classe pertence o registro em questão. O nome deste campo pode ser outro mas esse é o usualmente utilizado.
3 - Usando uma tabela por classe, nesse caso você terá uma tabela Pessoa[id, nome, telefone], uma PessoaFisica[idPessoa, RG, CPF] e uma PessoaJuridica[idPessoa, CNPJ, inscricaoEstadual]. Usando esse esquema não e possível que uma Pessoa Fisica tenha ID igual ao de uma Pessoa Juridica.
Observe nas tabelas PessoaFisica e PessoaJuridica a necessidade da chave estrangeira relacionada a tabela Pessoa.
Após mapear as classes, Pessoa, PessoaFisica e PessoaJuridica… você pode mapear o cliente da seguinte forma:
[code]public class Cliente {
int id;
Pessoa pessoa;
//outros atributos de cliente
}[/code]
Com isso, no BD você terá um relacionamento entre cliente e pessoa. Ficaria algo como Cliente[id, idPessoa, outrosAtributos]. Como o cliente tera uma chave estrangeira, idPessoa, relacionada a Pessoa aconselho a utilizar a estrategia 1 ou 2 dentre as apresentadas acima.
Bom, é isso cara. Espero que tenha ajudado.
Abraços.