字典表的維護


問題:

在數據庫中多處使用到了字典,現在平台需要對字典進行管理,也就是現在的字典表不再是固定的,他是可以變化的,可以增加,刪除,變更。

在刪除的時候就需要之前引用這個字典值的地方清空

比如說字典里面有個字典YY_title(頭銜),它里面有個(1,博士),專家表里面有三條數據引用了這一條字典記錄,在專家表里面只存了一個“1”,當然這個字典可以被n個業務表引用,如果說現在的頭銜里面不再使用博士這一項了,那么之前業務表里面存的“1”自然是要置空的,現在的問題是怎么通過字典找到引用他的業務表?

  

實際場景:

    

解決方案:

  新建關聯表(中性表),關系表的結構如下圖:【中間過程,有問題,正確結構圖在下面】

 

對關聯表的操作放在業務表的處理過程中:

  (1)增加記錄:在業務表新增記錄的時候就新建一條關系記錄,並將關系表的id存在業務表中

  (2)修改記錄:在業務表中修改(添加)存放的值的時候,修改關系表中的字典的值

 應用過程出現的問題:

(1)在我將某個標簽(字典值)刪除的時候,需要將引用其的業務項的該字段置空:

    UPDATE ${param1} SET ${param2} = '' WHERE id = #{param3}

這段代碼理論上是沒有問題的,執行結果也對。

但是!!!接下來在查詢引用該字段的業務項的數量時發現結果竟然不是零!!代碼如下

    SELECT count(id) FROM zgl_dictlink a WHERE a.dicttype= 'yy_title' and a.dictvalue= '0'

這段代碼理論上是也沒有問題的,那么是什么原因導致的這個現象?

  仔細分析下,原來是數據庫結構設計的有問題!有冗余。。

  既然在字典的關系表中標明了使用到的表名,字段名,實體id,又為什么要在業務表中添加字典聯系表的id呢。所以說這個id是多余的。

 

 

    

該方案的缺點:

優化:

  (1)這可以在字典值表中新加個調用次數字段,用於統計被調用次數。(在沒有使用中性表的時候這種方法對於統計調用次數是非常有效的,當然在使用了中性表后,調用次數可以直接的中性表中查詢)

  (2)緩存。這個現在知識一個想法,具體實現之后再補充。。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM