性别存储和数据类型

Dal*_*ser 5 sql sql-server

我有一个性别栏

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. 没有解释,数据的含义不直观
  2. 它使用两个字节

所以我想知道其他人是怎么做到的

我可以做一个 1 字节的 char(1)

m = male
f = female
x = not specified
Run Code Online (Sandbox Code Playgroud)

这是否会导致有关 where 或 join 子句的任何性能问题。

Hac*_*ese 0

我们(EHR 软件)存储为 1 字节字符,因为它在处理大量人口统计数据时简洁且更易于理解。

可能的值映射如下:

  • U- 未知或未指定
  • M- 男性
  • F- 女性
  • NULL- 尚未询问此人/没有记录价值。

对于我们来说,重要的是要注意他们是否故意决定不提供自己的性别,或者是否尚未捕获(因此NULLvs U)。

一个考虑因素是将其映射为应用程序中更有意义的结构(例如enum.NET 中的结构或类似结构)。作为应用程序人员,必须使用某种或其他方法来获取枚举可能有点烦人switch,而我可以直接从数值转换枚举。

当然,这是一个微不足道的问题,但如果您好奇如何解决它,我们使用了一种struct可以从字符串强制转换的类型(从字符串显式转换)和静态常量来充当可能的枚举值。