Insertar datos en tablas vinculadas
Las tablas de base de datos pueden ser tablas primarias, es decir, pueden ser referente de otras tablas de la base de datos, que le harán referencia mediante relaciones de clave foránea. Cuando la BD contenga este tipo de tablas podrá configurar la asignación de datos para que inserte registros en la tabla primaria pero también en sus tablas secundarias dependientes. Por ejemplo, cuando quiera insertar un registro "company" nuevo en una tabla de base de datos, también podrá insertar registros para las oficinas vinculadas a esta compañía, así como sus departamentos secundarios, sus empleados, etc.
A continuación explicamos cómo insertar datos en varias tablas sin perder las relaciones de la base de datos. Se trata de una versión algo más elaborada del ejemplo anterior (véase Insertar datos en una tabla. Para ello nos serviremos de estos archivos:
•Altova_Hierarchical.mfd: el archivo de asignación de datos propiamente dicho.
•Altova_Hierarchical.xml: el archivo XML que contiene los datos de origen que se deben insertar en la base de datos.
•Altova_Hierarchical.xsd: el esquema utilizado para validar el archivo de instancia anterior.
•AltovaTarget.mdb: la base de datos de destino que se debe actualizar.
Todos estos archivos están en la carpeta <Documentos>\Altova\MapForce2023\MapForceExamples\ y, para simplificar, en las instrucciones omitimos su ruta de acceso.
La asignación de este ejemplo modifica un archivo de base de datos de ejemplo. Lo más recomendable es crear una copia de seguridad de la base de datos original y empezar con una copia nueva antes de seguir las instrucciones que aparecen más abajo. Así se evitarán posibles modificaciones en los ejemplos originales y obtendrá el mismo resultado que en este ejemplo. Para más información consulte Ejecutar asignaciones que modifican bases de datos. |
El objetivo de la asignación de datos que nos ocupa es reemplazar datos de la base de datos de destino (AltovaTarget.mdb) con datos del archivo XML de origen. La estructura del archivo XML se corresponde con la estructura jerárquica de las tablas de la base de datos. Se trata de un organigrama que está estructurado de la siguiente manera: el elemento de nivel superior es una compañía compuesta por dos oficinas. Cada oficina está formada por varios departamentos y cada departamento por múltiples empleados. La misma jerarquía existe en la base de datos AltovaTarget.mdb, cuya tabla "Altova" corresponde a la compañía. Esta tabla está vinculada por medio de una relación de clave foránea a los registros de la tabla "Office". Igualmente "Office" está vinculada a "Department" y "Department" a "Person". Para ver un diagrama de relaciones de la base de datos AltovaTarget.mdb, ábrala en la vista "Relationships" de Access (véase Gestionar relaciones de BD).
Para conseguir este objetivo debemos seguir estos pasos:
Paso nº1: insertar el componente XML de origen
•En el menú Insertar haga clic en el comando Archivo o esquema XML y navegue hasta el esquema Altova_Hierarchical.xsd. Cuando la aplicación solicite un archivo de instancia, navegue hasta el archivo Altova_Hierarchical.xml.
Paso nº2: insertar la base de datos de destino
•En el menú Insertar haga clic en el comando Base de datos y siga los pasos del asistente para conectarse a AltovaTarget.mdb (véase Agregar, editar y quitar objetos de BD).
Paso nº3: dibujar las conexiones
•Dibuje las conexiones de asignación de datos que aparecen en la imagen. Observe que las claves principal y foránea no están asignadas porque se generarán de forma instantánea (ver más abajo).
Nota: | si se dibujan conexiones no deseadas automáticamente para los elementos descendientes, esto significa que está activa la opción Conectar automáticamente los secundarios equivalentes. Si esto as así, para deshacer la última acción, debe seleccionar el comando Edición | Deshacer. Para deshabilitar la opción de conexión automática de secundarios, haga clic en el comando Conexión | Conectar automáticamente los secundarios equivalentes. |
Paso nº4: configurar las acciones Insertar
1.En el componente de destino haga clic en el botón Acción: Insertar ( ) situado junto a la tabla "Altova" y configure la opción max() + 1 de la clave principal (imagen siguiente). Esta opción se explica con más detalle en el apartado anterior (véase Insertar datos en una tabla).
Observe que la opción ELIMINAR todos los registros está habilitada. Esto borra todos los registros que existen en la tabla antes de introducir los nuevos, tal y como queremos. Si deshabilita esta opción, los nuevos registros (con una clave principal nueva) se añadirán a la base de datos junto a los que ya existen cada vez que se ejecute la asignación. Pero esto no es lo que queremos.
En nuestro ejemplo también está habilitada la opción eliminar también todos los registros de todas las tablas secundarias. Esto garantiza que solamente se eliminen los registros de la tabla "Altova", pero también todos los registros que estén vinculados a la tabla "Altova" por medio de relaciones de clave foránea. Si las tablas secundarias tienen tablas secundarias propias, sus registros también se eliminarán y así sucesivamente hasta llegar al final de la jerarquía. Si intenta eliminar los registros de la tabla raíz "Altova" solamente, se comprometerá la integridad de la base de datos y la asignación no se podrá ejecutar.
Para obtener más información sobre las demás opciones del cuadro de diálogo "Acciones de tabla de la base de datos" consulte el apartado Configurar acciones de tabla de BD.
2.Haga clic en Aceptar para cerrar el cuadro de diálogo. Observe que en el área de asignación el aspecto del botón es . Esto indica que se configuró una instrucción Delete para que la eliminación tenga lugar antes de la acción Insert.
3.Haga clic en el botón de la tabla "Office" y configure la opción max() + 1 de la clave principal.
4.Repita el paso nº3 para cada tabla a partir de la tabla "Office", es decir, en las tablas "Address", "Department" y "Person". Asegúrese de que todas estas tablas son descendientes inmediatos de la tabla raíz "Altova". Si necesita información sobre qué es una tabla raíz y por qué se necesita, consulte Gestionar relaciones de BD.
Paso nº5: vista previa de la asignación y actualizar la base de datos
Abra el panel Resultados para consultar una vista previa de los resultados de la asignación. La asignación genera un script SQL que contiene las acciones que se deben ejecutar en la base de datos. El script no ha modificado todavía la base de datos. Solamente se trata de una vista previa.
Para ejecutar el script en la base de datos:
•En el menú Resultados haga clic en Ejecutar script SQL.
Nota: | el script SQL se puede ejecutar desde MapForce directamente pero hay otras maneras de actualizar la base de datos (véase Ejecutar asignaciones que modifican bases de datos). |
Para ver el resultado abra la tabla "Altova" en la BD SQLite y observe cómo las relaciones del archivo XML se han copiado en la base de datos, desde la tabla "Altova" hasta la tabla "Person".
Hemos conseguido crear una asignación de datos que inserta datos en varias tablas de la base de datos sin comprometer la integridad de las relaciones existentes entre las tablas.