| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 20:30:03
|
renatoes
JavaBaby
![[Avatar]](/images/avatar/0f1660f4c5defc5b8d938ecd39837d11.jpg)
Membro desde: 04/09/2006 20:00:45
Mensagens: 84
Localização: Londrina-PR
Offline
|
Boa tarde,
Sei que este não é o local mais apropriado para a pergunta, visto que não se trata de uma dúvida em Java (ao menos não totalmente), mas ainda assim não obtive uma resposta que eu entendesse a respeito deste assunto. Minhas dúvidas são as seguintes:
-Tenho uma tabela pessoa como campos id (PK) e nome
-Tenho duas tabelas, funcionário e cliente, que são especializações de pessoa. Funcionário tem o campo localDeTrabalho e Cliente tem o campo localização. Tanto funcionário e cliente possuem como chave primária a chave estrangeira de pessoa.
Na minha aplicação, devo cadastrar funcionários e clientes. Como eu insiro (ou deleto) um funcionário F (ou um cliente C) tanto na tabela pessoa como na tabela funcionário (cliente) ? Ou seja, quando há uma especialização, como eu insiro e deleto as informações tanto da tabela pai qto da tabela filha de modo correto?
Esta dúvida é tanto em relação ao banco de dados qto aos comandos que devo executar na minha aplicação para que o resultado seja correto.
Não tenho muito conhecimento em SQL e banco de dados, por isso agradeço por qlq ajuda de vocês.
[]'s
|
self.life = rand()
Our will will guide us to a place where we belong. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 20:54:34
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
Cara, não sei se entendi muito bem a sua dúvida, mas acredito que o que você tem de fazer é, na sua chave-estrangeira na tabela filha, definir o "On Delete" para "Cascade". Dessa forma, caso o registro da tabela pai seja excluído, todos os registros da tabela filha que apontam para o registro excluído também serão excluídos.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:00:42
|
renatoes
JavaBaby
![[Avatar]](/images/avatar/0f1660f4c5defc5b8d938ecd39837d11.jpg)
Membro desde: 04/09/2006 20:00:45
Mensagens: 84
Localização: Londrina-PR
Offline
|
Yky,
Consegui chegar a esta conclusão tb
Mas minha dúvida quanto à inserção de dados permanece.
Como eu faço para que os dados da parte "pessoa" de um funcionário/cliente sejam inseridos corretamente na tabela pessoa?
se eu der somente INSERT INTO funcionario(...) ele soh vai inserir os campos do funcionario na tabela funcionario, mas preciso guardar seus dados de pessoa na tabela pessoa.
[]'s e obrigado
|
self.life = rand()
Our will will guide us to a place where we belong. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:05:26
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
Mas cara, tu não deves replicar as informações nas duas tabelas. Já que as informações têm de estar na tabela Pessoa, e somente os campos especializados têm de estar na sua respectiva tabela, o que tu precisas fazer é inserir os dados na tabela Pessoa.
Então, na tabela Funcionario OU na tabela Cliente tu inseres SOMENTE a ID (PK) da tabela Pessoa.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:14:20
|
andreiribas
JavaEvangelist
![[Avatar]](/images/avatar/39016cfe079db1bfb359ca72fcba3fd8.jpg)
Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline
|
cara eu te recomendo aprender o framework de persistência Hibernate.
Ele suporta herança, o mapeamento através de annotations é muito simples, não precisa escrever sql.. enfim.. a tua produtividade aumenta muito.
Mas como você disse que não sabe muito de sql e banco de dados, também é uma boa aprender sql e banco de dados, porque isso sempre é útil.
Abraços
|
SCJP 6.0
OCE JSP and Servlet Developer, JEE 6 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:15:27
|
renatoes
JavaBaby
![[Avatar]](/images/avatar/0f1660f4c5defc5b8d938ecd39837d11.jpg)
Membro desde: 04/09/2006 20:00:45
Mensagens: 84
Localização: Londrina-PR
Offline
|
Então...
Por exemplo, quero inserir o funcionario Zé que mora em São Paulo
Dou lá INSERT INTO pessoa(nome) VALUES('Zé')
como eu vou saber a id da pessoa que representa o Zé??
|
self.life = rand()
Our will will guide us to a place where we belong. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:24:08
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:31:50
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
Acho que no seu caso o melhor a se fazer é desepecializar pessoa e criar 2 tabelas: Funcionarios e Clientes.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 21:31:59
|
renatoes
JavaBaby
![[Avatar]](/images/avatar/0f1660f4c5defc5b8d938ecd39837d11.jpg)
Membro desde: 04/09/2006 20:00:45
Mensagens: 84
Localização: Londrina-PR
Offline
|
infelizmente não posso fazer isso Yky, e também não teria pq, haveria muita redudância de dados.
/* Editando */
Para ilustrar o caso desenvolvi este código:
Minha dúvida é: como faço para inserir o nome do cd em produto?
ps.: Conheço uma solução "gambiarra" que não sei se irá gerar efeitos colaterais. Eis ela:
INSERT INTO produto(nome) VALUES('Zé')
SELECT @last = LAST_INSERT_ID(); //isso armazena a última id armazenada
INSERT INTO cd VALUES(@last,'Sertanejo ');
[]'s
|
self.life = rand()
Our will will guide us to a place where we belong. |
|
|
 |
|
|