字典表設計

  1. 爲何字典表?
存在問題:
  • 某些變量在多個地方使用,並且通常是固定的,可是隨着系統升級和後期變化,可能須要改變,若是這些變量寫死在代碼裏面將會變得難以維護,因此要將其從代碼中抽離出來。數據庫

  • 通常的業務系統客戶端與用戶交互的時候都會使用下拉框組件,對於某些比較固定的值的下拉組件的數據來源通常都是比較固定的一類數值。緩存

如何解決

有的作法是使用枚舉或者Constants常量類來實現,這種狀況下在量少的前提是沒問題的,並且一旦須要修改就及其避免修改源碼;隨着系統的開發拓展,後期將沒法維護,甚至命名困難等問題。編碼

因此一般把字典放在數據庫,這樣後期的維護變動就比較簡單,也能夠在不用修改代碼的狀況下修改配置。還有,對於某些固定的數據字典(例如,星期,月份等)不容許修改。設計

可是,放在數據庫又有着頻繁訪問數據庫的問題,這不是咱們但願的,這時候一般作法就是加緩存,下降訪問數據庫的頻率。code

  1. 字典表的設計:

一般分紅兩張表來實現,一個是字典類型,一個是字典開發

  • 字典類型表: SYS_DICT_TYPE
字段名 類型 做用 備註
code varchar 編碼 主鍵
name varchar 類型 展現用
  • 字典表 : SYS_DICT
字段名 類型 做用 備註
code varchar 編碼 主鍵
type_code varchar 類型code 外鍵
name varchar 字典名 展現用
value varchar 字典值 使用值
fixed int 是不是固定的 default 0不固定,固定的話用1

以上是字典表的關鍵列和結構的設計,根據不一樣系統不一樣業務自定其餘列源碼

  1. 注意事項
  • 字典類型應該是不可編輯的,由於字典類型一般會和具體代碼實現緊密耦合,若是非要進行編輯話須要考慮到對代碼的影響以及如何保證修改以後系統正常工做
  • 字典分可編輯與不可編輯,因此在提供字典管理的時候須要注意fixed字段,針對固定的字典不提供編輯功能
  • 字典與系統參數不要混爲一談,字典一般用於一類的數據,一組具備相同含義的數值(例如,供客戶端下拉選擇的枚舉);而系統參數是針對某種配置或者某種系統常量的存在。
  1. 關於緩存

對於緩存,可能每一個人的意見不一樣,有人認爲緩存增長維護成本,一旦使用緩存,對於編輯的數據得立馬刷新緩存,否則將會與預期不符,而且對於訪問不頻繁量少的數據還達不到使用緩存的級別;有人認爲緩存提升效率,減小數據訪問。table

我的認爲,不一樣項目不一樣應用場景使用緩存的條件不一樣,對於高頻的數據或者對響應時間要求嚴格的系統能夠增長緩存,可是帶來的就是數據改動的同時須要及時更新緩存信息;對於對響應時間、業務要求較高的系統能夠不用緩存,保證業務的正確性。因此,具體狀況具體分析,沒有哪種是正確的,選擇適合的就能夠。class

相關文章
相關標籤/搜索