专栏首页小程序·云开发专栏云开发常用数据结构设计剖析丨云开发101
原创

云开发常用数据结构设计剖析丨云开发101

云开发常用数据结构设计

在使用云开发进行产品开发的时候,我们常常需要思考,我们的应用的数据结构应该如何设计,今天我们来看一些在进行应用开发时常见的一些场景的数据结构,来帮助你更好的理解云开发,以及不同场景下云开发的应用。

场景一:用户个人信息表

功能判断用户是否注册/留存用户信息以备查询

在绝大多数场景下,用户信息都是我们需要保存的信息,或者我们需要判断一个用户是否注册时,我们会使用用户个人信息表来做判断。这个时候,我们可以借助用户个人信息表来完成功能。

在完成这部分功能时,我们需要创建一个名为 profiles 的集合,用于存储用户的信息,同时,我们需要将 profiles 集合设置为仅创建者可读写,这样可以确保后续我们功能可以实现。

判断用户是否注册

由于我们将 profiles 集合设置为仅创建者可读写,因此,当用户在执行数据查询时,仅能查到自己创建的数据,因此,当我们需要实现判断用户是否注册时,只需要对集合内的数据进行查询,便可知道用户是否创建过数据。

基于这样的机制,我们可以让用户在注册时在 profiles 表中创建一个数据,这样在后续判断用户是否注册时,只需要查询是否创建数据,便可以知道用户是否已经注册。

这里我们举个例子,当数据库中有 _openid 分别为 aabbcc 的三条记录,如果当前用户的 openId 为 aa,则它执行 db.collection('profiles').count()时,得到的结果是 1 ,则表示这个用户已经注册了。如果当前用户的 openId 为 dd,因为权限是仅能查询自己创建的数据,因此,在执行 db.collection('profiles').count()时,得到的结果是0。

对于结果为 1 的,就视为该用户已经注册;对于结果为 0 的,就视为该用户未注册。

新用户注册时的操作

由于我们是基于 count 的结果来判断用户是否注册,因此,就要求我们在完成用户注册(获取用户基本信息,如头像、昵称)时,在 profiles 表中添加一个数据,从而用于后续的判断。

则在开发时,我们需要注意,在使用 getUserInfo 相关的组件和接口完成数据的获取后,我们需要在 profiles 表中添加一条数据,具体的代码可以参考下方的代码

Page({
	bindGetUserInfo:function(userInfo){
    const db = wx.cloud.database()
    db.collection('profiles').count().then(res => {
      if (res.total === 0){
        db.collection('profiles').add({
          data:userInfo
        }).then(res => {
          // 完成数据新增,即,完成注册的步骤
        })
      }
    })
  }
})

这样我们就完成判断用户注册的最核心的部分,你如果需要在自己的应用中判断用户是否已经完成注册的流程,可以借助这样的方式,完成这部分的需求。

场景二:文章/视频/内容表

一般来说,我们的小程序中会或多或少加入一些内容方面的内容,有的是由官方发布的,有的是由用户发布的,根据发布者的不同,我们可以设计两种不同的表结构

仅能由官方发布的内容/文章/视频

对于仅限于官方发布的,我们可以考虑创建一个集合,名为 contents,并将其权限设置为仅管理端可写,其他人可读,这样我们所添加的数据仅能在云函数中进行修改,而不能在小程序由普通用户修改,这样就可以确保我们的数据的修改必须经过云函数的确认,在云函数中,我们可以进行权限的判断,比如,某几个特定的人有权限修改数据。

由用户发布的内容/文章/视频

对于一些 UGC 的应用,我们需要用户产生内容时,可以考虑创建一个集合,名为 contents ,并将其权限设置为仅创建者可写,所有人可读,这样就可以实现用户自行发布的内容,可以被其他所有用户查看。同时,数据的创建者可以对数据进行修改。

场景三:用户评论表

当我们涉及到一些内容时,就常常会涉及到用户的评论的功能,在进行开发时,评论的存放位置也会让很多人迷茫,到底应该将评论放在文章的子级,还是要放在一个单独的集合中?

这一部分关键在于:

  1. 你是否有需求将所有的评论进行排序等操作
  2. 你是否有需求在用户个人的信息中显示其所有评论

如果你有上述两个中任何一个或多个需求,那么你都需要新建一个 collection,将所有评论都放在集合中,并将其对应的内容的 _id 放在评论中,用以后续的查询。

如果你没有上述需求,则可以考虑将评论放在文章/视频条目中的子属性中,随着文章/视频一同查询出来。

总结

这篇文章我们分享了一些常见场景下的数据库结构设计,如果你还对其他场景下的数据库结构设计不慎明了,可以在文章下方留言,我们后续更新文章来说明。


如果你想要了解更多关于云开发CloudBase相关的技术故事/技术实战经验,请扫码关注【腾讯云云开发】公众号

微信截图_20190729152259.png

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用小程序·云开发两天搭建mini论坛丨实战

    笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数、数据库、存储三大能力。关于云开发,可参考文...

    腾讯云开发TCB
  • 云开发新能力,支持HTTP调用API

    今天来上班打开电脑,总感觉微信开发文档哪里有点不太一样,研究了半天原来是云开发又多了神级功能——HTTP API!

    腾讯云开发TCB
  • “协力抗疫,码力全开”线上黑客马拉松规则说明

    首先请接受我们 (腾讯云云开发 、云加社区、SegmentFault思否 、码云Gitee)的诚挚感谢!

    腾讯云开发TCB
  • 分析了3个实战案例,我找到了精细化运营的数据方法论

    9月13日,DT君邀请到了数数科技CEO吕承通,带大家了解数据驱动实现方法,并通过3个实战案例解析数据分析如何影响产品核心指标。本文为其演讲实录。

    DT数据侠
  • 解开“镣铐”看数据——GrowingIO发布首款实时商业数据分析产品(附张溪梦演讲实录)

    需手动埋点、数据采集不全、核心业务数据无法保留、工程量繁重、可视化图表制作耗时漫长、业务人员无法自主按需分析、无法对用户行为进行实时深层分析,数据分析师产品常见...

    CDA数据分析师
  • Server 2008 r2 多用户远程桌面配置

    参考资料链接: http://blog.163.com/fan_yishan/blog/static/476922132013018594951/ 按照以上链接...

    用户1637609
  • 冬天穿脱衣服不方便?VR虚拟试衣为你打造全新造型

    VRPinea
  • 0784-CDP安全管理工具介绍

    本文档描述如何使用多种安全管理工具来保护CDP环境。重点介绍安全管理工具与CDP环境之间的集成点,但不会探讨这些工具的核心功能。

    Fayson
  • [译] 怎样把取消订阅的用户吸引回来

    Android 开发者
  • 数据分析师必学第一课:构建完整的指标体系

    掌握理论知识和编程知识可以被看作入职数据分析师的“敲门砖”。掌握了这些知识,表示候选人对于成为数据分析师有了良好的准备,可以说“万事俱备,欠东风”,而“东风”就...

    博文视点Broadview

扫码关注云+社区

领取腾讯云代金券