Dynamische Form Builder-Formulare und Datenbankentwurf? [geschlossen]

30

Angenommen, Ihre Benutzer können ihre eigenen webbasierten Formulare (Textfelder, Auswahlfelder usw.) erstellen und diese im Web veröffentlichen, damit ihre Benutzer sie ausfüllen können.

Hat jemand eine Ressource oder einen Rat, wie man die Datenbank für die Einbindung in die dynamischen Formulare erstellt?

Würden Sie beispielsweise eine untergeordnete Tabelle für jedes Formular oder verschiedene Versionen eines bestimmten Formulars erstellen?

Jeff Borden
quelle
Ich mag diesen Beitrag: Erstellen einer dynamischen
datengesteuerten

Antworten:

35

Das dynamische Erstellen neuer Tabellen auf der Grundlage von Benutzereingaben ist normalerweise keine gute Idee. Wenn sich die Grundstruktur von Formularen ändert, müssen alle dynamisch erstellten Tabellen aktualisiert werden, um neue Spalten aufzunehmen, oder alte müssen entfernt werden. Dies kann zu Wartungsproblemen führen. Dann besteht das Problem, zu wissen, welche Tabelle abgefragt werden muss (was wahrscheinlich zu dynamischem SQL führt, was alle neuen Probleme aufwirft). Und es gibt wahrscheinlich auch Leistungsprobleme, aber ich bin mir nicht sicher, wie schlimm das wäre. Auch ist eine Tabelle , in der Regel repräsentieren einen gebrauchten Art von Entität (wie „Web - Formular“) , anstatt Kopien derselben Tabelle für jede neue Instanz der gleichen Einheit.

Ich würde eine einzelne Tabelle für die Formulare vorschlagen. Sie benötigen eine Kennung für jedes Formular, um zu identifizieren, wessen Formular es ist:

Formen
-----
  ID (PK)
  Name
  owner_id (FK zu users.id)
  (andere Felder)

form_elements
-------------
  ID (PK)
  form_id (FK zu forms.id)
  element_type_id (FK zu element_types.id)
  Bildbeschriftung
  (andere Felder)

element_types
-------------
  ID (PK)
  Name

element_list_values
-------------------
  ID (PK)
  element_id (FK zu form_elements.id)
  Name
  Wert
  (andere Felder??)

Mit Ihrer Webanwendung können Benutzer Formulare erstellen, die in den formsTabellen gespeichert werden. Dabei wird auf den erstellten Benutzer verwiesen (vorausgesetzt, Sie verfolgen Benutzer als ordnungsgemäße Entitäten). Das Formular wird mit form_elementsdiesem Verweis auf die formsTabelle gefüllt, damit sie wissen, zu welchem ​​Formular sie gehören und von element_typeswelchem ​​Typ sie sind. element_typesspeichert eine statische (meistens) Liste verschiedener Elemente, die ein Formular haben kann. Typen können sein: "text_field", "drop_down_list", "radio_buttons", "checkbox". Für Typen wie "drop_down_list" und "radio_buttons" benötigen Sie eine zusätzliche Tabelle, die möglicherweise aufgerufen wird element_list_values, um die möglichen Optionen für die Listen zu speichern, die diese Elemente normalerweise haben.

FrustratedWithFormsDesigner
quelle
2
Großartige Lösung. TY
Jeff Borden
Kennen Sie vorhandene GUI-Tools für den Web Form Builder, mit denen Sie das oben beschriebene Tabellenschema zufällig auffüllen können? Wir verwenden .NET, falls relevant. TY.
Jeff Borden
@ JeffBorden: Nein, aber ich bin mir sicher, dass da draußen etwas ist.
FrustratedWithFormsDesigner
Daher gehe ich davon aus, dass der beste Weg zum Aufzeichnen übermittelter Formulare ein Schema wie das folgende wäre: form_submissions id (PK) form_id (FK zu forms.id) user_id (FK zu users.id) ... form_submission_elements id (PK) form_submission_id (FK zu form_submissions.id) form_element_id (FK zu forms_elements.id) value Look right-ish?
Jeff Borden
@FrustratedWithFormsDesigner Wie würde eine Auswahl treffen, um eine Tabelle aus den Formularfeldern und den Feldwerten in diesem Schema zu generieren?
Hermes Autran