Mis conocimientos de bases de datos son mediocres en el mejor y tengo que diseñar un modelo de datos para los datos de la encuesta. He pasado algunas reflexiones sobre esto y ahora siento que estoy atrapado entre una especie de EAV model y un diseño que involucra a cientos de mesas, cada una con cientos de columnas (y los miles de registros). Debe haber una mejor manera de hacerlo y espero que los sabios de este foro puedan ayudarme.Modelo de datos de encuesta: ¿cómo evitar el EAV y la desnormalización excesiva?
Mi pregunta es: ¿cómo debo modelar las respuestas a las preguntas de la encuesta en un RDBMS? El uso de SQL Server es obligatorio. Por lo tanto, los sistemas de almacenamiento de datos alternativos deben excluirse de esta discusión. (Claro, algunos deberían y serán evaluados, pero no aquí, por favor.) No necesito una solución para todo el modelo de datos, por ahora solo me interesa la parte de Respuestas.
ya he buscado diversos foros, pero realmente no pude encontrar una solución. Si ya se ha proporcionado en otro lugar, discúlpeme y proporcióneme un enlace para que pueda leerlo.
algunas suposiciones acerca de los datos que tienen que tratar con:
- Cada encuesta consta de 1 a n cuestionarios
- Cada cuestionario se compone de 100-2.000 preguntas (por favor, ignora que 2.000 preguntas realmente suenan como una mucho para responder ...)
- Las preguntas pueden ser de varios tipos: opción múltiple, texto libre, un número (como edad, ingresos, porcentajes, ...)
- Cada encuesta involucra a 10-200 países (no son los encuestados. Los encuestados son en realidad personas en los países.)
- Dependiendo del tipo de cuestionario, cada cuestionario es contestado por 100-20.000 encuestados por país.
- Un país puede adaptar los cuestionarios para una encuesta, es decir, agregar, eliminar o editar preguntas
- Los datos de un país se recopilan en una base de datos independiente en ese país. No hay posibilidad de integración en línea desde el principio.
- Los datos para todos los países tiene que integrarse más tarde. Esto significa, por ejemplo, si un país ha eliminado una pregunta, esos datos deben derivarse de alguna manera de lo que enviaron para lograr un diseño uniforme en todos los países
- Tendré que escribir el software de integración y limpieza, que necesitará para trabajar con los datos de cada país
- Al final, los datos deben exportarse a archivos planos, una cuadrícula rectangular por país y cuestionario.
ya he discutido este tema con personas de diversos orígenes y no han llegado a una buena solución todavía. Obtuve principalmente dos tipos de opiniones.
- Los expertos de dominio, que están acostumbrados a trabajar con archivos planos (hoja de cálculo de estilo) para el procesamiento de datos y votar el análisis de una estructura sin normalizar con un montón de tablas y columnas como he descrito anteriormente (1 mesa por país y el cuestionario) Esto me suena terrible, porque aprendí que se deben evitar tablas anchas, será molesto determinar qué columnas están realmente en una mesa cuando se trabaja con ella, la base de datos se llenará con cientos de tablas (o incluso necesito configurar múltiples bases de datos, cada una con un diseño similar pero un poco diferente), etc.
- O-O-programadores votan por un diseño fuertemente "normalizado", lo que llevaría efectivamente a una mesa central que contiene todas las respuestas de todos los encuestados a todas las preguntas. Esta tabla necesitaría contener una columna de tipo tipo sql_variant o columnas de respuestas múltiples con diferentes tipos para almacenar respuestas de diferentes tipos (opción múltiple, texto libre, ...). El primero sería esencialmente un modelo EAV. Tiendo a seguir a Joe Celko aquí, quien desaconseja fuertemente su uso (lo llama OTLT o "One True Lookup Table"). Esto último implicaría que cada fila contendría celdas nulas para los tipos no aplicables por diseño.
Otra alternativa que podría pensar sería crear una tabla por tipo de respuesta, es decir, una para preguntas de opción múltiple, una para preguntas de texto libre, etc. Eso no es tan genérico, conduciría a una mucha unión se une, creo, y tendría que agregar una tabla si se inventa un nuevo tipo de respuesta.
¡Perdón por aburrirte con todo este texto y gracias por tu aporte!
Saludos, Alex
PS: Me hicieron la misma pregunta aquí: http://www.eggheadcafe.com/community/aspnet/13/10242616/survey-data-model--how-to-avoid-eav-and-excessive-denormalization.aspx
Para mí, esto suena como un buen candidato para una solución [EAV] (http://en.wikipedia.org/wiki/Entity-attribute-value_model). ¿Cuál es su objeción a ir por esa ruta? –
¿Qué hay de usar un documento o base de datos NoSQL? Quizás el problema aquí es adaptar su modelo de dominio a una infraestructura relacional, entonces ¿por qué no simplemente evitarlo ...? Ver http://en.wikipedia.org/wiki/NoSQL. – rsenna
El modelo EAV parece hacer las restricciones de integridad mucho más engorrosas. Básicamente, tendría que exprimir valores de diferentes tipos de datos en una columna. Ver http://www.eggheadcafe.com/software/aspnet/32645959/generic-datatype-table.aspx – AlexDPC