14/08/2012, 08:22
|
| Moderador criollo | | Fecha de Ingreso: noviembre-2007 Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes Puntos: 2658 | |
Respuesta: Por que se debe romper una relacion mucho a muchos? No entiendo a qué te refieres cuando hablas de "romper" esa relación.
La tabla relacional surge de la necesidad de relacionar cada registro de la tabla A con cada uno de los registros de la tabla B, tal que nunca se repita un par de claves A/B.
Es tan sencillo como eso.
Es absolutamente imposible crear una relación N:N entre dos tablas sin usar una tabla adicional, porque sino necesitarías poner un campo FK en cada tabla por cada relación con la otra.
Supongamos que tienes 10.000 registros en cada una, y que un registro de la A se relaciona con 500 registros de la B. Necesitarías agregar 500 columnas mas, pero esas columnas serían inútiles para la mayoría de los registros, ya que ese es un caso excepcional.
Y supongamos que en la tabla B, uno de los registros que aparecen en uno de esas otras columnas de la A, se relaciona con otros 1200 registros más de la A... ¿Que harías? ¿Agregar 1.200 columnas adicionales en la tabla B?
Es muchísimo más simple hacer una sola tabla, con dos campos, que contenga 1700 registros (500+1200), que al ser al mismo tiempo PK de su propia tabla jamás podrán repetirse.
El único otro escenario es cuando por alguna razón, una relación N:N entre dos tablas a su vez puede repetir la relación A/B en algún registro. Eso implica que usar sólo las FK como PK es insuficiente para administrar la cardinalidad de la relación y se debe agregar alguna otra columna como parte de la PK. Usualmente ese tercer campo es un DATETIME.
Ese escenario se da, por ejemplo, en las matriculaciones anuales de un alumno repitiente: Mismo Curso, misma Persona... diferente Año. Es decir, la cursada es parte de la clave.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |