Formas dinámicas de creación de formularios y diseño de bases de datos? [cerrado]

30

Digamos que sus usuarios pueden crear sus propios formularios basados ​​en la web (cuadros de texto, selecciones, etc.) y publicarlos en la web para que sus usuarios los completen.

¿Alguien tiene un recurso o algún consejo sobre cómo diseñar la base de datos para vincularla con los formularios dinámicos?

Por ejemplo, ¿crearía una tabla secundaria para cada formulario o diferentes versiones de un formulario dado?

Jeff Borden
fuente
Me gusta esta publicación: Crear una interfaz de usuario dinámica
basada en datos

Respuestas:

35

La creación de nuevas tablas dinámicamente basadas en la entrada del usuario generalmente no es una buena idea. Si la estructura básica de los formularios cambia, todas las tablas creadas dinámicamente deberán actualizarse para incluir nuevas columnas o eliminar las antiguas, y esto puede causar problemas de mantenimiento. Luego hay un problema de saber qué tabla consultar (lo que probablemente conducirá a un SQL dinámico que abre todos los problemas nuevos). Y probablemente también haya problemas de rendimiento, pero no estoy seguro de lo malo que sería. Además, una tabla se usa generalmente para representar un tipo de entidad (como "formulario web") en lugar de tener copias de la misma tabla para cada nueva instancia de la misma entidad.

Sugeriría una sola tabla para los formularios. Necesitará un identificador en cada formulario para identificar de quién es el formulario:

formas
-----
  id (PK)
  nombre
  owner_id (FK a users.id)
  (otros campos)

elementos_formados
-------------
  id (PK)
  form_id (FK a forms.id)
  element_type_id (FK a element_types.id)
  subtítulo
  (otros campos)

tipos_elemento
-------------
  id (PK)
  nombre

element_list_values
-------------------
  id (PK)
  element_id (FK a form_elements.id)
  nombre
  valor
  (¿¿otros campos??)

Su aplicación web puede permitir a los usuarios crear formularios que se guardarán en las formstablas, con una referencia al usuario que creó (suponiendo que está rastreando a los usuarios como entidades adecuadas). El formulario se completa con form_elementsesa referencia en la formstabla para que sepan a qué formulario pertenecen, y element_typespara que sepan de qué tipo son.element_typesalmacenará una lista estática (principalmente) de diferentes elementos que puede tener un formulario. Los tipos pueden ser: "text_field", "drop_down_list", "radio_buttons", "checkbox". Para tipos como "drop_down_list" y "radio_buttons", necesitará una tabla adicional, tal vez llamada element_list_valuespara almacenar las posibles opciones para las listas que estos elementos normalmente tienen.

FrustratedWithFormsDesigner
fuente
2
Gran solución TY
Jeff Borden
¿conoce alguna herramienta GUI existente del creador de formularios web para utilizar para completar el esquema de tabla que describió anteriormente por casualidad? Estamos usando .NET si es relevante. TY.
Jeff Borden
@JeffBorden: No, pero estoy seguro de que hay algo por ahí.
FrustratedWithFormsDesigner
Por lo tanto, supongo que la mejor manera de registrar los formularios enviados sería con un esquema como: id_submissions form (PK) form_id (FK to forms.id) user_id (FK to users.id) ... form_submission_elements id (PK) form_submission_id (FK a form_submissions.id) form_element_id (FK a forms_elements.id) valor ¿Mira a la derecha?
Jeff Borden
@FrustratedWithFormsDesigner ¿Cómo seleccionaría generar una tabla a partir de los campos de formulario y los valores de los campos en este esquema?
Hermes Autran