我有一个性别栏
gender
Run Code Online (Sandbox Code Playgroud)
使用 MS SQL Server 2012
目前它是 smallint,它是 2 个字节 -2^15 (-32,768) 到 2^15-1 (32,767)
和工作如下
1 = male
0 = female
-1 = not specified
Run Code Online (Sandbox Code Playgroud)
我们对此类字段进行了大量查询。我遇到的问题是
所以我想知道其他人是怎么做到的
我可以做一个 1 字节的 char(1)
m = male
f = female
x = not specified
Run Code Online (Sandbox Code Playgroud)
这是否会导致有关 where 或 join 子句的任何性能问题。
我们(EHR 软件)存储为 1 字节字符,因为它在处理大量人口统计数据时简洁且更易于理解。
可能的值映射如下:
U- 未知或未指定M- 男性F- 女性NULL- 尚未询问此人/没有记录价值。对于我们来说,重要的是要注意他们是否故意决定不提供自己的性别,或者是否尚未捕获(因此NULLvs U)。
一个考虑因素是将其映射为应用程序中更有意义的结构(例如enum.NET 中的结构或类似结构)。作为应用程序人员,必须使用某种或其他方法来获取枚举可能有点烦人switch,而我可以直接从数值转换枚举。
当然,这是一个微不足道的问题,但如果您好奇如何解决它,我们使用了一种struct可以从字符串强制转换的类型(从字符串显式转换)和静态常量来充当可能的枚举值。