Java

Eu estou criando uma aplicação ( API ) em Java sobre um sistema de acolhimento de animais de rua.
Que contém as seguintes classes ( objetos ) protetora, fornecedor e administrador.

  • Protetora:Quem cuida dos animais
  • Fornecedor: Uma loja ou empresa que forneça serviços relacionados
    -Adm: Bom adm nem precisa explicar

E elas utilizam alguns atributos em comum como: endereco, senha, email e telefone. Note que todos eles são unicos ( exclusivos) e ai surge o problema.

Eu consigo impedir uma protetora de fazer o cadastro caso use por exemplo um número de telefone que outra protetora esteja usando porem caso um fornecedor cadastre um numero de telefone que ja esteja sendo usado por uma protetora ele consegue fazer o cadastro.

Como eu verifico ( corrijo ) este problema e fazer com que os atributos exclusivos mencionados sejam unicos na relacao entre as classes ?

Normalmente vc não teria as classes Protetor (será que Tutor não seria melhor?), Fornecedor e Adm, vc teria apenas uma classe, Usuario, e cada usuário poderia ter um ou mais cargos.

E é usando cargos que vc controla o acesso às áreas da sua aplicação.

Com isso vc já consegue facilmente saber se um usuário tem ou não permissão de adotar um bichinho ou cadastrar um serviço ou realizar tarefas administrativas.

Tendo apenas uma tabela vc consegue colocar um UNIQUE na coluna de tefone para que um usuário não possa usar um número já cadastrado. Só que isso eu não acho uma boa ideia.

Eu acho melhor vc criar uma tabela só para Contato e relacionar ela com Usuario, pois assim cada usuário poderia ter mais de um contato e não importa se um protetor cadastrar um contato igual ao de um fornecedor, porque o acesso será baseado nos cargos e não em número de telefones.

Se vc quiser mesmo ter uma tabela para cada tipo de usuário, apesar de ser ruim na minha opinião, vc pode facilmente resolver o seu problema. Basta que, antes de efetuar o cadastro de um novo usuário, vc verifique nas 3 tabelas se já tem alguém cadastrado com aquele número, se não, vc prossegue, se sim vc manda um erro.

1 curtida