2012-04-13 11 views
8

¿Debería implementarse una relación uno a muchos entre dos tablas con dos o tres tablas? Por ejemplo tenemos nosotros:relación uno a muchos en la base de datos - concepto de diseño

author(id,otherAttributtes) 
books(id,authorid,otherAttributes) 

o

author(id,otherAttributtes) 
    books(id,otherAttributes) 
    authorConnectsBooks(authorid,booksid) 

me gusta más el primer enfoque, pero he visto el segundo y en aplicaciones más complicadas muchas veces. ¿Hay alguna desventaja para el primer método o solo es personal qué camino seguir?

+0

gracias por las respuestas !! (el ejemplo fue aleatorio, solo quería mostrar una relación de uno a varios) – user666

Respuesta

22

El primer ejemplo muestra una relación de uno a muchos, mientras que el segundo muestra una relación de muchos a muchos.

ejemplo digamos que usamos el primer ejemplo

Author 
AuthorID 

Book 
BookID 
AuthorID 

¿Cómo usted representa que tanto Jane y Jon escribió el libro "Stackoverflow por diversión"? En esta tabla de relaciones no puede, ha expresado que un autor puede escribir muchos libros. Entonces Jane lo escribió o Jon lo escribió. Si solo uno de ellos escribió los libros, podría usar este tipo de relación. Sin embargo, si desea mostrar que ambos escribieron este libro, necesita una relación de muchos a muchos.

Ahora, usando esta misma analogía de Jane y Jon, puede representar a ambos autores en este único libro utilizando su segundo ejemplo: relación de muchos a muchos.


Permite utilizar Stackoverflow como un ejemplo a partir de una relación de uno a muchos y terminando con una relación de muchos a muchos:

Authors 
Joel 
Jeff 

Books 
Stackoverflow Joel 

pobre Jeff, que no se acredita con stackoverflow en el ejemplo anterior ... así que tienen que arreglar eso:

Author 
Joel 
Jeff 

Books 
Stackoverflow 

AuthorBooks 
Stackoverflow Jeff 
Stackoverflow Joel 

Ahora todo el mundo es feliz ...

+0

Tendremos que eliminar el registro donde Jeff es propietario, ya que él ya no está :-( – JonH

1

Si la relación es de uno a muchos, no hay necesidad de una tabla de vinculación (authorConnectsBooks en su ejemplo). En su ejemplo, sin embargo, no tiene una relación de uno a varios, ya que un autor puede escribir muchos libros y muchos autores pueden escribir un libro. En tu ejemplo, en realidad tienes una relación de muchos a muchos. Si realmente tiene una relación de muchos a muchos, entonces necesita una tabla de vinculación (authorConnectsBooks en su ejemplo).

5

uno a muchos es dos tablas.

el segundo es muchos para muchos.

Authors 
1 Larry Niven 
2 Jerry Pournelle 

Books 
1 Integral Trees 
2 King David's Spaceship 
3 The Mote in God's eye 

AuthorsBooks 
1 1 
2 2 
1 3 
2 3 
4

Se debe implementar una relación uno a muchos con 2 tablas.

Pero la relación que propone en su ejemplo (entre Autores y Libros) no es uno a muchos, es de muchos a muchos.

"Un autor puede escribir muchos libros y un libro puede ser escrito por uno o más autores."

Y una relación de muchos a muchos debe implementarse con 3 tablas.

Que tengas un buen día.

0

Como todos señalaron, la primera es una relación de uno a muchos en la que no necesitas la mesa extra. Solo dos tablas deberían funcionar. Pero en el segundo caso, dado que es una relación de muchos a muchos, deberá agregar una tabla adicional conocida como tabla de cruce o referencia cruzada porque la mayoría de los sistemas de administración de bases de datos solo admiten relaciones uno a muchos, es necesario implementar dichas relaciones manualmente a través de una tercera tabla de unión. La clave principal de la tabla de unión normalmente se forma utilizando las claves principales de las tablas a las que se conecta. Aquí es una página wiki que explica el mismo ejemplo exacta que usted pidió:

LINK

Cuestiones relacionadas