【问题标题】: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 + '"',
    });
    

    希望,这对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多