您会使用数字或语义标签作为列值吗?

Would you use a numeric or semantic label as column values?

我有某些列应该 "states",例如 "done"、"not done"、"waiting"、"yes"、"no" 等。 我的选项是:

  1. 整数列,记录映射,例如:0=未完成,1=完成等...
  2. 字符串列,带实词"done"、"not done"等
  3. 枚举数据类型? 问题是,有一些理由来决定使用哪一个? 整数当然会节省 space。但是代码会更难阅读,数据库更难理解,文档更难维护。 值得节省吗?

enum 数据类型是否结合了 1 和 2 的优点?

我个人更喜欢方案2或方案3,可读性,但我不知道这样做之后数据库会不会看起来很奇怪,或者性能是否会成为关键点。

在这种情况下,我总是选择解决方案 1(整数列),但此列是新 table 列出可能状态的外键。使用此解决方案:

  • DBMS 自动检查有效值。
  • 几乎在 table 个州进行了自我记录。
  • Space 长州名称占用不会增加很多
  • 避免相同状态的重复名称 (done/Done/DONE!/finished)。
  • 之后可以轻松添加新状态。
  • 如果其他 table 中需要状态(或同一 table 中的其他列),则可以重复使用新的 table。
  • 州可以有比简称更多的信息:州的单字母缩写、长名和短名、何时使用该州的描述、在列表中的显示顺序等。所有这些都可以是列table 个州。