【Flutter疑問診療室】 Cloud Firestore資料傳輸 - 資料模型與型態
前言
剛接觸Flutter的這幾個月中,在Cloud Firestore儲存資料時經常遇到許多資料傳輸的問題,但每次遇到問題在網路上尋找解決辦法時,那些資料總是雜亂不堪,StackOverflow上的各式Q&A也通常只解決單一問題。因此我將曾經卡很久的問題統整起來,希望可以幫助一直找不到解答的你(,,・ω・,,)
模型介紹
首先,來簡單介紹Firestore的資料模型
- Cloud Firestore是No SQL的,也就是非SQL語法的使用方式。然後你可以將整個資料庫看作是一個大的JSON檔,所有文件都會儲存在一層層之間。其中,儲存模型可以分為三種 :
- Document : 用來儲存個體,而此個體擁有兩種特質 :
- 名字 : 可以自己取,也可以讓Firestore隨機生成
- 屬性 : 詳見下方Reference解釋
- Collection : 作為Document的集合
- Reference: 用來儲存Document的屬性,其屬性也可以是另一個Collection
- Document : 用來儲存個體,而此個體擁有兩種特質 :
- 如果覺得用文字說明還是不懂的話,可以瞧瞧下面這張圖
假設今天我們要做一個評論區
- 解釋 : (由上而下)
- 評論區的主要分類就是使用者,所以最底層的Collection就命名為
user - 因為使用者一定不只一個,所以我們可以利用Firestore去生成一個隨機的使用者ID,進而去鑑別各個使用者
- 而每個使用者都有自己的Reference : 姓名、性別…等等;同時一個使用者會留好幾個評論,所以也將名為
comment的Collection設為該使用者的Reference - 接著,針對每個評論去創立其獨立的隨機ID
- 最後,就是各個評論的Reference,如標題、時間…等等
- 評論區的主要分類就是使用者,所以最底層的Collection就命名為
模型實作
接下來,我把實際的資料填入模型中,如下圖
很明顯的,我們利用了Firestore中針對Document可以隨機提供ID的功能,去給與使用者與評論各自的ID,往後假設如果需要修改某個評論時,只需要擁有
userID與commentID,就可以讀寫該評論。:.゚ヽ(*´∀`)ノ゚.:。
資料型態
接著要介紹Firestore中的資料型態,常見的整數、字串、浮點數、布林值都有,而比較特別的有 :
- Geographical point(地理位置) : 就是經緯度
- Map(映射值) : 例如
{c: "foo", a: "bar", b: "qux"}的Key-Value格式 - Date and time(日期與時間)
- Reference(路徑) : 例如
projects/[PROJECT_ID]/... - Array(陣列) : 例如
[1, 2, 3]
詳細說明,請參閱官方文件
而上述範例中,我們使用到的資料型態分別是 :
- String : 姓名、性別、標題
- Timestamp : 留言時間
總結
Ok! 我們今天簡單介紹了Firestore的資料模型與結構,而下次就要開始著手Flutter的撰寫瞜~
參考與引用來源
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


