Fórum Evitando Problemas #336556
21/01/2007
0
Vamos supor que a tabela [b:fe58465574]usuarios[/b:fe58465574] tenha ligação com a tabela [b:fe58465574]caixa[/b:fe58465574].
e a tabela [b:fe58465574]clientes[/b:fe58465574] tem ligação com a tabela [b:fe58465574]vendas[/b:fe58465574].
Vamos supor que temos um sistema de caixa de vendas, o usuário faz o login abre o caixa, realiza as vendas e depois fecha o caixa!
Vamos supor que o usuário que fez o login é o id=1 e o nome dele é Pedro
quando ele abrir o caixa(id=10) vai cadastrar na tabela caixa o usuario=1 e a hora que abriu!
Depois foi realizado as vendas onde na tabela [b:fe58465574]vendas[/b:fe58465574] vai ter o caixa=10 e o cliente=?!
Até ai tudo blz o grande problema é se depois de um tempo o usuario for tipo despedido ai ele é deletado!
Ai na hora que vamos fazer a consulta do caixa e quem foi que abriu o caixa não vai existir pq ele da erro na consulta SQL!
SQL= ´SELECT c.*,u.nome as usuarionome FROM caixa as c, usuario as u WHERE u.id=c.usuario and c.id=10´
ele faz a pesquisa mas não vai achar pq o usuario=1 já foi deletado ai ele vai retornar que não existe o caixa!
Alguem saberia me informar como proceder ou como vcs procedem nesse tipo de problema, como resolver?
Rudá
Curtir tópico
+ 0Posts
21/01/2007
Emerson Nascimento
Gostei + 0
21/01/2007
Rudá
Não tem como ficar colocando em cada tabela se ta deletado, se não fizer isso depois de um tempo a tabela estaria grande de mais e o sistema cada vez mais lento!
Gostei + 0
21/01/2007
Emerson Nascimento
de qualquer forma, a dica está dada...
Gostei + 0
21/01/2007
Rudá
Gostei + 0
21/01/2007
Aroldo Zanela
Conforme o Emerson já disse, isso viola o princípio básico de modelagem de dados, ou melhor, de integridade referencial. Os SGBDs são projetados para suportar grandes volumes de dados, visando assegurar diversas necessidades de negócio. Essa questão, além da referida integridade referencial, proporciona a recuperação histórica das informações.
Obviamente que o erro que você menciona pode ser contornado com left join ao invés de inner join, mas analise atentamente as informações aqui repassadas para não ter problemas maiores no futuro.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)