選擇合適的枚舉值
在資料庫建表的時候,經常會遇到建立狀態、性別、類型等欄位的業務需求。
這些欄位有一個共同的特點,它們的業務含義通常就是這麼幾個取值。這樣的欄位我們可以稱為枚舉欄位。
確定一個欄位是否是枚舉欄位,得參考它所表達的業務含義。如果是在電商業務中,商品表有商品類型欄位,一般的電商都是可以動態添加或者刪除類型,也就是說,商品類型可能有無數個取值,那麼它就不是枚舉欄位。 選擇合適的儲存方式
對於性別欄位,我們可以使用0,1,2這樣的數字值來表示,也可以使用‘M’,’F’,這樣的類型來表示。
再說一個複雜的例子,訂單狀態,它可以有未支付,已付款,已出庫,已送達等等的狀態,我們可以使用0,1,2,3等等來表示,也可以使用UNPAY,PAY_SUCCESS,CLOSE這樣的字串來表示。
總的來說,可以用純數字編碼或者字串編碼來表示。 純數字編碼的優缺點 在業務含義比較簡單的情況下,比如說需要一個欄位來表示是否啟用這個業務含義,這個業務只有未啟用,已啟用這兩個有業務含義,這時候使用0,1這樣的純數字來表示是比較合適的,也方便理解。 在業務含義取值比較多的時候(n>2,n不是無限多哈),比如說需要一個欄位來表示訂單狀態這個業務含義,這時候如果還使用0,1,2,3 這樣的數字來表示的話,在業務上是不便於理解的。 字串編碼的優缺點 接上面純數字編碼的缺點分析,如果訂單狀態這個業務含義使用UNPAY,PAY_SUCCESS,CLOSE字串的方式的話在業務上面是比較直觀的。 使用字串表示枚舉的時候,有一個缺點就是可能字串太長,在團隊開發中容易出點小問題。比如訂單狀態已付款狀態,有可能有人寫pay_success,有人寫pay-success。對於這種情況,要建立公用類統一處理,不允許自己拼字,避免出錯的可能。 當然,要控制枚舉字串的拼字規則,比如說只能使用全大寫+底線的方式,減少拼字錯誤的可能。 總結
總的來說,不管使用純數字或者是字串的方式來表示枚舉欄位,都要有一個原則,要方便明了地表示出該欄位的業務含義。