T-SQL enum数字或字符串

本文关键字:字符串 数字 enum T-SQL | 更新日期: 2023-09-27 18:08:01

我有一个表Drivers,列Id, Name, Status。在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,所以它按字母顺序排序,而不是按enum优先级排序。
  3. 如果我重命名DriverStatus enum值名称,我还需要更新数据库以保持一致。

然后我问其他人为什么我们使用varchar枚举列,唯一的原因是它更容易调试,因为你看到的是文本而不是像0或3这样的数字。有什么真正好的理由在数据库中为枚举使用字符串吗?

T-SQL enum数字或字符串

最好使用查找表查找枚举值。

优势:

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