2009-09-26 10 views
1

Je souhaite créer un arrière-plan d'un formulaire Web général contenant des questions auxquelles l'utilisateur peut répondre. Il y a plusieurs types de questions.Création d'une base de données pour un formulaire Web général

  • Question de texte "normal": la réponse à la question se fait via un simple champ de texte. Exemple: Informations personnelles générales, comme le nom.
  • Question textarea: la même chose, mais avec plus d'espace pour écrire la réponse. Exemple: zone "Plus d'informations que vous souhaitez ajouter".
  • Question à choix multiple: une question avec quelques réponses prédéfinies, parmi lesquelles une seule peut être choisie. Exemple: Comment pouvez-vous programmer PHP? [] pas très bien [] moyenne [] J'ai écrit le livre.
  • ... (types de questions supplémentaires devraient être cumulable sans avoir à pirater trop)

Les entrées que les utilisateurs entrent doivent être stockés dans une base de données MySQL.

Le problème que j'ai, c'est que le formulaire devrait être éditable. Il ne sera pas édité très souvent mais quand il change, les soumissions existantes ne devraient pas être affectées par les changements. De ce fait, je ne pense pas qu'il soit suffisant de faire la config via un fichier XML.

Mon approche est la suivante:

  • La configuration des questions est faite en utilisant la base de données MySQL
  • La mise en page de base de données est la suivante (meilleures méthodes?):
    • des questions
      • id: INT
      • question: TEXTE
      • type: ENUM ('NORMAL', 'TEXTAREA', 'MULTIPLE')
      • active: BOOL - true si la question est utilisée dans le formulaire actuel. false si elle n'est plus utilisée et n'est conservée dans la base de données que pour la compatibilité avec les anciennes soumissions.
    • q_multiplechoice
      • id: INT
      • QuestionID: INT
      • réponse: TEXTE
    • soumissions
      • id: INT
      • userid: INT
    • submissiondetails
      • submissionId: INT
      • QuestionID: INT
      • givenanswer: TEXTE

Comme vous pouvez le voir, il utilise quatre tables pour un formulaire web simple. Je ne pense pas que ce soit l'approche optimale à utiliser ici et je veux que vous me demandiez si vous pourriez me donner quelques conseils sur les modifications de conception que je devrais appliquer.

(autre approche que j'ai pensé est de stocker une chaîne de HTML avec une soumission rendue dans la base de données de soumissions et d'utiliser un fichier de configuration simple pour configurer les questions, les anciennes soumissions ne seront pas affectées ils étaient déjà stockés dans MySql.Un problème avec cette approche est, quand la conception change et la soumission doit être affichée dans un autre design.)

Répondre

3

Tout d'abord, acceptons d'opposer un veto à l'idée de stocker du HTML dans la base de données, sauf , peut-être quelques balises telles que les sauts de ligne, gras, emphase et soulignement, pour le texte de la question seulement. La définition des enquêtes et l'exploitation de leurs résultats seront beaucoup plus faciles si l'accent est mis sur le texte/la sémantique de l'enquête, plutôt que sur les détails de View.

Pour prendre en charge la configuration de View ("mise en page"), CSS peut constituer le ticket. Ce serait la clé sur l'ID de la question qui serait utilisée comme ID à la div (ou autre conteneur html) où la vue décide de stocker la question. quelques noms de classe peuvent également être répertoriés dans l'enregistrement de la question, mais définis dans CSS.

Sur le schéma de base de données proposé, les choses importantes semblent être là. Je ne vois pas cependant où les réponses soumises sont stockées; est-ce dans les tableaux de soumission +détailsdétails? Si oui, où est stocké le type de réponse MULTIPLE, sont-ils convertis en texte, en givenanswer? (Je ne pense pas qu'ils devraient, à moins que nous préférons capturer des valeurs légèrement différentes lorsque l'enquête a été modifiée au cours de la campagne.)

Quelques attributs manquants et des idées:

  • MULTIPLE (ou un autre type) devrait être en mesure de soutenir "radio-bouton" de type choix ("seulement un-de"). un moyen possible de le faire est d'ajouter un attribut au type, de définir le nombre maximum de choix autorisés, une chose d'enquête commune: "Choisissez 3 parmi les suivants ..."
  • L'enregistrement question pourrait avoir une « campagne » ou SurveyID, ce qui permet de stocker plusieurs enquêtes dans le même magasin.
  • Sans geting trop de fantaisie, quelques questions pourraient être fondé à une précédente « question de type booléen » (Si la personne interrogée répond «non» pour posséder une voiture, ne posez pas de question sur la fréquence des changements d'huile ...) Cela pourrait être défini par un questionID et un ResponseValue (? Texte de la généricité?).
  • question table: ajouter un 'Numéro de page', permettant de regrouper les questions (sauf si cette information est définie dans un concept de conteneur de questions tel que "survey" ou "campaign")
  • table question: ajouter « numéro de séquence » permettant d'obtenir des questions dans un ordre prédéfini (à moins que vient d'une table Levé/campagne non représentée ici)
  • q_multiplechoice: (ou quoi que ce tableau est où les options pour un donné CHOIX MULTIPLE sont répertoriés; J'ai un doute sur cette table en voyant ses champs comme showin dans la question.) Ajouter un numéro de séquence, permettant de lister les options dans un ordre particulier.