【发布时间】:2013-11-22 16:20:57
【问题描述】:
我目前有一个数据库设置来收集问题的答案(Rails 4.0 + MySQL)。解释我们所谓的“网格问题”,例如“您多久在以下每家商店购物一次?”而不是拥有
question has_many answers
answer belongs_to question
answer belongs_to user
我去了:
question has_many data_fields
data_field has_many answers
answer belongs_to data_field
answer belongs_to user
因此每个问题都有 1 个或多个 data_fields 来说明某人购物的每种类型的商店。
我最近有一位数据库顾问坚持认为更好的方法是回到简单的answer belongs_to question 并在问题表中添加 3 列来确定 1)它是一个组定义问题,2)“组号”和3) 在组内的位置
他的解释是,如果我发现自己需要针对所有问题生成报告,这会变得更简单——我不需要通过联合来完成此任务。但我无法说服自己在呈现问题输入以及生成数据进行分析时所带来的好处超过了用户界面带来的压力。
设置此数据库的最佳方法是什么?我知道这有点主观,但从技术上讲,应该有一个最佳实践,所以希望我能被允许发布这个......
【问题讨论】:
-
我不知道“question has_many data_fields, data_field has_many answers”到底是什么意思。
-
您的所有问题都是“网格”类型,还是混合类型的问题?
-
有一个混合。如果我走 data_field 路线,“单个”问题将只有一个自动生成的 data_field。
-
为什么要把数据库设计成调查问卷?如何为您想要捕获的信息设计数据模型(例如,具有人员、商店和访问次数属性的 PersonStores 表)。调查肯定只是收集信息的一种手段,本身并不是目的。
-
@sqlvogel,调查和问题可以改变和发展。您所说的“信息”是相对静态的。
标签: mysql sql ruby-on-rails database-design ruby-on-rails-4