Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

infinitas columnas

Estas en el tema de infinitas columnas en el foro de Mysql en Foros del Web. Estimados, estoy diseñando unas tablas en mi base mysql pero tengo un problema. a ver is me pueden dar una mano en un escenario definido ...
  #1 (permalink)  
Antiguo 02/04/2013, 21:07
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
infinitas columnas

Estimados,
estoy diseñando unas tablas en mi base mysql pero tengo un problema. a ver is me pueden dar una mano

en un escenario definido yo tendrias

tabla campos
id, campo1, campo2, campo3....

tabla valores
id, id_campo, valor1, valor2, valor2...

y luego de ejecutar una consulta podria obtener algo asi

nombre, apellido, email
juan, perez, [email protected]

el problema es que no se cuantos campos voy a tener!
por lo que pense crear una tabla y dinamicamente ir creando los campos.
pero ahora no sabria como almacenar los valores de las respuestas!

tabla preguntas
id
nombre_identifica

tabla campos
id_pregunta, nombre

si hago un
SELECT campos.nombre FROM campos WHERE id_pregunta = ? obtendria todos los campos que quiero. pero como puedo almacenar las respuestas?
la idea es que los campos sean campos de texto.
algo asi hace salesforce, uno puede definir los campos y leugo los datos entran con esos campos, pero no se como se almacenan. perdon lo extenso creo que lo complique mas aun ;)
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 02/04/2013, 22:25
Avatar de JhonErick  
Fecha de Ingreso: noviembre-2012
Ubicación: colombia
Mensajes: 38
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: infinitas columnas

por que no explicas mejor lo que quieres realizar desde mi punto de vista parece una mala extructura de las tablas por eso de crear campos indefinidamente!!! por que no mas bien en ves de crear campos dinamicamente creas registros con un id, un nombre_campo y contenido Saludos
  #3 (permalink)  
Antiguo 03/04/2013, 10:32
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Respuesta: infinitas columnas

justamente por eso vengo aqui a preguntar cual puede ser una solucion adecuada.

la idea es que el usuario pueda customizar los campos de un formulario (al mejor estilo de eso que se programa en javascript que el usuario agrega campos, y desplegables, etc, etc)

el problema es que todo esto tiene que ser almacenado en una base de datos y al ser campos creados dinamicamente con javascript no hay una relacion directa en la base de datos
osea no tengo id, nombre, apellido, email sino que los campos los crea el usuario
no se si he aclarado un poco la cosa. gracias!
__________________
On error no hago nada porque deje de fumar...
  #4 (permalink)  
Antiguo 03/04/2013, 11:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: infinitas columnas

Cita:
Iniciado por dieguicho Ver Mensaje
justamente por eso vengo aqui a preguntar cual puede ser una solucion adecuada.

la idea es que el usuario pueda customizar los campos de un formulario (al mejor estilo de eso que se programa en javascript que el usuario agrega campos, y desplegables, etc, etc)

el problema es que todo esto tiene que ser almacenado en una base de datos y al ser campos creados dinamicamente con javascript no hay una relacion directa en la base de datos
osea no tengo id, nombre, apellido, email sino que los campos los crea el usuario
no se si he aclarado un poco la cosa. gracias!
Si... lo has aclarado. Lo suficiente como para decirte que tu sistema colapsará antes de que pases 6 meses en producción, porque eso es un error de tipo catastrófico.
Nunca, jamás, nadie en su sano juicio deja que sea un usuario el que define la estructura de una tabla. Eso simplemente no se hace.
Hay algunas razones fundamentales:
1) No puedes poner una tabla con definición dinámica sin tarde o temprano llegar al límite de campos posibles que el DBMS te da. Todo DBMS tiene restricciones, porque no es admisible una cantidad infinita de campos.
2) Te arriesgas a fallos de normalización calamitosos. El usuario puede poner cualquier cosa, incluyendo columnas con dominios solapados, datos repetitivos, y montón de basura de tamaño imposible.
3) Cada modificación se aplicaría a la misma tabla (a menos que además estés pensando en crear una tabla por usuario, lo que sería peor), con lo que dos usuarios podrían crear o destruir estructuras que no les pertenecen. No quiero ni imaginar los resultados catastróficos de semejante cosa.
4) Es totalmente innecesario hacer eso. Para lograr estructuras de formularios dinámicos no tienes por qué crear una base de modificación dinámica. Lo que tienes que hacer es crear una base que soporte la creación dinámica de formularios... cosa que es otra cosa totalmente diferente.
5) Estás intentando inventar la rueda, descubrir el fuego y además inventar el agujero del mate. Eso ya se hizo, y es una de las cosas que contienen las estructuras de las bases de diferentes aplicaciones (vBulletin, WordPress, etc), precisamente para usos semejantes... aunque claro, de todos modos están pensadas para que haya un administrador que defina eso, y no dejarlo al arbitrio de los que no entienden ni medio.

No lo hagas.

No tiene ni sentido ni justificación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/04/2013, 11:20
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Respuesta: infinitas columnas

bueno creo que no me he explicado bien asi que intentare denuevo. no soy bueno para explicarme :(

comprendo que dejar que un usuario cualquiera altere mi base de datos es una mala practica. dicho esto:

los usuarios generaran los formularios (como tantos servicios que hay dando vueltas: salesforce, wufoo, etc, etc)

la estructura que vengo pensando para presentar los formulario es la siguiente

tabla tipo_campo
- id
- tipo (texto, select, radiobutton, etc, etc)

tabla formularios
- id
- nombre (nombre para identificar el formulario)

tabla relacion
- id
- id_formulario
- id_tipo_campo
- nombre_campo

de esta manera si ejecuto

Código:
SELECT tipo_campo.tipo, relacion.nombre_campo
FROM tipo_campo, relacion
WHERE tipo_campo.id = relacion.id_tipo_campo AND relacion.id_formulario = 1
me devolvera algo asi:

tipo_campo.tipo | relacion.nombre_campo
--------------------------------------------------
input | nombre
--------------------------------------------------
input | email
--------------------------------------------------
select | pais
--------------------------------------------------

haciendo esto puedo imprimir en pantalla un formulario customizado. pero luego de enviar
el formulario necesito ingresar esto a la base de datos y es justamente ahi donde no se me ocurre que estructura usar.

como lo ven ahi? saludos y gracias!
__________________
On error no hago nada porque deje de fumar...
  #6 (permalink)  
Antiguo 07/04/2013, 20:22
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Respuesta: infinitas columnas

Hola muchachos alguien que sepa sql que me pueda dar
Una mano? Que estoy trabado con esto? Gracias!!
__________________
On error no hago nada porque deje de fumar...
  #7 (permalink)  
Antiguo 08/04/2013, 14:03
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: infinitas columnas

Hola,

por lo que veo la respuesta ya te la ha dado gnzsoloyo:

4) Es totalmente innecesario hacer eso. Para lograr estructuras de formularios dinámicos no tienes por qué crear una base de modificación dinámica. Lo que tienes que hacer es crear una base que soporte la creación dinámica de formularios... cosa que es otra cosa totalmente diferente.

Saludos.
  #8 (permalink)  
Antiguo 09/04/2013, 06:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: infinitas columnas

Pues, mira. Yo te sugeriría que te inspires en el modelo de datos de Wordpress, que precisamente usa conceptos como metadatos y taxonomías para resolver ese tipo de cosas:



Básicamente, lo que quiero que veas es que ese tipo de esquema te permite hacer todo lo que necesitas, aunque los procesos de recuperación de la información serán algo más complejos que en una base de datos diseñada ad-hoc.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/04/2013, 14:12
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Respuesta: infinitas columnas

bien, estoy me ayuda mucho. el problema como bien dices es recuperar la informacion.
de que manera puedo hacer esto ultimo? gracias!
__________________
On error no hago nada porque deje de fumar...

Etiquetas: campo, columnas, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:59.