sql >> Base de Datos >  >> RDS >> Database

Un modelo de base de datos para una encuesta en línea. parte 3

En la conclusión de la Parte 2 de esta serie de artículos, mencioné que agregaría funciones más avanzadas, como:

  • Orden condicional de preguntas en una encuesta o, en otras palabras, la posibilidad de una ruta condicional a través de la encuesta
  • Administración de la encuesta
  • Informes y analítica

En este tercer artículo relacionado con una encuesta en línea , extenderé la funcionalidad para admitir el orden condicional de preguntas.

En el futuro, podemos agregar preguntas que requieran una respuesta calificada. Por ejemplo:"¿Cuánto le gusta el diseño de la base de datos, califique entre 1 y 100 (donde 1 indica que le gusta muy poco y 100 indica que le gusta muchísimo)?"

Ruta condicional

Queremos establecer ciertas condiciones sobre las preguntas presentadas al usuario en función de las respuestas del usuario. Por ejemplo, si la respuesta a la pregunta 4 es "sí", hacemos la pregunta 5 y saltamos la pregunta 6; mientras que si la respuesta a la pregunta 4 es "no", nos saltamos la pregunta 5 y hacemos la pregunta 6).

Por lo tanto, debemos definir qué preguntas son condicionales y cómo "saltar" preguntas en función de la respuesta a una pregunta.

Inicialmente, para mantener la ruta condicional simple, no permitiremos condiciones basadas en preguntas de opción múltiple, sino solo para preguntas polares (sí o no). El diseño se puede ampliar para admitir rutas condicionales basadas en preguntas de opción múltiple, pero eso es más complejo y quiero comenzar de manera simple.

Es importante que la aplicación verifique este flujo para cada pregunta, ya que la respuesta a una pregunta anterior puede decidir el flujo de la pregunta actual (para omitir una pregunta basada en una respuesta anterior).

Administración e informes

Por ahora, no agregaremos administradores de las encuestas en línea, pero lo mantendremos para la próxima extensión.

Será necesario que haya algunos informes y análisis; sin embargo, lo mantendré para la próxima versión, ya que primero quiero almacenar cierta información para realizar análisis más tarde.

Entidades y Relaciones

Para la ruta condicional a través de la encuesta, extenderé el question_order que se define para cada encuesta y vincula la encuesta a las preguntas. Como se mencionó, por ahora, el salto condicional solo se basará en preguntas polares, por lo que puedo definir la siguiente pregunta para mostrar en caso de una respuesta positiva y la siguiente pregunta para mostrar en caso de una respuesta negativa.

Diseño formal

Ampliemos el ERD que se creó en la Parte 1 de esta serie de artículos.

Agregaré conditional_order vinculado a question_order; como mencioné anteriormente, solo apoyaré el orden condicional a través de la encuesta basada en preguntas polares. Ahora, hay algunas maneras en que esto se puede implementar. Mis necesidades son sencillas, por lo que elegiré una implementación sencilla. Si sus necesidades son más complejas, necesitaría una solución más compleja.

Sería bueno simplemente definir la "próxima" pregunta que se hará en función de la respuesta de la pregunta actual, pero eso no nos permitirá omitir una pregunta más adelante en la encuesta, por lo que necesitamos más flexibilidad.

Una forma es especificar cuántas preguntas avanzar en caso de una respuesta positiva y cuántas avanzar en una respuesta negativa; sin embargo, debo especificar para qué pregunta se aplica el salto y la respuesta de qué pregunta se utilizará. Entonces, para respaldar mi ejemplo:si la respuesta a la pregunta 4 es "sí", hacemos la pregunta 5 y saltamos la pregunta 6, mientras que si la respuesta a la pregunta 4 es "no", saltamos la pregunta 5 y hacemos la pregunta 6:esto requiere dos entradas, las cuales verifican la respuesta a la pregunta 4, una que avanza una pregunta (como de costumbre) y otra que salta dos preguntas hacia adelante (para omitir una pregunta), y la otra condición debe verificarse después de responder la pregunta 5 que omite la pregunta 6.

  +-------------------+----------------------+------------------------+------------------------+ 
  | question_order_id | response_to_question | positive_response_jump | negative_response_jump |
  +-------------------+----------------------+------------------------+------------------------+
  | 4                 | 4                    | 1                      | 2                      |
  +-------------------+----------------------+------------------------+------------------------+
  | 5                 | 4                    | 1                      | null                   |
  +-------------------+----------------------+------------------------+------------------------+

Una alternativa es especificar el id de la siguiente pregunta a la que debe saltar la encuesta en caso de una respuesta en particular:siguiente pregunta en caso de respuesta positiva y siguiente pregunta en caso de respuesta negativa respuesta. Este enfoque tiene pros y contras. Permitiría que se produjeran bucles, que un administrador podría no notar. Sin embargo, los bucles pueden ser un efecto deseado para que pueda hacer que la pregunta final le pregunte al encuestado si ha terminado con la encuesta y si responde "no", luego regrese a la primera pregunta. Además, las preguntas a las que saltar en caso de una respuesta positiva o negativa se pueden configurar como claves externas al orden de las preguntas especificadas para la encuesta para que sepamos con certeza que la pregunta especificada está definida en la encuesta. Esta es una buena lógica de verificación implementada a través de la integridad referencial. Creo que esta es probablemente la mejor solución, así que eso es lo que encontrará en el ERD.

Entonces, para respaldar mi ejemplo:si la respuesta a la pregunta 4 es "sí", entonces hacemos la pregunta 5 y saltamos la pregunta 6, mientras que si la respuesta a la pregunta 4 es "no", saltamos la pregunta 5 y hacemos la pregunta 6.

Como se mencionó, tenemos dos filas:

Survey #1, question #4, response to question #4, positive response: next question order id = 5, negative response: next question order id = 6.

Survey #1, question #5, response to question #4, positive response: next question order id = 7. We will never get to question #5 if the response to question #4 was negative, so we always skip question #6 after asking question #5.

  +--------+----------+----------------------+-------------------------------+-------------------------------+
  | survey | question | response_to_question | positive_response_question_id | negative_response_question_id |
  +--------+----------+----------------------+-------------------------------+-------------------------------+
  | 1      | 4        | 4                    | 5                             | 6                             |
  +--------+----------+----------------------+-------------------------------+-------------------------------+
  |        | 5        | 4                    | 7                             | null                          |
  +--------+----------+----------------------+-------------------------------+-------------------------------+

Al configurar la condición, usaremos una clave externa (no obligatoria) para garantizar que exista la siguiente pregunta. Se utiliza un valor nulo para una ruta que no es posible o, si no se especifica la siguiente pregunta, para finalizar condicionalmente la encuesta.




He coloreado las tablas que se crearon en la Parte 1 de la serie de artículos en  amarillo , las tablas añadidas en Parte 2 en  naranja y la tabla recién agregada en  verde para que sea más fácil ver las adiciones.

Conclusión

Ninguna de las soluciones que se describen para administrar los pasos condicionales a través de una encuesta es el sistema basado en reglas definitivo, pero uno de mis objetivos es mantener las cosas simples y directas. Permitiendo flexibilidad sin abrumar las cosas en complejidad. Y, me repito, es posible que tenga otros requisitos. Identifique sus requisitos; implementar o adaptar lo que necesites. Creo firmemente en reutilizar y no en reinventar la rueda.

Ahora hemos comenzado a implementar las mejoras que se discutieron en las partes 1 y 2 de esta serie de artículos.

En los próximos artículos, agregaré soporte para estas características:

  • Administración de las encuestas
  • Informes y análisis