¿Cuál es la diferencia real entre la relación uno a varios y la relación de varios a uno? ¿Solo está al revés, algo así?
No puedo encontrar ningún tutorial 'bueno y fácil de entender' sobre este tema que no sea este: SQL para principiantes: Parte 3 - Relaciones de bases de datos
Respuestas:
Sí, es al revés. Depende de qué lado de la relación esté presente la entidad.
Por ejemplo, si un departamento puede contratar a varios empleados, la relación de departamento a empleado es de uno a muchos (1 departamento emplea a muchos empleados), mientras que la relación de empleado a departamento es de muchos a uno (muchos empleados trabajan en un departamento).
Más información sobre los tipos de relaciones:
Relaciones de bases de datos - documentación de IBM DB2
fuente
De esta página sobre terminología de bases de datos
fuente
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 muchosOrder
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 unoCustomer
. 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
yOrder
. Por ejemplo, si el cliente tiene columnasid
yname
:Luego, para que
Order
a se asocie con aCustomer
, muchas implementaciones de SQL agregan a laOrder
tabla una columna que almacena elid
de los asociadosCustomer
(en este esquemacustomer_id
:En las filas de datos anteriores, si miramos la
customer_id
columna de identificación, vemos queBill 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 conOrder
. De hecho, laCustomer
fuerza también tienen una relación de uno a varios conShippingAddress
ySalesCall
tablas y sin embargo no tienen columnas adicionales a laCustomer
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 casocustomer_id
, se agrega una columna alOrder
. A la orden asociada # 10 por $ 12.34 aBill Smith
, asignamos lacustomer_id
columna aBill Smith
's id 1.Sin embargo, también es posible que haya otra tabla que describa la relación
Customer
yOrder
, de modo que no sea necesario agregar campos adicionales a laOrder
tabla. En lugar de agregar uncustomer_id
campo a laOrder
tabla, podría haber unaCustomer_Order
tabla que contenga claves paraCustomer
yOrder
.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.
fuente
javax.persistence.OneToMany
diferente aManyToOne
. ¿Está diciendo que son sinónimos o simplemente que depende de la implementación? ¿Mi respuesta es incorrecta?No hay diferencia. Es solo una cuestión de idioma y preferencia en cuanto a la forma en que establezca la relación.
fuente
La respuesta a su primera pregunta es: ambos son similares,
La respuesta a su segunda pregunta es: uno a muchos -> un HOMBRE (tabla MAN) puede tener más de una esposa (tabla MUJER) muchos a uno -> más de una mujer se ha casado con un HOMBRE.
Ahora bien, si desea relacionar esta relación con dos tablas MAN y WOMEN, una fila de la tabla MAN puede tener muchas relaciones con las filas de la tabla WOMEN. Espero que quede claro.
fuente
Ejemplo
Dos tablas con una relación
SQL
En SQL, solo hay un tipo de relación, se llama referencia. (Su interfaz puede hacer cosas útiles o confusas [como en algunas de las Respuestas], pero esa es una historia diferente).
Referencias
una clave primaria en otra tabla (la referenc ed tabla)
En términos de SQL, Bar hace referencia a Foo
Not al revés
Dado que
Foo.Foo
es una clave principal, es única, solo hay una fila para cualquier valor dado deFoo
Bar.Foo
es una referencia, una clave externa y no hay un índice único en él, puede haber muchas filas para cualquier valor dado deFoo
Foo::Bar
es de uno a muchos.Bar::Foo
es de muchos a unoBar
fila, solo hay unaFoo
fila a la que hace referenciaSolo hay una relación, por lo tanto no hay diferencia. La percepción (desde un "extremo" o el otro "extremo") o leerlo al revés, no cambia la relación.
Cardinalidad
La cardinalidad se declara primero en el modelo de datos, lo que significa Lógica y Física (la intención), y luego en la implementación (la intención realizada).
Cardinalidad
Uno a cero a muchos
En SQL eso (lo anterior) es todo lo que se requiere.
Uno a uno a muchos
Necesita una transacción para hacer cumplir la de la tabla de referencia.
Uno a cero a uno
Necesita
Bar
:Uno a uno
necesita una transacción para hacer cumplir la de la tabla de referencia.
Muchos a muchos
No existe tal cosa a nivel físico (recuerde, solo hay un tipo de relación en SQL).
En los primeros niveles lógicos durante el ejercicio de modelado, es conveniente dibujar tal relación. Antes de que el modelo se acerque a la implementación, es mejor que se eleve para usar solo las cosas que pueden existir. Esta relación se resuelve implementando una tabla asociativa.
Muchos a muchos resueltos
fuente
Uno a muchos y muchos a uno son similares en multiplicidad pero no en aspecto (es decir, direccionalidad).
El mapeo de Asociaciones entre clases de entidad y Relaciones entre tablas. Hay dos categorías de relaciones:
fuente
No hay ninguna diferencia práctica. Simplemente use la relación que tenga más sentido dada la forma en que ve su problema, como lo ilustra Devendra.
fuente
--- Muchos a uno --- Esos 3 niños pueden tener un solo padre.
Ambos son similares. Esto se puede utilizar pertenece a la necesidad. Si desea encontrar hijos para padres en particular, puede optar por One-To-Many. De lo contrario, si quiere encontrar padres para un gemelo, puede elegir Many-To-One. Igualmente....,
fuente
one-to-many has parent class contiene n número de hijos, por lo que es un mapeo de colección.
muchos a uno tiene n número de hijos contiene un padre, por lo que es un mapeo de objetos
fuente