¿Cuál es la diferencia real entre la relación uno a varios y la relación de varios a uno?
Existen diferencias conceptuales entre estos términos que deberían ayudarlo a visualizar los datos y también posibles diferencias en el esquema generado que deben entenderse completamente. Sin embargo, sobre todo, la diferencia es de perspectiva.
En una relación de uno a varios , la tabla local tiene una fila que puede estar asociada con muchas filas de otra tabla. En el ejemplo de SQL para principiantes , uno Customerpuede estar asociado a muchos Orders.
En la relación opuesta de muchos a uno , la tabla local puede tener muchas filas asociadas con una fila de otra tabla. En nuestro ejemplo, muchos Orders pueden estar asociados a uno Customer. Esta diferencia conceptual es importante para la representación mental.
Además, el esquema que respalda la relación se puede representar de manera diferente en las tablas Customery Order. Por ejemplo, si el cliente tiene columnas idy name:
id,name
1,Bill Smith
2,Jim Kenshaw
Luego, para que Ordera se asocie con a Customer, muchas implementaciones de SQL agregan a la Ordertabla una columna que almacena el idde los asociados Customer(en este esquema customer_id:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
En las filas de datos anteriores, si miramos la customer_idcolumna de identificación, vemos que Bill Smith(id-cliente # 1) tiene 2 pedidos asociados con él: uno por $ 12.34 y otro por $ 7.58. Jim Kenshaw(customer-id # 2) tiene solo 1 pedido por $ 158.01.
Lo que es importante tener en cuenta es que, por lo general, la relación de uno a muchos no agrega ninguna columna a la tabla que es "uno". No Customertiene columnas adicionales que describan la relación con Order. De hecho, la Customerfuerza también tienen una relación de uno a varios con ShippingAddressy SalesCalltablas y sin embargo no tienen columnas adicionales a la Customermesa.
Sin embargo, para que se describa una relación de muchos a uno, a menudo idse agrega una columna a la tabla "muchos" que es una clave externa a la tabla "uno"; en este caso customer_id, se agrega una columna al Order. A la orden asociada # 10 por $ 12.34 a Bill Smith, asignamos la customer_idcolumna a Bill Smith's id 1.
Sin embargo, también es posible que haya otra tabla que describa la relación Customery Order, de modo que no sea necesario agregar campos adicionales a la Ordertabla. En lugar de agregar un customer_idcampo a la Ordertabla, podría haber una Customer_Ordertabla que contenga claves para Customery Order.
customer_id,order_id
1,10
1,11
2,12
En este caso, uno a muchos y muchos a uno son todos conceptuales, ya que no hay cambios de esquema entre ellos. Qué mecanismo depende de su esquema y la implementación de SQL.
Espero que esto ayude.