将图表数据存储在数据库中

时间:2016-12-24 15:06:54

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

我有一个我想用来创建图表的网络应用程序(Rails)。现在我所做的是:

  • 上传包含我的数据的文件以显示
  • 存储此文件并将其与模型样本
  • 相关联
  • 当我想查看此示例时,我从先前上传的文件中提取数据并使用ChartJS创建图表

但我不太喜欢这个解决方案,因为每次都会重新创建图表,而且最重要的是我希望能够在我的图表数据上随时做一些统计如果我把它们存档,很难......

每个样本大约有1000行,所以它似乎不是常规的#34;每次创建样本时都要存储1000个新行?

今天我有:

Sample
..... id : int
..... attachment : txt file containing the data

可以将其更改为:

Sample
..... id : int
..... attachment : txt file containing the data
..... chart_data_id : associated ChartData

ChartData
..... id : int
..... x : int
..... y : int

我希望我的解释清楚......例如,在我的数据库中,我会有一个示例whiwh has_many ChartData:

Sample(id: 1, attachment: my_file, chart_id: 10)

ChartData(id: 10, x: 0, y: 1)
ChartData(id: 10, x: 3, y: 2)
ChartData(id: 10, x: 5, y: 7)
.....

由于

1 个答案:

答案 0 :(得分:1)

一般来说,正如您已经猜到的那样,拥有一个ChartData对象是一个非常好的方法。但是,如果Sample has_many :chart_data,则sample_id表中的外键必须为ChartData,以便ChartData可以拥有唯一ID。

即使这不是经常使用的模型结构,任何中途不错的数据库都可以存储几百万行(在SQLite中最大为2 ^ 64)。你真的需要一个很多的样本才能成为问题,即使这样,也有机制让它工作(即分区等)。

然而,还有其他可能性。例如,如果你使用PostgreSQL,只要ChartData的唯一属性是xy,你可以考虑使用Point数组作为包含数据的属性

这样的东西
create_table :samples do |t|
  t.point :chart_data, array: true, default: []
end

点数是开箱即用的Rails支持的唯一几何类型,从数据库中检索时是will be treated as arrays

或者您甚至可以使用JSON type在数据库中存储哈希或数组。