数据库-枚举类型-额外表或仅一列

时间:2020-07-20 10:10:37

标签: java sql database-design foreign-keys

假设我有一个Person实体,并且其状态与之关联

状态可以为 ACTIVE / INCTIVE / BLOCKED

哪种表设计会更好?

只有一张桌子

Person(id, name, status)

或 从人员到状态表的两个带有外键引用的表。

Person(id, name, status_id)

Status(id, name)

仅使用一个Person表管理实现就容易得多。但是,有没有人看到与这种方法相关的任何未来问题?

1 个答案:

答案 0 :(得分:2)

只有一个表没有问题,尽管我建议使用check约束来验证值:

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

在很多情况下都需要参考表。它提供了很多功能,例如:

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

但是,没有必要将所有字符串都放入参考表中。

相关问题