需求是系統要記錄用戶的操作到資料庫,用戶的操作如添加用戶,編輯用戶,洗掉用戶......等。
問題1:資料庫日記表保存操作用戶的標識并且外鍵到用戶表,那我洗掉這個用戶的時候,此不是會把這個用戶的所有操作日志給洗掉掉,但是我想不洗掉,怎么做,難道把ON DELETE時NO ACTION嗎?
問題2:資料庫日記表保存操作用戶的標識,我查詢日記表時,我知道用戶的名稱,但如果這個用戶在用戶表已經洗掉了怎么辦?
希望各位做過的大佬指導一下。
uj5u.com熱心網友回復:
建議 操作日志單獨建表, 操作員名就以字串欄位直接存盤uj5u.com熱心網友回復:
你說的方法,保存操作員名的話,操作員名改變,你這日記表的名字就錯了,另外用戶操作只是傳用戶ID和操作物件的ID過來,我此不是每個介面都要查詢用戶ID和操作物件ID這么麻煩
uj5u.com熱心網友回復:
存名稱又怕名稱改了,存id又怕被刪了。其實,錯了就錯了,這是沒辦法的事。
建議,不能用外鍵同步洗掉,id和名稱都存資料庫,id存在時讀取操作員表的名稱,id不存在時讀取日志表的名稱。
uj5u.com熱心網友回復:
每個操作的ID,都從資料庫找名稱不麻煩嗎?操作日志是這樣做的嗎?
uj5u.com熱心網友回復:
你的問題并不是設計問題,而是需求不如回到這個日志本身的需求 問自己是需要一份永久的操作歷史 還是一份現存用戶的操作歷史
也許回頭看業務需求就會明白
如果你不能確定 可以采取保守一些的策略 保存所有曾經出現過的操作 比如重要的物件不允許洗掉(標記為洗掉,并且不提供完全洗掉操作)
uj5u.com熱心網友回復:
樓上正解,標記為洗掉,不是徹底洗掉,確實是比較便宜的方式,很多人也是這么做的。uj5u.com熱心網友回復:
標記為洗掉,那其實SQL用到這個用戶表的SQL就要注意排除洗掉的用戶,這改動也超多,因為有很多SQL要改
uj5u.com熱心網友回復:
這說明硬編碼導致的代碼重復很多,你可以嘗試重構這部分,例如將篩選用戶的動作封裝到一個函式中,比較將就的方式是把這種篩選放在呈現層,你也可以在洗掉的時候將被標記為洗掉的資料放到另一個表、庫中,這部分通常會是冷資料。uj5u.com熱心網友回復:
頂一下,各位做過日志的朋友指導一下你們是怎么做的。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/8990.html
標籤:數據庫
