我应该将 "timestamp" 的 "time" 部分提取到 "json" 数据类型中吗?
Should I extract the "time" part of "timestamp" into "json" data type?
我正在设计一个数据库(postgresql),可以存储用户全天的用餐情况,以后可以根据这些日常信息进行每周、每月或每年的分析。我最初的设计是 meals
table 看起来像:
meals
(table姓名)
- id(主键)
- user_id(外键)
- picture_ids
- 标签
- 注意
- 时间戳
采用这种结构,查询用户在指定天的用餐数据,可以先过滤meals
user_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姓名)
- id(主键)
- user_id(外键)
- 记录(json类型) <----------
- 日期
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
列.
- 用户登录吃饭时,哪种方式的响应时间会更短?
- 如果分析特征涉及大量与时间相关的查询,哪种方法更有效?
谢谢。
在这两种方法中(并且对您的应用程序层、前端架构等一无所知)我更喜欢 meals
table 方法。它简单、相当灵活(似乎对数据的使用方式做出了一些假设),防止了 jSONB 结构上可能的更新冲突,并且很容易从(到 mails_per_day 方法或其他方法)迁移) 如有需要。
我正在设计一个数据库(postgresql),可以存储用户全天的用餐情况,以后可以根据这些日常信息进行每周、每月或每年的分析。我最初的设计是 meals
table 看起来像:
meals
(table姓名)
- id(主键)
- user_id(外键)
- picture_ids
- 标签
- 注意
- 时间戳
采用这种结构,查询用户在指定天的用餐数据,可以先过滤meals
user_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姓名)
- id(主键)
- user_id(外键)
- 记录(json类型) <----------
- 日期
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
列.
- 用户登录吃饭时,哪种方式的响应时间会更短?
- 如果分析特征涉及大量与时间相关的查询,哪种方法更有效?
谢谢。
在这两种方法中(并且对您的应用程序层、前端架构等一无所知)我更喜欢 meals
table 方法。它简单、相当灵活(似乎对数据的使用方式做出了一些假设),防止了 jSONB 结构上可能的更新冲突,并且很容易从(到 mails_per_day 方法或其他方法)迁移) 如有需要。