Ir para conteúdo

POWERED BY:

Arquivado

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

Silvio Sampaio

Usar Chave Estrangeira para atualizar 2 tabelas

Recommended Posts

Amigos,

 

Ainda preciso de ajuda.

 

Mas agora com um pouco mais de domínio da ferramenta e conhecendo o básico Mysql

 

Já consigo realizar meus select's, inserção de dados nas tabelas, alerações de caracteristicas etc

 

Entretanto minha grande dificuldade agora é com CHAVE ESTRANGEIRA, pois é, pode parecer repetitivo mas sem um exemplo prático eu não conseguirei entender

 

Pois já vi vários videos no youtube, li orientações e ainda não consegui assimilar a lógica desta utilização.

 

Segue meu exemplo prático (confesso que bastante incomum)

 

 

tb_emprestimo

id Colaborador Patrimônio Descrição Emprestimo Setor

1 Jovem Aprendiz 68143 Reunião no auditório 29/5/2012 15:20:28 Administração

2 Adriana Silva Santos 80404 Eventos externos 29/5/2012 16:00:46 Secretaria Escolar

3 Clovis Campagnolo 68142 Aulas N I 1/6/2012 10:02:55 Educação Integral

 

tb_entrega

id Colaborador Patrimônio Devolução Devolvido

1 Jovem Aprendiz 68142 29/5/2012 16:19:10 Não

2 Adriana Silva Santos 80404 30/5/2012 10:43:03 Não

3 Clovis Campagnolo 68142 1/6/2012 11:00:53 Não

 

 

Como todos são bem sábios aqui creio ficou claro o interesse

A idéia é que toda vez que alterar algum "Colaborador" ou "Patrimônio" da tabela EMPRESTIMO essa atualização ocorra nos mesmos campos da tabela ENTREGA.

 

Para isso no PHPMYADMIN na tabela ENTREGA usei a seguinte opção:

 

FOREIGN KEY INNODB tb_emprestimo.id on delete on cascate

 

No fim das contas eu relacionei os campos IDs das duas tabelas, mas no ACCESS isso não tem funcionado na prática

 

Quem me dá uma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Silvio,

bom dia.

 

vamos por partes...

 

1 - Acho que seria legal você remover o campo COLABORADOR das duas tabelas e deixar apenas o ID do colaborador,

isso deixa suas tabelas enxutas sem dados duplicados e reduz o tamanho da base, dê uma lida em algum artigo sobre normalização de tabela

 

2 - Creio que você poderia criar uma unica tabela EMPRESTIMO adicionando os campos DATA DE DEVOLUCAO e DEVOLVIDO da tabela ENTREGA e talvez mais alguns campos como dias/ horas atraso, multa e obs

 

3 - Agora, se voce for deixar as tabelas como estão você pode num unico UPDATE alterar as duas tabelas

por exemplo:

 

UPDATE TB_EMPRESTIMO EMP , TB_ENTREGA ENT

SET ENT.COLABORADOR = 'ZEZINHO',

EMP.COLABORADOR = 'ZEZINHO'

WHERE EMP.ID = 1

 

OU

 

UPDATE TB_EMPRESTIMO EMP , TB_ENTREGA ENT

SET ENT.PATRIMONIO = 25684,

EMP.COLABORADOR = 25684

WHERE EMP.ID = 3

 

 

Espero ter ajudado,

se não era isso que você esperava

me avisa que agente procura outra solucao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um post que explica bem como funciona a chave estrangeira, de maneira bem simples, dê uma lida para entender melhor esse mecanismo.

Link não autorizado removido

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá FernandoPhP e Caio Cardoso,

 

Desculpem a ausência do fórum nesse período, mas por motivos de força maior estive indisponível para esse projeto por um tempo.

 

 

Após a dicas de vocês 2, consegui realizar o que buscava. Deixe-me atualizá-los;

 

 

http://4.bp.blogspot.com/-swT40CwQQdI/T9nVZRz30nI/AAAAAAAAAHY/OwmIf_7g9rQ/s1600/tb_cadastro_equip.jpg

 

http://3.bp.blogspot.com/-hSUqHW70N0g/T9nRqWWcdAI/AAAAAAAAAG8/3F7dbKqI7ZA/s1600/tb_emprestimo.jpg

 

 

http://4.bp.blogspot.com/-KBe7YaqwcDQ/T9nRsUkUNYI/AAAAAAAAAHE/6Psqcw8zqps/s1600/tb_entrega.jpg

 

 

AGORA OUTRO PROBLEMA:

 

Como posso distinguir e em seguida excluir da consulta equipamentos que estiverem emprestados?

Para que eles não se mostrem disponivéis para outro empréstimo enquanto não forem devolvidos?

 

Caminhei por aqui, mas ainda não consegui...

 

Parte 1

 

select distinct Patrimônio from bd_helpdesk.tb_emprestimo

 

inner join bd_helpdesk.tb_entrega on tb_emprestimo.id=tb_entrega.cod_emprestimo

 

where Devolvido='Não' order by Patrimônio

 

 

Parte 2

 

select Patrimônio from tb_cadastro_equip where `Status` = 'Ativo' and `Empréstimo` = 'Sim'

 

 

Parte 3

 

(select Patrimônio from tb_cadastro_equip

 

where `Status` = 'Ativo' and `Empréstimo` = 'Sim')

 

union

 

(select distinct Patrimônio from bd_helpdesk.tb_emprestimo

 

inner join bd_helpdesk.tb_entrega on tb_emprestimo.id=tb_entrega.cod_emprestimo

 

where Devolvido='Não' order by Patrimônio)

 

 

IMPORTANTE: Todos os select's estão funcionando perfeitamente separados...

 

Mas que lógica pode ser aplicada agora p/ conseguir subtrair no resultado da consulta os equipamentos emprestados não-devolvidos?

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.