Eu acho que já está bem explicado, mas vou tentar ajudar também,
Primeiramente, sendo uma classe bem genérica, não faria mais sentido Pessoa
ser abstrata? Ou você realmente precisa de entidades mais genéricas em seu programa? (Porque se for trabalhar só com Cliente
e Funcionário
(e suas heranças) ter objetos muito genéricos não ajudaria muito, acredito eu).
Enfim…
Digamos que você tem uma classe mais genérica Pessoa
(com atributos String nome, int CPF
, etc). Dessa classe herdam as mais específicas Cliente
e Funcionário
(com seus respectivos campos e métodos especificos).
Começando pelo banco :
Você pode criar a tabela Pessoa
, que guarda as informações genéricas.Ou seja, ela tem colunas :
int ID_Pessoa (PK, identity, not null)
;
varchar(max) Nome_Pessoa (not null)
;
etc…
E também tem as tabelas Cliente
e Funcionário
, que guardam as informações específicas dessas respectivas entidades.
Para fazer a ligação entre as tabelas, você pode adicionar em Cliente
e Funcionário
a coluna ID_Pessoa
, e adicionar uma FK esta coluna referenciando ID_Pessoa
da tabela Pessoa
. Assim, ao consultar dados de um Funcionário
, por exemplo, você pode puxar junto, pela FK, os dados genéricos dele guardados em Pessoa
.
Você ainda pode adicionar um campo na tabela Pessoa
como "Entidade"
, por exemplo, que guarda um texto informado o que aquele registro é (se é Cliente
ou Funcionário
).
No programa, você pode ter uma PessoaDAO
, que terá, por exemplo, o método inserirPessoa(Pessoa p)
. Esse método insere um objeto Pessoa
no banco de dados, sendo ele uma Pessoa
genérica, um Cliente
ou um Funcionário
.
Crie então ClienteDAO
e FuncionarioDAO
. Nelas, crie o métodos inserirCliente(Pessoa p)
e insrirFuncionario(Pessoa p)
, respectivamente.
Nesses dois métodos supracitados, você pode chamar o método inserirPessoa(Pessoa p)
, para inserir genericamente (ou seja, inserir aqueles dados como CPF
, etc). Depois você usa um ResultSet
para recuperar o ID da Pessoa
que você inseriu e, logo após, você insere na tabela Cliente
/ Funcionario
os dados específicos, usando o ID que você recuperou.
Pode ainda usar métodos estáticos para recuperar o ID_Pessoa
, se precisar em um outro contexto, mas não sei se é uma boa prática.
Enfim, acho que é isso…