我希望允许用户能够创建他们想要的任何指标,并随着时间的推移记录它的值。除此之外的唯一操作是能够查看所选指标/时间范围的数据趋势。
我按照这样的方式构建了我的表:
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
答案 0 :(得分:1)
不要为每个指标制作新表。不要为新指标添加新列。你的方法似乎是正确的。
当您无需重新设计/创建新对象即可输入新数据时,您就走在了正确的道路上。
关于EAV:当您不知道架构是什么时,这或多或少,因此您尝试构建可以涵盖可能需要涵盖的任何内容的架构。这是一场噩梦,不应该被真正使用。在您的情况下,您确切地知道架构是什么(度量,度量属性),而不是值是什么,这是完全正常的。