您会使用数字或语义标签作为列值吗?
Would you use a numeric or semantic label as column values?
我有某些列应该 "states",例如 "done"、"not done"、"waiting"、"yes"、"no" 等。
我的选项是:
- 整数列,记录映射,例如:0=未完成,1=完成等...
- 字符串列,带实词"done"、"not done"等
- 枚举数据类型?
问题是,有一些理由来决定使用哪一个?
整数当然会节省 space。但是代码会更难阅读,数据库更难理解,文档更难维护。
值得节省吗?
enum 数据类型是否结合了 1 和 2 的优点?
我个人更喜欢方案2或方案3,可读性,但我不知道这样做之后数据库会不会看起来很奇怪,或者性能是否会成为关键点。
在这种情况下,我总是选择解决方案 1(整数列),但此列是新 table 列出可能状态的外键。使用此解决方案:
- DBMS 自动检查有效值。
- 几乎在 table 个州进行了自我记录。
- Space 长州名称占用不会增加很多
- 避免相同状态的重复名称 (done/Done/DONE!/finished)。
- 之后可以轻松添加新状态。
- 如果其他 table 中需要状态(或同一 table 中的其他列),则可以重复使用新的 table。
- 州可以有比简称更多的信息:州的单字母缩写、长名和短名、何时使用该州的描述、在列表中的显示顺序等。所有这些都可以是列table 个州。
我有某些列应该 "states",例如 "done"、"not done"、"waiting"、"yes"、"no" 等。 我的选项是:
- 整数列,记录映射,例如:0=未完成,1=完成等...
- 字符串列,带实词"done"、"not done"等
- 枚举数据类型? 问题是,有一些理由来决定使用哪一个? 整数当然会节省 space。但是代码会更难阅读,数据库更难理解,文档更难维护。 值得节省吗?
enum 数据类型是否结合了 1 和 2 的优点?
我个人更喜欢方案2或方案3,可读性,但我不知道这样做之后数据库会不会看起来很奇怪,或者性能是否会成为关键点。
在这种情况下,我总是选择解决方案 1(整数列),但此列是新 table 列出可能状态的外键。使用此解决方案:
- DBMS 自动检查有效值。
- 几乎在 table 个州进行了自我记录。
- Space 长州名称占用不会增加很多
- 避免相同状态的重复名称 (done/Done/DONE!/finished)。
- 之后可以轻松添加新状态。
- 如果其他 table 中需要状态(或同一 table 中的其他列),则可以重复使用新的 table。
- 州可以有比简称更多的信息:州的单字母缩写、长名和短名、何时使用该州的描述、在列表中的显示顺序等。所有这些都可以是列table 个州。