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é?
architecture
database
webforms
Jeff Borden
la source
la source
Réponses:
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:
Votre application Web peut permettre aux utilisateurs de créer des formulaires qui seront enregistrés dans les
forms
tableaux, 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 avecform_elements
cette référence dans leforms
tableau afin qu'ils sachent à quel formulaire ils appartiennent etelement_types
pour qu'ils sachent de quel type ils sont.element_types
stockera 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éeelement_list_values
pour stocker les options possibles pour les listes que ces éléments ont normalement.la source