雲開發常用數據結構設計剖析丨雲開發101

  • 2019 年 10 月 3 日
  • 筆記

雲開發常用數據結構設計

在使用雲開發進行產品開發的時候,我們常常需要思考,我們的應用的數據結構應該如何設計,今天我們來看一些在進行應用開發時常見的一些場景的數據結構,來幫助你更好的理解雲開發,以及不同場景下雲開發的應用。

場景一:用戶個人資訊表

功能判斷用戶是否註冊/留存用戶資訊以備查詢

在絕大多數場景下,用戶資訊都是我們需要保存的資訊,或者我們需要判斷一個用戶是否註冊時,我們會使用用戶個人資訊表來做判斷。這個時候,我們可以藉助用戶個人資訊表來完成功能。

在完成這部分功能時,我們需要創建一個名為 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相關的技術故事/技術實戰經驗,請掃碼關注【騰訊云云開發】公眾號~