雲開發常用數據結構設計剖析丨雲開發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相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯繫我們哦~比心!
圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章