Herança e Banco de Dados

4 respostas
F

Boa noite pessoal.

Comecei a fazer um programa pra estudo e tive uma duvida quanto ao banco de dados.
Vamos lá.

Eu tenho uma classe Produto e outras subClasse, como Roupas, Cosmeticos, etc.
Tenho uma outra classe chamada Imagem que é relacionada com Produtos, todos produto pode ter uma ou mais imagens.

Na parte do java não tenho dúvidas quanto a herança o problema que estou tendo é como efetuar esta modelagem no banco de dados.
Devo criar uma tabela no banco de dados para a super classe e cada subclasse separada?
Minha tabela imagem possui como chave estrangeira apenas o idProduto, portanto se criar várias classe, iriam ter ids repetidos e imagens que não correspondem aos produtos.

Obrigado.

4 Respostas

Roselito_Favero_da_S

Se uma imagem sua qualquer tem um idProduto, ela fatalmente corresponde àquele produto, a não ser que ele tenha sido apagado. É óbvio que se há várias imagens com mesmo idProduto, é porque aquele produto tem várias imagens associadas…
Você é que precisa decidir se suas relações serão um-para-um ou um-para-muitos…

F

Oi Roselito, obrigado pela resposta, mas vamos lá.

Eu teria apenas uma tabela Imagens, caso eu crie a classe Produto (superclasse) e as subclasses (roupas, cosmeticos, etc), cada tabela dessa irá gerar seu próprio id, este é meu problema, pois se cada tabela gerar seu id, se temos pelo menos 3 tabelas, teremos 3 ids com o número 1 por exemplo. Então como ficaria pra eu poder setar este id dos produtos na tabela Imagem?
Esta é a minha dúvida, como tratar no banco de dados quando fazemos herança no java.
Valeu

fabiocortolan

Cara, no seu caso eu geralmente tenho uma tabela para cada subclasse e uma fk para cada tabela, ex:
Tabela Roupas
ID
DESCRICAO

Tabela Cosmeticos
ID
DESCRICAO

Tabela Imagens
ID
IMAGEM
FKROUPAS
FKCOSMETICOS

Não sei se é a melhor solução (acredito q não seja) mas para mim até o momento funcionou bem, tbm não tive muito tempo p/ pesquisar uma solução melhor! Vou acompanhar esse tópico d perto p/ ver as dicas :wink:

Roselito_Favero_da_S

Você não relaciona um id de uma tabela com o id de outra tabela - só quendo a relação é um-para-um. No caso de relações que envolvem “muitos”, sempre relacionamos a chave primária da tabela “um” com a chave estrangeira da tabela “muitos”.
Assim, sua tabela imagens vai ter uma chave primária e também vai ter uma chave estrangeira, para relacionar com os produtos.
E há várias maneiras de criar a chave primária, não precisa necessariamente ser um código crescente, pode ser também uma combinação de dois atributos, desde que retorne um valor único.
Particularmente, eu uso sempre um número crescente.

Criado 25 de setembro de 2013
Ultima resposta 25 de set. de 2013
Respostas 4
Participantes 3