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

FoodGroupTypeCode:谷物、蔬菜、水果、乳制品、蛋白质
用来表示此属性的最佳数据类型是什么?
CHAR(1):G,V,F,D,PTINYINT:使用数字码(即谷物= 1,Vege = 2)ENUMVARCHAR(9):使用全名)
选项4实际上不是我的考虑因素,除非有人能真正验证它。我读过很多关于这个问题的“意见”,但我想找出更具体的理由来选择一个而另一个。我很感激有人能给这个学位的任何输入,而不是像“我喜欢ENUM,因为它是快速的”之类的东西。
发布于 2011-03-18 19:28:10
CHAR(1):G,V,F,D,P
性能,存储效率和结果可读的代码。当我知道这些值是稳定的时,当我需要将行为附加到代码中时,我就倾向于这个解决方案。(if code = 'G' then specific behaviour)。
TINYINT:使用数字码(即谷物= 1,Vege = 2)
性能好,存储效率高,但代码可读性差。如果值发生变化,这个解决方案也可以避免混淆(G最初是谷物,但现在变成了大脑)。这是最常见的。
ENUM
除了极小的性能效益之外,我看不到使用枚举的唯一好处。当然,如果你真的有一个性能问题,那么小小的性能增益是永远不够的。
VARCHAR(9):使用全名
结果是可读的代码。某些查询将有较少的联接,在这些特定情况下提供性能好处。存储效率不高,如果要更改值,可能会出现问题。如果您有很多有很多行的表,并且它们都引用了这个表,那么在冒险之前要仔细考虑。
发布于 2011-03-18 17:49:14
我推荐ENUM,因为它会限制你选择谷物,蔬菜,水果,奶制品,蛋白质。
但是,在数据库中,我通常使用带有Check约束的VARCHAR(2)来执行此操作(只能是谷物、蔬菜、水果、奶制品或蛋白质),然后在我的应用程序中将其表示为ENUM或List。
发布于 2011-03-18 17:53:17
选择合适的数据类型完全取决于如何处理应用程序中的表数据(如果有的话),如果您拥有这个表只是为了存储记录而不是VARCHAR,这将是一个更好的选择,因为它将使您的数据更加冗长,但是如果要对表数据进行处理,比如按照特定的标准过滤结果,那么在应用程序逻辑中比较它们时,长名称可能会造成混淆,在这种情况下,CHAR或TINYINT将是一个更好的选择。而基于所使用的数据类型的性能影响应该是第二个优先事项。
https://stackoverflow.com/questions/5355833
复制相似问题