Cara, você poderia fazer da seguinte forma:
Cria uma classe Pessoa, cria Cliente e Fornecedor que estende de Pessoa. Cria uma classe abstrata Doc e as classes PessoaFisicaDoc e PessoaJuridicaDoc filhas de Doc. Essa classe Doc vai ter o que é comun aos documentos e a pessoafisica o que é especifico de pessoa fisica e a jurídica o que é específica de jurídica. Coloquei um método abstrato em doc chamado ‘validar’. PessoaFisicaDoc vai estender de Doc e vai implementar a lógica de validação do documento da pessoa Física e o mesmo acontece para pessoa jurídica só que para CNPJ, CACEAL, ou qualquer outros documentos associados a pessoa jurídica.
Para explicar melhor a abaixo vai um simples diagrama de classes e os códigos das classes. Lembrando que estão incompletos sendo apenas para uma melhor visualização de como ficaria. As implementações finais devem ter os métodos e atributos pertinentes a cada classe.
Da forma modelada abaixo, atende ao requisito pois um cliente pode ser pessoa fisica ou juridica e fornecedor pode ser fisica ou juridica o que vai definir vai ser a implementação de DOc que vai estar em Pessoa. Veja abaixo e espero que dê pra entender melhor!
Com relação a tabela no banco de dados, o cpf ou cnpj seria persistido em uma coluna numDoc ai vc poderia colocar um flag identificando o tipo de pessoa, fisica ou juridica.
Espero que tenha ajudado, e qualquer coisa manda as ordens!
Diagrama de classes

Classes Java
public class Pessoa {
private Doc doc;
/*
* private ...
* private ...
* private ...
*
* Mais os outros atributos referentes a pessoa
*/
public Pessoa(){
//
}
public Doc getDoc() {
return doc;
}
public void setDoc(Doc doc) {
this.doc = doc;
}
}
public class Cliente extends Pessoa{
/*
* atributos referentes a cliente
*/
public Cliente(){
//
}
/*
* sets e gets
*/
}
public class Fornecedor extends Pessoa{
/*
* atributos referentes a fornecedor
*/
public Fornecedor(){
//
}
/*
* sets e gets
*/
}
public abstract class Doc {
private String numDoc;//número do documento independente de ser cpf ou cnpj. Na tabela tb seria num_doc
public Doc(){
//
}
//Cada tipo de documento vai implementar a sua validação específica.
//Esse método poderia ser tb ao ínves de retornar um boolean retornar void e
//lançar uma exception caso seja o documento inválido. Por exemplo InvalidDocumentExcpetion
public abstract boolean validar();
}
public class PessoaFisicaDoc extends Doc{
/*
* atributos referentes ao documento de pessoa fisica
*/
public PessoaFisicaDoc(){
//
}
/*
* sets e gets
*/
public boolean validar() {
return true;//implementação da lógica de validação de cpf
}
}
public class PessoaJuridicaDoc extends Doc{
/*
* atributos referentes ao documento de pessoa jurídica
*/
public PessoaJuridicaDoc(){
//
}
/*
* sets e gets
*/
public boolean validar() {
return true;//implementação da lógica de validação de cnpj
}
}
Victor Lindberg