En varios CMS de código abierto, noté que hay una tabla separada para mapear dos tablas relacionales. Al igual que para las categorías y productos, hay una product_category_mapping
tabla separada . Esta tabla solo tiene una clave principal y dos claves externas de las categorías y tablas de productos.
Mi pregunta es ¿cuáles son los beneficios de este diseño de base de datos en lugar de simplemente vincular las tablas directamente definiendo una clave externa en cualquiera de las tablas? ¿Es solo cuestión de conveniencia?
fuente
Esa es una manera fácil de implementar relaciones de muchos a muchos .
Considere estas dos tablas:
Si agrega un
categoryID
campo aproduct
, cada producto solo puede tener una categoría. Pero si tenemos algoproduct_category_mapping
así:entonces podemos tener:
Por lo tanto, el producto 1 es de categoría 1 y 2 y el producto 2 es de categoría 3 y 1, por lo que muchos productos pertenecen a muchas categorías y muchas categorías tienen muchos productos.
Como escribe tdammers , esta tabla a menudo se conoce como tabla de enlaces o tabla de puentes, e incluso la he visto referida como una tabla HABTM, de HasAndBelongsToMany, que aparentemente es Ruby on Rails, habla de muchos a muchos. Y Wikipedia lo llama una tabla de unión y tiene bastantes nombres más.
fuente
mappingID
clave, un escenario común es realizar un mejor seguimiento de las importaciones / exportaciones masivas donde la tabla de unión contiene muchas claves foráneas.La razón para usar una tabla de mapeo es eliminar la duplicación. Siga adelante y pruebe alguna otra técnica de mapeo. No podrá evitar la duplicación de datos sin ella.
Y eso trae una pregunta de 2cd. ¿Por qué molestarse en eliminar la duplicación? Por lo tanto, solo tiene que editar los datos 1 vez en 1 lugar. A veces hay penalizaciones de rendimiento por eliminar la duplicación. Otras veces hay AUMENTOS de rendimiento para eliminar la duplicación. Por ejemplo, es más rápido llenar una lista desplegable con valores de búsqueda normalizados, que seleccionar valores duplicados distintos en una tabla grande.
fuente