Moduli dinamici per la creazione di moduli e progettazione di database? [chiuso]


30

Supponiamo che i tuoi utenti possano creare i propri moduli basati sul Web (caselle di testo, selezioni, ecc.) E pubblicarli sul Web affinché i loro utenti possano compilarli.

Qualcuno ha una risorsa o qualche consiglio su come progettare il database per collegarlo ai moduli dinamici?

Ad esempio, creeresti una tabella figlio per ciascun modulo o versioni diverse di un determinato modulo?


Risposte:


35

La creazione di nuove tabelle in modo dinamico in base all'input dell'utente non è di solito una buona idea. Se la struttura di base dei moduli cambia, tutte le tabelle create dinamicamente dovranno essere aggiornate per includere nuove colonne o rimuoverne di vecchie e ciò può causare mal di testa alla manutenzione. Quindi c'è il problema di sapere quale tabella interrogare (che probabilmente porterà a SQL dinamico che apre tutti i nuovi problemi). E probabilmente ci sono anche problemi di prestazioni, ma non sono sicuro di quanto sarebbe grave. Inoltre, una tabella viene generalmente utilizzata per rappresentare un tipo di entità (come "modulo Web") anziché disporre di copie della stessa tabella per ogni nuova istanza della stessa entità.

Suggerirei un unico tavolo per i moduli. Avrai bisogno di un identificatore su ogni modulo per identificare di chi è il modulo:

le forme
-----
  id (PK)
  nome
  owner_id (da FK a users.id)
  (altri campi)

form_elements
-------------
  id (PK)
  form_id (da FK a forms.id)
  element_type_id (da FK a element_types.id)
  didascalia
  (altri campi)

element_types
-------------
  id (PK)
  nome

element_list_values
-------------------
  id (PK)
  element_id (da FK a form_elements.id)
  nome
  valore
  (altri campi ??)

La tua applicazione web può consentire agli utenti di creare moduli che verranno salvati nelle formstabelle, con riferimento all'utente che ha creato (supponendo che stai monitorando gli utenti come entità appropriate). La forma è popolata con form_elementsquel riferimento alla formstabella in modo che sappiano a quale forma appartengono e element_typescosì sanno quale tipo sono. element_typesmemorizzerà un elenco statico (principalmente) di diversi elementi che un modulo può avere. I tipi possono essere: "text_field", "drop_down_list", "radio_buttons", "checkbox". Per tipi come "drop_down_list" e "radio_buttons", avrai bisogno di una tabella aggiuntiva, magari chiamata element_list_valuesper memorizzare le possibili opzioni per gli elenchi che normalmente hanno questi elementi.


2
Ottima soluzione TY
Jeff Borden,

conosci eventuali strumenti della GUI del web form builder da utilizzare per popolare lo schema di tabella che hai delineato sopra per caso? Stiamo utilizzando .NET se pertinente. TY.
Jeff Borden,

@JeffBorden: No, ma sono sicuro che ci sia qualcosa là fuori.
FrustratedWithFormsDesigner

Quindi suppongo che il modo migliore per registrare i moduli inviati sia con uno schema come: form_submissions id (PK) form_id (FK a forms.id) user_id (FK a users.id) ... form_submission_elements id (PK) form_submission_id (Da FK a form_submissions.id) form_element_id (Da FK a Form_elements.id) valore Hai ragione?
Jeff Borden,

@FrustratedWithFormsDesigner Come sceglierebbe di generare una tabella dai campi modulo e dai valori dei campi in questo schema !?
Hermes Autran,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.