Database design 使用整型vs字符串表示一个";“类型”;值(数据库和类设计)
我一直在开发一些手机游戏,这些游戏从服务器数据库获取数据 我习惯于将“type”值存储为整数标识符,并在客户机中存储一个enum来标识来自服务器的数据 例如: 在数据库表上: 怪物表:怪物ID(int)、名称(字符串)、怪物类型(int) 在客户端代码上:Database design 使用整型vs字符串表示一个";“类型”;值(数据库和类设计),database-design,enums,class-design,value-type,Database Design,Enums,Class Design,Value Type,我一直在开发一些手机游戏,这些游戏从服务器数据库获取数据 我习惯于将“type”值存储为整数标识符,并在客户机中存储一个enum来标识来自服务器的数据 例如: 在数据库表上: 怪物表:怪物ID(int)、名称(字符串)、怪物类型(int) 在客户端代码上: typedef enum { MonsterTypeGround = 1, MonsterTypeAquatic = 2, MonsterTypeAmphibious = 3, MonsterTypeAeria
typedef enum {
MonsterTypeGround = 1,
MonsterTypeAquatic = 2,
MonsterTypeAmphibious = 3,
MonsterTypeAerial = 4
}MonsterType;
注意,上面的代码是Objective-C,我可以在其中分配整数值。但是我也使用C++和C++。
然而,我们的数据库人员说枚举是一种编译器技巧,没有枚举数据类型这样的东西。他认为整数类型标识符使人们(其他开发人员)很难理解这些值的含义,而且,如果不查看客户端代码,他们不可能知道等价物,枚举不好,因为您需要确保枚举与服务器端ID同步,并且最好使用字符串
我的问题是:这件事有没有客观正确的答案
除了在客户机代码上使用枚举之外,是否还有其他选择,但仍将在服务器数据库中使用整数?详细答案
你的数据库管理员显然错了。当然,如果有类似于枚举数据类型的东西。您在示例中提供了一个。MySQL知道这一点。很多编程语言都有类似于枚举的东西
但他也是对的,因为编译器经常(总是?)优化枚举。如果有四个选项可以用1到4完美地表示,但我们碰巧发现可识别字符串更容易在代码中读取。但是编译器没有这样的问题,事实上也不在乎数量。空中怪物是4型,飞行的意大利面怪物是4型。与比较字符串相比,CPU比较字节更容易达到几个数量级
此外,他认为在C代码或任何代码中使用枚举都可能是一个问题,这是正确的:
是的,你的人说得有道理。好吧,这就是。。潜在的反对票来源,但enums是我最喜欢的东西之一 观点 关注最适合您的设计和代码的内容。不使用枚举,因为数据库没有该“数据类型?”确定。那么,出于同样的原因,让我们不要创建任何自定义类。那是胡说八道 枚举善 (注意:我用C#编码)
switch
语句。击败Helloutta整数:开关(怪物类型)
MonsterType.Unknown=0
。您的回报将是编写更简单的代码,更少的错误,更容易阅读。您的维护程序员将感谢您if(string.IsNullorEmpty(myString.Trim())…
-如果myString为null,您的程序就会出现运行时异常。枚举无法发生myString=null
,从数据库中获取的不是一个带值的变量,它甚至不是一个对象,但我们尝试像对待它一样对待它if(MonsterType==3).
这到底是什么意思?努夫说
这里有一个实践练习。在你的IDE中,点击“3”并让它“查找定义”。如果你的IDE可以说话,它会说“为什么你不定义你的问题域中的东西,而不是期待我呢?”