数据库 - 枚举类型 - 额外 table 或只是一列

Database - Enumeration type - Extra table or just a column

假设我有一个具有关联状态的 Person 实体

状态可以是ACTIVE/INACTIVE/BLOCKED

哪个 table 设计会更好?

就一个table

Person(id, name, status)

或者 两个 table 具有从 Person 到 Status table.

的外键引用

Person(id, name, status_id)

Status(id, name)

只用一个人来管理实现要容易得多 table。但是有人看到与此方法相关的任何未来问题吗?

单个 table 没有问题,但我建议使用 check 约束来验证值:

check (status in ('ACTIVE', 'INACTIVE', 'BLOCKED'))

有很多情况需要参考 table。它提供了很多能力,例如:

  • 可以轻松添加新状态。
  • 可以轻松更改名称。
  • 具有短名称和长名称的能力。
  • 能够在不同的 table 之间共享 完全相同的 状态。
  • 了解何时添加或更改新状态的能力。
  • 能够包含状态的优先级或顺序。

然而,没有必要将所有字符串都放入一个引用中table。