Modelagem Para Cadastro

É o seguinte, estou criando uma modelagem de cadastro da maneira mais abrangente possivel.
As entidades são Pessoa, Pessoa Física, Pessoa Jurídica, Fornecedor e Cliente

Abaixo a entidade pessoa. Eu adiciono a pessoa os dados de contato e endereço para facilitar as consultas futuras.
public class Pessoa { private String ativo; private String apelido; private Endereco endereco; private String dataAtualizacao; private String foneResidencial; private String nome; private String foneCelular; private String foneProfissional; private String sexo; private String dataNascimento; private String dataCadastro; private String email; }

Pessoa Fisica ta tranquila
public class PessoaFisica { private String estadoEmissor; private Pessoa pessoa; private String RG; private String orgaoEmissor; private String dataAtualizacao; private String paisNascimento; private String CPF; private Profissao profissao; private String localNascimento; private String estadoNascimento; private EstadoCivil estadoCivil; }

Pessoa Juridica também ta tranquilo
public class PessoaJuridica extends EntidadeAbstrata implements Serializable { private String nomeFantasia; private Pessoa pessoa; private String Razao; private String CNPJ; }

O que ta complicando pra mim é entender Cliente e Fornecedor.
Primeiro quais atributos os diferenciariam dentro da base.
E o que eu acho mais dificil é como meu cliente ou Fornecedor poderia ser Pessoa Fisica ou Pessoa Juridica estando dentro da mesma tabela.

  • Quais os dados que Cliente tem que não tem em Pessoa?
  • Tanto pessoas físicas quanto jurídicas poderão ser clientes?
  • Quais os dados que Fornecedor tem que não tem em Pessoa?
  • Você poderá ter Pessoa Física como Fornecedor?

Para fazer a modelagem corretamente, é necessário entender o negócio. Levante questões inerentes ao negócio para encontrar furos e, com isso, fazer o modelo da melhor forma.