2012-02-24 11 views
5

Sé que hay algunas publicaciones relacionadas pero no entendí completamente qué hacer.Diseño de databse para preguntas y respuestas donde algunas respuestas son texto y algunas son de opción múltiple

Tengo una idea general de cómo hacerlo. No estoy demasiado lejos en el diseño de la base de datos, lamentablemente, así que necesito ayuda.

Tener mesa con questions_id, tiene mesa para possible_answer_id para cada question_id.

Entonces tiene una tabla de enlace con question_answers user_id, question_id, answer_id, fecha y hora de registrar los formularios enviados.

Pero mi problema es que algunas preguntas son respondidas con sólo una cadena, así que estoy teniendo problemas para conceptualizar qué hacer al respecto.

 
e,g 
for some I need: question_id string_answer (any answer is allowed) 
for others:  question_id answer_id  (out of set of allowed answers) 
and perhaps:  question_id bool_answer (true/false) 

¿Debo agregar question_type en algún lugar, así que tengo dos tablas diferentes para esto?

Si la pregunta no está clara, házmelo saber.

+3

Eso es en realidad un problema de diseño algo complicado. No es una pregunta N00B en absoluto. – JohnFx

Respuesta

4

Editado para tener en cuenta las preguntas de Eugene.

Estas son las tablas que va a necesitar su sistema, y ​​una explicación de cada tabla.

1. Persona

Esta tabla contendrá toda la información sobre la persona que toma una prueba. La clave de la tabla es una identificación de persona, que es un número entero que se incrementa automáticamente para cada fila de persona agregada a la tabla. La mayoría de las bases de datos actuales tienen un entero de identidad o entero de incremento automático, que normalmente es la clave principal de la tabla.

2. Pregunta

Esta tabla contiene todas las preguntas que usted ha pensado alguna vez de pedir.

La tabla de preguntas contendría una bandera (entero o carácter) que indique el tipo de pregunta, como se ha contorneado.

  • Respuesta con cualquier cadena
  • Conjunto de respuestas asignadas
  • verdadero/falso

3. Respuesta

Esta tabla contiene los conjuntos de respuestas para las preguntas de la pregunta tabla que requiere un conjunto de respuestas asignadas. La clave de grupo para el conjunto de respuestas es la clave principal de la pregunta.

Programatically, se selecciona una fila de la tabla de preguntas. Solo si la bandera tiene un conjunto de respuestas asignadas, entonces navegará por la tabla de respuestas en una consulta SQL por separado.

4. Prueba

Esta tabla contiene la fecha y hora de creación de la prueba.

5. Pregunta de prueba

Esta tabla contiene las preguntas seleccionadas de la tabla de preguntas para una prueba en particular. La clave de grupo para el conjunto de preguntas de prueba es la Id. De la tabla de prueba.

La razón para tener una tabla de preguntas de prueba es que las preguntas y respuestas se pueden agregar, cambiar o eliminar de la tabla de preguntas y respuestas. La tabla de preguntas de prueba es una tabla histórica en el sentido de que una vez que se agregan las filas, nunca se cambian o eliminan.

6. prueba tomada

Esta tabla contiene el identificador de la persona de la persona que tomó la prueba, el ID de prueba de la prueba, así como la fecha y la hora se tomó la prueba.

7. Prueba de respuesta

Esta tabla contiene las respuestas a la prueba. La clave de grupo para el conjunto de respuestas de prueba es la identificación de prueba y la id de pregunta de prueba.

+0

Para que quede claro, ¿tendría tres tablas user_question_answer_timestamp separadas para cada tipo? ¿Cómo iría a la tabla correcta según el tipo? – Eugene

+0

¿Hay alguna manera de tener una tabla que vincule question_type con una correct_table? ¿Hay cosas tales como identificadores de tabla? Estoy un poco confundido:) Disculpa por el problema, agradecería tu ayuda. – Eugene

+0

@Eugene: solo necesitas una mesa si guardas algo allí. La única respuesta que necesita datos adicionales es el conjunto de respuestas asignadas. Tendrá que tener más tablas para almacenar las pruebas dadas y las respuestas de prueba proporcionadas por los usuarios. Sí, podría tener una tabla que vincule el conjunto de indicadores asignados a un nombre de tabla si lo desea. –

2

Pruebe estas tres tablas.

QUESTION_MASTER 

QuestionID int (Primary) 
QuestionName varchar(150) 
QuestionType tinyint 
CorrectAns1 bit   -- for true/false 
CorrectAns2 varchar(500) -- for string answer 
CorrectAns3 int   -- for multiple choice 

ANSWER_MASTER 

AnswerID  int (Primary) 
QuestionID int (Foreign) 
CorrectAns bit 

EXAM_MASTER 

ExamID  int(Primary) 
QuestionID int(Foreign) 
CreatedBy  int(Foreign) --UserID 

Uso esto para los tres tipos de pregunta de elección múltiple, es decir, llenar las preguntas en blanco y verdadero/falso.

Cuestiones relacionadas