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

Relacionar 1 fila a 2 ID de otra tabla

Estas en el tema de Relacionar 1 fila a 2 ID de otra tabla en el foro de Mysql en Foros del Web. Hola a todos!, tengo una bd con 2 tablas similares a estas: TABLA 1: ROPA id | nombre | precio | colorId TABLA 2: COLORES ...
  #1 (permalink)  
Antiguo 18/02/2012, 22:18
 
Fecha de Ingreso: febrero-2009
Mensajes: 202
Antigüedad: 15 años, 2 meses
Puntos: 3
Relacionar 1 fila a 2 ID de otra tabla

Hola a todos!,
tengo una bd con 2 tablas similares a estas:

TABLA 1: ROPA
id | nombre | precio | colorId

TABLA 2: COLORES
id | nombreColor

El problema es que en la TABLA 1, hasta donde yo se, solo puedo asignar 1 valor, o sea 1 solo ID de color, pero ¿cómo hago si quiero asignarle más de 1 id de color a la misma fila (sin tener que duplicarla)?
Había pensado crear campos "colorId1", "colorId2", "colorId3", pero la tabla de colores es dinámica y es probable que en algún momento todos esos campos no sean suficientes en caso de querer asignar varios a una misma prenda. También había pensado en hacer una tercera tabla que registre el ID de la prenda y el del color en una misma fila y se repita la misma fila tantas veces como ID de color se hayan seleccionado. Pero tal vez hay una opción más práctica, yo no se mucho de MySQL.

Un saludo y gracias!
  #2 (permalink)  
Antiguo 19/02/2012, 10:39
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, 5 meses
Puntos: 2658
Respuesta: Relacionar 1 fila a 2 ID de otra tabla

El problema que se te presenta se produce porque has leído lo básico de relaciones entre tablas, y te has metido directamente a crearlas, sin haber estudiado más profundamente el tema del modelo E-R, ni tampoco comprender lo que es un sistema.
No es raro. El problema es que estás pensando incorrectamente en una relación de uno a muchos (1:N), cuando en realidad lo que tienes es una relación de muchos a muchos (N:N). Ambas tienen requisitos diferentes. Es un error de interpretación común entre los principiantes de cualquier tipo de estudio al meterse en BBDD.
Una relación es de uno a muchos cuando por cada instancia (o registro) de una entidad (o tabla, aunque no es lo mismo) existen uno o varios de otra entidad con los cuales se relaciona, y viceversa: varios de una entidad se relacionan con uno sólo de la otra.
Pero en una relación N:N cada uno de una entidad se relaciona con varios de la otra, y cada uno de la otra se relaciona con varios de la primera. ¿Notas la diferencia?
Ese es el caso que tienes: Cada prenda de ropa puede tener uno o varios colores, pero cada color puede aparecer en diferentes prendas, por lo tanto es una relación N:N.
Para comprender correctamente la relación se la debe expresar desde la óptica de cada entidad, es decir, "parándose" en la entidad y expresando cómo se ve la cardinalidad de la relación desde esa.

El problema es que cada par relacionado en cada una de las vinculaciones debe ser único en la relación, es decir, cada prenda de ropa se relaciona con N colores, pero sólo una vez por cada color (al menos en su aspecto básico). Y como no puedes predefinir cuántas relaciones se crearán por cada prenda o cada color, el modelo E-R tiene una solución simple: Se crea una tabla especial en la cual se ponen como PK el par de claves primarias de que están relacionadas. Es lo que se denomina una "tabla relacional" y es la forma en que se resuelve este tipo de casos.
Como nota: La clave primaria de esa tabla relacional no es una clave autoincremental agregada como en las otras tablas que usas. Está formada por las dos FK puestas, y sólo se debe agregar algun campo más como discriminante si y sólo si puede darse que haya dos instancias diferentes que contengan el mismo par de FK, como sería en tu caso discriminar el color de la falda de un vestido del color de las mangas del mismo. ¿Se comprende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fila, relacionar, sql, tabla, campos
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 01:15.