19/02/2012, 10:39
|
| Moderador criollo | | Fecha de Ingreso: noviembre-2007 Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años 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) |