Esquema de base de datos de encuestas.
Este es un verdadero clásico, hecho por miles. Para empezar, siempre parecen "bastante simples", pero para ser buenos, en realidad es bastante complejo. Para hacer esto en Rails, usaría el modelo que se muestra en el diagrama adjunto. Estoy seguro de que parece demasiado complicado para algunos, pero una vez que ha creado algunos de estos, a lo largo de los años, se da cuenta de que la mayoría de las decisiones de diseño son patrones muy clásicos, mejor abordados por una estructura de datos dinámica y flexible en el principio.
Más detalles a continuación:
Detalles de tabla para tablas clave
respuestas
La tabla de respuestas es crítica, ya que captura las respuestas reales de los usuarios. Notarás que las respuestas responden a preguntas_opciones , no preguntas . Esto es intencional
input_types
input_types son los tipos de preguntas. Cada pregunta solo puede ser de 1 tipo, por ejemplo, todos los diales de radio, todos los campos de texto, etc. Utilice preguntas adicionales para cuando haya (digamos) 5 diales de radio y 1 casilla de verificación para un "¿incluir?" opción o alguna combinación de este tipo. Etiquete las dos preguntas en la vista de los usuarios como una, pero internamente tiene dos preguntas, una para los diales de radio y otra para la casilla de verificación. La casilla de verificación tendrá un grupo de 1 en este caso.
grupos_opción
option_groups y option_choices le permiten crear grupos 'comunes'. Un ejemplo, en una aplicación de bienes raíces, podría haber la pregunta '¿Cuántos años tiene la propiedad?'. Las respuestas pueden desearse en los rangos: 1-5 6-10 10-25 25-100 100+
Luego, por ejemplo, si hay una pregunta sobre la antigüedad de la propiedad contigua, la encuesta querrá 'reutilizar' los rangos anteriores, de modo que se usen el mismo grupo de opciones y opciones.
unidades de medida
unidades_de_medida es como suena. Ya sea pulgadas, tazas, píxeles, ladrillos o lo que sea, puede definirlo una vez aquí.
FYI: Aunque es de naturaleza genérica, uno puede crear una aplicación además de esto, y este esquema se adapta bien al marco de Ruby On Rails con convenciones como "id" para la clave principal de cada tabla. Además, las relaciones son simples one_to_many's sin necesidad de many_to_many o has_many throughs. Probablemente agregaría has_many: throughs y / o: delegados para obtener cosas como survey_name de una respuesta individual fácilmente sin.multiple.chaining.