F_All 0 Denunciar post Postado Novembro 23, 2014 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
Motta 645 Denunciar post Postado Novembro 24, 2014 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
F_All 0 Denunciar post Postado Novembro 24, 2014 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
Motta 645 Denunciar post Postado Novembro 24, 2014 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
F_All 0 Denunciar post Postado Novembro 24, 2014 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