我有一个只能在三种状态的对象列表。什么是在数据库中表示三选项的最佳方式?
数据的简单的例子:
Substance State
H2O solid
H2O fluid
CO2 gas
... ...
是它更好地使用TINYINT(2)
或ENUM
或别的什么吗?我应该直接插入值(VARCHAR)还是使用数字?值的外部表?
我有一个只能在三种状态的对象列表。什么是在数据库中表示三选项的最佳方式?
数据的简单的例子:
Substance State
H2O solid
H2O fluid
CO2 gas
... ...
是它更好地使用TINYINT(2)
或ENUM
或别的什么吗?我应该直接插入值(VARCHAR)还是使用数字?值的外部表?
我会经由ID reffer到外部表。然后表格将信息显示为文本。 在您的选择语句中,您只需加入。如果你不知道我在说什么,请问我一个例子:)
虽然,我不会使用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,递减为varchar), 根据问题 将有
id | desc
1 | Solid
2 | Liquid
3 | Gas
,并在溶液(主)表参照状态表的id
我在数据库中有大约10个这样的字段,性能可以吗? – aelita 2012-07-10 06:32:11
@aelita:没错,它是一个完美的标准化设计.. – 2012-07-10 06:43:54
我认为您可以将信息存储在类型为BIT的列中,并允许列中的空值为
列。以下是价值和数据的映射。
H2O固体 - > TRUE
H2O流体 - > FALSE
CO2气体 - > NULL
任何理由,为什么这样下来? – Narendra 2012-07-10 06:35:33
可能是因为BIT和TINYINT之间没有什么区别,而且过于黑客。对于一些数值,ENUM仍然是更好的总体回答。 – SilverbackNet 2012-07-10 06:40:21
是的,但使用BIT有什么错误? http://stackoverflow.com/questions/488811/tinyint-vs-bit – Narendra 2012-07-10 06:47:56
谢谢你的链接!一切似乎都很清楚。 – aelita 2012-07-10 06:20:32
请设置为最佳答案或upvote,如果你想?谢谢:) – PoeHaH 2012-07-10 06:33:06
我不能upvote,我还没有足够的声望,对不起。 – aelita 2012-07-10 06:35:31