我想允许用户创建他们想要的任何度量,并随着时间的推移记录其值。除此之外的唯一操作是能够查看所选度量/时间范围的数据趋势。
我把桌子整理成这样:

Table: Metric
Fields: id int prim key, name text

Table: MetricPoint
Fields: id int prim key, metric_id int (foreign key to Metric.id), value real, timestamp long

这是正确的方法吗?还是应该为添加的每个度量动态地创建新表?或者把它们列起来?
有人告诉我,目前的安排很糟糕,因为它使用实体-属性-值建模,这显然被认为是一种反模式:https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

最佳答案

不要为每个指标创建新表。不要为新指标添加新列。你的方法似乎是正确的。
当您可以输入新数据而不必重新设计/创建新对象时,您就走上了正确的道路。
关于eav:当您不知道模式是什么时,这或多或少是这样,所以您尝试构建一个可以覆盖任何可能需要覆盖的内容的模式。这是一个噩梦,不应该被真正使用。在您的例子中,您确切地知道模式是什么(metric,metric属性),而不是值是什么,这非常好。

关于sql - 如何正确安排这种类型的架构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39148036/

10-13 00:49