Formulaires de création de formulaires dynamiques et conception de bases de données? [fermé]

30

Supposons que vos utilisateurs puissent créer leurs propres formulaires Web (zones de texte, sélections, etc.) et les publier sur le Web pour que leurs utilisateurs les remplissent.

Quelqu'un at-il une ressource ou des conseils sur la façon d’architecturer la base de données pour l’enchaîner dans les formulaires dynamiques?

Par exemple, voudriez-vous créer une table enfant pour chaque formulaire, ou différentes versions d'un formulaire donné?

Jeff Borden
la source
J'aime ce billet: Création d'une interface utilisateur dynamique
basée sur les données

Réponses:

35

La création dynamique de nouvelles tables en fonction des entrées de l'utilisateur n'est généralement pas une bonne idée. Si la structure de base des formulaires change, toutes les tables créées dynamiquement devront être mises à jour pour inclure de nouvelles colonnes ou en supprimer les anciennes, ce qui peut entraîner des problèmes de maintenance. Ensuite, il y a un problème de savoir quelle table interroger (ce qui conduira probablement à un SQL dynamique qui ouvre tous les nouveaux problèmes). Et il y a probablement aussi des problèmes de performances, mais je ne sais pas à quel point ce serait mauvais. En outre, une table est généralement utilisée pour représenter un type d'entité (telle que "formulaire Web") plutôt que d'avoir des copies de la même table pour chaque nouvelle instance de la même entité.

Je suggère une seule table pour les formulaires. Vous aurez besoin d'un identifiant sur chaque formulaire pour identifier de quel formulaire il s'agit:

formes
-----
  id (PK)
  prénom
  owner_id (FK à users.id)
  (autres domaines)

form_elements
-------------
  id (PK)
  form_id (FK à forms.id)
  element_type_id (FK à element_types.id)
  légende
  (autres domaines)

element_types
-------------
  id (PK)
  prénom

element_list_values
-------------------
  id (PK)
  element_id (FK à form_elements.id)
  prénom
  valeur
  (autres champs ??)

Votre application Web peut permettre aux utilisateurs de créer des formulaires qui seront enregistrés dans les formstableaux, avec une référence à l'utilisateur qui a créé (en supposant que vous suivez les utilisateurs en tant qu'entités appropriées). Le formulaire est rempli avec form_elementscette référence dans le formstableau afin qu'ils sachent à quel formulaire ils appartiennent et element_typespour qu'ils sachent de quel type ils sont. element_typesstockera une liste statique (principalement) des différents éléments qu'un formulaire peut avoir. Les types peuvent être: "text_field", "drop_down_list", "radio_buttons", "checkbox". Pour les types tels que "drop_down_list" et "radio_buttons", vous aurez besoin d'une table supplémentaire, peut-être appelée element_list_valuespour stocker les options possibles pour les listes que ces éléments ont normalement.

FrustratedWithFormsDesigner
la source
2
Excellente solution. TY
Jeff Borden
connaissez-vous des outils GUI de générateur de formulaires Web existants à utiliser pour remplir le schéma de table que vous avez décrit ci-dessus par hasard? Nous utilisons .NET si cela est pertinent. TY.
Jeff Borden
@JeffBorden: Non, mais je suis sûr qu'il y a quelque chose là-bas.
FrustratedWithFormsDesigner
Je suppose donc que la meilleure façon d'enregistrer les formulaires soumis serait avec un schéma comme: form_submissions id (PK) form_id (FK vers forms.id) user_id (FK vers users.id) ... form_submission_elements id (PK) form_submission_id (FK à form_submissions.id) form_element_id (FK à forms_elements.id) value Look right-ish?
Jeff Borden
@FrustratedWithFormsDesigner Comment une sélection générerait-elle une table à partir des champs de formulaire et des valeurs de champs dans ce schéma!?
Hermes Autran