iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0

任務列表

差不多要來做資料庫相關的開發,來設計 DB schema吧~
系列是做一個任務管理的番茄鐘,那一定要有table去記會員設定好的任務
下面這個設計常會出現在無限層的需求上,它的結構很簡單也很直覺,萬一資料有問題人工下去處理也有辦法修復。
缺點是當你的層數愈多,它的效能問題就愈明顯,但我只打算做兩層,所以是還好。
parent_id是記它的上一層是誰,資料會長這樣
EX:

id name parent_id
1 A 0
2 AA 1
3 AB 1

A就是AA、AB的上層
應該滿好懂的吧(?

CREATE TABLE `tasks` (
  `id` int(11) UNSIGNED NOT NULL,
  `parent_id` int(11) UNSIGNED NOT NULL COMMENT '父層ID',
  `user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '會員ID',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '名稱',
  `status` tinyint(1) UNSIGNED DEFAULT '1' COMMENT '狀態',
  `created_timestamp` int(11) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `tasks`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tasks`
  MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;

任務記錄

任務完成會有一筆的記錄,用於統計

CREATE TABLE `records` (
  `id` int(11) UNSIGNED NOT NULL,
  `user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '會員ID',
  `task_id` int(11) UNSIGNED NOT NULL COMMENT '任務ID',
  `parent_id` int(11) UNSIGNED NOT NULL COMMENT '父層ID',
  `spend_time` int(11) UNSIGNED NOT NULL COMMENT '使用時間',
  `date` date NOT NULL,
  `created_timestamp` int(11) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `records`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `records`
  MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;

通常table建完之後,我們會根據資料量跟使用的方式去建索引
但這個還早待會開發完最後再去處理

今天先這樣謝謝大家~


上一篇
Day 9 登入驗證 & 會員資訊API
下一篇
Day 11 新增任務API
系列文
Golang & Vue.js 30天從0打造服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言