Я работаю над так называемой Системой наблюдения за поведенческими факторами риска (BRFSS), системой веб-запросов, которая работает с вопросниками, поступающими каждый год.
Мне было трудно придумать подходящий дизайн базы данных для него. Вот проблема: каждая анкета содержит около 80 вопросов, с демографической информацией, например, возраст, образование и т. д. и вопросы опроса, например, курение, здоровье и т. д. Каждый год некоторые вопросы меняются, некоторые нет. Источником данных является файл Excel с более чем 80 столбцами. Система должна поддерживать такие запросы, как:
SELECT [question var], [demo var], count(*)
FROM survey
WHERE age in (...) AND educ in (...) [etc]
GROUP BY <question var>
Данные только для чтения, т.е. Никогда не меняйте один раз импортированный. Так что не нужно слишком много нормализовать. Интуитивно понятно, что таблица, похожая на электронную таблицу, хорошо сработает. скорость и пространство. Однако это становится проблемой, поскольку вопросы будут меняться, и тогда мы не сможем сохранить все данные в этой таблице, что необходимо из-за межгодовых запросов.
Я попытался нормализовать ответы в трех таблицах: вопросы, ответы и response_values, которые могут поддерживать варианты вопросов. Но тогда таблица ответов охватывает более 98 * 14268 = 1 398 264 строк за один год! Это действительно огромно. Запрос медленный, как сумасшедший!
Как мне разработать базу данных? Любая помощь приветствуется! Заранее спасибо!
пс. Я использую Python + Django + Sqlite.