我正在为Java Web应用程序工作流应用程序的数据库设计来跟踪和检查各种业务产品(文档)。但是我的设计和实现有很多不确定性。
这里是我的表:数据库设计一对多
WORK_FLOW_CLASS
- 定义工作表类型的产品,即流量:报告,演示,工程计算ROLE_CLASS
- 工作流角色,即定义表:发起人,检查员,审批人,经理WORK_ITEM_CLASS
- 代表某些纸质表格的工作项目定义表,即:作业表单,计算核对表,报告审核表,Clos EOUT清单等,这些形式要求将被按照一定的顺序多个角色被认为完成之前的工作WORK_ACTION_CLASS
- 的工作项行动,即定义:通过检查完整的计算清单(一WORK_ITEM
)(一ROLE
) ,完整的审查报告(一WORK_ITEM
)由经理(一个ROLE
),完整的审查报告(一WORK_ITEM
)通过审批(一ROLE
)WORK_FLOW_SEQUENCE
- 定义表与一个WORK_FLOW_CLASS
的许多WORK_ITEM_CLASS
ES,即系入门级1计算顺序是:(1)A (2)计算清单,(3)清理清单。部门XYZ 1级计算顺序为:(1)分配表格,(2)清理清单[XYZ选择不在其Calc工作流程中执行清单]。
第一个问题:如若WORK_ACTION_CLASS有一个FK它涉及到WORK_ITEM_CLASS?
或者我应该使用中间表来提供关系?我认为后者是不必要的,因为我不需要将WORK_ACTION与多个WORK_ITEMS相关联,只有一个。
当用户启动一个新的工作流实例时,我的计划是查询CLASS表以获取所选WORK_FLOW_CLASS的详细信息,并将它们实例化到下表中。
WORK_FLOW_INSTANCE
- 工作流的实际实例 - 我想就像一个购物车订单WFI_WORK_ITEMS
- WORK_ITEMs的工作流程实例行项目 - 我想喜欢的产品的订单WFI_WORK_ITEM_ACTIONS
- 工作流实例的工作项目操作
这里就是我需要的^ h elp与第二个问题。
是否应该有两个单独的表WFI_WORK_ITEMS
和WFI_WORK_ITEM_ACTIONS
或应该有一个复合表?我需要查询工作流实例中的WORK_ITEMS以及包含WORK_ACTIONS子步骤的WORK_ITEMS。
这里是被质疑的两个表的细节。对不起,我不知道描述我的模式的最佳方式。
WFI_WORK_ITEMS
==============
WFI_WORK_ITEM_ID (PK)
WORKFLOW_INSTANCE_ID (FK)
WORK_ITEM_CLASS_ID (FK)
STEP_NUM
LAST_DATE
STATUS
IS_ACTIVE
WFI_WORK_ITEM_ACTION
====================
WFI_WORK_ITEM_ACTION_ID (PK)
WORKFLOW_INSTANCE_ID (FK)
WFI_WORK_ITEM_ID (FK)
WORK_ITEM_CLASS_ID (FK)
STEP_NUM
WORK_ACTION_CLASS_ID (FK)
ACTION_OWNER
LAST_DATE DATE
STATUS
IS_ACTIVE
我似乎在这两个表中有很多冗余信息。但是我已经阅读过,有时会执行非规范化表格。
任何帮助我的设计是非常感谢。
编辑 我的意思通过冗余数据是两个表列出WORKFLOW_INSTANCE_ID
和WORK_ITEM_CLASS_ID
我的想法是,如果我想知道一个工作流的特定实例的WORK_ITEM_ACTIONS,我可以通过查询表WFI_WORK_ITEM_ACTION
得到它而无需加入“WFI_WORK_ITEM”表。也许这是错误的想法。 WORK_ITEM_CLASS_ID
也一样。通过查询WFI_WORK_ITEM_ACTION
表,我知道ACTION的WORK_ITEM类型。
这是一个更好的设计?
WFI_WORK_ITEM ============== WFI_WORK_ITEM_ID (PK) WORKFLOW_INSTANCE_ID (FK) WORK_ITEM_CLASS_ID (FK) WORK_ITEM_STEP_NUM WORK_ITEM_LAST_DATE WORK_ITEM_STATUS WORK_ITEM_IS_ACTIVE WFI_WORK_ITEM_ACTION ==================== WFI_WORK_ITEM_ACTION_ID (PK)WORKFLOW_INSTANCE_ID (FK)WFI_WORK_ITEM_ID (FK)WORK_ITEM_CLASS_ID (FK)WORK_ACTION_STEP_NUM WORK_ACTION_CLASS_ID (FK) ACTION_OWNER WORK_ACTION_LAST_DATE WORK_ACTION_STATUS WORK_ACTION_IS_ACTIVE
+1,该主题的优秀概述。 – DCookie
+1,这与@DCookie所述的原因相同。 –
@paxdiablo - 谢谢你的出色答案。你所说的一切都很有道理。关于步骤编号的部分是肯定的,我需要工作项目和工作项目操作的步骤编号。我会解决这个问题,重构为3NF并重新发布。 – jeff