Relaciones recursivas

Generalmente, las relaciones de uno a uno y de uno a varios se usan para unir dos segmentos diferentes, pertenecientes a dos orígenes distintos. Sin embargo, también puede unir el mismo origen de datos, o incluso un segmento, a sí mismo. Esta técnica se denomina join recursivo.

Consulte el manual Cómo crear informes con el lenguaje WebFOCUS para más información sobre los joins recursivos.


Principio de página

Ejemplo: Un join recursivo con un solo segmento

Suponga que tiene un origen de datos con un solo segmento, llamado MANAGER, que incluye el número de ID de un empleado, su nombre y el número de ID de su gerente, como se observa en la siguiente imagen.

Si quiere crear un informe que muestre el número de ID y el nombre de todos los empleados y gerentes, debe unir el segmento a sí mismo. Emita el siguiente comando:

JOIN MANAGER_ID IN MANAGER TO ID IN MANAGER AS BOSS

Esto crea la siguiente estructura:

Nota: Puede hacer referencia a campos, de forma única, en segmentos recursivos, de referencia cruzada, prefijando a ellos las cuatro primeras letras del nombre del join (BOSS, en este ejemplo). La única excepción es el campo de referencia cruzada, donde se prefija el alias en lugar del nombre.

Después de emitir el join, puede generar un conjunto de respuestas similar a éste:

ID      NAME               MANAGER_ID     BOSSNAME
--      ----               ----------     --------
026255  JONES              837172         CRUZ
308743  MILBERG            619426         WINOKUR
846721  YUTANG             294857         CAPRISTI
743891  LUSTIG             089413         SMITH
585693  CAPRA              842918         JOHNSON

Principio de página

Ejemplo: Un join recursivo con varios segmentos

También puede unir estructuras más grandes de forma recursiva. Por ejemplo, observe el siguiente origen de datos, de dos segmentos, llamado AIRCRAFT, que almacena una lista de materiales de una empresa aeronáutica. El segmento raíz tiene el nombre y la descripción de una pieza, mientras que el segmento secundario muestra el nombre de una subpieza. Cada pieza puede disponer de muchas subpiezas. Este tipo de estructura unida aparece explicado en el siguiente diagrama.

Mientras que las piezas más grandes están compuestas por varios niveles de subpiezas, algunas de éstas, como las tuercas, se usan por toda la aeronave. Sería redundante, por tanto, asignar una instancia de segmento a cada aparición de esta subpieza. En su lugar, use el diseño de dos segmentos, mostrado anteriormente, y después una el origen de datos a sí mismo:

JOIN SUBPART IN AIRCRAFT TO PART IN AIRCRAFT AS SUB_PART

Esto da lugar a la siguiente estructura de datos.


WebFOCUS