Fórum Evitando Problemas #336556

21/01/2007

0

Estou aqui para debater com vcs uma maneira de resolver esse tipo de problema e se vcs já tiveram problemas semmelhantes e como resolveram!

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á

Rudá

Responder

Posts

21/01/2007

Emerson Nascimento

não apague o usuário. coloque uma flag de dimitido ou apagado, mas o mantenha cadastrado.


Responder

Gostei + 0

21/01/2007

Rudá

Mas em outros casos vamos ter que deletar!

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!


Responder

Gostei + 0

21/01/2007

Emerson Nascimento

em cada tabela? é somente na tabela de usuário/funcionário. e isso não tem nada a ver com a performance, a menos que seu sistema esteja mal projetado. e a tabela só ficará grande demais se houver um rodízio muito grande de funcionários (visto que você não exclui os movimentos).
de qualquer forma, a dica está dada...


Responder

Gostei + 0

21/01/2007

Rudá

Não é só na tabelas funcionanarios eu dei só dei um exemplo, pode acontecer não só funcionarios como clientes, etc...


Responder

Gostei + 0

21/01/2007

Aroldo Zanela

Colega,

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar