如何在rails应用程序中建模温度记录设备数据

时间:2015-11-19 23:40:50

标签: ruby-on-rails ruby activerecord database-design

尝试构建一个rails应用程序的一部分,允许用户从包含两条信息,日期/时间和相应数据点的设备上传csv文件。每个单元都有一个用户输入或扫描的唯一序列号。

我觉得我在思考如何对此进行建模并陷入中立状态。我是否制作了两个数据库表,其中一个具有序列号的单元,另一个具有数据点,并且具有单个序列号具有多个数据点的关系?或者我在一个表中制作一个包含所有信息的模型?

编辑:

一直在搞乱模特,这就是我在下面提出的。

应用程序将允许用户登录并上载包含设备温度数据的CSV文件。这些数据将被存储,用户可以使用Highcharts以不同的图形格式查看所有这些下载。

这是我在下面想到的,请告诉我是否有更好的方法对此进行建模。请记住,每个设备包含大约200个时间/临时数据点,每天可以上传150-200个这些文件。

我挂的地方是温度记录仪设备。一个记录器具有许多时间和温度的数据点(> 200)。我是否将其分解为数据点表并建立一个关系,其中临时记录器仅由序列号表示并且具有许多数据点?

鉴于潜在的下载量,一家公司的临时记录器的表每天增加30000个。不确定,从长远来看,这对性能来说是黑眼圈。

模型

Company
t.name
has_many :temp_recorders
has_many :users

User
t.name
t.email
belongs_to :company

TempRecorder
t.point
t.time
t.temp
t.serial_num
belongs_to :company

1 个答案:

答案 0 :(得分:1)

我认为你可能会过度思考它;)。您列出的数据可能不需要像这样分开。

关键点:如果您想知道您的字段是否需要拆分为不同的表格,请自问

  1. 我建模的关系是什么?
  2. 通过将字段移动到新表,我可以最小化数据中的冗余吗?
  3. 考虑:你有字段data,date,serial_no。我假设您需要serial_no,原因不在此处指定,并且不能仅依赖于任何给定表上rails生成的id值。

    如果将这些字段保持在一起,则可以为名为“TemperatureSamples”的模型或类似的模型奠定坚实的基础。表中的字段紧密相连,不会有任何不必要的重复(例如,在表中的每条记录上列出集合网站)。

    相反,如果将字段拆分为不同的表,则有两个或三个名为“CollectionDate”,“CollectionTemperature”的表(甚至可能是“CollectionSerialNo”,但现在让我们忽略这种可能性)。这些表存储了一列数据,然后您必须开始使用外键将它们链接在一起。您的数据模型变得更加复杂,不会减少冗余。

    如果您刚刚开始使用数据库,请考虑阅读标准化和三种常规形式(这是非常快速的阅读):https://en.wikipedia.org/wiki/Database_normalization