首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Rails和SQL在数据库中保存多个温度曲线(同时测量)的最佳方法是什么?

使用Rails和SQL在数据库中保存多个温度曲线(同时测量)的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-05-20 08:33:12
回答 2查看 96关注 0票数 1

使用Rails和SQL-数据库保存多个温度曲线的最佳方法是什么?同时测量了温度曲线。每个测量值的时间以秒为单位存储。

这个图片在UML中显示了我的问题。但是时间线和曲线之间的关系是不正确的。每个时间线值可以有几个曲线度量,但不在同一条曲线上。在相同的曲线中,时间线-值必须是唯一的。

在这个解决方案中,所有的时间线值都可以有几个曲线度量。这是正确的,但是在这个图片中,一个时间线值可以在同一条曲线上有几个曲线介面,这是错误的。

我希望你能理解我的问题,你可以给我一些提示,告诉我一个更好的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-20 09:13:06

看起来您的CurveMeasurement应该是CurveTimeline之间的连接。

代码语言:javascript
运行
复制
class Curve < ActiveRecord::Base
  has_many :curve_measurements
  ...
end

class Timeline < ActiveRecord::Base
  has_many :curve_measurements
  ...
end

class CurveMeasurement < ActiveRecord::Base
  belongs_to :curve
  belongs_to :timeline

  validates :curve_id, uniqueness: { scope: :timeline_id }
  validates :timeline_id, uniqueness: { scope: :curve_id }
  ...
end

需求的重要部分是CurveMeasurement模型中的唯一性范围--这可以确保在给定的时间点上不能对给定的曲线进行多个度量。

如果时间线值不是一个单独的模型,也可以这样做:

代码语言:javascript
运行
复制
class Curve < ActiveRecord::Base
  has_many :curve_measurements
  ...
end

class CurveMeasurement < ActiveRecord::Base
  belongs_to :curve

  validates :timeline_value, uniqueness: { scope: :curve_id }
  ...
end

如果要强制执行一组离散的timeline_value,可以使用进一步的验证:numericalityinclusion (参见validations.html )。

票数 2
EN

Stack Overflow用户

发布于 2014-05-20 09:17:46

如果我正确理解,对给定曲线的测量是一个值,在特定的时间测量。你想在任何给定的时间找到所有的值,所有的曲线。

同时,您希望能够约束,只有测量的每一时间,每条曲线。你也可以在你的第二个模型中这样做。

在您的模型中,您的curve_measurements看起来就像

代码语言:javascript
运行
复制
t.curve_id
t.timeline_id
t.value

然后,您可以指定一个约束(取决于您的数据库,组合curve_id, timeline_id必须是确定的)。

有人想知道,如果Timeline只提供了几秒钟的时间,为什么不降低这种间接的水平呢?

当然,如果您有Timeline,您只需编写timeline.curve_measurements,但是如果您删除了时间表表的必要性,并将时间(或时间线)值直接添加到curve_measurements表中,那么您的表将类似于

代码语言:javascript
运行
复制
t.curve_id :integer, references: curves
t.measured_at :time
t.value 

然后在特定的时间获得所有的测量值,只需编写CurveMeasurement.where(:measured_at => ....)

这更容易查询(少一个连接)。另外,为了确保每条曲线都只有度量,每次,您只需添加类似的约束,指定curve_id、measured_at组合必须是唯一的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23754757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档