【发布时间】:2012-07-09 14:10:56
【问题描述】:
我有一个只能处于三种状态的对象列表。
数据的简化示例:
Substance State
H2O solid
H2O fluid
CO2 gas
... ...
使用TINYINT(2) 或ENUM 或其他什么更好?我应该按原样插入值(VARCHAR)还是使用数字?外部值表?
【问题讨论】:
标签: mysql database-design
我有一个只能处于三种状态的对象列表。
数据的简化示例:
Substance State
H2O solid
H2O fluid
CO2 gas
... ...
使用TINYINT(2) 或ENUM 或其他什么更好?我应该按原样插入值(VARCHAR)还是使用数字?外部值表?
【问题讨论】:
标签: mysql database-design
我会通过 ID 引用外部表。然后该表将信息显示为文本。 在您的选择语句中,您只需加入即可。如果你不知道我在说什么,可以问我一个例子:)
不过,出于各种原因,我不会使用 ENUM。在这里找到最重要的:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
【讨论】:
任何内容都不会存储在少于一个字节中。
TINYINT(2) 和具有 3 个成员的 ENUM 都将产生 1 个字节的存储空间。两者都可以。
ENUM 的好处是您可以使用简单的英文名称,并且它们存储紧凑。 ENUM 的坏处是它们不是 ANSI SQL。
【讨论】:
创建一个主表作为状态(id int,desc varchar), 根据问题 它会有
id | desc
1 | Solid
2 | Liquid
3 | Gas
并在解决方案(主)表中引用状态表的 id
【讨论】:
我认为您可以将信息存储在 BIT 类型的列中,并允许在
列。以下是价值与你的数据的映射。
H2O 固体 --> 是的
H2O 流体 --> 错误
二氧化碳气体 --> NULL
【讨论】: