4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

1 評論 8576 瀏覽 63 收藏 17 分鐘

數(shù)據(jù)庫對于產(chǎn)品經(jīng)理來說是一個既熟悉又陌生的概念,雖然產(chǎn)品設(shè)計中的數(shù)據(jù)基本都要與數(shù)據(jù)庫交互,但平時的工作中也很少接觸到數(shù)據(jù)庫的具體操作和細(xì)節(jié)。本文作者通過4個數(shù)據(jù)庫語句,介紹了數(shù)據(jù)庫對產(chǎn)品數(shù)據(jù)增、刪、改、查設(shè)計的指導(dǎo)意義,希望能給你帶來幫助。

都說產(chǎn)品經(jīng)理要懂?dāng)?shù)據(jù)庫,那么今天就通過4個數(shù)據(jù)庫語句,來講講了解數(shù)據(jù)庫對產(chǎn)品數(shù)據(jù)增、刪、改、查設(shè)計的指導(dǎo)意義。

數(shù)據(jù)庫,對于產(chǎn)品經(jīng)理來說,是一個既熟悉又陌生的概念。熟悉是因為產(chǎn)品設(shè)計中的數(shù)據(jù)基本都需要與數(shù)據(jù)庫交互,陌生是因為平時工作中很少接觸到數(shù)據(jù)庫的具體操作和細(xì)節(jié)。但是,了解一些數(shù)據(jù)庫的基本知識和常用語句,可以幫助產(chǎn)品經(jīng)理更好地理解數(shù)據(jù)的來源和流向,更有效地溝通數(shù)據(jù)需求和問題,更快速地驗證數(shù)據(jù)分析的結(jié)果。因此,產(chǎn)品經(jīng)理需要懂得一定的數(shù)據(jù)庫知識,才能更好地發(fā)揮數(shù)據(jù)在產(chǎn)品設(shè)計中的價值。

我們先通過一張圖來簡單了解一下數(shù)據(jù)庫是什么。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

數(shù)據(jù)庫是一種用于存儲和管理數(shù)據(jù)的軟件系統(tǒng)。數(shù)據(jù)庫中的數(shù)據(jù)通常按照一定的結(jié)構(gòu)組織,形成表(table)和字段(field)。表是數(shù)據(jù)的集合,字段是數(shù)據(jù)的屬性。訪問用戶(user)是指可以對數(shù)據(jù)庫進(jìn)行操作的人或程序,例如查詢、插入、修改或刪除數(shù)據(jù)。訪問用戶需要通過數(shù)據(jù)庫管理系統(tǒng)(DBMS)來連接數(shù)據(jù)庫,并遵循數(shù)據(jù)庫的安全規(guī)則和權(quán)限設(shè)置。

了解以上的信息,我們就可以進(jìn)入正題了。

一、INSERT INTO

INSERT INTO table_name VALUES(value1,value2,value3);

以上是數(shù)據(jù)庫的插入語句,它表示往指定的數(shù)據(jù)表中新增一條新數(shù)據(jù),它對應(yīng)的前端操作就是用戶在系統(tǒng)中的“新建”操作,比如便簽應(yīng)用中新建一條新便簽,或者電商平臺中提交一筆新訂單等。

數(shù)據(jù)庫插入語句的執(zhí)行效率受多種因素的影響,其中最主要的有數(shù)據(jù)量和操作的數(shù)據(jù)表數(shù)量。數(shù)據(jù)量越大,插入語句需要處理的數(shù)據(jù)越多,因此執(zhí)行時間也會越長。操作的數(shù)據(jù)表數(shù)量也會影響插入語句的效率,因為每個數(shù)據(jù)表都需要進(jìn)行索引更新、約束檢查等操作,這些操作會消耗系統(tǒng)資源和時間。

因此,產(chǎn)品經(jīng)理在設(shè)計需要收集數(shù)據(jù)量較多的表單的時候,一般建議做分步填寫保存。例如以下某網(wǎng)站的認(rèn)證流程。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

分步填寫保存的好處是:

  • 填寫內(nèi)容分散,不會讓用戶因為在一個頁面看到需要填寫太多內(nèi)容而覺得恐慌和焦慮。用戶可以按照自己的節(jié)奏和順序,逐步完成所需信息的填寫。
  • 如用戶因為網(wǎng)絡(luò)問題等被迫中斷填寫,已經(jīng)填寫的數(shù)據(jù)會進(jìn)行保存,不需要用戶重新填寫。用戶可以隨時回到上一步或跳到下一步,繼續(xù)之前的操作。
  • 將所有的數(shù)據(jù)分散插入到數(shù)據(jù)庫,數(shù)據(jù)量小,提升插入語句的執(zhí)行效率。數(shù)據(jù)庫可以更快地處理和存儲用戶的數(shù)據(jù),避免出現(xiàn)延遲或錯誤。
  • 開發(fā)設(shè)計時,可以根據(jù)業(yè)務(wù)劃分不同的數(shù)據(jù)庫表,每步只操作對應(yīng)的表,減少一次性對多個數(shù)據(jù)庫表進(jìn)行操作。這樣可以簡化開發(fā)流程,提高代碼質(zhì)量和可維護(hù)性。

二、DELETE

DELETE FROM table_name;

以上是數(shù)據(jù)庫的刪除語句,它表示從指定的數(shù)據(jù)表中刪除數(shù)據(jù)。它對應(yīng)的前端操作就是用戶在系統(tǒng)中的“刪除”操作。比如刪除便簽、刪除訂單等。

刪除無論對于什么樣的系統(tǒng),都是一個危險操作,一般刪除后的數(shù)據(jù)都無法找回,是一個不可逆的操作,因此要求產(chǎn)品經(jīng)理在設(shè)計刪除操作功能時,需要盡可能讓用戶意識到此操作的危險性,引起用戶的關(guān)注,關(guān)于這塊,有興趣的用戶可以參閱:《誰動了我的文案:一個刪除確認(rèn)文案,難倒多少產(chǎn)品大漢》。

以上說的是傳統(tǒng)的“硬刪除”操作,后來隨著人們對數(shù)據(jù)越來越重視,對于在數(shù)據(jù)庫中刪除數(shù)據(jù)的行為慎之又慎,因此出現(xiàn)了一種新的操作,叫做“軟刪除”。

軟刪除是一種數(shù)據(jù)保護(hù)技術(shù),它可以使數(shù)據(jù)在被刪除后仍然保留在數(shù)據(jù)庫中,但對用戶不可見。軟刪除的好處是可以恢復(fù)誤刪的數(shù)據(jù),或者進(jìn)行數(shù)據(jù)分析和審計。軟刪除的實現(xiàn)方法有多種,例如使用標(biāo)記字段、使用時間戳、使用單獨的表等。

換句話說,軟刪除是“假刪除”,并不是真正意義上的刪除數(shù)據(jù),而是將要刪除的數(shù)據(jù)標(biāo)記為“已刪除”的狀態(tài),在前端查詢的時候,這些數(shù)據(jù)不會被查出來,從用戶的角度來看,這條數(shù)據(jù)就是已經(jīng)刪除掉了。

軟刪除有以下好處:

  • 可以恢復(fù)誤刪的數(shù)據(jù),提高數(shù)據(jù)安全性。
  • 可以保留數(shù)據(jù)的歷史記錄,便于分析和審計。
  • 可以避免數(shù)據(jù)完全刪除后造成的外鍵約束或級聯(lián)刪除問題。

同時也有以下弊端:

  • 占用額外的存儲空間,可能影響數(shù)據(jù)庫性能。
  • 增加查詢和更新的復(fù)雜度,需要考慮標(biāo)記字段的條件。
  • 可能導(dǎo)致數(shù)據(jù)不一致或冗余,需要定期清理或歸檔。

因此,產(chǎn)品經(jīng)理應(yīng)該根據(jù)不同的業(yè)務(wù)場景來區(qū)分哪些數(shù)據(jù)應(yīng)該軟刪除,哪些數(shù)據(jù)可以硬刪除,不應(yīng)該“一刀切”地全部做成軟刪除或硬刪除的設(shè)計。

三、UPDATE

UPDATE table_name SET column1=value1,column2=value2;

以上是數(shù)據(jù)庫的更新語句,它表示將數(shù)據(jù)表中的目標(biāo)字段內(nèi)容修改為指定的內(nèi)容。它對應(yīng)的前端操作就是用戶在系統(tǒng)中的“修改”或“更新”操作。比如修改便簽內(nèi)容,或更新訂單狀態(tài)等。

更新語句的執(zhí)行效率和插入語句一樣,主要受限于更新的數(shù)據(jù)量和操作的數(shù)據(jù)表數(shù)量,同時也受限于每條語句需要更新的字段數(shù)量。因此,產(chǎn)品經(jīng)理在設(shè)計修改功能的時候,建議與“新建”一樣,考慮按照業(yè)務(wù)或信息屬性分開修改。

如下圖是某平臺個人中心的界面截圖,常規(guī)資料、密碼設(shè)置、更多資料分別在不同的標(biāo)簽中填寫和保存,而不是全部放在一個長頁面中進(jìn)行修改。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

下圖是另外一個平臺個人中心的界面截圖,也是相似的設(shè)計,不過這個平臺的設(shè)計更加激進(jìn),是按每個字段分開修改的,這種操作效率比較低,但針對個人資料的修改,倒是無傷大雅,畢竟個人資料這些信息,一旦填寫之后,基本不會修改或很少修改,修改時也只是修改其中的某個信息,但在其他的業(yè)務(wù)場景下,采用這種設(shè)計時需要謹(jǐn)慎,一般建議按業(yè)務(wù)模塊或信息屬性分類修改,像這種按字段分開修改的設(shè)計,只適用于字段較少的場景。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

更新語句的執(zhí)行效率也受單個語句更新的字段數(shù)量影響,我們都知道,在進(jìn)行修改操作的時候,系統(tǒng)都會先將之前的數(shù)據(jù)讀取出來并讓用戶在此基礎(chǔ)上進(jìn)行修改并保存。

如下圖,一般情況下,我們在修改信息的時候,哪怕只是改了其中某個字段的某個字,但系統(tǒng)在執(zhí)行更新語句時,卻需要更新全部字段,這個過程對用戶而言是沒有感知的,而對系統(tǒng)卻是實實在在花費了時間去執(zhí)行,如果更新的字段足夠多,用戶也會有明顯的感知:明明我只改了一個字,為什么還是需要保存那么長時間?

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

因此,在某些修改信息的場景下,產(chǎn)品經(jīng)理也會要求研發(fā)工程師先判斷哪些字段是被用戶修改過的,針對沒有修改過的字段,在執(zhí)行更新語句時,就不更新對應(yīng)字段的數(shù)據(jù)。當(dāng)然,對字段是否被修改進(jìn)行判斷,也會花費一定的時間,所以,產(chǎn)品經(jīng)理應(yīng)事先與研發(fā)工程師經(jīng)過溝通后,再確定具體使用什么樣的方案更合適。

四、SELECT

SELECT * FROM table_name;

以上是數(shù)據(jù)庫的查詢語句,它表示從指定數(shù)據(jù)表中查詢所有數(shù)據(jù)。它對應(yīng)的前端操作不一定是用戶在系統(tǒng)中進(jìn)行搜索,比如進(jìn)入訂單頁面就會看到所有訂單,這個時候雖然用戶沒有進(jìn)行搜索,但是系統(tǒng)依然需要在數(shù)據(jù)庫中查詢出訂單數(shù)據(jù)。

查詢是系統(tǒng)中最常用的操作,我們在系統(tǒng)中看到的所有來自數(shù)據(jù)庫的數(shù)據(jù)都是通過查詢得到的。以上提到的3個語句也經(jīng)常要跟查詢語句一起用,比如注冊賬號時,在往數(shù)據(jù)庫添加新的賬號信息前,需要先查詢賬號存不存在;修改和刪除數(shù)據(jù)時,需要先從數(shù)據(jù)庫中查詢到目標(biāo)數(shù)據(jù),才能夠進(jìn)行修改和刪除操作。

查詢同樣受限于數(shù)據(jù)量、查詢的數(shù)據(jù)表以及查詢的字段數(shù)量,產(chǎn)品經(jīng)理在設(shè)計查詢功能時,要求根據(jù)業(yè)務(wù)只查詢必要的字段,而不是動不動就一次性將數(shù)據(jù)表中所有的字段都查出來。比如我們可以看到很多電商平臺的訂單列表,進(jìn)入訂單列表的時候,我們并不是看到訂單的所有信息,而是訂單的簡要信息,比如訂單號、金額、產(chǎn)品名稱和封面圖等,當(dāng)我們點擊訂單之后,才會看到更多的信息,比如地址、物流、付款方式、價格組成、發(fā)票、各個節(jié)點的時間等。

另一方面,產(chǎn)品經(jīng)理設(shè)計查詢功能時,應(yīng)盡可能減少聚合搜索的設(shè)計。

如下圖所示某業(yè)務(wù)平臺的訂單搜索模塊,該平臺通過一個搜索框,就可以對訂單的多個信息進(jìn)行搜索,在這種情況下,當(dāng)用戶進(jìn)行搜索的時候,系統(tǒng)需要同時對多個字段進(jìn)行查詢,甚至可能要同時對多個數(shù)據(jù)表進(jìn)行查詢,這種查詢是非常耗費資源和時間的操作。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

設(shè)計時,建議采用下圖這種,將每個字段分開,只查詢用戶輸入了內(nèi)容的條件,并且每個輸入框只針對某個數(shù)據(jù)表的某個字段進(jìn)行搜索,比如用戶只輸入了手機號,系統(tǒng)就只需要查詢手機號這個字段,可以有效提升搜索效率,并且減輕服務(wù)器的負(fù)擔(dān)。

4個數(shù)據(jù)庫語句,帶你了解產(chǎn)品數(shù)據(jù)的增刪改查應(yīng)該怎么設(shè)計

當(dāng)然,這并非說聚合搜索就是不可取的,相反,它對提升用戶的體驗有非常好的效果,所以需要根據(jù)場景進(jìn)行設(shè)計。一般建議 B 端的產(chǎn)品盡可能減少聚合搜索;C 端產(chǎn)品,在適當(dāng)?shù)奈恢每梢圆捎镁酆纤阉?;而移動端的產(chǎn)品設(shè)計,基本上都會優(yōu)先考慮采用聚合搜索,因為移動端屏幕小,展示一堆的查詢條件對用戶來講體驗非常糟糕,但是,在設(shè)計查詢條件時,還是要根據(jù)實際的業(yè)務(wù)場景,盡可能減少聚合搜索的字段數(shù)量和數(shù)據(jù)表數(shù)量。

五、WHERE

通過以上4個語句,我們已經(jīng)把產(chǎn)品數(shù)據(jù)中的增、刪、改、查都講完了,但以上所講到的內(nèi)容,還缺少一個關(guān)鍵,就是“約束”。

新增數(shù)據(jù)時沒有約束,就會往數(shù)據(jù)庫添加相同的數(shù)據(jù),如果是在注冊場景下,沒有增加判斷注冊賬號是否存在的約束,那么就會出現(xiàn)相同的賬號;

刪除數(shù)據(jù)時沒有約束,就會將整個數(shù)據(jù)表中的所有數(shù)據(jù)刪除掉;

修改數(shù)據(jù)時沒有約束,就會將整個數(shù)據(jù)表中的所有數(shù)據(jù)都改成相同的值;

查詢數(shù)據(jù)時沒有約束,會影響數(shù)據(jù)的查詢速度和查詢時間。

對于數(shù)據(jù)庫語句而言,這個“約束”,就是“WHERE”,一個語句后面帶上“WHERE”,表示是這個語句執(zhí)行的約束條件。

比如下方的語句表示刪除 ID = 1 的數(shù)據(jù):

DELETE FROM table_name WHERE ID = 1;

如果沒有添加這個約束條件,那么執(zhí)行刪除語句的時候,就會將整個數(shù)據(jù)表內(nèi)的數(shù)據(jù)刪除掉,可想而知,這個后果是多么嚴(yán)重。

因此,產(chǎn)品經(jīng)理在進(jìn)行與產(chǎn)品數(shù)據(jù)交互有關(guān)的設(shè)計時,一定要在需求文檔中寫清楚約束條件,比如新增數(shù)據(jù)時,哪些情況下不允許新增。如果沒有這些約束條件,對數(shù)據(jù)而言,造成的后果,可能是災(zāi)難性的。

以上便是本文全部內(nèi)容,感謝閱讀。

專欄作家

產(chǎn)品錦李,公眾號:產(chǎn)品錦李(ID:IMPM996),人人都是產(chǎn)品經(jīng)理專欄作家。不務(wù)正業(yè)的產(chǎn)品經(jīng)理和他的產(chǎn)品設(shè)計。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. b端產(chǎn)品對數(shù)據(jù)庫操作了解深入一些

    來自廣東 回復(fù)