建模关系数据库表以跟踪阶段和阶段内任务的状态

Modeling relational database tables for tracking status of stages and tasks within stages

我正在尝试为基于 Web 的 migration/project 跟踪应用程序建立关系数据库模型。在界面中,我想显示项目的所有阶段以及这些阶段中的所有任务 - 例如:

Stage 1: Planning do these things
  Task 1: do this planning activity first
  Task 2: do this planning activity second
Stage 2: Start coding based on requirements
  Task 1: do this coding requirement first
  Task 2: do this coding requirement second

在每项任务结束时,我会为用户提供一个下拉菜单 select 每个任务的状态(未开始、进行中、已阻止、已完成)

为了 tables 对将填充界面的任务进行建模,我在想这样的事情:

tbl: Task
  taskID
  task

用于存储项目和状态的 tables 看起来像这样:

    tbl: Migration
      MigrationID
      Migration_Name
      StatusID

    tbl: Status
      StatusID:
      s1_t1
      s1_t2
      s1_t3
      s2_t1
      s2_t2 

因此迁移 table 是主要的 table,它与状态 table 具有一对一的关系。我相信 Status table 和 Migration table 之间的关系是一对多的。我在想我还需要一些其他关系 table 来跟踪多对多关系。

希望有人能提供指导,我现在感觉不对劲。

用户流程如下:

这是我目前所想的 visio 图:

您的迁移、成员、阶段和任务 table 看起来不错。

您的状态 table 应如下所示:

Status
------
Status ID
Status

行将如下所示:

Status ID | Status
------------------------
        1 | Not Started
        2 | In Progress
        3 | Blocked
        4 | Completed

您可以轻松添加其他状态。 (等待审核、已审核等)如果状态的顺序很重要,请添加另一个 int 列来索引状态。

Status ID | Status      | Status Index
--------------------------------------
        1 | Not Started |         1000
        2 | In Progress |         2000
        3 | Blocked     |         3000
        4 | Completed   |         4000

由于状态索引中存在较大差距,您可以添加许多新状态,并且仍然保持状态顺序。

任务和状态之间存在隐含的多对多关系。任务的状态随时间变化,跟踪状态变化很重要。

因此,我们在 Tasks 和 Status 之间创建了一个连接 table。

TaskStatus
----------
TaskStatus ID
Task ID
Status ID
Create Timestamp

其中 TaskStatus ID 是一个自动递增的整数,充当 table 的盲目主键。 Task ID、Status ID、Create Timestamp从大到小组成唯一索引。

每个任务将在 TaskStatus table 上创建至少 4 行。对于整个项目/迁移,您可以有数百个 TaskStatus 行。这样,您就不必担心状态列的数量。您有一个状态栏,其中可以包含您可以想象的尽可能多的任务状态。