Altova MapForce 2024 Enterprise Edition

Sitio web de Altova: _ic_link Vídeos de demostración de MapForce

 

En esta sección se ilustrarán algunos casos posibles de usar acciones de tablas de BD. Todos los casos usan una base de datos jerárquica llamada BookCatalog.sqlite. Esta base de datos tiene tres tablas: Authors (principal), Books (secundaria), TrackingInfo (no está conectada a otras tablas). Las tablas Authors y Books están vinculadas por una relación de clave foránea. Es importante tener en cuenta que el incremento automático está habilitado para las claves principales en las tablas Authors y Books. La estructura de la BD es la que aparece a continuación:

 

CREATE TABLE

      "main"."Authors" (

 "AuthorID" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,

      "Author" TEXT,

      "Country" TEXT,

      "Website" TEXT

);

 

CREATE TABLE

      "main"."Books" (

      "BookID" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,

      "Title" TEXT,

      "AuthorID" INTEGER,

      "ISBN" TEXT,

      "Publisher" TEXT,

      "NumPages" INTEGER,

      "Year" INTEGER,

      "Genre" TEXT,

      "Price" DECIMAL,

      FOREIGN KEY ("AuthorID") REFERENCES "Authors" ("AuthorID") ON DELETE CASCADE ON UPDATE NO ACTION

);

 

CREATE TABLE

      "main"."TrackingInfo" (

      "MappedOn" DATETIME

);

 

Caso 1: Eliminar todos los datos de BD e insertar todos los datos de origen

En el primer caso, queremos eliminar todos los datos de la BD BookCatalog.sqlite y rellenar la base de datos con todos los datos del archivo de origen. La asignación tiene este aspecto:

MF_DBTableActions02

Aunque la base de datos tiene tres tablas, sólo se incluyen las tablas Authors y Books en el componente de BD. La ausencia de la tabla TrackingInfo en el componente se debe a que ningún elemento se asigna a esta tabla. Puesto que se ha configurado el incremento automático para las tablas Authors y Books, no tenemos que conectar nada a las columnas AuthorID y BookID: La base de datos generará estos IDs automáticamente.

 

Acciones de tablas de BD para Authors

Las acciones de tablas para la tabla Authors (ver imagen siguiente) se han configurado de la siguiente manera:

 

En el apartado Ejecutar una instrucción SQL antes del primer registro, hemos configurado la acción DELETE que eliminará todos los registros de la BD, incluyendo todos los registros secundarios.

En la sección Acciones que se deben ejecutar para cada registro, hemos configurado la acción Insertar Todo.

La base de datos generará automáticamente los IDs de Authors (la opción generado por la BD en la acción Insertar todo).

Los demás valores se asignarán desde el archivo de origen.

MF_DBTableActions03

Acciones de tablas de BD para Books

Para la tabla Books, hemos configurado la misma acción Insertar todo (ver imagen siguiente). La base de datos generará automáticamente los IDs de Book. La columna AuthorID hace referencia a la clave primaria en la tabla Authors. Los valores para esta columna se indicarán automáticamente. Todos los demás valores se asignarán desde el archivo de origen.

MF_DBTableActions04

Resultados

El siguiente extracto de código muestra una parte de los resultados:

 

DELETE FROM "Books"

 

DELETE FROM "Authors"

 

INSERT INTO "Authors" ("Author", "Country", "Website") VALUES ('Stephen King', 'US', 'www.stephenking.com')

 

SELECT "AuthorID" FROM "Authors" WHERE "AuthorID" = last_insert_rowid()

-- >>> %AuthorID1%

 

INSERT INTO "Books" ("AuthorID", "Title", "ISBN", "Publisher", "NumPages", "Year", "Genre", "Price") VALUES ('%AuthorID1%', 'Misery', '1501143107', 'Scribner', 368, 2016, 'Horror', 11.99)

 

INSERT INTO "Books" ("AuthorID", "Title", "ISBN", "Publisher", "NumPages", "Year", "Genre", "Price") VALUES ('%AuthorID1%', 'Outsider', '1501180983', 'Scribner', 576, 2018, 'Horror', 12.79)

 

Tenga en cuenta que las instrucciones SQL de la salida sólo tienen fines informativos. Para ejecutar las instrucciones SQL, abra el panel Resultados y ejecute el comando Ejecutar script SQL/NoSQL de la barra de herramientas. Para más información consulte Instrucciones SQL en los resultados

 

Caso 2: Actualizar autores/autoras y libros, insertar restantes, insertar información del seguimiento

En situaciones reales, la base de datos cambia constantemente, y varias personas podrían trabajar en la misma base de datos. Por tanto, no sería deseable eliminar todos los registros de la BD. En el segundo caso, los objetivos son estos:

 

Actualizar autores/as y sus libros, a saber los que están tanto en el archivo de origen como en la base de datos

Insertar registros de origen que no existen en la base de datos

Dar información del seguimiento sobre la fecha y la hora del seguimiento

 

Nuestra asignación de datos tiene los mismos componentes y conexiones que en el primer caso. Sin embargo, las acciones de tablas de BD se han configurado de otra manera (ver a continuación).

 

Acciones de tablas de BD para Authors

La imagen siguiente muestra las acciones definidas en la tabla Authors. En la condición Actualizar si, hemos configurado el valor igual a en la columna Author. Es decir que si hay autores/as que tengan el mismo nombre tanto en el archivo de origen como en la base de datos, se actualizarán solamente los registros de estos/as autores/as en la base de datos. Autores/as que existen solamente en el archivo de origen simplemente se insertarán en la base de datos. Autores/as que existen solamente en la base de datos no cambiarán.

MF_DBTableActions05

Acciones de tablas de BD para Books

Para la tabla Books, disponemos de la misma combinación de acciones (ver a continuación). En este caso, el valor "igual a" se configura en la columna Title. Es decir que si hay los mismos libros tanto en el archivo de origen como en la base de datos, se actualizarán estos registros de libros en la base de datos. Los libros que existen solamente en el de origen simplemente se insertarán en la base de datos. Los libros que existen solamente en la base de datos no cambiarán.

MF_DBTableActions06

No registros duplicados

La mayor ventaja de la condición Actualizar si es que se evitan registros duplicados en la base de datos.

 

Resultados

El siguiente extracto de código muestra una parte de los resultados:

 

UPDATE "Authors" SET "Country" = 'US', "Website" = 'www.stephenking.com' WHERE ("Authors"."Author" = 'Stephen King')

 

SELECT "AuthorID" FROM "Authors" WHERE ("Author" = 'Stephen King')

-- >>> %AuthorID1%

 

UPDATE "Books" SET "ISBN" = '1501143107', "Publisher" = 'Scribner', "NumPages" = 368, "Year" = 2016, "Genre" = 'Horror', "Price" = 11.99 WHERE ("Books"."AuthorID" = '%AuthorID1%') AND ("Books"."Title" = 'Misery')

 

UPDATE "Books" SET "ISBN" = '1501180983', "Publisher" = 'Scribner', "NumPages" = 576, "Year" = 2018, "Genre" = 'Horror', "Price" = 12.79 WHERE ("Books"."AuthorID" = '%AuthorID1%') AND ("Books"."Title" = 'Outsider')

 

Una solución alternativa

Para evitar registros duplicados en la tabla Books, también puede decidir eliminar tablas secundarias (ver a continuación) y configurar la condición Insertar todo en la tabla Books. Las acciones para la tabla Authors no cambiarán. Con esta configuración se eliminarán todos los registros Book en la base de datos si estos también existen en el archivo de origen. En caso de que se haya configurado la condición Insertar todo en la tabla Books, se insertarán los registros Book de origen que cumplan estos requisitos:

 

Los registros Book cuyos autores/as existen tanto en el archivo de origen como en la BD

Los registros Book de nuevos autores/as que existen sólo en el archivo de origen

 

Si un registro Book de origen no tiene ningún registro principal, este también se asignará a la BD, mientras su registro principal se creará en la tabla Authors. El nuevo registro Author recibirá un nuevo id. (una clave primaria), y los demás campos recibirán valores NULL. Esto es posible sólo si todos los campos en la tabla Authors, menos el de la clave primaria, aceptan valores NULL. Si los campos no aceptan valores NULL, recibirá un mensaje de error informándole que la restricción NOT NULL ha fallado.

 

Es importante destacar que los resultados del escenario principal y de soluciones alternativas pueden ser diferentes. Por ejemplo, si un/a autor/a en la BD tiene cinco registros de libros, y el/la mismo/a autor/a sólo tiene tres en el archivo de origen, se eliminarán los cinco registros de la BD y se reemplazarán con los tres del archivo de origen.

MF_DBTableActions07

Insertar información del seguimiento

Cuando hay varias personas que trabajan en la misma base de datos, puede ser beneficioso saber en qué momento se ha ejecutado la última asignación de datos. Puede haber diferentes posibilidades: p.ej., puede usar diferentes funciones datetime o insertar una instrucción SQL personalizada en el cuadro de diálogo Acciones de tablas de BD. En nuestro ejemplo, agregaremos la siguiente instrucción SQL al apartado Acciones que se deben ejecutar para cada registro (tabla Authors):

 

INSERT INTO TrackingInfo VALUES (DATETIME())

 

Al ejecutar el script SQL, esta instrucción SQL se ejecutará primero, es decir antes de cualquier instrucción para registros de BD.

 

Otros casos posibles

También puede configurar la acción Eliminar si en vez de la condición Actualizar si. En este caso se eliminarán los registros Author y Book que existen tanto en el archivo de origen como en la BD, y se insertarán nuevos registros en la BD (mediante la acción Insertar restantes). También puede decidir omitir estos mismos registros (con la condición Omitir si) e insertar nuevos registros en la BD (mediante la acción Insertar restantes).

 

© 2018-2024 Altova GmbH