数据库最佳实践 - 状态

时间:2012-03-29 04:37:16

标签: database database-design

我正在创建一个对象具有状态查找的应用程序。为了给出一些上下文,让我们使用以下示例。


创建作业并在以下工作流程中移动的帮助台应用程序:

- 创建但未分配的作业 正在进行中 - 分配给工人和正在进行的工作
完成 - 工作已完成,可以开具发票 已关闭 - 作业已开票


因此,我创建了一个包含以下详细信息的状态表:

int ID
字符串名称

和作业表上的查阅列

int ID
字符串名称
int CustomerID
int StatusID - >查找状态

所以在现实世界中,假设我们有以下要求。

  1. 用户需要获取报告以显示所有未完成的作业(作业是New或InProgress)
  2. 在线下,有人会想要添加一个位于已完成和关闭中间的新状态。
  3. 因此,考虑到这一点,我最初的想法是在状态表上创建一个名为SortOrder或类似的新列,并为其分配数字,例如

    - 10
    正在进行中 - 20
    已完成 - 30
    已关闭 - 40

    这意味着对于上面的案例#1,我可以简单地在数据库中查询状态大于或等于30的所有作业。这对于案例#2也很有用,因为这意味着如果我引入了新的在完成和关闭之间的状态不会破坏此报告。

    我可以看到它会经常出现在不同的应用程序中。有没有人实现这样的解决方案或者之前遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

我们所做的是拥有一个状态表和一个配套状态组表。

create table status_group (
    id integer primary key not null,
    alias varchar(20) not null,
    descr varchar(128)
)

create table status (
    id integer primary key not null,
    status_group_id integer,
    alias varchar(20) not null,
    descr varchar(128)
)

然后所有的状态都存在于一个位置,但是它们组合在一起而不是具有多个单独的状态。