Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

F_All

FK de FK? Como tratar esse caso de chave estrangeira?

Recommended Posts

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!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.