Ir para conteúdo
Fórum Script Brasil
  • 0

ajuda em relacionamento n:m


RicardoRP

Pergunta

Boas pessoal.

Estou com este problema(mais duvida na vdd) sempre fiz 1:n e td daa certo.

Ao fazer relacionamento muitos para muitos sei que é necessário uma terceira tabela relacional.Só não estou conseguindo entender o conceito desse relacionamento.

Tenho as tabelas assim:

tb_categoria

id

id_categoria

nome

tb_produtos

id

id_categoria

nome

descricao

já a terceira tabela seria assim?

tb_relacional

tb_categoria_id_categoria

tb_produtos_id_categoria

pra mim isso não faz sentido na hora de buscar os dados no select.

eu deveria add na tb_relacional o id da tb_produto?

Vlw

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi Ricardo,

Num relacionamento muitos para muitos, entre as tabelas produtos e categorias, a tabela de relacionamento recebe a chave primaria da tabela produtos e a chave primaria da tabela categoria.

Assim, o modelo correto seria:

categoria (tabela categoria)

idcategoria

nmcategoria

rl_produtos_categorias (tabela de relacionamento entre categorias e produtos)

idcategoria

idproduto

produtos (tabela Produto)

idproduto

nmproduto

dsproduto

Quando você quizer saber quais produtos estão em uma categoria você poderá pesquisar em 3 formas distintas:

1a. somente pelo código

select idproduto 
from rl_produtos_categorias 
where idcategoria = 3
2a. informando o nome dos produtos
select p.idproduto, p.nmproduto 
from rl_produtos_categorias rl
inner join produto p ON p.idproduto = rl.produto
where idcategoria = 3
3a listando o nome do produto e informando o nome da categoria na cláusula where
select p.idproduto, p.nmproduto
from categoria c
inner join rl_produtos_categorias rl ON rl.idcategoria = c.categoria
inner join produto p ON p.idproduto = rl.idproduto
where c.mcategoria="ESPECIAL"

Outra coisa a ser lembrada é que existirão ateributos específicos ao relacionamento. Ou seja atributos que não são nem de produto e nem da categoria.

Exemplo: data em que um produto entrou em uma categoria

Esta data não pertence ao produto e também não pertence a categoria portanto ela deverá ficar na tabela de relaconamentos.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Denis

Acho que entendi =D

Como em 1:n o relacionamento são sempre a mesma coluna das 2 tabelas eu me perdi nisso. não sabia que tinha que pegar uma coluna de cada tabela para relacionar as duas na tb de relacionamento rs.

Vou tentar me acertar aqui agora hehe

Vlw a ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Pessoal,

A Tabela Relacionamento deve receber uma chave primaria e as outras como codproduto deverao ser estrageiras ou deve ser uma tabela sem indexes?

Vocês Podem me responder essa pergunta.

Pois como a Tabela de Relacionamento recebe mais de um index das demais tabelas, ela (rl) deve ser indexada?

Estou com um problema de compreesao desse texto, algum bom samaritano pode me dar um help?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Pessoal,

A Tabela Relacionamento deve receber uma chave primaria e as outras como codproduto deverao ser estrageiras ou deve ser uma tabela sem indexes?

Vocês Podem me responder essa pergunta.

Pois como a Tabela de Relacionamento recebe mais de um index das demais tabelas, ela (rl) deve ser indexada?

Estou com um problema de compreesao desse texto, algum bom samaritano pode me dar um help?

Oi pinguim007,

Criar um índice primário na tabela de relacionamento depende muito da aplicação que você está desenvolvendo.

Já tive ocasiões em que tive que criar um índice primário independente com auto_increment, pois a tabela de relacionamento iria se relacionar com outras tabelas;

Em outra ocasião um índice primário com as duas chaves "idcategoria, idproduto" foi o suficiente.

Em outra optei por criar duas chaves únicas, uma por "idcategoria, idproduto" e outra por "idproduto, idcategoria", que por motivos de pesquisa nas tabelas, foram a solução.

Veja o que é melhor pra você.

P.S.: Os exemplos acima foram baseados nos exemplos dados em minha primeira resposta.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá então,

minhas teblelas estão da seguinte maneira:

cliente

idcliente

produto

idproduto

vendedor

idvendedor

vendas

idcliente

idproduto

idvendedor

onde no cliente idcliente e chave primaria

onde no produto idproduto e chave primaria

gostaria de colocar todos as vendas com chaves estrangeiras como eu faria?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá então,

minhas teblelas estão da seguinte maneira:

cliente

idcliente

produto

idproduto

vendedor

idvendedor

vendas

idcliente

idproduto

idvendedor

onde no cliente idcliente e chave primaria

onde no produto idproduto e chave primaria

gostaria de colocar todos as vendas com chaves estrangeiras como eu faria?

create table cliente(
idcliente int unsigned not null auto_increment,
... relação de campos do cliente,
primary key(idcliente))engine innodb;

create table produto(
idproduto int unsigned not null auto_increment,
... relação de campos do produto,
primary key(idproduto)) engine innodb;

create table vendedor(
idvendedor int unsigned not null auto_increment,
...relação de campos do vendedor,
primary key(idvendedor)) engine innodb;

CREATE TABLE vendas(
idcliente int unsigned int not null,
idproduto int unsigned int not null,
idvendedor int unsigned int not null,
... relação de campos do relacionamento,
CONSTRAINT FK_vendas_001 FOREIGN KEY (idcliente) REFERENCES cliente(idcliente) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT FK_vendas_002 FOREIGN KEY (idproduto) REFERENCES produto(idproduto) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT FK_vendas_003 FOREIGN KEY (idvendedor) REFERENCES vendedor(idvendedor) ON UPDATE NO ACTION ON DELETE NO ACTION) engine innodb;

Observe que os campos da tabela relacionada vendas possuem os mesmos tipos de dados das tabelas originais.

O unsigned foi inserido para aproveitar todo o potencial do tipo int, pois para campo auto_increment não é possível ter valores negativos.

Mais referências procure a sintaxe de CREATE TABLE e ALTER TABLE no manual do MySQL de sua versão.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...