- 為什么字典表?
存在問題:
某些變量在多個(gè)地方使用绢要,而且一般是固定的吏恭,但是隨著系統(tǒng)升級(jí)和后期變化,可能需要改變重罪,如果這些變量寫死在代碼里面將會(huì)變得難以維護(hù)樱哼,所以要將其從代碼中抽離出來。
一般的業(yè)務(wù)系統(tǒng)客戶端與用戶交互的時(shí)候都會(huì)使用
下拉框
組件蛆封,對(duì)于某些比較固定的值的下拉組件的數(shù)據(jù)來源一般都是比較固定的一類數(shù)值唇礁。
如何解決
有的做法是使用枚舉或者Constants常量類來實(shí)現(xiàn),這種情況下在量少的前提是沒問題的惨篱,而且一旦需要修改就及其避免修改源碼盏筐;隨著系統(tǒng)的開發(fā)拓展,后期將無法維護(hù)砸讳,甚至命名困難等問題琢融。
所以通常把字典放在數(shù)據(jù)庫(kù),這樣后期的維護(hù)變更就比較簡(jiǎn)單,也可以在不用修改代碼的情況下修改配置簿寂。還有漾抬,對(duì)于某些固定的數(shù)據(jù)字典(例如,星期常遂,月份等)不允許修改纳令。
但是,放在數(shù)據(jù)庫(kù)又有著頻繁訪問數(shù)據(jù)庫(kù)的問題克胳,這不是我們希望的平绩,這時(shí)候通常做法就是加緩存,降低訪問數(shù)據(jù)庫(kù)的頻率漠另。
- 字典表的設(shè)計(jì):
通常分成兩張表來實(shí)現(xiàn)捏雌,一個(gè)是字典類型
,一個(gè)是字典
- 字典類型表:
SYS_DICT_TYPE
字段名 | 類型 | 作用 | 備注 |
---|---|---|---|
code | varchar | 編碼 | 主鍵 |
name | varchar | 類型 | 展示用 |
- 字典表 :
SYS_DICT
字段名 | 類型 | 作用 | 備注 |
---|---|---|---|
code | varchar | 編碼 | 主鍵 |
type_code | varchar | 類型code | 外鍵 |
name | varchar | 字典名 | 展示用 |
value | varchar | 字典值 | 使用值 |
fixed | int | 是否是固定的 | default 0 不固定笆搓,固定的話用1
|
以上是字典表的關(guān)鍵列和結(jié)構(gòu)的設(shè)計(jì)性湿,根據(jù)不同系統(tǒng)不同業(yè)務(wù)自定其他列
- 注意事項(xiàng)
- 字典類型應(yīng)該是不可編輯的,因?yàn)樽值漕愋屯ǔ?huì)和具體代碼實(shí)現(xiàn)緊密耦合满败,如果非要進(jìn)行編輯話需要考慮到對(duì)代碼的影響以及如何保證修改之后系統(tǒng)正常工作
- 字典分可編輯與不可編輯肤频,所以在提供字典管理的時(shí)候需要注意
fixed
字段,針對(duì)固定的字典不提供編輯功能 - 字典與系統(tǒng)參數(shù)不要混為一談算墨,字典通常用于一類的數(shù)據(jù)宵荒,一組具有相同含義的數(shù)值(例如,供客戶端下拉選擇的枚舉);而系統(tǒng)參數(shù)是針對(duì)某種配置或者某種系統(tǒng)常量的存在骇扇。
- 關(guān)于緩存
對(duì)于緩存,可能每個(gè)人的意見不同面粮,有人認(rèn)為緩存增加維護(hù)成本少孝,一旦使用緩存,對(duì)于編輯的數(shù)據(jù)得立馬刷新緩存熬苍,不然將會(huì)與預(yù)期不符稍走,并且對(duì)于訪問不頻繁量少的數(shù)據(jù)還達(dá)不到使用緩存的級(jí)別;有人認(rèn)為緩存提高效率柴底,減少數(shù)據(jù)訪問婿脸。
個(gè)人認(rèn)為,不同項(xiàng)目不同應(yīng)用場(chǎng)景使用緩存的條件不同柄驻,對(duì)于高頻的數(shù)據(jù)或者對(duì)響應(yīng)時(shí)間要求嚴(yán)格的系統(tǒng)可以增加緩存狐树,但是帶來的就是數(shù)據(jù)改動(dòng)的同時(shí)需要及時(shí)更新緩存信息;對(duì)于對(duì)響應(yīng)時(shí)間鸿脓、業(yè)務(wù)要求較高的系統(tǒng)可以不用緩存抑钟,保證業(yè)務(wù)的正確性。所以野哭,具體情況具體分析在塔,沒有哪一種是正確的,選擇適合的就可以拨黔。