none
Relacion uno a muchos en SQL Server RRS feed

  • Pregunta

  • Hola estimados, tengo una duda con una relacion en sql server.  Tengo una tabla "Vuelo" y "Pasajero" en donde un vuelo puede tener varios pasajeros, pero no se cual de estas 2 formas seria mejor establecer la relacion...

    Ej: 

    Vuelo: id, descripcion, id_pasajero
    
    Pasajero: Id, nombre, apellido

    Vuelo: id_vuelo, descripcion
    
    Detalle_vuelo: id_vuelo, id_pasajero
    
    Pasajero: id_pasajero, nombre, apellido

    creo que la primera opcion me duplicaria muchas veces los datos de un mismo vuelo, ademas de generar distintas PK para el mismo vuelo, en cambio con la 2da solo paso las pk de cada uno a la tabla detalle y asi no duplicaria datos... que opinan de esto....

    Pienso trabajar con EF, que complicaicon podria tener al crear una tabla intermedia ?

    saludos gracias de antemano


    • Editado Alan Moncada sábado, 2 de septiembre de 2017 18:37
    sábado, 2 de septiembre de 2017 18:32

Respuestas

Todas las respuestas

  • La segunda forma es la correcta por los motivos que correctamente has indicado, nota que al contener la columna 'id_pasajero' dentro de la tabla 'Vuelo' mezclas conceptos de entidades distintas, vas en contra de las formas normales. El mecanismo de acceso a datos es independiente a la manera como relacionas las tablas, quizá sólo debas tomar algunas consideraciones:

    Configure Many-to-Many relationship

    How to create a many-to-many mapping in Entity Framework?


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Propuesto como respuesta Jordi Masoliver lunes, 4 de septiembre de 2017 10:17
    • Marcado como respuesta Moderador M viernes, 8 de septiembre de 2017 15:11
    sábado, 2 de septiembre de 2017 18:54
  • Fíjate que no es una relación "de uno a muchos" sino "de muchos a muchos" (un vuelo puede tener muchos pasajeros, y un pasajero puede volar en muchos vuelos). En este caso, se usa la segunda forma que has indicado, es decir se pone una tabla intermedia entre las dos principales. Si usas Entity Framework, esto resulta transparente: la tabla intermedia queda oculta por Entity Framework, y en código simplemente añades pasajeros a la tabla de vuelos o añades vuelos a la table de pasajeros, y EF gestiona por ti la tabla intermedia.

    Si no es de muchos a muchos, sino que tu diseño solo permite que un pasajero solo vuele en un único vuelo, entonces el diseño es el mismo que pusiste como opción 1 pero al revés: se pone en la tabla de pasajeros el id del vuelo (no el id del pasajero en la tabla de vuelos).

    sábado, 2 de septiembre de 2017 20:05
  • Hola

    Hay diferentes maneras de diseñar el escenario que comentas,

    • Puede ser una relación muchos a muchos con una tabla intermedia que haga la relación.
    • Como también puede ser creando una tabla DetalleVuelos en el cual hay una relación uno a muchos entre Vuelos - DetalleVuellos y Pasajeros - DetalleVuelos  

    Muchos a Muchos

    Uno a Muchos

    Ambos soluciones son validas

    Te recomiendo los artículos de @Leandro Tuttini donde explica la implementación con Entity Framework enfoque code first

    [Entity Framework][Code First] Asociación mucho a muchos

    [Entity Framework][Code First] Asociación uno a muchos (1/3)

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    sábado, 2 de septiembre de 2017 20:29