Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá para todos!
Eu tenho um BD com as seguintes tabelas: unidades, usuarios e despesas. Sendo que:
A tabela usuarios tem como chave estrangeira o ID_unidade, que é a chave primaria da tabela unidades, e a tabela despesas tem como chaves estrangeiras o ID_usuario e o ID_unidade, no entanto o ID_unidade da tabela despesas deve ser o mesmo do usuario. Nesse caso o que eu faço:
ALTER TABLE despesas ADD FOREIGN KEY (ID_unidade) REFERENCES usuarios(ID_unidade)
ou
ALTER TABLE despesas ADD FOREIGN KEY (ID_unidade) REFERENCES unidades(ID_unidade)
ou outra coisa?
Agradeço desde já a ajuda todos. Boa noite!
Motta, obrigado pela resposta!
Creio que possa ser isto que você disse.
A despesa é da unidade, mas o usuário é quem faz o lançamento de uma despesa para sua unidade e somente para ela.
Fiz da seguinte forma:
ALTER TABLE despesas ADD FOREIGN KEY (ID_usuario) REFERENCES ***usuario***(ID_usuario)
ALTER TABLE despesas ADD FOREIGN KEY (ID_unidade) REFERENCES ***unidades***(ID_unidade)
No entanto o BD está incosistente pois permite o lançamento de despesas por um usuario com outra unidade que não a sua.
Agora:
Não sei se devo retirar a FK unidade de despesas e usar a do usuario implicita ou se devo referenciar diretamente a FK unidade do usuario na tabela despesas desta forma:
ALTER TABLE despesas ADD FOREIGN KEY (ID_unidade) REFERENCES usuarios(ID_unidade)
Obrigado mais uma vez!
Crie uma trigger para validar a unidade da despesa x a unidade do usuário , mas atente se seria possível um usuáio mudar de unidade assim em janeiro ele fez uma despesa correta na unidade 1 pois estava lá e agora fez uma na 2 pois foi transferido.
Parece mais uma questão de regras de negócio do que regras de modelagem.
Motta, obrigado, acho que é isso mesmo!
Veja, o usuário somente poderá lançar despesas para sua unidade mas poderá mudar de unidade quando for conveniente, no entanto, as despesas anteriormente lançadas pertencem à unidade antiga do usuário, portanto a despesa tem sua propria unidade que deve coincidir, obrigatoriamente, com a unidade do usuário, somente no momento do lançamento.
Nesse caso acho que devo utilizar a PK (ID_unidade) da tabela unidades, e não da tabela usuarios, como FK da tabela despesas. E a validação, despesas.ID_unidade x usuarios.ID_unidade, como ainda não aprendi a utilizar triggers, acho que vou ter que fazer programaticamente.
Grato pela paciência! :thumbsup:
Valeu!
Unidade é atributo de wuem usuario ou despesa.
A despesa é do usuario ?
Creio não caber a unidade em despesa valeria a do usuario.
Seria isto !?