Traitement de requête par la couche service de données
La couche service de données utilise les différentes sections du fichier de modèle de requête afin de contrôler comment la requête est exécutée.
Les sections d'instructions XPath to SQL et d'instructions SQL d'association définissent chacune une liste d'instructions SQL du modèle. Chaque modèle SQL dispose d'un nom unique et d'un nom de table de base. La table de base fait référence à la table principale dans la requête, généralement la table représentant votre nom. Chaque modèle XPath to SQL, lorsqu'il est utilisé en conjonction avec les instructions SQL d'association dans une requête à deux étapes, renvoie une liste des clés primaires répondant aux critères de recherche (par exemple, sélection d'une liste d'ID de produits en fonction d'un nom de catégorie donné).
La section PROFILE définit les Profils d'accès utilisant des instructions SQL d'association. Au sein d'un profil, une ou plusieurs instructions SQL sont référencées pour chaque objet de base défini. Chaque instruction SQL d'association définit les données à renvoyer en fonction de la liste des clés primaires (provenant de l'instruction XPath to SQL). Par exemple, une instruction SQL d'association SQL sous un profil peut extraire toutes les propriétés et descriptions de produit en fonction d'une liste d'ID de produits, tandis qu'une autre instruction sous un profil différent extrait toutes les informations de vente croisée et de vente incitative, ainsi que les propriétés et descriptions de base.
La couche de service de données prend en charge deux types de requêtes : requêtes en une seule étape et requête en deux étapes.
Requêtes à une seule étape
Dans le cas de requêtes à une seule étape, le nom de profil d'accès de pair avec la clé XPath est utilisé pour sélectionner une requête XPath to SQL unique pour l'extraction de toutes les informations requises. Plusieurs requêtes peuvent extraire des niveaux de détail différents pour la même expression XPath et des profils d'accès distincts.
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_STATEMENTDans l'exemple précédent, l'expression XPath recherche les catalogues dotés des identificateurs uniques spécifiés et le profil d'accès IBM_Admin_Details sélectionne toutes les colonnes des tables CATALOG, CATALOGDSC et STORECAT de ces catalogues.
Requêtes à deux étapes
Les requêtes à deux étapes utilisent les instructions XPath to SQL et les instructions SQL d'association. Les instructions XPath to SQL extraient les clés primaires des objets de base correspondant aux critères de recherche spécifiés par la requête XPath. Les instructions SQL d'association, départagées par nom de profil, extraient les informations sur ces objets. Le code SQL associé doit posséder une relation de clé externe avec la table de base XPathSQL. En outre, l'instruction SQL d'association doit renvoyer la colonne de clé externe. Voir : Balises dans le fichier de modèle de requête.
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_PROFILEDans l'exemple précédent, l'instruction XPath to SQL est utilisée pour extraire les clés primaires depuis la table de base CATENTRY. La table de base pour l'instruction SQL XPath to SQL doit être la même que celle de l'instruction SQL d'association. La section PROFILE répertorie les instructions SQL associées à exécuter pour le profil d'accès IBM_Admin_CatalogEntryDescription. Cet exemple liste une seule instruction SQL associée, IBM_RootCatalogEntryWithDescription, qui est exécutée en substituant à la balise $ENTITY_PKS$ les clés primaires afin d'extraire toutes les données requises par la requête originale.
Dans le cas de requêtes à deux étapes, chaque profil d'accès peut recenser plusieurs instructions SQL, chacune sélectionnant des données différentes. Par exemple, une instruction SQL d'association SQL peut extraire toutes les propriétés et descriptions de produit en fonction d'une liste d'ID de produits, tandis qu'une autre instruction sous un profil différent peut extraire toutes les informations de vente croisée et de vente incitative en plus des propriétés et descriptions de base.
Il existe un niveau de tri par défaut lorsque vous avez créé une requête renvoyant les clés primaires dans un ordre prédéfini dans le modèle de requête. L'ordre des objets données représentant la table de base dans le graphique de données est cohérent avec l'ordre des clés primaires renvoyé par la requête XPath to SQL pour les requêtes en deux étapes. La liste des objets du conteneur PhysicalDataContainer doit apparaître dans le même ordre que celui des clés primaires renvoyé par la requête XPath to SQL.
Recommandations pour l'utilisation des requêtes
Dans la mesure du possible, vous devriez utiliser ce type de requête. Cependant, dans certains cas, il n'est pas possible d'extraire toutes les données en une requête unique. Ou bien, votre requête peut effectuer une jointure sur un grand nombre de tables et ne pas répondre à vos critères de performances.
- Requêtes devant paginer des données. La pagination d'une requête à une seule étape n'est pas possible si celle-ci renvoie plusieurs enregistrements pour chaque enregistrement de table de base. Une requête à deux étapes permet la pagination de l'ensemble de résultats renvoyé par la première instruction (les clés primaires) au lieu d'une pagination de l'ensemble de résultats renvoyé par la seconde instruction.
- Requêtes de recherche paramétrique.
- Requêtes complexes aux performances insatisfaisantes en raison d'une jointure d'un trop grand nombre de tables. La décomposition de ces requêtes en une instruction XPath SQL avec plusieurs instructions SQL associées est susceptible d'améliorer les performances.