Como relacioanar as tabelas no BD. [RESOLVIDO]

8 respostas
Maureli

Estou construindo uma aplicação para um estacionamento.

Tenho 07 classes:

-BOX
-CLIENTE = COMPOE BOX
-TELEFONE = COMPOE CLIENTE
-ENDERECO = COMPOE CLIENTE
-PAGAMENTO = COMPOE CLIENTE
-CLIENTEINATIVO = HERDA DE CLIENTE
-CLIENTERESERVA = HERDA DE CLIENTE

Tenho as seguintes PKs:

-ID_BOX
-ID_CLIENTE
-ID_TELEFONE
-ID_ENDERECO
-ID_PAGAMENTO
-ID_CLIENTEINATIVO
-ID_CLIENTERESERVA

Tenho as seguintes FKs

-FK_CLIENTE_BOX = ID_CLIENTE referencia ID_BOX
-FK_TELEFONE_CLIENTE = ID_TELEFONE referencia ID_CLIENTE
-FK_ENDERECO_CLIENTE = ID_ENDERECO referencia ID_CLIENTE
-FK_PAGAMENTO_CLIENTE = ID_PAGAMENTO referencia ID_CLIENTE
-FK_CLIENTEINATIVO_CLIENTE = ID_CLIENTEINATIVO referencia ID_CLIENTE
-FK_CLIENTERESERVA_CLIENTE = ID_CLIENTERESERVA referencia ID_CLIENTE

Quero fazer essas classes se relacionarem no Banco de Dados Postgres que estou usando.
Exemplo quando eu consultar a tabela CLIENTE, quero que todas as tabelas relacionadas a cliente com os respectivos IDs sejam setadas támbem.

8 Respostas

doug

Olá

Você está usando algum framework para fazer a comunicação com o banco de dados.
Caso esteja usando Hibernate ou TopLink, não se preocupe, basta mapear as entidades certinhas.

Caso não esteja usando nenhum dos dois, esteja usando JDBC precisa fazer o select não mão para cada FK, para popular os objetos.

Espero ter ajudado
Flws

Maureli

Estou usando o JDBC mesmo.

Deiche-me ver se entendi. Para poder consultar os dados das tabelas do meu banco, vou ter que selecionar cada tabela individualmente.

Mas se eu selecionar a ID_CLIENTE, as tabelas que fazer referencia a essa ID não serão selecionadas tambem?

Obrigado.

doug

Será mais ou menos assim

public Pessoa getPessoa(){

//... abre comunicação
//Select * from Pessoa as p;

Pessoa p = new Pessoa
p.setNome(resultSet.getString("nome"));
//  int fkendereco = recupera no resultSet(fkendereco)

//Select * from Endereco as e where e.pkendereco = ?;
while(enquanto tiver endereco){
    Endereco e = new Endereco
    e.setNumero(resultSetEndereco.getInt("numero"));
    p.addEndereco(e);
}


//fecha comunicação
return p;
}

Esse foi um exemplo que dei, pode ser estruturado de outra forma.

Espero ter ajudado
flws

luxu

amigo abaixo tenho consultas ao banco de dados certo? ou vc tem dúvidas qto a isso?

Relação de clientes do estado de São Paulo (Código, Nome, Cidade)
select cli_codigo, cli_nome, cid_nome
   from clientes cl, cidades ci
   where cl.cid_codigo = ci.cid_codigo and cid_uf = 'SP'

Relação de produtos fornecidos pelo fornecedor  ?Fornecedor 1?
select p.pro_codigo, pro_descr
   from produtos p, fornecedores f, fornecedores_produtos fp
   where fp.for_codigo = f.for_codigo and fp.pro_codigo = p.pro_codigo and for_nome = 'Fornecedor 1'

Relação dos fornecedores que fornecem o produto 02.
select f.for_codigo, for_nome
   from fornecedores f, fornecedores_produtos fp
   where fp.for_codigo = f.for_codigo and pro_codigo = 2

se certo qual os relacionamentos tem? Se não entaum entendo q vc nunca estudou relacionamentos…quero te ajudar ok? não estou aki pra mais nada…

Maureli

Obrigado luxu. realmento sei muito pouco como funciona os relacionamentos no BD.

Mas a minha duvida é a seguinte.

EXEMPLO - tenho 07 tabelas no banco se relacionando como postado no ínicio do tópico. Como faço para deletar um CLIENTE e deletar tudo que está relacionado com ele como TELEFONE / ENDERECO / PAGAMENTO / BOX. Minha maior dúvida é como criar os relacionamentos no banco para poder deletar ou consultar tudo de maneira mais simples.

Anime

Oi,

Sobre deletar,pode ser feito de várias maneiras e dependendo do BD a sintaxe muda um pouco.Mesmo assim vou deixar um exemplo:

http://profissionais.ws/programacao/mysql-programacao/como-criar-triggers-no-mysql.html

Seria bom vc aprender os conceitos de Banco de Dados Relacional,parece simples,mas não é… :wink:

Maureli

Consegui excluir tudo.

Usei o comando cascade ao criar a FK

CONSTRAINT "Fk_cliente_box" FOREIGN KEY (id_cliente) REFERENCES box (id_box) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE

Assim todas referencias seram deletadas.

Obrigado pela Ajuda!!!

Anime

Que bom,mesmo assim aconselho vc baixar essa apostila e estudar um pouco…

http://www.apostilando.com/download.php?cod=3131&categoria=Banco%20de%20Dados

Talvez eu tenha entendido errado… :wink:

Criado 10 de fevereiro de 2011
Ultima resposta 11 de fev. de 2011
Respostas 8
Participantes 4