Proceso de la capa de servicios de datos
La capa de servicios de datos utiliza las diferentes secciones del archivo de plantilla de consulta para controlar cómo se ejecuta la consulta.
Las secciones para sentencias XPath a SQL y sentencias SQL de asociación definen cada una de ellas una lista de sentencias de plantilla SQL. Cada plantilla SQL tiene un nombre exclusivo y un nombre de tabla base. La tabla base hace referencia a la tabla principal de la consulta que es, normalmente, la tabla que representa el Nombre del usuario. Cada plantilla XPath a SQL, cuando se utiliza junto con las sentencias SQL de asociación en una consulta de dos pasos, devuelve una lista de claves primarias que satisfagan los criterios de búsqueda (por ejemplo, seleccionar una lista de ID de productos especificando el nombre de categoría.
La sección PROFILE define los Perfiles de acceso que utilizan las sentencias SQL de asociación. Dentro de un perfil, se hace referencia a una o varias sentencias de SQL de asociación para cada objeto base definido. Cada sentencia SQL de asociación define los datos que se han de devolver especificando la lista de claves primarias (de la sentencia XPath a SQL). Por ejemplo, una sentencia SQL de asociación que esté bajo un perfil puede recuperar todas las propiedades y descripciones del producto especificando una lista de ID de productos, mientras que otra sentencia SQL de asociación que esté bajo un perfil distinto recupera toda la información de venta cruzada y de venta ascendente así como las propiedades básicas y descripciones.
La capa de servicios de datos tiene soporte para dos tipos de consultas: un solo paso y dos pasos.
Consultas de un solo paso
Para consultas de un solo paso, se utiliza el nombre de perfil de acceso junto la clave XPath para seleccionar una sola consulta XPath a SQL que recupere toda la información solicitada. Varias consultas pueden recuperar distintos niveles de detalle para la misma expresión XPath y distintos perfiles de acceso.
BEGIN_SYMBOL_DEFINITIONS
COLS:CATALOG=CATALOG:*
COLS:CATALOGDSC=CATALOGDSC:*
COLS:STORECAT=STORECAT:*
END_SYMBOL_DEFINITIONS
BEGIN_XPATH_TO_SQL_STATEMENT
name=/Catalog[CatalogIdentifier[(UniqueID=)]]+IBM_Admin_Details
base_table=CATALOG
sql=
SELECT
CATALOG.$COLS:CATALOG$,
CATALOGDSC.$COLS:CATALOGDSC$,
STORECAT.$COLS:STORECAT$
FROM
CATALOG
JOIN STORECAT ON STORECAT.CATALOG_ID=CATALOG.CATALOG_ID
AND STORECAT.STOREENT_ID IN ($STOREPATH:catalog$)
LEFT OUTER JOIN CATALOGDSC ON CATALOGDSC.CATALOG_ID = CATALOG.CATALOG_ID
AND CATALOGDSC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)
WHERE
CATALOG.CATALOG_ID IN (?UniqueID?)
END_XPATH_TO_SQL_STATEMENT
En el ejemplo anterior, la expresión XPath consulta los catálogos con identificadores exclusivos especificados y el perfil de acceso IBM_Admin_Details selecciona todas las columnas de las tablas CATALOG, CATALOGDSC y STORECAT para estos catálogos.
Consultas de dos pasos
Las consultas de dos pasos utilizan las sentencias Xpath a SQL y las sentencias SQL de asociación. Las sentencias Xpath a SQL recuperan las claves primarias de los objetos base que puedan interesar para los criterios de búsqueda especificados por la consulta Xpath. Las sentencias SQL de asociación, seleccionadas por nombre de perfil, recuperan la información sobre dichos objetos. Las necesidades de SQL asociadas tienen una relación de clave foránea a la tabla base XPathSQL. Y las necesidades de sentencia SQL de asociación devuelven la columna de clave foránea. Consulte Códigos del archivo de plantilla de consulta.
BEGIN_SYMBOL_DEFINITIONS
COLS:CATENTRY=CATENTRY:*
COLS:CATENTRY_ID=CATENTRY:CATENTRY_ID
COLS:CATENTDESC=CATENTDESC:*
END_SYMBOL_DEFINITIONS
BEGIN_XPATH_TO_SQL_STATEMENT
name=/CatalogEntry[CatalogEntryIdentifier[(UniqueID=)]]
base_table=CATENTRY
sql=
SELECT
CATENTRY.$COLS:CATENTRY_ID$
FROM
CATENTRY
JOIN STORECENT ON (CATENTRY.CATENTRY_ID = STORECENT.CATENTRY_ID
AND STORECENT.STOREENT_ID = $CTX:STORE_ID$)
WHERE
CATENTRY.CATENTRY_ID IN (?UniqueID?) AND
CATENTRY.MARKFORDELETE = 0
END_XPATH_TO_SQL_STATEMENT
BEGIN_ASSOCIATION_SQL_STATEMENT
name=IBM_RootCatalogEntryWithDescription
base_table=CATENTRY
additional_entity_objects=true
sql=
SELECT
CATENTRY.$COLS:CATENTRY$,
CATENTDESC.$COLS:CATENTDESC$
FROM
CATENTRY
LEFT OUTER JOIN CATENTDESC ON CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID
AND CATENTDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)
WHERE
CATENTRY.CATENTRY_ID IN ($ENTITY_PKS$)
END_ASSOCIATION_SQL_STATEMENT
BEGIN_PROFILE
name=IBM_Admin_CatalogEntryDescription
BEGIN_ENTITY
base_table=CATENTRY
associated_sql_statement=IBM_RootCatalogEntryWithDescription
END_ENTITY
END_PROFILE
En el ejemplo anterior, la sentencia XPath a SQL se utiliza para captar las claves primarias de la tabla base, CATENTRY. La tabla base para la sentencia XPath a SQL debe ser la misma que la tabla base para la sentencia SQL de asociación. La sección PROFILE lista las sentencias SQL asociadas para que se ejecuten para el perfil de acceso IBM_Admin_CatalogEntryDescription. Este ejemplo lista una sola sentencia de SQL asociada, IBM_RootCatalogEntryWithDescription, que se ejecuta con las claves primarias sustituidas por el código $ENTITY_PKS$ para recuperar todos los datos solicitados por la consulta original.
Para las consultas de dos pasos, cada perfil de acceso puede lista muchas sentencias SQL asociadas que seleccionen cada una datos distintos. Por ejemplo, una sentencia SQL de asociación puede recuperar todas las propiedades y descripciones del producto especificando una lista de ID de productos, mientras que otra sentencia SQL de asociación que esté bajo un perfil distinto puede recuperar toda la información de venta cruzada y de venta ascendente además de las descripciones y propiedades básicas.
Hay un nivel predeterminado de orden cuando ha creado una consulta que devuelve las claves primarias en un orden predefinido en la plantilla de consulta. El orden de los objetos de datos que representan la tabla base en el gráfico de datos es coherente con el orden de las claves primarias devueltas por la consulta XPath a SQL para las consultas en dos pasos. La lista de objetos en PhysicalDataContainer debe aparecer en el mismo que el orden de las claves primarias devueltas por la consulta XPath a SQL.
Directrices sobre el usuario de consultas
Utilice las consultas de un solo paso siempre que sea posible. Sin embargo, en algunos casos, no es posible captar todos los datos en una sola consulta. De forma alternativa, es posible que la consulta se una a un número de tablas muy grande y que no cumpla los requisitos de rendimiento.
- Consultas que necesitan paginar datos. No se puede paginar el resultado de una consulta de un solo paso si devuelve muchos registros para cada registro de la tabla base. Una consulta de dos pasos le permite paginar el conjunto de resultados devuelto por la primera sentencia (las claves primarias) en lugar de paginar el conjunto de resultados de la segunda sentencia.
- Consultas de búsqueda paramétrica
- Consultas complejas que se ejecutan de forma deficiente debido a la unión de demasiadas tablas. Dividiendo esas consultas en una sentencia XPath SQL y muchas sentencias SQL asociadas se puede mejorar el rendimiento.