Dúvidas em MySQL e Java  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
renatoes
JavaBaby
[Avatar]

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.
Yky Mattshawn
Virtual Machine Man
[Avatar]
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
[Email] [MSN] [ICQ]
renatoes
JavaBaby
[Avatar]

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.
Yky Mattshawn
Virtual Machine Man
[Avatar]
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
[Email] [MSN] [ICQ]
andreiribas
JavaEvangelist
[Avatar]

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
[MSN]
renatoes
JavaBaby
[Avatar]

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.
Yky Mattshawn
Virtual Machine Man
[Avatar]
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
[Email] [MSN] [ICQ]
Yky Mattshawn
Virtual Machine Man
[Avatar]
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
[Email] [MSN] [ICQ]
renatoes
JavaBaby
[Avatar]

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.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team