Formulários dinâmicos do construtor de formulários e design do banco de dados? [fechadas]

30

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?

Jeff Borden
fonte

Respostas:

35

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 formstabelas, 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_elementsessa referência na formstabela para que eles saibam a qual formulário pertencem e element_typespara que saibam a que tipo são. element_typesirá 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_valuespara armazenar as opções possíveis para as listas que esses elementos normalmente possuem.

FrustratedWithFormsDesigner
fonte
2
Ótima solução. TY
Jeff Borden
você conhece alguma ferramenta GUI do construtor de formulários da Web existente a ser usada para preencher o esquema da tabela descrito acima por acaso? Estamos usando o .NET, se relevante. TY.
Jeff Borden
@JeffBorden: Não, mas tenho certeza de que há algo lá fora.
FrustratedWithFormsDesigner
Portanto, estou assumindo que a melhor maneira de registrar formulários enviados seria com um esquema como: id de formulário_submissões (PK) form_id (FK para forms.id) user_id (FK para users.id) ... form_submission_elements id (PK) form_submission_id (FK para form_submissions.id) form_element_id (FK para forms_elements.id) value Pareça certo?
precisa
@FrustratedWithFormsDesigner Como um select geraria uma tabela a partir dos campos do formulário e dos valores dos campos neste esquema !?
Hermes Autran