web-dev-qa-db-fra.com

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

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é?

32
Jeff Borden

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 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 une 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:

 forme 
 ----- 
 id (PK) 
 nom 
 owner_id (FK à users.id) 
 ( autres champs) 
 
 form_elements 
 ------------- 
 id (PK) 
 form_id (FK à forms.id) 
 element_type_id (FK à element_types.id) 
 légende 
 (autres champs) 
 
 element_types 
 - ----------- 
 id (PK) 
 nom 
 
 element_list_values ​​
 -------- ----------- 
 id (PK) 
 element_id (FK à form_elements.id) 
 nom 
 valeur 
 (autres champs ??) 

Votre application Web peut permettre aux utilisateurs de créer des formulaires qui seront enregistrés dans les tables forms, avec une référence à l'utilisateur qui a créé (en supposant que vous suivez les utilisateurs comme des entités appropriées). Le formulaire est rempli avec form_elements qui fait référence à la table forms afin qu'ils sachent à quelle forme ils appartiennent et la element_types afin 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ée element_list_values pour stocker les options possibles pour les listes que ces éléments ont normalement.