- 為什么字典表?
存在問題:
某些變量在多個地方使用,而且一般是固定的,但是隨着系統升級和后期變化,可能需要改變,如果這些變量寫死在代碼里面將會變得難以維護,所以要將其從代碼中抽離出來。
一般的業務系統客戶端與用戶交互的時候都會使用
下拉框組件,對於某些比較固定的值的下拉組件的數據來源一般都是比較固定的一類數值。
如何解決
有的做法是使用枚舉或者Constants常量類來實現,這種情況下在量少的前提是沒問題的,而且一旦需要修改就及其避免修改源碼;隨着系統的開發拓展,后期將無法維護,甚至命名困難等問題。
所以通常把字典放在數據庫,這樣后期的維護變更就比較簡單,也可以在不用修改代碼的情況下修改配置。還有,對於某些固定的數據字典(例如,星期,月份等)不允許修改。
但是,放在數據庫又有着頻繁訪問數據庫的問題,這不是我們希望的,這時候通常做法就是加緩存,降低訪問數據庫的頻率。
- 字典表的設計:
通常分成兩張表來實現,一個是字典類型,一個是字典
- 字典類型表:
SYS_DICT_TYPE
| 字段名 | 類型 | 作用 | 備注 |
|---|---|---|---|
| code | varchar | 編碼 | 主鍵 |
| name | varchar | 類型 | 展示用 |
- 字典表 :
SYS_DICT
| 字段名 | 類型 | 作用 | 備注 |
|---|---|---|---|
| code | varchar | 編碼 | 主鍵 |
| type_code | varchar | 類型code | 外鍵 |
| name | varchar | 字典名 | 展示用 |
| value | varchar | 字典值 | 使用值 |
| fixed | int | 是否是固定的 | default 0不固定,固定的話用1 |
以上是字典表的關鍵列和結構的設計,根據不同系統不同業務自定其他列
- 注意事項
- 字典類型應該是不可編輯的,因為字典類型通常會和具體代碼實現緊密耦合,如果非要進行編輯話需要考慮到對代碼的影響以及如何保證修改之后系統正常工作
- 字典分可編輯與不可編輯,所以在提供字典管理的時候需要注意
fixed字段,針對固定的字典不提供編輯功能 - 字典與系統參數不要混為一談,字典通常用於一類的數據,一組具有相同含義的數值(例如,供客戶端下拉選擇的枚舉);而系統參數是針對某種配置或者某種系統常量的存在。
- 關於緩存
對於緩存,可能每個人的意見不同,有人認為緩存增加維護成本,一旦使用緩存,對於編輯的數據得立馬刷新緩存,不然將會與預期不符,並且對於訪問不頻繁量少的數據還達不到使用緩存的級別;有人認為緩存提高效率,減少數據訪問。
個人認為,不同項目不同應用場景使用緩存的條件不同,對於高頻的數據或者對響應時間要求嚴格的系統可以增加緩存,但是帶來的就是數據改動的同時需要及時更新緩存信息;對於對響應時間、業務要求較高的系統可以不用緩存,保證業務的正確性。所以,具體情況具體分析,沒有哪一種是正確的,選擇適合的就可以。
</div>
