Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Campos Dinamicos - SQL

Buenas Amigos:

Como de costumbre ando divagando por los sinuosos caminos de lo que no he hecho antes y siempre encuentro algún que otro conflicto.

La idea es que tengo que almacenar estructuras dinámicas, osea imaginen clases las cuales algunas tienen algunos atributos y otras otros, y seguramente algunas un par de atributos en común.

Seguramente debe existir algún paradigma para esto... pero a mi se me ocurrió hacer lo siguiente:

Tramites(id_tramite(PK), id_tipo (FK), ...)
Datos_x_Tramite(id_tramite(FK), id_campo(FK), valor)
tipo_tramites(id_tipo(PK), ...)
Campos_x_tipo(id_campo(PK),id_tipo(FK), tipo_dato[text,number,....], ..... )

Como pueden ver la estructura es muy simple, pero me trae varias complicaciones.

Quisiera saber dos cosas:

1) que les parece este DER
2) como ven factible hacer un select que me devuelva por cada registro todos los campos que tiene cada tramite

ej :

tramite campo1 campo2 campo3
1 33,4 lalala NULL
2 NULL ninini 2002

Espero haber sido claro

y desde ya muchisimas gracias por su valioso tiempo
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #2  
Antiguo 23-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Amigos: Alguna idea?
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #3  
Antiguo 23-10-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Que motor de datos utilizas...??

Tengo entendido que en SQLServer hay una clausula Pivot que puede ayudarte a hacerlo. Al parecer firebird 1.5 tambien tendra algo que te ayude... pero no estoy seguro, pues no he migrado aun...

Si no, en interbase 6 o firebird 1.x la unica forma de hacerlo es con stored procedures, con lo que casi deja de ser dinamico.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 23-10-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Gracias por el dato, estoy con MSSQL Server... asi que tendre que investigar un poco sobre Pivot... alguna otra sugerencia??
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #5  
Antiguo 03-11-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Buenas !!!.... este tema sigue complicando mis tareas.... alguna idea muchachos ???? ..... por que la verdad no logro encontrar una buena solución por ningun lado
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #6  
Antiguo 03-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Viet, como bien dice la guía de estilo , a veces cuando no hay respuestas puede deberse a que la pregunta no fue bien planteada.

Por lo menos en mi caso, y no digo que sea el caso general, yo no entiendo tu pregunta. Empiezas con la frase:

Cita:
osea imaginen clases las cuales algunas tienen algunos atributos y otras otros, y seguramente algunas un par de atributos en común
que es muy ambigua. Es como decir:

"osea imaginen personas las cuales algunas tienen algunos gustos y otras otros, y seguramente algunas un par de gustos en común"

¿Por qué no replanteas tu problema, quizá más detallado a ver si le entendemos mejor?

// Saludos
Responder Con Cita
  #7  
Antiguo 03-11-2003
Viet Viet is offline
Miembro
 
Registrado: jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 21
Viet Va por buen camino
Red face



Gracias por la sugerencia roman , es verdad que debe estar no muy claro, lo que pasa es que como la mayor parte de las cosas que hacemos se nos hace claro a nosotros por el tiempo que estamos con estas. Tratare de no caer en ese error.

Bien, vamos por parte.

Problema
Debo generar una estructura de datos capaz de contener registros asociados a Tramites. Cada Tipo de tramite puede contener distintos atributos(campos). Y estos tipos deben poder ser definidos en tiempo de ejecución.

Ejemplo: Tramite A tiene --> Monto[float], ID [int], Observaciones[text], ID_Producto[int]
Tramite B tiene --> Nro_cliente[int], Obs[text], Telefono[text], ID_empleado[int]


Como dije estos tramites van a ser definidos en tiempo de ejecución. Por lo que no puedo definir una tabla por tramite.

(Es por eso que lo imagino como Clases).

Solución Posible

La estructura capas de almacenar esto que se me ocurre puede ser :

Tramites(id_tramite(PK), id_tipo (FK), ...)
Datos_x_Tramite(id_tramite(FK), id_campo(FK), valor)
tipo_tramites(id_tipo(PK), ...)
Campos_x_tipo(id_campo(PK),id_tipo(FK), tipo_dato[text,number,....], ..... )


El campo Valor, debo ver si lo trabajo como Texto, Variant o BLOB... Pero mas allá de ese detalle con esto creo que se puede contener todos los tramites que definan y sus registros.

Inconvenientes

Bien, uno de los primeros problemas que tengo con esta estructura de datos, es tratar de realizar una consulta que me devuelva el tramite y todos sus campos(Atributos). Esto es porque no se la cantidad de campos que tengo en tiempo de diseño.
Osea, por cada tramite(registro : una venta, un contacto con el cliente, un reclamo, etc.), voy a tener un registro en la tabla Tramites y un registro en la Datos_X_Tramite por cada campo que tenga definido ese tramite.
Con lo cual si yo quiero obtener todos los datos de los tramites de tipo X, no podría hacer

Código:
		Select * from Tramites t inner join Datos_x_tramite d on (t.id_tramite=d.id_tramite) Where id_tipo=X
Para poder obtener

ID_tramite campo1 campo2 campo3
1 $2, 89 " LALA" 890
3 $89,8 "where" 789



Espero que este mas claro el problema
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #8  
Antiguo 06-11-2006
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Hola ...

Yo estoy trabajando en un tema parecido al tuyo, nuestra empresa tiene muchos articulos deportivos, y para las fichas tecnicas, una bicicleta no tiene los mismos campos que tiene un balon. Aunque hay algunos que son comunes.

Nosotros tenemos una tabla, y para cada tipo de articulo nos dan un numero de campos, con estos campos creamos una tabla temporal. En otra tabla estan los valores de cada campo, asi que con esta rellenamos la tabla temporal.

Ya para finalizar unimos esta tabla temporal con los campos que son comunes con todos los articulos.

Si te sirve como lo montamos nosotros, te puedo ayudar algo. Un saludo

Pd: utilizamos sqlserver 2000
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:28:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi