使用MySql数据类型

时间:2011-03-18 17:42:44

标签: mysql database database-design types

以下面的例子为例,我试图找出设置MySql数据库的最佳方法。

enter image description here

FoodGroupTypeCode:谷物,蔬菜,水果,乳制品,蛋白质

用于表示此属性的最佳数据类型是什么?

  1. CHAR(1):G,V,F,D,P
  2. TINYINT:使用数字代码(即Grain = 1,Vege = 2)
  3. ENUM
  4. VARCHAR(9):使用全名
  5. 其他(解释)
  6. 选项4实际上不是我的考虑因素,除非有人能够真正验证它。我已经阅读了很多关于这个主题的“意见”,但是寻找更具体的原因来挑选一个。我感谢有人可以给予该学位的任何意见,而不是“我喜欢ENUM,因为它很快。”

5 个答案:

答案 0 :(得分:2)

CHAR(1):G,V,F,D,P
高效,存储效率高,可编码。当我知道值是稳定的,并且当我需要将行为附加到代码时,我赞成这个解决方案。 (if code = 'G' then specific behaviour)。

TINYINT:使用数字代码(即Grain = 1,Vege = 2)
性能高,存储效率高,但代码可读性较差。如果值发生变化(G最初为Grain,但现在变为Brain),此解决方案也不会产生混淆。这是最常见的。

<强> ENUM
除了微小的性能优势之外,我没有看到使用枚举的单一好处。 当然,如果您确实遇到性能问题,那么小的性能提升将永远不够。

VARCHAR(9):使用全名
可读代码的结果。某些查询的联接较少,在这些特定情况下会提供性能优势。存储效率不高,如果要更改值,可能会给您带来问题。如果你有很多有很多行的表并且它们都引用了这个表,那么在你承担风险之前要仔细考虑。

答案 1 :(得分:1)

我会推荐ENUM,因为它会限制你对谷物,蔬菜,水果,乳制品,蛋白质的选择。

但是,在数据库中,我通常将此作为具有Check Constraint(只能是Grain,Vegetable,Fruit,Dairy或Protein)的VARCHAR(2),然后在我的应用程序中将其表示为ENUM或List。

答案 2 :(得分:1)

选择合适的数据类型完全取决于你将如何处理应用程序中的表数据(如果有的话),如果你有这个表只是为了存储记录而不是VARCHAR将是一个更好的选择,因为它会使你的数据更加冗长,但是如果要对表数据进行处理,比如根据某些标准过滤结果,那么在应用程序逻辑中比较它们时,长名称可能会令人困惑,在这种情况下,CHARTINYINT将是更好的选择。虽然基于所使用的数据类型的性能影响应该是第二优先级。

答案 3 :(得分:0)

我使用CREATE TABLE FoodGroupType (id int unsigned not null auto_increment PRIMARY KEY, code VARCHAR(20), description VARCHAR(100)。 所以食物表会看起来

CREATE TABLE Food (id int unsigned not null auto_increment PRIMARY KEY, 
food_group_type_id int unsigned not null, name VARCHAR(50), description VARCHAR(100),
FOREIGN KEY(food_group_type_id) REFERENCES FoodGroupType(id) ON DELETE ... ON UPDATE ...

答案 4 :(得分:0)

我个人不会使用Char(1)或tinyint,因为它们不具有描述性。查看数据并不是那么清楚。 varchar和enum将是我会考虑的两个。我喜欢enum的想法,因为它确实是它的本质。你说所有食物都必须是这些食物中的一种。

另外我听说enum很快!