使用Rails和SQL-数据库保存多个温度曲线的最佳方法是什么?同时测量了温度曲线。每个测量值的时间以秒为单位存储。
这个图片在UML中显示了我的问题。但是时间线和曲线之间的关系是不正确的。每个时间线值可以有几个曲线度量,但不在同一条曲线上。在相同的曲线中,时间线-值必须是唯一的。

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

我希望你能理解我的问题,你可以给我一些提示,告诉我一个更好的方法。
发布于 2014-05-20 09:13:06
看起来您的CurveMeasurement应该是Curve和Timeline之间的连接。
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模型中的唯一性范围--这可以确保在给定的时间点上不能对给定的曲线进行多个度量。
如果时间线值不是一个单独的模型,也可以这样做:
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,可以使用进一步的验证:numericality或inclusion (参见validations.html )。
发布于 2014-05-20 09:17:46
如果我正确理解,对给定曲线的测量是一个值,在特定的时间测量。你想在任何给定的时间找到所有的值,所有的曲线。
同时,您希望能够约束,只有测量的每一时间,每条曲线。你也可以在你的第二个模型中这样做。
在您的模型中,您的curve_measurements看起来就像
t.curve_id
t.timeline_id
t.value然后,您可以指定一个约束(取决于您的数据库,组合curve_id, timeline_id必须是确定的)。
有人想知道,如果Timeline只提供了几秒钟的时间,为什么不降低这种间接的水平呢?
当然,如果您有Timeline,您只需编写timeline.curve_measurements,但是如果您删除了时间表表的必要性,并将时间(或时间线)值直接添加到curve_measurements表中,那么您的表将类似于
t.curve_id :integer, references: curves
t.measured_at :time
t.value 然后在特定的时间获得所有的测量值,只需编写CurveMeasurement.where(:measured_at => ....)
这更容易查询(少一个连接)。另外,为了确保每条曲线都只有度量,每次,您只需添加类似的约束,指定curve_id、measured_at组合必须是唯一的。
https://stackoverflow.com/questions/23754757
复制相似问题