初步設計了一下使用者簽到的設計方案,記錄下這種思路,以後可能需要完善。每月最多有31天,int32有32位,簽到與沒簽到只有兩種狀態,簽到用1來表示,未簽到用0來表示,因此可以用int32來表示使用者每月的簽到情況。
資料庫表(sign_record)的設計:
列型別
描述
idint64
自增鍵user_id
int64
索引,使用者表的id
date_month
date
索引,月份,形如2019-02
mask
int32
使用者簽到的資料
continue_sign_month
int32
使用者本月連續簽到的天數
需要解決的一些問題:假設當前伺服器月份是month
1. 獲取使用者當月的簽到狀態:
根據伺服器時間判斷當前的月份month,根據傳入的user_id和month去資料庫中查詢使用者簽到的資料mask。
2. 簽到:
假設當日是本月第i天(這個可以計算得出),更新資料庫中mask: mask = mask | (1 << i),更新連續簽到天數,若i是1或第i-1天沒有簽到,本月連續簽到天數置為1;其他情況則更新連續簽到天數+1。
3. 判斷當日是否簽到:
如果mask & (1 << i)大於0,說明簽到了,如果為0,說明未簽到。
4. 本月補簽:
補簽某個日期,假設是第j天,更新資料庫中mask: mask = mask | (1 << j),重新統計本月連續簽到天數,從第i位開始逆序遍歷到第1天統計連續簽到天數。
5. 本月連續簽到天數:
直接返回資料庫中continue_sign_month欄位。
6. 待續……
由於存在可能補簽的情況,需要記錄所有的簽到記錄,由於有了所有的簽到記錄,其實任何功能都可以實現,只是實現的複雜度可能不同。
資料庫優化設計方案
本文首先討論了基於第三正規化的資料庫表的基本設計,著重論述了建立主鍵和索引的策略和方案,然後從資料庫表 的擴充套件設計和庫表物件的放置等角度概述了資料庫管理系統的優化方案。1 引言 資料庫優化的目標無非是避免磁碟i o瓶頸 減少cpu利用率和減少資源競爭。為了便於讀者閱讀和理解,筆者參閱了sybas...
資料庫同步設計方案
需求 目前我們公司開發的系統大部分都涉及到資料傳輸,簡單的系統架構如下,有企業輸入單證資訊,提交到 機關進行審批,將審批的結果返回到企業端,由於企業客戶端系統,和行政審批中心的系統存在多不多的複雜關係 同時又存在大量的資料報文的交換 為了提高整個系統在資料傳輸過程中的可靠性,安全性及時性。我們在中間...
資料庫表的設計方案
1 一對多或者多對一的物件在資料庫裡面如何設定表來儲存資料原理解說當在程式中物件的關係為1對多或者多對1的關係時,在資料庫裡面我們怎樣設計表來儲存資料呢?1 首先分別設計兩個表來儲存兩個物件的基本屬性,不用管他們之間的關係 2 然後再在多的物件的表裡面設定外來鍵來描述兩個表之間資料的關係即可滿足需求...