狀態值使用具語意的字串,不使用數字代碼。
在設計訂單資料庫欄位的時候,狀態這個欄位應該使用哪一種資料型態呢?答案是統一使用 varchar,也就是字串來表達狀態。
我看過很多團隊會使用 integer 或 tiny integer 這種方式來表達。很常見的就是用 0、1、2、3、4、5 代表訂單生命週期的不同狀態,然後在程式碼裡面做一個 mapping,表示 0、1、2、3、4、5 分別是什麼。
也有團隊會說,有些狀態是訂單已經失去意義了,他們會用 -1、-2、-3、-4 來表達。也有團隊擔心擴充性,所以會用 10、20、30、40、50 來表達,想說未來有必要的話,可以在數字之間加狀態。
我的經驗是,這些做法通通都不好,都不要。直接用 varchar 來表達就可以了。
原因是,那些用數字來表達的方式,是古早時代硬碟成本比較貴的時候,為了省容量才這樣做。現在不管是用雲端主機還是自己的主機,硬碟容量已經不算什麼成本了。
所以,用字串來表達,系統比較好維護,也比較好擴充。你要加狀態的時候,不用擔心數字之間插不進去,因為你就是字串而已。
在程式碼裡、在資料庫裡,你直接打開資料庫查資料的時候,那一筆訂單資料現在到底是什麼狀態,一目了然,都不需要 mapping。這是比較好的做法。
舉個例子,orders 如果有 status 這個欄位,它可能的值就是:draft、open、completed、cancelled。光這樣就夠清楚了。
你寫程式的時候也方便。你在做後台面板的時候,一堆地方,包括後台面板,甚至前台給顧客看的地方,就算你寫程式的時候偷懶,直接把 DB value print 出來,他們大概都看得懂。
後台人員看到那些英文單字,就算沒有把它對應成一個好讀的中文狀態,他可能都看得懂。前台給顧客用的面板,如果有地方偷懶,還是有 bug 沒有寫好,直接噴出那個狀態的英文,也都沒有問題,大家都看得懂。