我应该将 "timestamp" 的 "time" 部分提取到 "json" 数据类型中吗?

Should I extract the "time" part of "timestamp" into "json" data type?

我正在设计一个数据库(postgresql),可以存储用户全天的用餐情况,以后可以根据这些日常信息进行每周、每月或每年的分析。我最初的设计是 meals table 看起来像:

meals(table姓名)

采用这种结构,查询用户在指定的用餐数据,可以先过滤mealsuser_id,再过滤timestamp ].并且对于一个用户,一天内多餐会插入多条记录。


另一种方法是使用 [json 或 jsonb 类型](https://www.postgresql.org/docs/current/datatype-json.html) 来提取 "time"来自 `timestamp` 的一部分,所以 `timestamp` 只包含 'year'、'month'、'date',因此我可能有一个名为 `meals_of_day` 的 table:

meals_of_day(table姓名)

records 列中的数据可能如下所示:

{
  "08:30": {
    picture_ids: [1,2],
    labels: ['meat', 'apple'],
    note: 'meat was too salty'
  },

  "12:45": {
    // some data
  },

  "19:05": {
    // some data
  }
}

这样一个用户每天只有一行,插入一顿饭其实就是更新user+date对应行的records列.



  1. 用户登录吃饭时,哪种方式的响应时间会更短?
  2. 如果分析特征涉及大量与时间相关的查询,哪种方法更有效?

谢谢。

在这两种方法中(并且对您的应用程序层、前端架构等一无所知)我更喜欢 meals table 方法。它简单、相当灵活(似乎对数据的使用方式做出了一些假设),防止了 jSONB 结构上可能的更新冲突,并且很容易从(到 mails_per_day 方法或其他方法)迁移) 如有需要。