2012-10-02 62 views
5

Tengo un formulario HTML donde los usuarios pueden responder preguntas de selección única marcando una de las tres respuestas predeterminadas o escribiendo una respuesta personalizada propia.Diseño de base de datos para preguntas de opción preestablecidas/personalizadas

Si bien esta es obviamente una relación de muchos a muchos, todavía no puedo encontrar una forma adecuada de diseñar tablas de base de datos para manejar ambos tipos (TEXTO y BOOLEAN). Mi solución rápida y sucia actual es codificar un choice_id específico en la tabla de unión para respuestas personalizadas. Estoy buscando un mejor patrón para esto.

Respuesta

1

tienen las siguientes tablas:

Tabla 1: Question

QuestionID (ID) 
    QuestionText (Text) 

Tabla 2: Question Response

QuestionResponseId (ID) 
    QuestionResponseTypeId (References Question Response Type) 
    QuestionResponseDetailsId (References Question Response Details) - This should be used for text only values (Custom Answers) 
    QuestionResponse (Boolean) 

Tabla 3: Question Response Type

QuestionResponseTypeId (Id) 
    Description (Text) -- Dictates if the answer is a boolean or a text field 

Tabla 4: Question Response Details

QuestionResponseDetailsId (Id) 
    Description (Text) - Holds the text answer to the questions 

Cuando las siguientes tablas se poblado tendrá una estructura que sostiene la pregunta, la respuesta de la pregunta (texto o booleano).

A continuación, puede filtrar para ver sólo respuestas basadas en texto, por ejemplo:

SELECT * FROM QuestionResponse 
INNER JOIN QuestionResponseDetails ON QuestionResponse.QuestionResponseDetailsId = QuestionResponseDetails.QuestionResponseDetailsId 
WHERE QuestionResponse.QuestionResponseTypeId = 1 

Donde 1 es una respuesta basada en texto y 2 es una respuesta basada booleana (de la tabla Tipo de pregunta de respuesta)

0

Si yo fuera usted, me gustaría hacer algo como esto:

Table Answers: 
question_id INT(11) 
answer_id INT(11) 
preset_answer TINYINT(1) //1, 2, 3 for three answers 
custom_answer VARCHAR(255) 
Cuestiones relacionadas