T-SQL枚举号或字符串

时间:2016-09-20 18:24:24

标签: c# sql-server tsql enums

我有一个表Drivers,其中包含IdNameStatus列。在C#中,我有一个驱动程序状态的枚举

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

目前在数据库中,我使用varchar列的Status数据类型,这意味着我有以下记录:

1     John      Online
2     Elsy      Offline

此接缝很糟糕,我认为需要将其更改为状态列类型tinyint,因为:

  1. T-SQL Tinyint只有一个字节大小,范围为0-255。
  2. 现在无法正常按状态列排序,因为它是varchar所以它按字母顺序排序而不是枚举优先级。
  3. 如果我重命名DriverStatus枚举值名称,我还需要更新数据库以保持一致。
  4. 然后我问其他人为什么我们将varchar用于枚举列,唯一的原因是它更容易调试,因为你看到文本不是0或3之类的数字。是否有任何真正好的理由为枚举提供字符串在数据库中?

1 个答案:

答案 0 :(得分:2)

对枚举值使用查找表绝对更好。

优点:

  • 通常使用较少的数据库空间。
  • 重命名显示值非常简单。
  • 全球化是可能的。
  • 很容易退出不再使用的值。
    • 我的查找表始终包含三个字段:[ID /主键],名称和已启用