2011-02-04 9 views
7

Tengo un proyecto para crear un sitio asp.net mvc para generar una prueba. Aquí está la especificación:¿Cuál es el buen diseño del esquema de base de datos para un motor de prueba de opción múltiple?

  1. Por cada usuario que visita el sitio, recibe una prueba.
  2. Cada prueba contiene algunos problemas de opción múltiple.
  3. Cada problema contiene una pregunta y 5 opciones mutuamente excluyentes.

El modelo más simple que puedo pensar es la siguiente:

public class Problem 
    { 
     public int ProblemId { get; set; } 
     public string Question { get; set; } 
     public string A { get; set; } 
     public string B { get; set; } 
     public string C { get; set; } 
     public string D { get; set; } 
     public string E { get; set; } 
    } 

No estoy seguro de que es bueno. ¿Podría darme una sugerencia para un mejor diseño?

+2

"Stack Overflow"? el sitio se ha vuelto sensible y está haciendo preguntas también? –

+0

Me sorprende que alguien no haya obtenido ese nombre de usuario anteriormente. Casi quiero votar por él. –

+0

¿Puedes seleccionar más de una opción para cada respuesta? –

Respuesta

3

simple y Los diseños intuitivos siempre son los mejores y, como son realmente simples, comenzamos a dudar de nosotros mismos ;-). Lo está haciendo bien, pero también puede almacenar la respuesta correcta con el problema mismo. Entonces ya no es solo un problema. Entonces ahora es ProblemAndAnswer o QuizItem.

Así que todo esto está bien para almacenar en una sola tabla como columnas múltiples. Pero también necesita entender lo que significa. Esto significa que está haciendo una suposición que una pregunta siempre tendrá 5 opciones. Si va a tener menos de 5, está bien ya que puede almacenar nulos. Pero, ¿y si vas a tener más? Aquí es cuando el modelo de una sola mesa comienza a desmoronarse. Ahora comenzaría a pensar que una Pregunta realmente puede tener 1 o más opciones y que le gustaría dividirla en tablas secundarias principales ... ahora ha tomado una decisión bien informada ;-)

+2

No lo sé. Limitar el esquema a exactamente cinco respuestas parece ser malo. Por supuesto, puede coincidir exactamente con el requisito (hoy), pero si solo un poco más de generalidad y no demasiado costo de complejidad, lo haría más flexible allí. Sin embargo, es un buen principio mantenerlo tan simple como el requisito (módulo de un pequeño avance). – Thilo

4

Propiedades A a E? ¡No gracias! Me pongo mis tablas de la siguiente manera:

Quiz (int QuizId, ...) 
Problem (int ProblemId, int QuizId, string Question) 
Answer (int AnswerId, int ProblemId, int Index, string Answer) 

El campo de nombres deben explicarse por sí mismo (índice es el índice de clasificación de las respuestas de una sola pregunta, si sus asuntos de orden)

3

La tabla Question tiene un id y un description, que es el texto de la pregunta ("¿Son los gatos secretamente perros?").

Editar: Además, la tabla Question tiene un correct_answer_id, que corresponde a la fila correcta en la tabla Answer.

La mesa tiene una Answerquestion_id, que une de nuevo a su Question, y una description, que es el texto de la respuesta ("Depende del color de su gato.").

Con este esquema, las preguntas no tienen un número de respuestas codificadas.

+1

Más un campo en la pregunta para la respuesta correcta. O puede ser difícil que la primera respuesta sea la correcta siempre, si va a mezclarlos de todos modos al mostrarlos (pero no use el question_id directamente en campos ocultos, o el usuario comenzará a hacer trampa)) O un campo una Respuesta para marcarlo correctamente (lo que permitiría extender el sistema para preguntas con múltiples respuestas correctas). – Thilo

+0

@Thilo ¡Gracias por el recordatorio! Una pequeña omisión ... – ClosureCowboy

1

Estoy trabajando en el mismo tipo de estructura de base de datos. Es mejor tener una tabla de opciones para insertar opciones en una identificación de pregunta específica. La ID del cuestionario es una tabla separada que incluye cuestionarios y duración de la prueba.

Cuestiones relacionadas