現在要做乙個系統,在系統中要求所有資料都是通過假刪除(邏輯刪除),即,使用乙個標誌位欄位(如isactive)來判斷該行資料是否已經被刪除,刪除資料通過update標誌位字段來實現。
但是如果通過假刪除(邏輯刪除)對資料進行「刪除」,如果設計不當,資料庫中的資料會出現冗餘或髒資料。偶想到是有如下兩個問題,希望拋磚引玉,大家一起來討論:
問題1:
如果資料表的某個字段要求唯一性約束,比如user表的name欄位,但如果設計為假刪除(邏輯刪除)的話,就不能將該字段設定為唯一性約束。但如果不將該字段設定為唯一性約束的,那麼在每次插入資料表的時候,都需要進行一次查詢,這要做是低效率的,而且在高併發的系統中,是不能保證正確性的。
解決辦法:將要求唯一性約束的字段與標誌位欄位(如isactive)設定為組合唯一性約束。
問題2:
如果某個資料表的主鍵pk被另外的乙個或多個資料表的外來鍵fk關聯,那麼在「刪除」主鍵被關聯的表中的資料時,其他引用該錶主鍵的資料表中的資料就會成為髒資料。例如:student表中有乙個classid的字段的外來鍵,關聯class表的主鍵classid,如果通過物理刪除(即,通過delete語句進行刪除,那麼資料庫系統會報錯或級聯刪除student表中的資料),但如果是通過update語句來進行對class表的資料進行「刪除」的話,那麼如果在student表中存在管理的資料,就會成為髒資料。
解決辦法:偶暫時想到的就是在「刪除」class表的資料時,再查詢一次student表,將關聯的資料一起「刪除」。但是這個解決辦法,也存在乙個問題,那就是如果與class表關聯的表比較多的話,那麼這個效率會很低,甚至有時候,不知道有哪些表與class表進行了關聯的,那麼這些表中的關聯資料就會成為髒資料
mysql刪除資料庫資料庫 MySQL刪除資料庫
刪除資料庫是指在資料庫系統中刪除已經存在的資料庫。資料庫刪除之後,原來分配的空間將被收回。需要注意的是,資料庫刪除之後該資料庫中所有的表和資料都將被刪除。因此刪除資料庫要特別小心。一 通過sql語句 mysql中,刪除資料庫通過sql語句drop database。其語法格式如下 drop data...
刪庫不必跑路,談資料庫刪除設計
凡是做業務邏輯系統,總是離不開對刪除邏輯的處理.本文論述重點是偽刪除,即欄位標示狀態,這是在一些中小型系統開發中的單據等較重要資料的主流做法.但在此之前,不妨先將常見刪除策略列舉一下 1 資料庫設定級聯 這個我沒太懂是怎麼回事,不過網上也說缺點較多,很少用到,在此就不考慮了 2 觸發器控制 本文所寫...
資料庫 資料庫的物理設計
資料庫在物理裝置上的儲存結構與訪問方法稱為資料庫的物理結構,它依賴於給定的計算機系統。為乙個給定的邏輯資料模型選取乙個最合適應用要求的物理結構的過程,稱為資料庫的物理設計。物理設計的目的是有效地實現邏輯模式,確定所採取的儲存策略。此階段是以邏輯設計的結構作為輸入,並結合具體dbms的特點與儲存裝置特...