2014.4.21 資料庫設計:冗餘一個欄位支撐一個功能的巧妙的設計
阿新 • • 發佈:2019-02-04
CRM後期需求修改時,程式設計思維上的亮點:
1.實現錄音許可權分配功能
A.早期需求:角色都可以聽錄音。
處理方式:介面不加限制。
B.中期需求:僅超級管理員可以聽錄音。
處理方式:對非超級管理員的角色在介面上加限制。
C.後期需求:超級管理員可以分配聽錄音的許可權給指定的人員,且分配之後72小時有效,過期失效。
個人計劃處理方式:新建聽錄音的許可權表(某人,開始時間,結束時間);新建一套增刪改的介面;
同事計劃處理方式:直接在人員表中冗餘一個voice_endtime表示聽錄音的截止時間,在介面上判斷:為空或者在當前時間之前都表示“未授權”。
亮點總結:思維跳躍,這樣處理簡化了很多事情:不必新建表,不需要新增一套增刪改的介面,java檔案不需要修改(不需要另外去查詢許可權相關的資料,因為本條資料已經包含了許可權標識)減少了此功能的維護成本,簡化了對功能的理解。新增一個欄位就完成了一個功能,這種高效的方式給我很大意外。
2.稽核功能的設計原理(更名稽核、延期稽核)
個人計劃處理方式:新建稽核表(申請型別,原值,更改後的值...),新建一套對應的增刪改的介面,同時對不同的申請做通過或拒絕才操作時,續作邏輯處理;
同事計劃處理方式:
在人員表中冗餘name_temp欄位,存更改後的值,當name和name_temp的內容不一致時,可以篩選出此條資料進行操作,如果點選‘通過’,則將name_temp的值賦給name,‘拒絕’,則將name的值覆蓋到name_temp。
在客戶表中冗餘sign_time_temp欄位,原理如上。
亮點總結:避免了引入更多的邏輯,使得程式碼更精簡。也是一個欄位支撐一個功能的巧妙的設計!