Mar*_*rko 127 sql database-design
我想以尽可能少的(大小/性能)成本将用户的性别存储在数据库中.
到目前为止,我想到了3个场景
我想问的原因是因为这个的答案,其提到字符是小比布尔值.
我要澄清,我使用MS SQL 2008,它DOES其实有位数据类型.
Pon*_*ife 172
已有ISO标准; 无需发明自己的方案:
http://en.wikipedia.org/wiki/ISO_5218
根据标准,列应该被称为"Sex",而"最接近"的数据类型将是tinyint,具有CHECK约束或查找表.
OMG*_*ies 77
我将这个专栏称为"性别".
Data Type Bytes Taken Number/Range of Values
------------------------------------------------
TinyINT 1 255 (zero to 255)
INT 4 - 2,147,483,648 to 2,147,483,647
BIT 1 (2 if 9+ columns) 2 (0 and 1)
CHAR(1) 1 26 if case insensitive, 52 otherwise
Run Code Online (Sandbox Code Playgroud)
该BIT数据类型可以排除,因为它仅支持两种可能的性别是不够的.虽然INT支持两个以上的选项,但需要4个字节 - 使用更小/更窄的数据类型时性能会更好.
CHAR(1)优于TinyINT - 两者都采用相同的字节数,但CHAR提供的数值更为狭窄.使用CHAR(1)"m","f"等自然键,使用数字数据(称为代理/人工键). CHAR(1)任何数据库也支持,如果需要端口.
我会使用选项2:CHAR(1).
在性别列的索引很可能将不会帮助,因为有一个在一个低基数列的索引没有价值.意思是,索引的值没有足够的多样性来提供任何值.
use*_*421 43
医学上有四种性别:男性,女性,不确定和未知.您可能不需要全部四个,但您肯定需要1,2和4.这种数据类型的默认值是不合适的.甚至更少将它视为具有'is'和'is not'状态的布尔值.
| 归档时间: |
|
| 查看次数: |
102662 次 |
| 最近记录: |