Manuel §4.2.8    

Requêtes multi_base

Les requêtes multi-base permettent de réaliser des sélections avec des critères très complexes. Elles permettent de réaliser des sélections de produits en croisant les données venant de plusieurs bases.

Le principe est simple un attribut peut être calculé en fonction d'une valeur obtenue dans une autre base indexé par une valeur calculée.

Le plus simple est de prendre des exemples afin de comprendre.

Lien exact

Supposons que pour des raisons de compacité, le schéma des données comprennent deux bases-produit: une base Composant et une base Produit_fini. Chaque élément de chacune de ces bases est identifié par un code à barre et la base Produit_fini garde pour chaque produit fini le code à barre du composant assemblé.

Voici nos deux bases

Champ de Composant

Type

Description

Date

Date

Date de création

Cab

Int

Code à barre

Mesure1

Measure

Une mesure particulière

Champ de Produit_fini

Type

Description

Date

Date

Date de création

Cab

Int

Code à barre

Composant

Int

Code à barre du composant

On suppose de plus que Composant est indexée sur Cab.

On veut sélectionner les produits finis dont la mesure du composant est comprise entre 95 et 105. On va définir le modèle de requête suivant:

Fini Product, "C:\Sisal\Test\Produit_fini.prd";
Comp Product, "C:\Sisal\Test\Composant.prd";

Fin Node, "Produit fini", Begin
Date Item, "Date de création", Fini.Date,  "%.3t", Date, 8;
Cab Item, "Code à barre", Fini.Cab, "%d",  Int, 8;
Comp Item, "Composant", Fini.Composant, "%d",  Int, 8, begin
Cdate Item, "Date du composant", Comp.Date Where  Comp.Cab Is Fini.Composant, "%.3t", Date, 8;
Mes1 Item, "Mesure 1",  Comp.Mesure1 Where Comp.Cab Is Fini.Composant, "%3f V",  Float, 8;
End;
End;

Le deuxième critère sera Mes1 avec comme borne inférieure 95 et comme borne supérieure 105.

Lorsque Sisal évaluera un produit de la base Produit_Fini, il rend une valeur pour l'expression "Fini.Composant" et l'opérateur "Where .. Is .." recherche alors dans la base Composant le composant dont le code à barre "Comp.Cab" est égale à "Fini.Composant".

Si on trouve le composant correspondant, l'expression rendra la valeur du champ "Comp.Mesure1" de l'enregistrement correspondant. Après on compare aux bornes inférieures et supérieures.

Si on ne trouve pas le composant correspondant, l'expression rend une valeur indéfinie et le produit est rejeté.

Lien au plus proche

Dans cette exemple on a une base-produit qui enregistre les produits finis, et une autre base-produit qui est utilisée pour journaliser la température d'un four toutes les dix minutes.

Voici nos deux bases

Champ de Four

Type

Description

Date

Date

Date d'enregistrement

Temperature

Flottant

Température du four

Champ de Fini

Type

Description

Date

Date

Date de création

Cab

Int

Code à barre

On veut sélectionner les produits finis qui ont été fabriqué 2 heures avant que la température du four soit inférieure à 185°C.

On va définir le modèle de requête suivant:

Fini Product, "C:\Sisal\Test\Fini.prd";
Four Product, "C:\Sisal\Test\Four.prd";

Fin Node, "Produit fini", Begin
Date Item, "Date de création", Fini.Date,  "%.3t", Date, 8;
Cab Item, "Code à barre", Fini.Cab, "%d",  Int, 8;
End;

Four Node, "Températures du four", Begin
Temp Item, "Température de cuisson",  Four.Temperature Where Comp.Date Near Fini.Date+2*3600, "%3f  °C", Float, 4;
End;

Le deuxième critère sera Temp avec comme borne inférieure 0 et comme borne supérieure 185.

Lorsque Sisal évaluera un produit de la base Fini, il rend une valeur pour l'expression "Fini.Date+2*3600", c'est à dire deux heures parés la création du produit.

L'opérateur "Where .. Near .." recherche alors dans la base Four la journalisation de température dont la date est la plus proche supérieure à deux heures après la création du produit.

Si on trouve la journalisation correspondante, l'expression rendra la valeur du champ "Four.Temperature" de l'enregistrement correspondant et après on compare aux bornes inférieures et supérieures.

Si on ne trouve pas le composant correspondant, l'expression rend une valeur indéfinie et le produit est rejeté.