0
我有一個表Drivers
列Id
,Name
,Status
。在C#我有司機狀態T-SQL枚舉數字或字符串
public enum DriverStatus
{
Online = 0,
Offline = 1,
Busy = 2,
SoonFree = 3
}
目前數據庫中的枚舉,我使用的Status
列varchar
數據類型,這意味着我有這樣的記錄:
1 John Online
2 Elsy Offline
這接縫是糟糕,我想是因爲這需要更改到狀態欄類型tinyint
:
- T-SQL
Tinyint
只有一個字節大小與範圍0 -255。 - 現在通常不能按狀態列進行排序,因爲它是
varchar
,因此它按字母順序排序而不是枚舉優先級。 - 如果我重命名
DriverStatus
枚舉值的名稱我也需要更新數據庫以保持一致。
然後我問別人爲什麼我們使用varchar
,枚舉列的唯一原因是,它是更容易調試正如你看到的文字不是數字,如0或3是任何地方真的很好的理由,這對於在枚舉字符串數據庫?
呀,他們的理由是非常好的。理解數據更容易。如果您是未來的開發人員或報告創建者,您還有什麼知道這些值是什麼意思?如果您真的需要他們排序,那麼請使用CASE WHEN在您的視圖中翻譯它們。我絕對不認爲你會選擇一個數值超過文本值進行查找的唯一原因是爲了排序目的。 –
你*可以*在數據庫中有另一個表,它將'StatusCode'關聯到'StatusDescription'。你不必真的使用它,但它會在那裏讓別人看到。 –
可能的解決方案:1)打開代表數據庫表的C#實體類並查看所描述的核心枚舉(如果有)。 2)如果是純數據庫項目,可以爲枚舉鍵值分開表格,那麼報表創建者可以加入它以獲得用戶友好的值。 –