背景
我正在设计一个Rails应用程序来记录研究数据。其中大多数可以概念化作为“调查”(或“问卷”)数据。
我们已经有几个Access数据库和CSV文件来保存这些数据。现有设计是每个调查都有自己的表,每个问题有一列。其中许多表都有 100 + 列。
我刚收到一份报告,说明所有调查总共有多少列。计数 18,683 。是的,18,683列 - 很多比我预期的更多。 (我认为总共列数多于行数。有些表可能是退化的,但我知道有些表非常重要。)
为了减少问题的复杂性,我一直在想我会制作一些模型喜欢:
此策略会将列数从数千个减少到少数几个。但是,我不确定如何通过Rails处理它,因为:
问题
我怎样才能简化这个“问题1,问题2,......,问题143”的怪异?虽然我确信没有一个完全优雅的解决方案,但最佳选择是什么?
如果他们能让事情变得更轻松,我会对替代数据库感兴趣。我对文档数据库(如mongodb或couchdb)不太熟悉,但据我所知,它们可能会有所帮助。
答案 0 :(得分:1)
我认为MongoDB可以很好地解决这个问题;绝对值得你花时间熟悉它。无模式会使事情变得相当轻松。例如,您可以将每个调查存储在文档中,如下所示:
survey = {:title => "Thoughts on X",
:questions => [
{:text => "What year were you born?",
:type => "Fill in the blank",
},
{:text => "Pick an option:",
:type => "multiple_choice",
:choices => ["a", "b", "c", "d"]
}
]
}
然后,您可以编写能够解释这些调查文档并在网络上呈现的代码。您当然可以在每个文档中包含特殊的验证信息等。
单独的集合可以包含用户响应。您可以使用MongoDB的map-reduce进行聚合。
只是一些初步想法。如果您决定探索这个方向,请跳转到MongoDB用户列表。