如何讓開發(fā)明白,空≠0?

9 評論 3199 瀏覽 28 收藏 9 分鐘

“空”和“0”在賦值上有完全不同的適用范圍,在一開始,產品端應該格外注意字段的限制,能夠提高產品開發(fā)效率。

作為一個產品經理,從來不會把“空”等同于“0”來看待,在寫原型的時候也不會特意強調,這是“空”,不是“0”。

兩個毫不相關的東西,為什么要去解釋一遍無關性呢?就好比人和狗,為什么要去說明人不是狗,狗不是人?

直到產品驗收時,看到了那些0……

讓產品抓狂的0

案例1:月經生育史

先來看個月經史、生育史的例子。

醫(yī)生還未寫病歷,這些“0”就已經默認寫上了,這也就罷了,一個個刪除,然后保存;回頭一看,“0”全都出來了。

一下子崩潰了,問開發(fā):初潮0歲,你見過生下來就來大姨媽的嗎?月經周期0天,你見過365天,天天來大姨媽的嗎?

開發(fā)小哥很委屈:我又不懂這些是什么意思。

想想這好像也不能怪他們,畢竟還是單身。

案例2:預約次數限制

這是微信預約的限制,用來限制每個微信id一天可預約的次數。

當我打開設置時,發(fā)現(xiàn)默認值就是0,刪了保存還是0。這應該有常識了吧,問開發(fā):所有人都不能預約,那預約功能的意義在哪?我要的是“空”,不是“0”。

開發(fā)小哥哥又委屈了:數據庫又不能存空,空就是0啊。

也確實是難為他們了,一方說我要空,一方又不讓為空。

案例3:積分規(guī)則設置

做過電商的朋友對積分都不陌生,消費后贈送積分,再次消費時抵扣積分。

當我打開頁面設置時,也是滿眼的0。問開發(fā):都是0,設置和不設置有什么區(qū)別?這功能都沒有用。

這回開發(fā)小哥哥有理了:既然“空”和“0”沒影響業(yè)務,顯示著也沒問題啊。

好像挺有道理,怎么就隱隱透著些傻氣呢。

開發(fā)怎么看“空”

產品經理眼里的“空”,怎么就成了開發(fā)眼里的“0”了呢?但是,也不是所有的空,都顯示成了“0”啊,比如填寫聯(lián)系人和聯(lián)系電話的地方,都沒有顯示0。

為此,我去采訪了一下開發(fā)小哥哥,發(fā)現(xiàn)了其中的原因。

每一個字段都是有一個類型的,常用的是:

  1. 字符型數據:包括中文字符、英文字符、數字字符和其他ASCⅡ字符。就像上面的聯(lián)系人就是這種文本類型,可以輸入中文姓名。數據庫默認值就是空字符串,即“”。
  2. 數值型數據:只可由數字、小數點、正負號和表示乘冪的字母E組成,不能輸入中英文字符。就像上面的經期就是這種數值類型。數據庫不能存空,必須存入一個確定的值,故開發(fā)常常把空存成0。

既然字符型數據能支持數字,為什么不都存成字符型數據呢?不就沒有0的那個問題了嗎?

從開發(fā)角度來說,原因有好多,說個我們比較關注的:字符類型往往比數字類型占用更多的存儲,而更多的存儲空間消耗會導致查詢性能變慢,就是系統(tǒng)很卡。

為了使有限的存儲空間發(fā)揮最大的能效,我們有必要把字符類型和數值類型分開,那怎么做才能讓開發(fā)不直接把空當0呢?

讓開發(fā)分清空和0的法則

明確數據類型

產品經理是最熟悉業(yè)務的,每個字段可能填寫什么內容,都會有一個深入的理解。那在寫原型的時候,就需要針對每個字段可填寫內容的類型做個明確的標識,哪些是文本,哪些是數值。

比如說上面的字段:

這樣至少能保證文本類型的地方不會出現(xiàn)0,下面重點關注數值類型就可以了。

明確數值范圍

我們會發(fā)現(xiàn),有的地方空=0是沒有問題的,比如說初潮,因為0不在數據范圍內,數據庫存了0前端不顯示出來就可以了,不會引起誤解。

但有的地方空=0就會發(fā)生錯誤,比如說生育史里面的足月產,意思是足月生育了幾個孩子,那填寫0是完全合理的;如果空就是0,那填了0也會被認為是空。

我們可以給每個數值一個范圍,這樣開發(fā)在賦值的時候,就知道哪些值不能用了。

比如上面的字段:

明確空的定義

空其實是有很大的想象空間的,有時候代表無限大。比如說預約次數的顯示,不填就是不限制預約次數,任意次都可以。

有時候代表未知。比如說足月產,你沒法知道這個人到底生了幾個孩子,不能隨便給一個值。數據庫需要給這個未知賦一個值,但肯定不能是0了。這空值也不能保存進去,在其他相關的地方顯示出來。

有時候就代表0。就像積分累積規(guī)則,0就代表沒有積分活動。

空具體的值不需要我們定義,但我們需要告訴開發(fā)這個空值的含義是什么。

比如說上面的字段:

可以和開發(fā)約定一個整體的規(guī)則,“空”=999999,999999是系統(tǒng)里面肯定不會出現(xiàn)的正常業(yè)務數據,用這個代替不會出現(xiàn)像0那樣的異議。

當然,一些特殊的字段,還需要單獨去處理,比如說預約次數限制,最大值就是999,空只能代表最大的999。

明確空回顯內容

最后要和開發(fā)強調一點:不管哪個功能下的“空”,不管“空”的含義是什么,也不管給“空”賦了什么值;既然是空,頁面上千萬別回顯出內容來,千萬不要隨處可見的“0”。

我們要的就是空!

總結

空和0的問題,是產品很容易忽視的問題,卻是很容易和開發(fā)引起爭執(zhí)的問題。

我們在寫需求文檔的時候,需要格外注意數值型字段的取值范圍和空值含義。提前告知開發(fā),就能避免很多數據錯誤的情況,提高產品開發(fā)質量。

 

本文由 @辰陽 原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載

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

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 開發(fā)有時,為了省事確實會這樣做。然影響又不大,不好說什么….

    來自湖北 回復
  2. 直接說空就是空,不能展示0,不就ok了嗎

    回復
  3. 太基礎了,字段數據類型和默認值定義清楚是基本功

    回復
  4. 空即是色

    回復
  5. 笑出聲??

    回復
  6. 深有感觸

    回復
  7. 開發(fā)不明白?其實都是裝死而已,空和0的含義開發(fā)比你都清楚

    回復
  8. 回復
  9. 數值型類型為空可以用null,””和null的定義是不一樣的為什么非要用0代替?

    來自山東 回復