建模关系数据库表以跟踪阶段和阶段内任务的状态
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 行。这样,您就不必担心状态列的数量。您有一个状态栏,其中可以包含您可以想象的尽可能多的任务状态。
我正在尝试为基于 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 行。这样,您就不必担心状态列的数量。您有一个状态栏,其中可以包含您可以想象的尽可能多的任务状态。