Búsqueda avanzadas y dinámicas

07/10/2008 - 12:12 por Alhambra Eidos Desarrollo | Informe spam
Hola a todos

una cuestión que quería comentar, a ver si consigo explicarme bien.

Estamos con una aplicación Windows que permite indexar documentos que
previamente se escanean en PDF. Dichos documentos (pdfs) tienen asociada
cierta información.

Básicamente, tenemos una estructura árbol de "tipos documentales", que
previamente se tiene que establecer por el administrador.

El administrador puede crear infinitos tipos documentales e infinitas
jerarquias (árboles) de esos tipos documentales. Puede haber nodos con
cardinalidad 1 o cardinalidad 1..n.

Además, para cada nodo (tipo documental) se pueden crear una serie de
propiedades (0..n)

En ese árbol, los nodos hijos, son los que tendrán una colección de
documentos (pdfs), que le irá añadiendo el usuario de la aplicación.
Además tendrá el usuario que indicar una serie de valores para las
propiedades necesarias de cada nodo del árbol.

El usuario irá "construyendo" el árbol a partir del nodo raíz, según
necesite la información; por ejemplo:

paso 0. El administrador ha definido la estructura que pueden tener los
Expedientes (define los nodos padres e hijos -tipos documentales-, la
cardinalidad, las propiedades de cada nodo...)


paso 1. El usuario de la aplicación comienza a escanear documentos y a
querer indexarlos por cierta información

Expediente (rellenar propiedad Núm.Expediente)


paso 2. Añadir nuevo nodo tipo documental Contrato que depende del tipo
documental Expediente

Expediente (Núm.Expediente)

Contrato (Rellenar propiedad Núm. Contrato, Fecha Contrato)


paso 3. Añadir nuevo nodo tipo documental Datos Contrato, que es un nodo
hijo en el que se pueden indexar documentos pdfs. Tendrá como propiedades:
Fecha Creación

Expediente (Núm.Expediente)

Contrato Núm. Contrato,Fecha Contrato)

Datos Contrato

paso 4. Añadir al nodo Datos Contrato un documento pdf que se quiere indexar

Expediente (Núm.Expediente)

Contrato (Núm. Contrato, Fecha Contrato)

Datos Contrato
00001.pdf (Rellenar propiedad Fecha Creación)


paso 5. Añadir al nodo Datos Contrato otro documento pdf que se quiere
indexar

Expediente (Núm.Expediente)

Contrato (Núm. Contrato, Fecha Contrato)

Datos Contrato
00001.pdf
00002.pdf (Rellenar propiedad Fecha Creación)


La finalidad de todo esto es la búsqueda de documentos por la información
que hemos indexado.
Por ejemplo, queremos los documentos con fecha de creación X,

o queremos los expedientes cuyos contratos tengan Fecha Contrato Y, y los
documentos tengan la Descripcion Z, etcétera...

Se permitirían búsquedas de tipo AND, OR, NOT...


La cuestión que intentamos modelizar todo esto.

En principio, la idea es generar tablas dinámicas cada vez que se añadan
nodos en el árbol para generar la estructura (lo que hará el administrador).
Al ser todo dinámmico, todo se complica.

Habíamos pensado si en crear o no una tabla por cada propiedad (que es lo
que sirve para indexar) de cada nodo... En fin, que para hacer una select de
búsqueda tendríamos un monton de tablas


Una de las (muchísimas) preguntas que nos hacemos...

para el rendimiento en las búsquedas es mejor:

tener 50 (un número alto) inners joins de tablas (que tendrán 2 campos o
pocos campos, de las tablas que representan las propiedades)

ó

tener una tabla muy ancha (con muchas columnas), y que tenga muchos campos
nulos (al estilo de las tablas de TINSA). Se podrían poner índices para cada
columna, de áquellas que representan las propiedades de los nodos ¿?


cualquier sugerencia de diseño de la BBDD tanto para creación del árbol como
para la búsqueda será bienvenida.

Muchas gracias

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.com/churrosoft
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft
 

Leer las respuestas

#1 Maxi Accotto
07/10/2008 - 13:44 | Informe spam
Hola, la verdad que para poderle hacer una sugerencia profesional se
requiere de muchos mas datos como asi tambien de un trabajo mas fino.
Pero a su pregunta de performance le comento que sin ninguna duda tener
muchas tablas con join es mas lento que una sola tabla, pero aca ya entra
cuanto necesita usted normalizar o no y cuanto puede perder de performance.

Ha pensado por ejemplo en tratar de utilizar XML?


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Alhambra Eidos Desarrollo"
escribió en el mensaje
de noticias:

Hola a todos

una cuestión que quería comentar, a ver si consigo explicarme bien.

Estamos con una aplicación Windows que permite indexar documentos que
previamente se escanean en PDF. Dichos documentos (pdfs) tienen asociada
cierta información.

Básicamente, tenemos una estructura árbol de "tipos documentales", que
previamente se tiene que establecer por el administrador.

El administrador puede crear infinitos tipos documentales e infinitas
jerarquias (árboles) de esos tipos documentales. Puede haber nodos con
cardinalidad 1 o cardinalidad 1..n.

Además, para cada nodo (tipo documental) se pueden crear una serie de
propiedades (0..n)

En ese árbol, los nodos hijos, son los que tendrán una colección de
documentos (pdfs), que le irá añadiendo el usuario de la aplicación.
Además tendrá el usuario que indicar una serie de valores para las
propiedades necesarias de cada nodo del árbol.

El usuario irá "construyendo" el árbol a partir del nodo raíz, según
necesite la información; por ejemplo:

paso 0. El administrador ha definido la estructura que pueden tener los
Expedientes (define los nodos padres e hijos -tipos documentales-, la
cardinalidad, las propiedades de cada nodo...)


paso 1. El usuario de la aplicación comienza a escanear documentos y a
querer indexarlos por cierta información

Expediente (rellenar propiedad Núm.Expediente)


paso 2. Añadir nuevo nodo tipo documental Contrato que depende del tipo
documental Expediente

Expediente (Núm.Expediente)

Contrato (Rellenar propiedad Núm. Contrato, Fecha Contrato)


paso 3. Añadir nuevo nodo tipo documental Datos Contrato, que es un nodo
hijo en el que se pueden indexar documentos pdfs. Tendrá como propiedades:
Fecha Creación

Expediente (Núm.Expediente)

Contrato Núm. Contrato,Fecha Contrato)

Datos Contrato

paso 4. Añadir al nodo Datos Contrato un documento pdf que se quiere
indexar

Expediente (Núm.Expediente)

Contrato (Núm. Contrato, Fecha Contrato)

Datos Contrato
00001.pdf (Rellenar propiedad Fecha Creación)


paso 5. Añadir al nodo Datos Contrato otro documento pdf que se quiere
indexar

Expediente (Núm.Expediente)

Contrato (Núm. Contrato, Fecha Contrato)

Datos Contrato
00001.pdf
00002.pdf (Rellenar propiedad Fecha Creación)


La finalidad de todo esto es la búsqueda de documentos por la información
que hemos indexado.
Por ejemplo, queremos los documentos con fecha de creación X,

o queremos los expedientes cuyos contratos tengan Fecha Contrato Y, y los
documentos tengan la Descripcion Z, etcétera...

Se permitirían búsquedas de tipo AND, OR, NOT...


La cuestión que intentamos modelizar todo esto.

En principio, la idea es generar tablas dinámicas cada vez que se añadan
nodos en el árbol para generar la estructura (lo que hará el
administrador).
Al ser todo dinámmico, todo se complica.

Habíamos pensado si en crear o no una tabla por cada propiedad (que es lo
que sirve para indexar) de cada nodo... En fin, que para hacer una select
de
búsqueda tendríamos un monton de tablas


Una de las (muchísimas) preguntas que nos hacemos...

para el rendimiento en las búsquedas es mejor:

tener 50 (un número alto) inners joins de tablas (que tendrán 2 campos o
pocos campos, de las tablas que representan las propiedades)

ó

tener una tabla muy ancha (con muchas columnas), y que tenga muchos campos
nulos (al estilo de las tablas de TINSA). Se podrían poner índices para
cada
columna, de áquellas que representan las propiedades de los nodos ¿?


cualquier sugerencia de diseño de la BBDD tanto para creación del árbol
como
para la búsqueda será bienvenida.

Muchas gracias

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.com/churrosoft
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

Preguntas similares