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 forms
tablas, con una referencia al usuario que creó (suponiendo que está rastreando a los usuarios como entidades adecuadas). El formulario se completa con form_elements
esa referencia en la forms
tabla para que sepan a qué formulario pertenecen, y element_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 llamada element_list_values
para almacenar las posibles opciones para las listas que estos elementos normalmente tienen.