使用 Dexie.js 进行血压数据管理 - 数据应该如何构建?

问题描述 投票:0回答:1

我想练习 Dexie 和 Nuxt,并想到了一个收集血压 (BP) 数据的小应用程序。

想法是:

  • 每天测量血压 3 次(早上、中午、晚上)
  • 每次连续测量 3 次血压(中间可能休息一分钟)
  • 收集的数据由这5个字段组成:timestamp、high、low、sys、comment

免责声明:我不太确定,从医学角度来说,这是否有意义,但这是为了练习 dexie,而不是成为一名医生或病人。 :-)

我的问题是:如何在 dexie 中构建这些数据?

我最初想到的是这样的字段结构:

db.version(1).stores({
    bp: "&uuid, dateMonth, daySection, data"
})

其中

daySection
是“早上”、“中午”或“晚上”之一,
data
是以下形式的 json 对象:

1: {
    timestamp,
    high,
    low,
    sys,
    comment
},
2: {
    timestamp,
    high,
    low,
    sys,
    comment
},
3: {
    timestamp,
    high,
    low,
    sys,
    comment
}

但是这种结构会创建大量冗余数据(例如第一个字段

yearMonth
,以及
day
字段)。它不仅是多余的,而且当要对特定数据进行更新时也很难查询。 (我看到自己写了很多 for 循环或很多
yearMonth.find('day' => ...)

另一方面,我一直读到冗余数据在 NoSQL 中相当常见。但不确定这里是否是这种情况。

所以我想知道,是否有更好的方法来构造和查询此类数据?有什么建议/想法吗?

vuejs3 indexeddb nuxtjs3 dexie
1个回答
0
投票

不确定您是否已经找到了解决方案,但由于问题仍然悬而未决,我会尝试一下。

首先,在

bp: "&uuid, dateMonth, daySection, data"
中,您定义的是索引,而不是字段。您可以拥有更多字段。

我建议为每个测量创建一条记录,因此每个测量都将具有以下字段:

uuid, date, daySection, timestamp, high, low, sys, comment
,其中
date
将是一些简单的内容,例如“20240201”。您可以决定是否真的需要确切的时间。如果没有,我也会删除时间戳。

我会删除

data
索引,留下
bp: "&uuid, date, daySection"

然后 Dexie 魔法登场了:如果您计划根据日期和一天中的部分查询/更新记录,您只需创建一个 复合索引

[date+daySection]
。您的查询很简单:

db.bp.where({date: 20240201, daySection: 'noon'}).first()

这将为您提供一条特定记录,然后您可以按照自己的方式操作该记录。

您可以将 where 与任何索引一起使用。要获得一天的所有测量值,您只需执行以下操作:

db.bp.where("date").equals(20240201).toArray()

等等...

所以,最终的定义是这样的:

db.version(1).stores({
    bp: "&uuid, date, daySection, [date+daySection]"
})

最终的数据模型:

uuid, date, daySection, high, low, sys, comment

查看我链接的文档页面,它们有很好的示例。我希望这有帮助。如果来得太晚了,希望它能帮助其他寻求反馈的人。

© www.soinside.com 2019 - 2024. All rights reserved.