数据库 - 枚举类型 - 额外 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。
假设我有一个具有关联状态的 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。