本節重點記錄一下數據庫的設計。mongodb
考慮到數據之間不會有太多的關聯,決定使用 MongoDB。這樣在後端與數據庫通訊時就有兩種主要方式:使用 mongodb 或者 Mongoose。參考了這篇文章,比較了一下二者的異同。咱們的數據不會很複雜,而且但願更便捷地管理數據,這種狀況下 Mongoose 更加適合。數據庫
對於這個項目來講,主要的表有 4 個:json
詳細字段: tasks後端
{
"taskId": 1,
"userId": 0,
"name": "Fruit",
"desc": "Eat fruit every day",
"type": "task",
"isOneTime": false,
"score": 2,
"maxTimes": 3,
"timesUsedToday": 2,
"createdAt": 1573404126959,
"lastUpdatedAt": 1573404126959
}
複製代碼
在建立 Mongoose 的 Schema 時代碼以下:數據庫設計
// define task schema
const taskSchema = mongoose.Schema({
userId: { type: String, required: true },
taskId: { type: Number },
name: { type: String, required: true },
desc: { type: String, required: true },
type: { type: String, required: true },
isOneTime: { type: Boolean, required: true },
score: { type: Number, required: true },
maxTimes: { type: Number, required: true },
timesUsedToday: { type: Number, required: true },
createdAt: { type: Date, required: true },
lastUpdatedAt: { type: Date, required: true }
})
複製代碼
設置taskId
自增,須要使用 mongoose-auto-increment
插件mongoose
// ... 文件頂端引入庫的代碼
// define task schema
taskSchema.plugin(autoIncrement.plugin, {
model: 'TaskModel',
field: 'taskId',
startAt: 0
});
複製代碼
這樣設置好後,每次寫入新的 task 其中的 taskId 都會自增。post
logs、 scores 和 users 差不太多。ui
其實這樣的設計有一些冗餘。由於 task 和 user 一一對應,score 和 user 一一對應,能夠只保留 tasks 集合中的 score。spa
在數據庫設計好以後,就能夠着手開發後端功能了。後端開發過程會在下一篇文章中記錄。插件
系列文章:
React + MobX + Electron + Node.js + MongoDB 全棧項目開發實踐(零)前言
React + MobX + Electron + Node.js + MongoDB 全棧項目開發實踐(一)
React + MobX + Electron + Node.js + MongoDB 全棧項目開發實踐(二)容許 decorator
React + MobX + Electron + Node.js + MongoDB 全棧項目開發實踐(三)使用 MobX 實現流暢數據流
React + MobX + Electron + Node.js + MongoDB 全棧項目開發實踐(四)—— API 設計