在数据库中表示三选项的最佳方法是什么?

时间:2012-07-10 06:10:04

标签: mysql database-design

我有一个只能在三种状态下的对象列表。

数据的简化示例:

Substance State
H2O  solid
H2O  fluid
CO2  gas
...  ...

使用TINYINT(2)ENUM或其他什么方式更好吗?我应该按原样插入值(VARCHAR)还是使用数字?外部价值表?

4 个答案:

答案 0 :(得分:2)

不会以少于一个字节存储任何内容。

TINYINT(2)和一个包含3个成员的ENUM都会产生1个字节的存储空间。要么没事。

关于ENUM的好处是你可以使用简单的英文名称,并且它们可以紧凑地存储。关于ENUM的坏处是它们不是ANSI SQL。

答案 1 :(得分:2)

我会通过ID向外部表格提供帮助。然后该表将信息显示为文本。 在您的select语句中,您只需加入即可。如果你不知道我在说什么,请问我一个例子:)

但是,由于各种原因,我不会使用ENUM。在这里找到最重要的:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

答案 2 :(得分:0)

创建一个主表作为state(id int,desc varchar), 根据问题 它会有

id   |  desc
1    |  Solid
2    |  Liquid
3    |  Gas

并在解决方案(主)表中引用状态表的id

答案 3 :(得分:0)

我认为您可以将信息存储在类型为BIT的列中,并在

中允许空值

列。以下是值和数据的映射。

H2O固体 - > TRUE

H2O液 - > FALSE

CO2气体 - > NULL