如何正确安排这种类型的架构?

时间:2016-08-25 14:29:12

标签: sql database sqlite normalization

我希望允许用户能够创建他们想要的任何指标,并随着时间的推移记录它的值。除此之外的唯一操作是能够查看所选指标/时间范围的数据趋势。

我按照这样的方式构建了我的表:

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

1 个答案:

答案 0 :(得分:1)

不要为每个指标制作新表。不要为新指标添加新列。你的方法似乎是正确的。

当您无需重新设计/创建新对象即可输入新数据时,您就走在了正确的道路上。

关于EAV:当您不知道架构是什么时,这或多或少,因此您尝试构建可以涵盖可能需要涵盖的任何内容的架构。这是一场噩梦,不应该被真正使用。在您的情况下,您确切地知道架构是什么(度量,度量属性),而不是值是什么,这是完全正常的。