Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Columna que referencie a múltiples registros

Estas en el tema de Columna que referencie a múltiples registros en el foro de Mysql en Foros del Web. Buenas, estoy encarando varios proyectos y da la casualidad -o causalidad- de que tengo que guardar en una columna algo que referencie a más de ...
  #1 (permalink)  
Antiguo 14/12/2015, 11:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 43
Antigüedad: 15 años, 7 meses
Puntos: 4
Columna que referencie a múltiples registros

Buenas, estoy encarando varios proyectos y da la casualidad -o causalidad- de que tengo que guardar en una columna algo que referencie a más de un registro.

El ejemplo perfecto es este:

Tabla "comunicaciones"
- id_comunicacion
- id_usuario
- id_grupo
- mensaje

Tabla "grupos"
- id_grupo
- nombre

Bien, el conflicto me surgiría si quiero enviar una comunicación a más de un grupo, en uno de los proyectos lo resolví a lo cavernícola guardando en id_grupo de "comunicaciones" el array serializado, pero sé que no es lo ideal. Otra de las posibles soluciones sería enviar varias comunicaciones pasándole por vez el grupo de destino, pero el problema sería si quiero editar más adelante una comunicación, lo debería hacer n veces.

Creo que la solución es una tercer tabla, pero es ahí donde me desoriento por completo. Sugerencias?

Muchas gracias
  #2 (permalink)  
Antiguo 14/12/2015, 11:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Columna que referencie a múltiples registros

Lo que tienes no es una columna que referencia a multiples registros. Las entidades y las tablas no se analizan en base a sus columnas individuales, sino en base a la cardinalidad de sus relaciones.

En tu caso lo que tienes es N comunicaciones que pueden tener que realizarse a M grupos, es decir que tienes una relación N:M entre Comunicación y Grupo, lo que obligatoriamente requiere crear una tabla intermedia para administrar la relación.

Recuerda siempre que la relación entre las tablas es la que define el requerimiento, y NO la columna de una tabla dada.

Creo que necesitas reforzar lo que estudiaste del modelo relacional de bases de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/12/2015, 11:54
 
Fecha de Ingreso: septiembre-2008
Mensajes: 43
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Columna que referencie a múltiples registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que tienes no es una columna que referencia a multiples registros. Las entidades y las tablas no se analizan en base a sus columnas individuales, sino en base a la cardinalidad de sus relaciones.

En tu caso lo que tienes es N comunicaciones que pueden tener que realizarse a M grupos, es decir que tienes una relación N:M entre Comunicación y Grupo, lo que obligatoriamente requiere crear una tabla intermedia para administrar la relación.

Recuerda siempre que la relación entre las tablas es la que define el requerimiento, y NO la columna de una tabla dada.

Creo que necesitas reforzar lo que estudiaste del modelo relacional de bases de datos.
Entonces creo que lo correcto, corregime si me equivoco, sería crear una tercer tabla que se llame por ejemplo

comunicaciones_grupo
- id
- id_comunicacion (foránea de comunicaciones)
- id_grupo (foránea de grupos)

Y eliminar la columna "id_grupo" de comunicaciones.

Es correcto, o hay otra manera para hacerlo?
Saludos
  #4 (permalink)  
Antiguo 14/12/2015, 12:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Columna que referencie a múltiples registros

Si cada mensaje se enviará una sola vez a cada grupo, lo que necesitas es:
Cita:
TABLE MENSAJE_GRUPO(
id_comunicacion,
id_grupo )
El primer ID es total y absolutamente innecesario. Las dos FK conforman también una misma PK compuesta.
¿Sabes lo que son las PK compuestas, no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/12/2015, 12:26
 
Fecha de Ingreso: septiembre-2008
Mensajes: 43
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Columna que referencie a múltiples registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si cada mensaje se enviará una sola vez a cada grupo, lo que necesitas es:


El primer ID es total y absolutamente innecesario. Las dos FK conforman también una misma PK compuesta.
¿Sabes lo que son las PK compuestas, no?
Genial, ahí estuve buscando la definición de las PK compuestas y las he utilizado pero como claves únicas (no me peguen por los errores de concepto jaja).

Etiquetas: columna, registro, registros, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:53.