调查数据库架构。
这是成千上万的经典作品。从一开始,它们似乎总是“非常简单”,但是要好,实际上它非常复杂。为此,我将使用附图中显示的模型。我敢肯定,对于某些人来说,这似乎过于复杂,但是多年来,一旦您构建了其中的一些,您就会意识到,大多数设计决策都是非常经典的模式,最好通过解决方案中的动态灵活数据结构来解决。开始。
以下是更多详细信息:
关键表的表详细信息
答案
该答案表是至关重要的,因为它抓住了用户的实际响应。您会注意到,答案链接到question_options,而不是问题。这是故意的。
input_types
input_types是问题的类型。每个问题只能是一种类型,例如所有的无线电拨号盘,所有的文本字段等。对于(例如)有5个无线电拨号和1个“包括”复选框,请使用其他问题。选项或此类组合。在用户视图中将两个问题标记为一个,但在内部有两个问题,一个是无线电拨号,一个是复选框。在这种情况下,该复选框的组为1。
option_groups
使用option_groups和option_choices可以构建“公用”组。举一个例子,在房地产应用中,可能会有一个问题:“该物业有多老?”。可能需要以下范围的答案:1-5 6-10 10-25 25-100 100+
然后,例如,如果对相邻物业的年龄存在疑问,则调查将要“重用”上述范围,以便使用相同的option_group和options。
度量单位
听起来像是units_of_measure。无论是英寸,杯子,像素,砖头还是其他,您都可以在此处定义一次。
仅供参考:尽管本质上是通用的,但可以在此基础上创建一个应用程序,并且该模式非常适合Ruby On Rails框架,其约定为每个表的主键使用“ id”之类的约定。而且,这些关系都是简单的one_to_many的关系,不需要many_to_many或has_many贯穿。我可能会添加has_many:throughs和/或:delegates,以便在没有.multiple.chaining的情况下轻松地从单个答案中获取诸如Survey_name之类的信息。