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?
architecture
database
webforms
Jeff Borden
fuente
fuente
Respuestas:
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:
Su aplicación web puede permitir a los usuarios crear formularios que se guardarán en las
forms
tablas, con una referencia al usuario que creó (suponiendo que está rastreando a los usuarios como entidades adecuadas). El formulario se completa conform_elements
esa referencia en laforms
tabla para que sepan a qué formulario pertenecen, yelement_types
para que sepan de qué tipo son.element_types
almacenará 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 llamadaelement_list_values
para almacenar las posibles opciones para las listas que estos elementos normalmente tienen.fuente