我正在设计一个数据库(postgresql),它可以在一天内存储用户的膳食,将来还会根据这些日常信息进行每周、每月或每年的分析。我最初的设计是有一个meals表,它看起来像:
meals (表名)
使用这种结构,在指定的一天中查询用户膳食的数据首先可以通过meals过滤user_id,然后通过timestamp过滤。对于一个用户,将有多个记录插入多餐在一天。
另一种方法是使用json或jsonb型从timestamp中提取“时间”部分,这样timestamp只包含‘年份’、‘月’、‘日期’,因此我可能有一个名为meals\_of\_day的表:
meals_of_day (表名)
records列中的数据可能如下所示:
{
"08:30": {
picture_ids: [1,2],
labels: ['meat', 'apple'],
note: 'meat was too salty'
},
"12:45": {
// some data
},
"19:05": {
// some data
}
}这样,每天只有一个用户只有一行,插入一顿饭实际上是对行的records列的更新,该列对应于user+date。
谢谢。
发布于 2021-08-27 18:00:21
在这两种方法中(而且对您的应用层、前端架构等一无所知),我更喜欢meals表方法。它很简单,相当灵活(似乎对数据的使用方式做了很少的假设),防止了jSONB结构上可能的更新冲突,并且在需要时很容易从(迁移到mails_per_day方法或其他方法)迁移。
https://stackoverflow.com/questions/68956299
复制相似问题