Digamos que seus usuários possam criar seus próprios formulários baseados na Web (caixas de texto, seleções etc.) e publicá-los na Web para que eles preencham.
Alguém tem um recurso ou algum conselho sobre como arquitetar o banco de dados para vincular aos formulários dinâmicos?
Por exemplo, você criaria uma tabela filho para cada formulário ou versões diferentes de um determinado formulário?
architecture
database
webforms
Jeff Borden
fonte
fonte
Respostas:
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:
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 comform_elements
essa referência naforms
tabela para que eles saibam a qual formulário pertencem eelement_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 chamadaelement_list_values
para armazenar as opções possíveis para as listas que esses elementos normalmente possuem.fonte