[Duvida] Modelagem de Banco de Dados

8 respostas
W

Estou com uma duvida na relação de três tabelas.

Tenho as tabelas usuario, cliente e funcionario.
O usuario pode ser um cliente ou um funcionario
Gostaria de saber como ficara essa relação.

Att,
Wanderson Carvalho.

8 Respostas

M

Wanderson, depende da situação. Se cliente e funcionário tiverem praticamente os mesmos campos, o mais simple é você colocar tudo em uma tabela só, com uma flag indicando se é cliente ou funcionário.

Se os campos forem totalmente diferentes, separe os campos comuns em uma outra tabela (usuário) e coloque nela uma flag indicando se é usuário ou funcionário.

Espero ter ajudado

cicerogomes

bom dia, wanderson

bom, vc pode fazer um especializar tua classe ou tabela, nas classe cria uma classe Pessoa e dai cria duas filhas herdando de Pessoa e apenas os atributos que nao sao comuns ira para as filhas, no caso das tabelas vc poder fazer dessa forma tbem, so q a sua foreign key tbem vai ser primary key, mas se nao queres dessa forma faz em uma unica tabela, tabelao :).

ricardosoares

concordo com o Cícero

W

Fiz da seguinte forma,
Na minha tabela usuario coloquei os campos:

id_usuario
login;
senha;
tipo_usuario; // flag(cliente ou funcionario)
id_cliente
id_funcionario

Só na minha aplicação vou ter uma sessão onde vou armazenar alguns dados do usuario logado.
dai acrescentei na minha tabela usuarios id_cliente e id_funcionario, se o usuario ser um funcionario
armazena o id do funcionario cadastrado e deixa o id_cliente nulo.

Pensei de outra forma também, retirar os campos id_cliente e id_funcionario e no campo id_usuario
armazena o id_cliente ou funcionário dependendo do tipo de usuario que ele ser.

Qual opção vocês acha ?

Obrigado!
Att,
Wanderson Carvalho.

P

a solução do cícero era a mais correta.

Não faz sentido você criar essa flag e ter 3 ids.
Isso gambiarra meu amigo.

ou controla pela flag e mantem um único id. Ou deixa esses esquema aí… com 3 ids e elimina a flag… o que acho errado

cicerogomes

Eu faria, da seguinte forma, nao sei se concordas comigo, na minha tabela filha Usuario teria o atributo status ou algo que identificasse esse status na sessao, dai gardaria esse valor ficaria na minha sessao enquanto estivesse lougado. dai so Usuario teria esse atributo.

W

Mas olha só, vou armazena o nome do cliente na sessão então na autenticação do usuário eu tenho que
saber o nome dele que está na tabela de clientes ou funcionário.

ricardosoares

o melhor, na minha opinião, seria algo como:

pessoa

id
nome
email
cpf

usuario

id
pessoaId
login
senha
ativo

cliente

id
pessoaId
dataCadastro
vip

Criado 27 de julho de 2010
Ultima resposta 27 de jul. de 2010
Respostas 8
Participantes 5