我很好奇其他人如何处理枚举和nosql?是将属性存储为枚举值还是字符串更好?这在某些情况下是否会影响数据库的大小或性能?例如,想象一下职业运动员,他的运动类型可以是足球、曲棍球、棒球、篮球等... 字符串与枚举,你们认为哪个更好?
我很好奇其他人如何处理枚举和nosql?是将属性存储为枚举值还是字符串更好?这在某些情况下是否会影响数据库的大小或性能?例如,想象一下职业运动员,他的运动类型可以是足球、曲棍球、棒球、篮球等... 字符串与枚举,你们认为哪个更好?
你的代码中应该使用枚举 - 强类型可以避免很多错误,并将它们转换为字符串或数字以进行存储。
字符串确实需要更多的存储空间 - "篮球"根据编码方式而定,大约占用10-20字节,如果将其存储为4,则只需1个字节。但是,实际上很少有情况会受到这种影响 - 如果你有一百万条记录,总数据库大小仍然不到20MB。字符串更易于处理,并且如果枚举值发生更改,则不太可能静默失败,因此请使用字符串。
对于大多数操作(包括在加载时转换为枚举),字符串比数字慢。然而,与从数据库检索任何内容所花费的时间相比,差异小得多,因此并不重要。
String
从可移植性的角度来看更好。而且像 MSSQL Server
等流行的 DBMS 不支持 Enum
。
您可以在应用程序级别上编写逻辑,以防止针对数组的有效输入,并将其仅存储为字符串。
编辑:
我的偏好已更改为 String
,因为 CakePHP
(我在其中开发 Web 应用程序)不再支持 Enum
,以解决可移植性问题。