2016-09-20 191 views
0

我有一個表DriversId,Name,Status。在C#我有司機狀態T-SQL枚舉數字或字符串

public enum DriverStatus 
{ 
    Online = 0, 
    Offline = 1, 
    Busy = 2, 
    SoonFree = 3 
} 

目前數據庫中的枚舉,我使用的Statusvarchar數據類型,這意味着我有這樣的記錄:

1  John  Online 
2  Elsy  Offline 

這接縫是糟糕,我想是因爲這需要更改到狀態欄類型tinyint

  1. T-SQL Tinyint只有一個字節大小與範圍0 -255。
  2. 現在通常不能按狀態列進行排序,因爲它是varchar,因此它按字母順序排序而不是枚舉優先級。
  3. 如果我重命名DriverStatus枚舉值的名稱我也需要更新數據庫以保持一致。

然後我問別人爲什麼我們使用varchar,枚舉列的唯一原因是,它是更容易調試正如你看到的文字不是數字,如0或3是任何地方真的很好的理由,這對於在枚舉字符串數據庫?

+0

呀,他們的理由是非常好的。理解數據更容易。如果您是未來的開發人員或報告創建者,您還有什麼知道這些值是什麼意思?如果您真的需要他們排序,那麼請使用CASE WHEN在您的視圖中翻譯它們。我絕對不認爲你會選擇一個數值超過文本值進行查找的唯一原因是爲了排序目的。 –

+1

你*可以*在數據庫中有另一個表,它將'StatusCode'關聯到'StatusDescription'。你不必真的使用它,但它會在那裏讓別人看到。 –

+0

可能的解決方案:1)打開代表數據庫表的C#實體類並查看所描述的核心枚舉(如果有)。 2)如果是純數據庫項目,可以爲枚舉鍵值分開表格,那麼報表創建者可以加入它以獲得用戶友好的值。 –

回答

2

對於枚舉值使用查找表是絕對更好的。

優點:

  • 一般使用數據庫中的空間更小。
  • 重命名顯示值非常簡單。
  • 全球化是可能的。
  • 退休不再使用的值很容易。
    • 我的查找表總是包含三個字段:標識/主鍵],名稱,並啓用