Altova MapForce 2023 Enterprise Edition

Opciones para tablas secundarias cuando se actualiza la tabla principal

Inicio Anterior Inicio Siguiente

Cuando la asignación actualiza una tabla que es tabla principal (es decir, una tabla que tiene relaciones de clave foránea con otras tablas), podrá configurar cómo ocuparse de los registros dependientes tanto en el origen de datos como en la tabla de destino. Por ejemplo, imaginemos que desea actualizar la tabla "Department" de la base de datos altova.mdb. Como cada persona está vinculada a un departamento por medio de una clave foránea, lo más probable es que desee ejecutar acciones en la tabla "Person" también (p. ej. inserciones, actualizaciones o eliminaciones). Esto le ayudaría a mantener la integridad de la base de datos y prevenir errores de asignación.

 

En este tema se describen las opciones disponibles para la tabla "Person" cuando se actualiza la tabla principal "Department" y para ello utilizamos estos archivos de ejemplo:

 

altova-cmpy-extra.xml: contiene el origen de datos que se debe insertar en la base de datos.

Altova_Hierarchical.xsd: el esquema utilizado para validar el archivo de instancia anterior.

Altova.sqlite: 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.

 

En primer lugar, añada el esquema y la instancia XML de origen así como la base de datos de destino a la asignación de datos. Siga los mismos pasos que aparecen en el apartado Acción "Actualizar si... Insertar restantes". En segundo lugar, dibuje las conexiones que aparecen en esta imagen:

 

mf_db_child_table_01

 

Como puede ver en la imagen, la asignación actualiza la tabla "Department" en la base de datos de destino. Esta tabla se eligió como tabla raíz. Para más información sobre las tablas raíz y por qué son necesarias consulte Gestionar relaciones de BD. La acción que debe ejecutarse en la tabla secundaria "Person" es el tema que nos ocupa en este apartado.

 

Las tablas que aparecen más abajo ilustran varias opciones de configuración y el resultado correspondiente. Estas opciones se pueden seleccionar en el cuadro de diálogo "Acciones de tabla de la base de datos" de la tabla principal "Department" y de la tabla secundaria "Person".

 

Configuración A

Opciones

Resultado de la asignación

mf_db_child_table_02

Tabla "Department"

mf_db_child_table_03

Tabla "Person"

Actualiza los registros de "Department" donde PrimaryKey corresponde en el XML de origen a PrimaryKey en la tabla de BD.

No actualiza los registros de "Department" que no tengan un equivalente en el archivo XML de entrada (dicha clave no existe en el origen).

Inserta, desde la instancia XML de entrada, todos los registros de "Person" que todavía no existen en la base de datos.

Elimina los datos secundarios (registros de "Person") de los registros de "Department" que cumplen con la condición Actualizar si... definida.

 

Configuración B

Opciones

Resultado de la asignación

mf_db_child_table_04

Tabla "Department"

mf_db_child_table_03

Tabla "Person"

La asignación falla y emite un mensaje de error de ejecución SQL. El motivo es que la asignación intenta insertar registros nuevos de "Person" con la misma clave principal que los registros de "Person" que ya existen. Si desea insertar registros desde el XML de entrada y añadirlos a los que ya existen en la base de datos, debe consultar la siguiente configuración.

 

Configuración C

Opciones

Resultado de la asignación

mf_db_child_table_04

Tabla "Department"

mf_db_child_table_06

Tabla "Person"

Actualiza los registros de "Department" cuyo registro PrimaryKey corresponde en el XML de origen al registro PrimaryKey de la tabla de la BD.

No actualiza los registros de "Department" que no tengan equivalente en el XML de entrada (dicha clave no existe en el origen).

Se insertan registros nuevos de "Person" (con claves principales generadas automáticamente) en la tabla "Person".

 

Configuración D

Opciones

Resultado de la asignación

mf_db_child_table_05

Tabla "Department"

mf_db_child_table_03

Tabla "Person"

Actualiza los registros de "Department" cuyo PrimaryKey corresponda en el XML de origen al PrimaryKey en la tabla de la BD.

No actualiza los registros de "Department" que no tengan equivalente en el XML de entrada (dicha clave no existe en el origen).

No se insertan registros en la tabla "Person" porque la opción Omitir datos secundarios de entrada está habilitada para la tabla "Departments" principal.

 

Configuración E

Opciones

Resultado de la asignación

mf_db_child_table_02

Tabla "Department"

mf_db_child_table_07

Tabla "Person"

Actualiza los registros de "Department" cuyo PrimaryKey corresponda en el XML de origen al PrimaryKey en la tabla de la BD.

No actualiza los registros de "Department" que no tengan equivalente en el XML de entrada (dicha clave no existe en el origen).

Elimina todos los registros de "Person" vinculados a un "Department" que tenga el correspondiente PrimaryKey en el XML de origen. El motivo es que la opción Eliminar datos en tablas secundarias está habilitada para la tabla principal "Department".

Se conservan en la base de datos los registros de "Person" vinculados a un departamento que no cumpla con la condición Actualizar si... definida.

No se actualiza ningún registro de la tabla "Person".

 

Configuración F

Opciones

Resultado de la asignación

mf_db_child_table_02

Tabla "Department"

mf_db_child_table_08

Tabla "Person"

Actualiza los registros de "Department" cuyo PrimaryKey corresponda en el XML de origen al PrimaryKey en la tabla de la BD.

No actualiza los registros de "Department" que no tengan equivalente en el XML de entrada (dicha clave no existe en el origen).

Elimina todos los registros de "Person" vinculados a un "Department" que tenga el correspondiente PrimaryKey en el XML de origen. El motivo es que la opción Eliminar datos en tablas secundarias está habilitada para la tabla principal "Department".

Se conservan en la base de datos los registros de "Person" vinculados a un departamento que no cumpla con la condición Actualizar si... definida.

 

Configuración G

Opciones

Resultado de la asignación

mf_db_child_table_04

Tabla "Department"

mf_db_child_table_08

Tabla "Person"

Actualiza los registros de "Department" cuyo PrimaryKey corresponda en el XML de origen al PrimaryKey en la tabla de la BD.

No actualiza los registros de "Department" que no tengan equivalente en el XML de entrada (dicha clave no existe en el origen).

Elimina todos los registros de "Person" que cumplan con estas dos condiciones:

 

a.El registro de "Person" está vinculado a un "Department" que tiene un PrimaryKey correspondiente en el XML de origen y

b.El registro "Person" tiene un PrimaryKey correspondiente en el XML de origen.

© 2017-2023 Altova GmbH