数据库最佳实践-状态



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


一个帮助台应用程序,用于创建作业并通过以下工作流移动:

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


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

intID
string名称

以及作业表上的查找列

intID
string名称
int客户ID
intStatusID->查找状态

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

  1. 用户需要获得一份报告来显示所有未完成的作业(新作业或正在进行的作业)
  2. 接下来,有人会想添加一个新状态,例如,位于已完成和已关闭的中间

因此,考虑到这一点,我最初的想法是在状态表上创建一个名为SortOrder或类似的新列,并为其分配数字,如

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

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

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

我们所做的是有一个单独的Status表和一个配套的Status Group表。

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)
)

然后,所有的状态都生活在一个地方,但被分组在一起,而不是拥有无数个单独的状态。

最新更新