Ejemplo: crear un informe CSV a partir de varias tablas
Este ejemplo demuestra cómo combinar varias tablas de base de datos para extraer datos y guardarlos en un solo informe en formato CSV. La base de datos utilizada en este ejemplo se llama Nanonull.sqlite y está guardada en este directorio: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\. Esta base de datos almacena información sobre una empresa ficticia (pedidos, productos, usuarios y direcciones de los usuarios). Como en cualquier otra base de datos relacional, la información de esta base de datos está normalizada y repartida en varias tablas. Por ejemplo, la tabla users almacena datos personales de los usuarios (su nombre, apellido y correo electrónico). La base de datos también almacena información sobre los productos adquiridos por los usuarios en dos tablas distintas: orders (que incluye el identificador único del pedido y la hora en la que se realizó el pedido) y orderedproducts (que incluye una lista de productos pedidos y su cantidad). Además, el nombre de los productos se almacena en una tabla llamada products.
El objetivo de nuestra asignación de datos será producir un informe basado en los datos extraídos de varias tablas y así conocer quién pidió ciertos productos, cuándo y en qué cantidad. Para alcanzar este objetivo debemos seguir estos pasos:
1.En el menú Insertar haga clic en el comando Base de datos.
2.Cuando llegue el momento de seleccionar un tipo de base de datos, haga clic en la opción SQLite y después en el botón Siguiente.
3.Navegue hasta la base de datos Nanonull.sqlite que mencionamos al principio y haga clic en Conectarse.
4.En el cuadro de diálogo que aparece seleccione las tablas orderedproducts, orders, products y users y haga clic en Aceptar.
5.Añada un componente de combinación y después cree cuatro elementos nodes/rows (haciendo clic en el botón Agregar entrada del componente de combinación).
6.Conecte las cuatro tablas del componente de base de datos con los elementos de entrada del componente de combinación.
Nota: | otro método alternativo sería conectar la tabla orderedproducts al componente de combinación, después la tabla orders (la que tiene anidada y no la que está al mismo nivel) y así sucesivamente hasta que todas las tablas combinadas estén anidadas bajo la misma tabla raíz (véase Gestionar relaciones de BD). El resultado de la asignación sería idéntico al que se obtendría al combinar las tablas de esta forma. La diferencia es que en este ejemplo las condiciones de combinación deben crearse a mano (ver más abajo), mientras que con el método alternativo recién descrito las condiciones de combinación las crearía MapForce automáticamente. Para ver un ejemplo en el que se combinan tablas sin necesidad de definir condiciones de combinación a mano consulte el apartado Ejemplo: combinar tablas en modo SQL. También puede consultar la asignación de datos <Documentos>\Altova\MapForce2023\MapForceExamples\DB_Denormalize.mfd, donde todas las tablas combinadas se encuentran bajo la misma tabla raíz. |
En el ejemplo que nos ocupa las tablas conectadas al componente de combinación siguen este orden:
1.orderedproducts
2.orders
3.products
4.users
Este orden afecta a la presentación de las correspondientes estructuras en el cuadro de diálogo "Definir condición de combinación" (imagen siguiente), que se abre al hacer clic en el botón Definir condición de combinación . Es decir, la primera tabla (orderedproducts) aparece por defecto bajo Estructura 1 y la tabla inmediatamente posterior a ella (orders) aparece bajo Estructura 2.
Para definir la primera condición de combinación haga clic en el elemento order_id del panel izquierdo y en el elemento id del panel derecho. Esto empareja los campos orderedproducts.order_id y orders.id:
Hasta ahora hemos combinado solamente dos tablas. Para definir condiciones de combinación que comprendan una tercera tabla es necesario seleccionar la tabla correspondiente en la lista desplegable situada sobre el panel derecho. En este caso el panel izquierdo muestra todas las tablas que aparecen después de dicha tabla en el componente de combinación. Por ejemplo, si seleccionamos products en el panel derecho, el panel izquierdo presentará orderedproducts y orders (porque estas dos tablas aparecen antes de products en el componente de combinación). Ahora podemos emparejar campos de la tabla products con campos de tablas precedentes (en este caso orderedproducts.product_id y products.id).
Para combinar la cuarta tabla (users) basta con seleccionar la tabla users en la lista desplegable y podremos emparejar los campos orders.user_id con los campos users.id.
Ahora que todas las condiciones de combinación están definidas, podremos crear asignaciones de datos entre los elementos de componente de combinación y los del componente de destino. Para terminar de diseñar la asignación de datos añada un componente CSV (véase Archivos CSV y archivos de texto) y conecte los elementos del componente de combinación con el componente CSV de destino tal y como muestra la imagen siguiente.
Esta asignación de datos genera un informe en formato CSV a partir de las cuatro tablas que participan en la combinación y que incluye:
•el identificador del pedido (procedente de la tabla orderedproducts)
•la cantidad de artículos pedidos (procedente de la tabla orderedproducts)
•la hora a la que se realizó el pedido (procedente de la tabla orders)
•el nombre del producto que se pidió (procedente de la tabla products)
•el nombre y el apellido del usuario que hizo el pedido (procedente de la tabla users)
Todas las tablas de este ejemplo están combinadas con el modo del vínculo interno. Para más información sobre cómo cambiar el modo al vínculo externo izquierdo consulte Cambiar el modo de combinación.