¿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 Customer
puede estar asociado a muchos Order
s.
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 Order
s 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 Customer
y Order
. Por ejemplo, si el cliente tiene columnas id
y name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Luego, para que Order
a se asocie con a Customer
, muchas implementaciones de SQL agregan a la Order
tabla una columna que almacena el id
de 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_id
columna 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 Customer
tiene columnas adicionales que describan la relación con Order
. De hecho, la Customer
fuerza también tienen una relación de uno a varios con ShippingAddress
y SalesCall
tablas y sin embargo no tienen columnas adicionales a la Customer
mesa.
Sin embargo, para que se describa una relación de muchos a uno, a menudo id
se 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_id
columna a Bill Smith
's id 1.
Sin embargo, también es posible que haya otra tabla que describa la relación Customer
y Order
, de modo que no sea necesario agregar campos adicionales a la Order
tabla. En lugar de agregar un customer_id
campo a la Order
tabla, podría haber una Customer_Order
tabla que contenga claves para Customer
y 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.