Colaboraciones en el Guille

Visualización de Jerarquía de Datos

Jerarquías utilizando SQL Server 2000

 

Fecha: 28/Mar/2006 (27-03-2006)
Autor: Hermilson Tinoco (hertino_sql@hotmail.com) 

 


INTRODUCCION

Algunos procesos contables, financieros o manufactureros realizados en las empresas implican la relación entre entidades similares, conforme a lo que sucede al implementar el caso del empleado y el jefe, estos dos tipos de entidades se derivan(subclases) de la entidad Persona, en la mayoría de los casos al racionalizar las características de estas entidades se llega a la conclusión que no pueden existir como dos entidades separadas y se convierte al jefe en un empleado, generándose una sola entidad que cubre los dos conceptos.

Esta clase de relaciones crea una “jerarquía en los datos”, donde un empleado tiene un jefe, pero a la vez él es jefe de otro empleado y así sucesivamente hasta llegar al empleado con el nivel más bajo dentro de la compañía.

La generación de los reportes de datos que visualicen eficientemente estas relaciones y que muestren ordenadamente los datos con sus respectivas relaciones, puede convertirse en un punto crítico dentro del componente de base de datos.

PREPARANDO LA ESTRUCTURA DE PRACTICA

Con el fin de variar las prácticas no se utilizará el modelo Empleado-Jefe para las pruebas; de lo contrario se parte de la implementación del siguiente diseño para la generación de los informes.

Se inicia con la estructura de una Mesa de madera (padre principal), la cual contiene como partes fundamentales una Base y una Tapa. Cada Base se compone (hijos) de cuatro patas y ocho travesaños, y una tapa se compone de una lamina, que a su vez genera cuatro retales y aserrín. La Mesa de madera se fabrica en una planta de producción denominada como “PRUEBA” y cada uno de los productos esta identificado por una secuencia que lo identifica como único dentro de la relación padre-hijo.

A continuación se presenta de manera grafica la jerarquía de los componentes de nuestra Mesa de madera:

Tabla que representa lógicamente esta jerarquía:

CREATE TABLE tbl_jerarquia_datos
(
	f_planta char(6) NOT NULL,
	f_dato_padre int NOT NULL,
	f_dato_hijo int NOT NULL,
	f_secuencia smallint NOT NULL,
	f_cant_requerida decimal(10,2) NOT NULL,
	f_fecha_activacion datetime NOT NULL,
	f_dato_padre_desc varchar(100)  NOT NULL,
	f_dato_hijo_desc varchar(100)  NOT NULL,
	f_notas varchar(100)  NOT NULL
)
GO

GENERAR LA CONSULTA QUE VISUALIZA LA JERÁRQUICA DE DATOS

Esta consulta permite visualizar el ítem Mesa con todos sus componentes, ordenados según el orden jerárquico en la planta de producción. Con esta consulta se puede observar todas las jerarquías de una compañía o solo las de una planta en específico.

Inicialmente se crea una tabla temporal, la cual agrupara los datos generados por la consulta.

create table #tp1_jerarquia

La primera instrucción Insert Into agrega a la tabla temporal los productos que son padres de otros, y que no son hijos de ningún producto. Estos son los productos principales de la empresa (Mesa de madera) identificados con el nivel uno. En el caso de la relación empleado y jefe, estos datos son los del presidente o gerentes.

El segundo Insert agrega los componentes directos de los productos principales (Base y Tapa). Identificando a estos productos con el nivel dos y el código de ordenamiento de su ítem padre (f1_codigo_orden).

f1_codigo_orden + cast(f_dato_hijo as varchar(9)) + f1_id_planta + cast(f_secuencia as varchar(4))

El campo f1_codigo_orden es el compuesto del código del ítem, la planta y la secuencia que identifica al producto hijo.

A partir de este punto se empieza un ciclo que recorre los productos por nivel, iniciando en el nivel dos hasta llegar al nivel máximo de la compañía o en el peor de los casos hasta el nivel 99. En cada paso del ciclo se agregan los hijos de los productos de dicho nivel. La restricción del nivel 99 es para evitar un ciclo infinito; al utilizarlo en un caso práctico se puede ampliar o disminuir su valor.

While (@v_nivel < 99)

.....

if @v_nivel_max < @v_nivel - 1
begin
	break -- rompe el ciclo
end

ACERCA DEL AUTOR

Hermilson Tinoco es Ingeniero de Sistemas graduado en la Universidad Santiago de Cali, y se desempeña como Analista de Sistemas desde hace mas de 7 años con ambientes Microsoft (VB6, .Net y SQL Server); Desde el año 2001 es MCP, obteniendo desde entonces las certificaciones MCSD (VB6), MCAD, MCSD .NET, MCT y MCDBA.

 


Fichero con el código de ejemplo: hertino_sql_visualizar_jerarquia.zip - 2 KB

(MD5 checksum: 7606EDC22D6E09AB2527E5B5199D3AB3)


ir al índice principal del Guille