Schéma de la base de données d'enquête.
C'est un vrai classique, fait par des milliers. Ils semblent toujours «assez simples» au départ, mais pour être bon, c'est en fait assez complexe. Pour ce faire, dans Rails, j'utiliserais le modèle illustré dans le diagramme ci-joint. Je suis sûr que cela semble beaucoup plus compliqué pour certains, mais une fois que vous en avez construit quelques-uns, au fil des ans, vous vous rendez compte que la plupart des décisions de conception sont des modèles très classiques, mieux traités par une structure de données dynamique flexible au début.
Plus de détails ci-dessous:
Détails du tableau pour les tableaux clés
réponses
Le tableau des réponses est essentiel car il capture les réponses réelles des utilisateurs. Vous remarquerez que les réponses répondent aux liens vers les options de questions , pas les questions . C'est intentionnel.
types_entrée
types_entrée sont les types de questions. Chaque question ne peut être que d'un seul type, par exemple toutes les numérotations radio, tous les champs de texte, etc. option ou une telle combinaison. Étiquetez les deux questions dans la vue des utilisateurs comme une, mais en interne, vous avez deux questions, une pour les appels radio, une pour la case à cocher. La case à cocher aura un groupe de 1 dans ce cas.
groupes_options
option_groups et option_choices vous permettent de créer des groupes «communs». Par exemple, dans une demande immobilière, il pourrait y avoir la question «Quel âge a la propriété?». Les réponses peuvent être souhaitées dans les plages: 1-5 6-10 10-25 25-100 100+
Ensuite, par exemple, s'il y a une question sur l'âge de la propriété adjacente, alors l'enquête voudra «réutiliser» les plages ci-dessus, de sorte que le même groupe d'options et les mêmes options soient utilisés.
unités de mesure
units_of_measure est comme ça sonne. Que ce soit des pouces, des tasses, des pixels, des briques ou autre, vous pouvez le définir une fois ici.
FYI: Bien que de nature générique, on peut créer une application en plus de cela, et ce schéma est bien adapté au framework Ruby On Rails avec des conventions telles que "id" pour la clé primaire de chaque table. De plus, les relations sont toutes simples de one_to_many avec pas de traversées many_to_many ou has_many nécessaires. J'ajouterais probablement has_many: throughs et / ou: delegates pour obtenir des choses comme survey_name d'une réponse individuelle facilement sans.multiple.chaining.