Criar novas tabelas dinamicamente com base na entrada do usuário geralmente não é uma boa ideia. Se a estrutura básica dos formulários mudar, todas as tabelas criadas dinamicamente precisarão ser atualizadas para incluir novas colunas ou remover as antigas, e isso pode causar dores de cabeça na manutenção. Depois, há o problema de saber qual tabela consultar (o que provavelmente levará ao SQL dinâmico que abre todos os novos problemas). E provavelmente há problemas de desempenho também, mas não tenho certeza de quão ruim isso seria. Além disso, uma tabela geralmente é usada para representar um tipo de entidade (como "formulário da web") em vez de ter cópias da mesma tabela para cada nova instância da mesma entidade.
Eu sugeriria uma única tabela para os formulários. Você precisará de um identificador em cada formulário para identificar de quem é o formulário:
formulários
-----
ID (PK)
nome
owner_id (FK para users.id)
(outros campos)
form_elements
-------------
ID (PK)
form_id (FK para forms.id)
element_type_id (FK para element_types.id)
rubrica
(outros campos)
element_types
-------------
ID (PK)
nome
element_list_values
-------------------
ID (PK)
element_id (FK para form_elements.id)
nome
valor
(outros campos ??)
Seu aplicativo da web pode permitir que os usuários criem formulários que serão salvos nas forms
tabelas, com uma referência ao usuário que criou (supondo que você esteja rastreando os usuários como entidades apropriadas). O formulário é preenchido com form_elements
essa referência na forms
tabela para que eles saibam a qual formulário pertencem e element_types
para que saibam a que tipo são. element_types
irá armazenar uma lista estática (principalmente) de diferentes elementos que um formulário pode ter. Os tipos podem ser: "text_field", "drop_down_list", "radio_buttons", "checkbox". Para tipos como "drop_down_list" e "radio_buttons", você precisará de uma tabela extra, talvez chamada element_list_values
para armazenar as opções possíveis para as listas que esses elementos normalmente possuem.