Qual é a diferença real entre relacionamento um-para-muitos e muitos-para-um?
Existem diferenças conceituais entre esses termos que devem ajudá-lo a visualizar os dados e também possíveis diferenças no esquema gerado que devem ser totalmente compreendidos. A diferença, porém, é principalmente de perspectiva.
Em um relacionamento um-para-muitos , a tabela local possui uma linha que pode ser associada a muitas linhas em outra tabela. No exemplo do SQL para iniciantes , um Customerpode estar associado a vários Orders.
No relacionamento oposto muitos para um , a tabela local pode ter muitas linhas associadas a uma linha em outra tabela. Em nosso exemplo, muitos Orders podem estar associados a umCustomer . Essa diferença conceitual é importante para a representação mental.
Além disso, o esquema que suporta o relacionamento pode ser representado de forma diferente nas tabelas Customere Order. Por exemplo, se o cliente tiver colunas ide name:
id,name
1,Bill Smith
2,Jim Kenshaw
Então, para que um Orderseja associado a a Customer, muitas implementações SQL adicionam à Ordertabela uma coluna que armazena o iddo associado Customer(neste esquema customer_id:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Nas linhas de dados acima, se olharmos para a customer_idcoluna id, vemos que Bill Smith(customer-id # 1) tem 2 pedidos associados a ele: um de $ 12,34 e outro de $ 7,58. Jim Kenshaw(ID do cliente # 2) tem apenas 1 pedido por $ 158,01.
O que é importante perceber é que normalmente a relação um-para-muitos não adiciona nenhuma coluna à tabela que é "um". O Customernão tem colunas extras que descrevem o relacionamento com Order. Na verdade, o Customerpoder também têm um relacionamento um-para-muitos com ShippingAddresse SalesCallmesas e ainda não têm colunas adicionais à Customertabela.
No entanto, para que um relacionamento muitos-para-um seja descrito, geralmente uma idcoluna é adicionada à tabela "muitos" que é uma chave estrangeira para a tabela "um" - neste caso, uma customer_idcoluna é adicionada ao Order. Ao pedido nº 10 associado por $ 12,34 Bill Smith, atribuímos a customer_idcoluna ao Bill Smithid 1 de.
No entanto, também é possível que haja outra tabela que descreva o relacionamento Customere Order, de forma que nenhum campo adicional precise ser adicionado à Ordertabela. Em vez de adicionar um customer_idcampo à Ordertabela, pode haver uma Customer_Ordertabela que contém chaves para Customere Order.
customer_id,order_id
1,10
1,11
2,12
Nesse caso, o um-para-muitos e muitos-para-um são todos conceituais, pois não há mudanças de esquema entre eles. Qual mecanismo depende de seu esquema e implementação de SQL.
Espero que isto ajude.