我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。
一个帮助台应用程序,用于创建作业并通过以下工作流移动:
新建-已创建但未分配的作业
进行中-分配给工人并正在进行的作业
完成-作业完成,准备开具发票
已关闭-作业已开具发票
因此,我创建了一个包含以下详细信息的状态表:
intID
string名称
以及作业表上的查找列
intID
string名称
int客户ID
intStatusID->查找状态
因此,在现实世界中,假设我们有以下要求。
- 用户需要获得一份报告来显示所有未完成的作业(新作业或正在进行的作业)
- 接下来,有人会想添加一个新状态,例如,位于已完成和已关闭的中间
因此,考虑到这一点,我最初的想法是在状态表上创建一个名为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)
)
然后,所有的状态都生活在一个地方,但被分组在一起,而不是拥有无数个单独的状态。