【问题标题】:How do I model "relative" time in a database?如何在数据库中建模“相对”时间?
【发布时间】:2011-11-12 14:59:14
【问题描述】:

澄清:我不想通过使用时间戳和当前时间来计算友好时间(例如,“8 秒前”)。

我需要在我的数据模型中创建一个事件时间线,但这些事件只是相互关联的。例如,我有事件 A、B 和 C。它们按顺序发生,所以可能 B 发生在 A 之后 20 ,而 C 发生在 20 在 B 之后。

我不在乎时间单位。就我而言,没有时间,只有相对论。

我打算将其建模为链表,其中每个事件都是一个节点:

活动

  • 身份证
  • 姓名
  • prev_event
  • 下一个事件

这是对相关事件建模的最有效方法吗?

【问题讨论】:

  • 同一事件可以发生多次吗?
  • 技术上没有,但它可以被“告知”不止一次。为此,我打算用一些唯一的 ID 来标识它,或者有一个事件包装器来确定顺序(并且是不可重复的)并包含事件(这实际上是当时的事件 details )。

标签: time database-design data-modeling relative-date


【解决方案1】:

计算机记录的所有时间相对时间,名义上它是相对于一个纪元的偏移量,以毫秒为单位。通常这个纪元是从 1970/01/01 as is the case with Unix 开始的偏移量。

如果您每天存储正常的timestamp 值,那么如果它们都是连续的,那么您在事件之间已经有相对时间,您只需将它们减去即可得到 intervals是您所说的相对次,但它们实际上是间隔

你可以使用任何你需要使用的分辨率,milliseconds 是大多数东西使用的,如果你以亚毫秒分辨率采样,你会使用nanoseconds

【讨论】:

  • 如果我有 2 个仅相隔一毫秒的事件并想在它们之间插入一个事件怎么办?您是否建议我将第一个事件向下推 1 毫秒,将第二个事件向上推 1 毫秒,然后在其间插入新事件?
  • 谢谢,贾罗德。我真正需要的是不一定基于实时的东西;我可以随意在两个事件之间插入事件,而不必担心单元的约束。有没有这样的做法或模式?
  • 我的观点是它都是相对的,你必须有一个相对于某个起点的数字序列,实时只是一个方便的参考点。
【解决方案2】:

我认为您不需要链接到上一个和下一个事件,为什么不直接使用时间戳并按时间戳排序?

如果您可以有多个同时发生的事件时间线,那么您将使用某种标识符来标识时间线(int、guid 等),并将其与时间戳一起键入。除非您需要通过单个数字引用它,否则甚至不需要 id。

类似这样的:

活动

  • TimeLineID(键)
  • 日期时间(键)
  • 姓名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2021-01-19
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多