to montando um diagrama do banco de dados…
de inicio quero criar as entidades Clientes, Fornecedores, Colaboradores e Transportadoras
Queria saber qual seria a melhor maneira, de fazer esses relacionamentos…para que fique bem estruturado.
O banco deve ser da seguinte forma:
Cada Pessoa pode ser Jurídica OU Física
Cada Pessoa pode ser um Cliente OU Fornecedor OU Colaborador OU Transportadora
Cada Pessoa pode ter 0:N endereços.
Cada Pessoa pode ter 0:N telefones.
Fiz um modelo… que esta em anexo…
porem, conforme eu fiz, uma pessoa pode ser cliente, fornecedor, colaborador… ao mesmo tempo.
Teria alguma maneira mais adequada de representar isso?
queria que uma pessoa só possa ser ou cliente ou fornecedor ou colaborador ou transportadora
Olha, infelizmente não há como forçar que um registro de tabela participe em um relacionamento e não participe em outros. Se você realmente precisa dessa validação no banco de dados, você precisará fazer uma stored procedure. De qualquer maneira, não vejo motivo para impor essa trava. É perfeitamente possível que uma empresa se relacione com uma PF/PJ como cliente e fornecedor ao mesmo tempo.
Bom dia,
estava olhando seu banco, não entendo muita coisa, mais uma pergunta, uma pessoa física, ela pode ser uma transportadora? um fornecedor? acho que se você tratar esse caso, resolva seu problema, acredito eu.
Lembrando que não conheço muita coisa, mais fiz um projeto com especialização quando uma pessoa se torna jurídica ou física, eu coloquei as tabelas sem chave primária recebendo somente a chave estrangeira da tabela pessoa, para poder referenciar em outras tabelas, como fornecedor, cliente, essas coisas. Mais uma dica.
Obrigado.
ola amigo…
você tem até razão quanto a transportadora… que não pode ser pessoa física… (Acredito eu hehehe)
porem, um fornecedor pode sim ser pessoa física… autônomo…
Eu deu uma melhorada… unificando as tabelas pessoa fisica e pessoa juridica…
da uma olhada
quanto aos nomes extensos das tabelas, eu fiz para que as tabelas fiquem mais organizadas (em orgem)…
Cara,
Tem uma forma melhor, você pode criar uma tabela pessoa_relacionamento {cliente|colaborador|transportadora|fornecedor}, ligada à pessoa e criar uma terceira com relacionamente M:N, e como PK defina as duas FK, dessa forma uma mesma pessoa pode ser mais de um tipo. Se for possível usar TRIGGER, se não houver nenhuma restrição ao uso, que não é o meu caso, você pode através delas, restringir o que colocar na tabela (Lembrando que PROCEDURE é mais eficaz que as TRIGGERS principalmente no quesito velocidade). Participei de um Projeto de NFE e foi assim que eu implementei, não havia restrição às triggers e ficou muito bom.