【问题标题】:recommandation on modeling database in pocketbasepocketbase数据库建模推荐
【发布时间】:2023-02-20 17:27:59
【问题描述】:
我正在尝试使用 Pocketbase 构建一个简单的 Todo 应用程序,每个用户都可以在其中创建/读取/更新/删除用户私有的待办事项。我需要关于设计用例的正确方法的建议。
最初我想在用户集合中添加一个列表待办事项字段。待办事项字段的类型应该是什么?它应该是选择还是关系?我创建了另一个todos 集合,其中包含字段用户、描述。现在应该是用户类型关系吗?我接触过关系数据库,经常从关系和外键的角度思考。由于 pocketbase db 是 NoSQL 数据库,难道我不应该被允许将待办事项集合嵌套在我的用户集合中吗? todos 应该是根集合吗?
即使您熟悉 Pocketbase,关于如何在 mongodb、firebase db 等 Nosql 数据库中模拟这种情况的任何建议都会有所帮助。我是前端开发人员,我的数据库技能并不是那么好。任何建议都会帮助我学习。
【问题讨论】:
标签:
database-design
nosql
pocketbase
【解决方案1】:
pocketbase 在底层使用 Sqlite,所以它不是 NoSQL 数据库;)
尽管如此,我认为你的想法是对的。你应该有一个与拥有用户相关的待办事项表,其余列保存到相关数据,如描述、内容、优先级......
我不建议嵌套数据,因为从长远来看,这会使在数据库中查找内容变得更加困难和缓慢。 NoSQL 数据库对文档进行不同的哈希处理,因此它们在嵌套条目时仍然表现良好。 Pocketbase 不是这种情况。
不,您不应该将待办事项嵌套到用户中。
是的,在我看来 todos 是一个与用户相关的根集合(这里的关系被命名为“用户”)。
获取其用户的待办事项(js 前端):
const record = await pb.collection('todos').getOne('RECORD_ID', {
expand: 'user',
});
或者获取用户并使用 getList 获取用户的前 50 个待办事项:
const record = await pb.collection('users').getOne('RECORD_ID')
const resultList = await pb.collection('todos').getList(1, 50, {
filter: 'user = "' + record.id + '"',
});
希望,这对你有帮助:)