Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 水计量应用程序的建模数据_Ruby On Rails_Ruby_Postgresql_Database Schema - Fatal编程技术网

Ruby on rails 水计量应用程序的建模数据

Ruby on rails 水计量应用程序的建模数据,ruby-on-rails,ruby,postgresql,database-schema,Ruby On Rails,Ruby,Postgresql,Database Schema,例如,在计量应用程序和捕获每日水表数据的应用程序中使用的最佳数据模型是什么 我能想到的是,我可以有一个water\u reading表,它可以捕获所有用户的数据。 例如: 这是捕获数据的最佳方式吗 我对这些数据的主要用途是让用户能够查看图表等,以获得使用模式 例如,每月用水折线图 挑战 我能预见到的唯一问题是,这个模型的读数需要有规律。 如果用户在非零点开始数据输入,它仍然有效吗? 或者,如果用户遗漏了一些条目,我如何填补空白等 例如: 如果用户输入了以下数据: day_1 12pm - 20

例如,在计量应用程序和捕获每日水表数据的应用程序中使用的最佳数据模型是什么

我能想到的是,我可以有一个
water\u reading
表,它可以捕获所有用户的数据。 例如:

这是捕获数据的最佳方式吗

我对这些数据的主要用途是让用户能够查看图表等,以获得使用模式

例如,每月用水折线图

挑战

我能预见到的唯一问题是,这个模型的读数需要有规律。 如果用户在非零点开始数据输入,它仍然有效吗? 或者,如果用户遗漏了一些条目,我如何填补空白等

例如: 如果用户输入了以下数据:

day_1 12pm - 20
day_2 12pm - 50
day_5 12pm - 120
我如何创建一个显示每日用水的图表。 因为根据数据:

day_1 : 20 - ? (I don't know if the meter was started the same day or the 5 days ago)
day_2 : 50 - 20
day_3 : ? - 50
day_4 : ? - ?
day_5 : 120 - ?
任何帮助都将不胜感激。


PS:我使用的是Ruby on Rails,数据库是postgresql。

您可能需要考虑将用户信息与用水信息分开

所以可能有一个用户模型,一个仪表模型和一个读数模型

用户可以有很多仪表,仪表可以有很多读数。每个读数都有一个日期和一个值


这将最大限度地减少模型中的重复数据量。使更改诸如用户名之类的内容变得容易

您应该查看需要执行的查询类型,并确定哪种模型最适合您,因为有许多选项可用。您可能会发现嵌套复合类型数组(即用户表中的读数数组)可以完成此任务,但如果您需要从用户以外的其他对象引用这些读数,或者如果您需要对复合类型数组中的某些值进行索引,则归一化是最安全的选择

听起来您将执行大量的聚合和时间序列生成查询,因此请确保您使用的ORM能够胜任这项工作。我发现ActiveRecord在很多方面都不能满足我的需求,于是我转向Sequel,我发现它是一个功能更强大的数据访问库,它的postgres功能支持非常出色,性能也更好

对于时间序列类型的查询(即每日、每月、每季度使用),可能需要使用窗口函数或递归公共表表达式,也可能需要使用生成器函数。要了解您将要处理的SQL以处理
水位读数中的缺口,请查看以下堆栈溢出问题:

postgresql时间序列查询指南:

您将能够使用Sequel with Postgres指定上面详述的查询,并获得一个结果(即数据集),您可以进一步链接/作用域或在另一个查询中组合该结果,但在ActiveRecord中,您需要使用原始SQL字符串并获得一个无法链接或作用域的结果(数组)


仔细查看您的报告要求,也许您不仅需要按天/月/季度报告用户用水情况,还需要与相同或类似人口统计中的其他用户的中位数/平均数/第n百分位数等进行比较或排名。您将如何描述这些类型的查询,以便它们随着数据集大小的增加而高效地工作?您的数据访问层/ORM是否适合您,或者它更适合于简单的CRUD类型的问题?

我不理解您的问题。问题是-如何创建一个数据模型来解决我可以在问题的挑战部分预见的问题。是的,我不完全理解这些问题。为什么第一次阅读的内容或者是否跳过了其中任何一项都很重要呢?我更新了这个问题。这有意义吗?除非是uni作业(有些脾气暴躁的教授不会喜欢),否则你应该只使用第一次测量作为基础,从那天起只显示图表。当涉及到数据不规则性时,由于您的值似乎在增加,您只需平均掉缺失的值即可(因此,当第5天输入数据时,我们可以假设第4天和第5天的每天使用率为(120-50)/2=35)。然后你可以进一步修正不规则时间(如果测量间隔超过24小时),我同意。。。但是对于阅读模型本身,你会建议一种更好的方法来捕获数据吗?一个解决了我提到的挑战的方法。你最不想做的就是建立一个要求,比如阅读必须是定期的。只要使用一个像样的图形库,就不会有问题。jPlot是我喜欢的。你还有别的建议吗?你太棒了。为什么要在仪表模型上增加复杂性?一个用户可以同时进行多个测量吗?谢谢您的全面回答!这里有很多好信息。我将研究续集,看看我是否可以在我的情况下继续。特别是,因为我是Rails新手,不想在标准套件中添加太多定制。只需我的2c,但不要害怕超越37 signals在其固执己见的框架中为您提供的功能。是的,学习是要付出代价的,但这总比在工具不适合你的情况下挣扎要好。我开始使用传统的rails应用程序(服务器呈现页面),但现在我使用了100%JSON api,抛弃了链轮、rails呈现管道和ActiveRecord,因此我从rails获得的唯一真正价值是机架遵从性和路由器/控制器分离。如果您正在开发服务器只提供JSON的现代web应用程序,那么像Sinatra和Padrino这样的框架是更好的选择。
day_1 : 20 - ? (I don't know if the meter was started the same day or the 5 days ago)
day_2 : 50 - 20
day_3 : ? - 50
day_4 : ? - ?
day_5 : 120 - ?