數(shù)據(jù)庫最基本的增刪改查敦锌,一套最基本的完整的流程:數(shù)據(jù)的創(chuàng)建-->數(shù)據(jù)的修改-->數(shù)據(jù)刪除馒疹,其中數(shù)據(jù)的刪除,又分為邏輯刪除和物理刪除乙墙。
那么什么是邏輯刪除颖变,物理刪除呢,他們又有什么區(qū)別听想,在軟件設計過程中為什么有些數(shù)據(jù)只能設計成邏輯刪除腥刹,不能物理刪除?
簡單的說:作為用戶汉买,在軟件上將數(shù)據(jù)刪除衔峰,而實際上在數(shù)據(jù)庫中沒有刪除,只是從用戶層顯示數(shù)據(jù)已經(jīng)刪除了蛙粘。而物理刪除朽色,用戶在軟件上將數(shù)據(jù)刪除了,數(shù)據(jù)庫中的數(shù)據(jù)也被徹底的刪除了组题。
邏輯刪除/物理刪除
舉一個例子葫男,關于訂單的刪除,你是一個淘寶買家用戶崔列,你在淘寶上購買了一件商品梢褐,付款成功,并且也收到貨赵讯,確認收貨了盈咳,整個訂單的狀態(tài)已經(jīng)完成了,你把這個訂單刪除了边翼,這時候的刪除只是邏輯刪除了鱼响。也就是數(shù)據(jù)庫中,這個訂單還是存在组底,但是你手機上不會顯示這個訂單了丈积。為什么數(shù)據(jù)庫中的訂單還是存在筐骇,不一并刪除了?這就設計到數(shù)據(jù)的關聯(lián)問題:
這個訂單是你下單江滨,支付成功并完成刪除動作铛纬,沒有錯,單單從你的角度考慮唬滑,它已經(jīng)完成了告唆。我們先不考慮系統(tǒng)層面為什么不能刪除,1 從賣家角度考慮晶密,賣家要統(tǒng)計他的銷售情況擒悬,不能因為買家將訂單刪除了,這條訂單就不統(tǒng)計了吧稻艰,2 從商品角度考慮茄螃,a,商品是有商品庫存的连锯,例如100件商品归苍,你購買了一件,變成99件运怖;b 商品的評分評星拼弃。等等。3 從物流的角度考慮摇展,由于訂單是訂單吻氧,物流單是物流單,但是物流單和訂單是有關聯(lián)的咏连,且不討論是單項關聯(lián)還是雙向關聯(lián)盯孙,把訂單刪除了,物流單關聯(lián)訂單為null祟滴,這時候是不是會報錯呢振惰。等等各方面因數(shù),以及后期新功能的開發(fā)垄懂,牽連到訂單骑晶,都會受到影響。
那有人會說草慧,那我設計系統(tǒng)桶蛔,所有的數(shù)據(jù)均設計為邏輯刪除,不是可以了漫谷,從邏輯上講仔雷,是的,但是有些又可以物理刪除,比如你創(chuàng)建一個數(shù)據(jù)碟婆,這條數(shù)據(jù)沒有和他的業(yè)務有關聯(lián)电抚,僅僅是一條數(shù)據(jù),這時候刪除脑融,就可以物理刪除了,有人會問缩宜,系統(tǒng)設計肘迎,數(shù)據(jù)都是有關聯(lián)的,如果沒有關聯(lián)锻煌,就不是系統(tǒng)了妓布,是的,我是說這條數(shù)據(jù)還沒和他其他業(yè)務有關聯(lián)宋梧,不代表沒有關聯(lián)匣沼,一旦數(shù)據(jù)關聯(lián)了,有時候邏輯刪除都不行的捂龄,例如一級目錄释涛,二級目錄,而且目錄已經(jīng)和其他業(yè)務產(chǎn)生了關聯(lián)關系倦沧,這時候要刪除一級目錄唇撬,由于二級目錄是寄托在一級目錄下的,所以一級目錄連邏輯刪除都不可以展融,刪除了窖认,二級目錄就沒有了寄托了哈
談一談本地刪除和云端刪除
舉一個的例子:現(xiàn)在很多人會把通訊錄備份到云端,在換手機的時候告希,已經(jīng)從云端同步下來即可扑浸,在刪除通訊錄聯(lián)系人的時候,手機經(jīng)逞嗯迹回提示喝噪,是否要同步刪除云端數(shù)據(jù),如果同步刪除指么,則是云端刪除仙逻。此時有人會問,本地刪除涧尿,云端也刪除了系奉,是不是就是邏輯刪除呢。不一定姑廉,看系統(tǒng)是如何設計缺亮,如果還是設計成物理刪除,那么數(shù)據(jù)庫中你的數(shù)據(jù)其實還是存在的,所以云端刪除和物理刪除沒有直接的關系萌踱。
再談一談后臺產(chǎn)品關于禁用的概念
禁用又是什么葵礼,禁用后又可以啟用,這里在對賬號體系經(jīng)常用到并鸵,由于賬號關聯(lián)的東西很多鸳粉,所以賬號在原則上設計是不能物理刪除的(這里強調(diào)是原則上,由于又有賬號注銷一說园担,所以賬號不是不能物理刪除的)賬號用來禁用啟用届谈,限用時段,例如你在用一個系統(tǒng)弯汰,由于現(xiàn)實因數(shù)艰山,你不能在用這個系統(tǒng)了,系統(tǒng)管理員要把你賬號封了咏闪,這時候就是禁用操作曙搬,禁用后不可登。為什么不能物理刪除鸽嫂,前文已經(jīng)說過了纵装,那么為什么這時候賬號是禁用,而不是邏輯刪除了据某,因為存在一種場景搂擦,你后面又回來了,又要用這個賬號哗脖,從業(yè)務角度瀑踢,你用之前的賬號才是對的,而不是重新在鍵一個新的賬號才避。禁用后一鍵啟用就可以了橱夭。另外就是to c 產(chǎn)品禁用到的禁用時段,比如大家經(jīng)常玩的王者榮耀桑逝,賬號被限制1小時不能玩棘劣,這時候就是對你賬號禁用一小時,一小時后重新恢復正常楞遏。
說了這么多茬暇,產(chǎn)品在設計的時候,什么情況下考慮物理刪除寡喝,什么情況下考慮邏輯刪除糙俗,以及本地刪除和云端刪除,需要從整個系統(tǒng)層面考慮预鬓,刪除后會影響什么業(yè)務巧骚,另外在不確定的情況線下,不要輕易物理刪除,因為后期也可能會關聯(lián)到劈彪,這些后端開發(fā)會考慮到的竣蹦,但是作為一個產(chǎn)品,要懂得刪除這些道理沧奴,不要被后端認為一個小白痘括,只會提“無腦需求”,這樣一來滔吠,溝通也好了纲菌,業(yè)務的開展也方便了。
關于賬號注銷
最后的最后屠凶,聊一下關于賬號的注銷驰后,好像國家有規(guī)定肆资,用戶可以創(chuàng)建賬號矗愧,也可以自行注銷賬號,像qq郑原,支付寶等均有賬號注銷功能唉韭,那么賬號注銷,從用戶角度犯犁,徹底清空了賬號了属愤,他還物理刪除呢,還是邏輯刪除呢酸役?注意這是國家規(guī)定的一個方面住诸,目前市面上大部分的產(chǎn)品是沒有注銷功能的,不用不管不登錄就好了放坏。這...關于賬號的注銷又何去何從....