【问题标题】:How to properly arrange this type of schema?如何正确安排这种模式?
【发布时间】:2017-01-02 01:09:51
【问题描述】:

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

我的表格结构是这样的:

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

【问题讨论】:

    标签: sql database sqlite normalization


    【解决方案1】:

    不要为每个指标创建新表格。不要为新指标添加新列。您的方法似乎是正确的。

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

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

    【讨论】:

    • 有人提到我构造它的方式是不正确的,因为它是一种反模式,称为......我似乎再也找不到了。 EAX 形式?编辑:EAV 表格,en.wikipedia.org/wiki/…
    • 这是标准的 1:M 关系,根据您对需要跟踪的内容的描述完全正确。询问任何告诉你的人以获得详细解释,然后在此处回复,我们可以告诉你为什么它们不正确(真的,这是最基本的)
    • 好吧,看看你的链接... BS是我说的,但那只是我。我会按照您在问题中描述的方式进行操作,我认识的绝大多数有能力的数据库开发人员也是如此。
    • 我是否需要添加任何额外的索引来加快速度?我猜不是,因为我认为外键会自动被索引,但只是询问。也许时间戳是唯一的?
    • 澄清一下,您建议的不是 EAV 模型。允许用户描述他们自己的指标不是在 EAV 的上下文中 - 您所拥有的是最常用的 1:M 关系的一个非常基本、非常常见的场景。 EAV 完全是另外一回事,这里不关心。
    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多