天天看點

德瑪西亞之WorkFlow(四)資料庫設計德瑪西亞之WorkFlow(四)資料庫設計

德瑪西亞之WorkFlow(四)資料庫設計

在流程的産生、執行及結束等周期,都會産生各種與流程相關的資料, Activiti 提供了一整套資料表來儲存這些資料。 Activiti 流程引擎的資料表分 大類,每 類的資料表均有不同的職責 例如運作時資料表,專門用來記錄流程運作時所産生的資料:身份資料表專門儲存身份資料,包括使用者、使用者組等 Activiti 為這些資料表的命名制定了規範,不同職責的資料表,均可以通過命名來展現 例如運作時資料表,會以 ACT RU 作為開頭:曆史資料表以 ACT HI 作為開頭。

1 通用資料表

通用資料表用于存放一些通用的資料,這些表本身不關心特定的流程或者業務,隻用于存放這些業務或者流程所使用的通用資源。它們可以獨立存在于流程引擎或者應用系統中,其他的資料表有可能會使用這些表中的資料。通用資料表有兩個,它們都以“ACT GE 開頭,GE 是單詞 general 的縮寫。

1.1 資源表

表 ACT_GE_BYTEARRAY 用于儲存與流程引擎相關的資源,隻要調用了 Activiti 存儲服務的 API ,涉及的資源均會被轉換為 byte 數組儲存到這個表中。在資源表中設計了一個 BYTES宇段,用來儲存資源的内容,是以理論上其可以用于儲存任何類型的資源(檔案或者其他來源的輸入流)。一般情況下, Activiti 使用這個表來儲存字元串、流程檔案的内容、流程圖檔内容。ACT GE BYTEARRAY 表主要包含如下字段。

REV_ :資料版本, Activiti為一些有可能會被頻繁修改的資料表,加入該字段,用來表示該資料被操作的次數。

NAME_ :資源名稱,類型為 varchar ,長度為 255 位元組。

DEPLOYMENT_ID_ :一次由曙可以勵口多個資源,該字段與剖曙表ACT_RE_DEPLOYMENT的主鍵相關聯。BYTES_ :資源内容,資料類型為 longblob ,最大可存 4GB 資料。

GENERATED_:是否由 Activiti 自動産生的資源, 0表示 false, 1為true。

1.2 屬性表

Activiti 将全部的屬性抽象為 key-value 對,每個屬性都有名稱和值, 使用ACT_GE_PROPERTY 來儲存這些屬性,該表有以下 個字段。

NAME_ :屬性名稱, varchar 類型。

VALUE_ :屬性值, varchar 類型。

REV_ :資料的版本号。

2 部署資料表

流程引擎使用倉儲表來儲存流程定義和部署資訊這類資料,存儲表名稱以“ACT RE ”開頭,“RE”是 repository單詞的縮寫。

2.1 部署資料表

在 Activiti 中,一次部署可以添加多個資源,資源會儲存到資源表中,而對于部署,則部署資訊會被儲存到部署表中,部署表名稱為 ACT_RE_DEPLOYMENT,該表主要包含以下字段。

NAME_ :部署的名稱,可以調用 Activiti 的流程存儲 API 來設定,類型為 varchar,長度為 255 位元組。DEPLOY_TIME_ :部署時間,類型為 timestamp。

以上 段,除了 NAME 可以不設定值外 其他宇段在資料寫入時必須設定值。

2.2 流程定義表

Activiti 在部署添加資源時,如果釋出部署的檔案是流程檔案( .bprnn 或者.BPMN 20.xml),則除了會解析這些流程檔案,将内容儲存到資源表外,還會解析流程檔案的内容,形成特定的流程定義資料,寫入流程定義表( ACT_RE_PROCDEF )中 ACT_RE_PROCDEF 表主要包含以下字段。

CATEGORY_ :流程定義的分類,讀取流程 XML 檔案中的 targetNamespace 值。

NAME_ :流程定義名稱,讀取流程檔案中 process 元素的 name 屬性。

KEY_ :流程定義的 key 讀取流程檔案中 process 元素的 id 屬性。

DEPLOYMENT_ID_ :流程定義對應的部署資料ID。

RESOURCE_NAME_ :流程定義對應的資源名稱,一般為流程檔案的相對路徑。

DGRM_RESOURCE_NAME_ :流程定義對應的流程圖資源名稱。

SUSPENSION_STATE_:表示流程定義的狀态是激活還是中止,激活狀态時該字段值為1,中止時宇段值為2,如果流程定義被設定為中止狀态,那麼将不能啟動流程。

3 身份資料表

Activiti 的整個身份資料子產品,可以獨立于流程引擎而存在,有關身份資料的幾張表,并沒有儲存與流程相關的資料及關聯。身份表名稱以 ACT_ID 開頭,表名中的"ID"是單詞 identity的縮寫。

3.1 使用者表

流程引擎使用者的資訊被儲存在 ACT_ID_USER 表中,該表有以下幾個字段。

FIRST_ :人名。

LAST_ :姓氏。

EMAIL_ :使用者郵箱。

PWD_ :使用者密碼。

PICTURE_ID_:使用者圖檔,對應資源中的資料ID。

3.2 使用者賬号(資訊)表

Activiti 将使用者、使用者賬号和使用者資訊分為三種資料,其中使用者表儲存使用者的資料,而使用者賬号和使用者資訊,則被儲存到 ACT_ID_INFO 表中,該表有以下字段。

USER_ID_ :對應使用者表的資料 ID,但沒有強制做外鍵關聯。

TYPE_ :資訊類型,目前可以設定使用者賬号 (account )、使用者資訊 (userinfo )和 NULL 三種值。

KEY_ :資料的鍵,可以根據該鍵來查找使用者資訊的值。

VALUE_ :資料的值,類型為 varchar ,長度為 255 宇節。

PASSWORD_ :使用者賬号的密碼字段,不過目前版本的 Activiti 井沒有使用該字段。

PARENT_ID_ :該資訊的父資訊 ID,如果一條資料設定了父資訊 ID,則表示該資料是使用者賬号(資訊)的明細資料,例如一個賬号有激活日期,那麼激活日期就是該賬号的明細資料,此處使用了自關聯來實作。

3.3 使用者組表

使用 ACT_ID_GROUP 表來儲存使用者組的資料,該表有以下幾個字段。

NAME_:使用者組名稱。_

TYPE:使用者組類型,類型不由此 Activiti 提供,但是在某些業務中, Activiti 會根據該字段的值進行查詢,字段值由 Activiti 定義(如 Activiti 的 WebService)。

3.4 關系表

一個使用者組下有多個使用者, 一個使用者可以屬于不同的使用者組,那麼這種多對多的關系,就使用關系表來進行描述,關系表為 ACT_ID_MEMBERSHIP ,隻有兩個字段。

USER_ID_ :使用者 ID,不能為 NULL。

GROUP_ID_ :使用者組 ID,不能為 NULL。

需要注意的是, ACT_ID_ MEMBERSHIP 的兩個字段均做了外鍵限制 寫入該表的資料,必須要有使用者和使用者組資料與之關聯。

4 運作時資料表

運作時資料表用來儲存流程在運作過程中所産生的資料,例如流程執行個體、執行流、任務等。運作時資料表的名稱以 ACT_RU 開頭,“RU ”是單詞 runtime 的縮寫。

4.1 流程執行個體(執行流)表

流程啟動後,會産生一個流程執行個體,同時會産生相應的執行流,流程執行個體和執行流資料均被儲存在 ACT_RU_EXECUTION 表中,如果一個流程執行個體隻有一條執行流,那麼該表中也會産生兩條資料,一條資料表示執行流,另一條表示流程執行個體。 ACT_RU_EXECUTION 表有以下字段.

PROC_INST_ID_ :流程執行個體 ID,一個流程執行個體有可能會産生多個執行流,該字段表示執行流所屬的流程執行個體

BUSINESS_KEY_ : 啟動流程時指定的業務主鍵。

PROC_DEF_ID_ :流程定義資料的 ID。

ACT_ID :目前執行流行為的 ID, ID 在流程檔案中定義。

IS_ACTIVE_ :該執行流是否活躍的辨別。

IS_CONCURRENT_ :執行流是否正在并行。

SUSPENSION_STATE_ :辨別流程的中斷狀态。

4.2 流程任務表

流程在運作過程中所産生的任務資料儲存在 ACT_RU_TASK 表中,該表主要有如下字段。

EXECUTION_ID_ :任務所在的執行流 ID。

PROC_INST_ID_ :對應的流程執行個體 ID。

PROC_DEF_ID_ :對應流程定義資料的 ID。

NAME_ :任務名稱,在流程檔案中定義。

DESCRIPTION_ :任務描述,在流程檔案中配置。

TASK_DEF_KEY_ :任務定義的 ID 值,在流程檔案中定義。

OWNER_ :任務擁有人,沒有做外鍵關聯。

ASSIGNEE_ :被指派執行該任務的人,沒有做外鍵關聯。

PRIORITY_ : 任務優先級數值。

DUE_DATE_ :任務預訂日期,類型為 datetime。

4.3 流程參數表

Activiti 提供了 ACT_RU_VARIABLE 表來存放流程中的參數,這類參數包括流程執行個體參數、執行流參數和任務參數,參數有可能會有多種類型,是以該表使用多個字段來存放參數值ACT_RU_VARIABLE 表主要有以下字段。

TYPE_ :參數類型,該字段值可以為“boolean"、“bytes"、“serializable"、“date"、“double"、“integer"、“jpa-entity"、“long “、“null”、“short"、“string",這些字段值均為 Activiti 提供,還可以通過擴充來自定義參數類型。

NAME_ :參數名稱。

EXECUTION_ID_ :該參數對應的執行 ID,可以為 null。

PROC_INST_ID_ :該參數對應的流程執行個體 ID,可以為 null。

TASK_ID_ :如果該參數是任務參數,就需要設定任務 ID。

BYTEARRAY_ID_ :如果參數值是序列化對象,那麼可以将該對象作為資源儲存到資源表中,該字段儲存資源表中資料的 ID。

DOUBLE_ :參數類型為 double 的話,則值會儲存到該字段中。

LONG_ :參數類型為 long 的話,則值會儲存到該宇段中。

TEXT_ :用于儲存文本類型的參數值,該字段為 varchar 類型,長度為 4000 位元組。

TEXT2_ :與 TEXT 宇段一樣,用于儲存文本類型的參數值。

4.4 流程與身份關系表

使用者組和使用者之間的關系,使用 ACT_ID_MEMBERSHIP 表儲存,使用者或者使用者組與流程資料之間的關系,則使用 ACT_RU_IDENTITYLINK 表進行儲存,相比于 ACT_ID_MEMBERSHIP 表, ACT_RU_IDENTITYLINK 表的宇段更多一些。

GROUP_ID_ :該關系資料中的使用者組 ID。

TYPE_ :該關系資料的類型,目前提供了 個值 assignee、candidate和owner 表示流程資料的指派人(組〉、候選人(組)和擁有人。

USER_ID_ :關系資料中的使用者 ID。

TASK_ID_ :關系資料中的任務 ID。

PROC_INST_ID_ :關系資料中的流程執行個體 ID。

PROC_DEF_ID_:關系資料中的流程定義 ID。

4.5 工作資料表

在流程執行的過程中,會有一些工作需要定時或者重複執行,這類工作資料被儲存到工作表中, Activiti 提供了四個工作表用于儲存不同的工作資料。

ACT_RU_JOB :一般工作表。

ACT_RU_DEADLETTER_JOB :無法執行工作表,用于存放無法執行的工作。

ACT_RU_SUSPENDED_JOB :中斷工作表,中斷工作産生後,會将工作儲存到該表中。

ACT_RU_TIMER_JOB :定時器工作表,用于存放定時器工作。

4.6 事件描述表

如果流程到達某類事件節點, Activiti 會往 ACT_RU_EVENT_SUBSCR 表中加入事件描述資料,這些事件描述資料将會決定流程事件的觸發。 ACT_RU_EVENT_SUBSCR 表有如下字段。

EVENT_TYPE_ :事件類型,不同的事件會産生不同類型的事件描述,并不是所有的事件都會産生事件描述。

EVENT_NAME_ :事件名稱,在流程檔案中定義。

EXECUTION_ID_ :事件所在的執行流 ID。

PROC_INST_ID_ :事件所在的流程執行個體 ID。

ACTIVITY_ID_ :具體事件的 ID,在流程檔案中定義。

CONFIGURATION_ :事件的配置屬性,該宇段中有可能存放流程定義 ID、執行流 ID或者其他資料。

5 曆史資料表

曆史資料表就好像流程引擎的日志表,操作過的流程元素将會被記錄到曆史表中。曆史資料表名稱以 ACT_HI 開頭,“HI”是單詞 history 縮寫。

5.1 流程執行個體表

流程執行個體的曆史資料會被儲存到 ACT_HI_PROCINST 表中,隻要流程被啟動,就會将流程執行個體的資料寫入 ACT_HI_PROCINST 表中 。除了基本的流程字段外,與運作時資料表不同的是,曆史流程執行個體表還會記錄流程的開始活動 ID 、結束活動 ID等資訊 ACT_HI_PROCINST 表有以下三個主要的字段。

START_ACT_ID_ :開始活動的 ID 一般是流程開始事件的 ID,在流程檔案中定義。

END_ACT_ID_ :流程最後一個活動的 ID,一般是流程結束事件的 ID,在流程檔案中定義。

DELETE_REASON_ :該流程執行個體被删除的原因。

該表的其他字段含義與運作時的流程執行個體表宇段類似,在此不再贅述。

5.2 流程明細表

流程明細表(ACT_HI_DETAlL) 會記錄流程執行過程中的參數或者表單資料,由于在流程執行過程中,會産生大量這類資料,是以預設情況下, Activiti 不會儲存流程明細資料,除非将流程引擎的曆史資料( history〉配置為 full。

5.3 曆史任務表和曆史行為表

當流程到達某個任務節點時,就會向曆史任務表(ACT_HI_TASKINST )中寫入曆史任務資料,該表與運作時的任務表類似。曆史行為表(AC_HI_ACT_AXTINST) 會記錄每一個流程活動的執行個體,一個流程活動将會被記錄為一條資料,根據該表可以追蹤最完整的流程資訊。

5.4 附件表和評論表

使用任務服務(TaskService )的 API ,可以添加附件和評論,這些附件和評論的資料将會被儲存到 ACT_HI_ATTACHMENT和ACT_HI_COMMENT表中。 ACT_HI_ATTACHMENT 如下字段。

USER_ID_ :附件對應的使用者 ID,可以為 NULL。

NAME_ :附件名稱。

DESCRIPTION_ :附件描述。

TYPE_ :附件類型。

TASK_ID_ :該附件對應的任務 ID。

PROC_INST_ID_ :對應的流程執行個體 ID。

URL_ :連接配接到該附件的 URL。

CONTENT_ID_ :附件内容 ID,附件的内容将會被儲存到資源表中,該字段記錄資源資料 ID。

ACT_HI_COMMENT 表實際不隻儲存評論資料,它還會儲存某些事件資料,但它的表名為COMMENT ,是以更傾向把它叫作評論表,該表有如下字段。

TYPE_ :評論的類型,可以設值為“event ”或者“ comment ”,表示事件記錄資料或者評論資料。

TIME_ :資料産生的時間。

USER_ID_ :産生評論資料的使用者 ID。

TASK_ID_ :該評論資料的任務 ID。

PROC_INST_ID_ :資料對應的流程執行個體 ID。

ACTION_ :該評論資料的操作辨別。

MESSAGE_ :該評論資料的資訊。

FULL_MSG_ :該字段同樣記錄評論資料的資訊。

雖然附件表和評論表的命名遵守曆史資料表的命名規範(以 ACT_HI 開頭),但是可以調用其他服務元件的 API 來往這兩個表中寫入資料,以筆者的了解,曆史資料表實際上儲存的是那種一經寫入,就很少會發生變化(結構性變化)的資料。

6 DMN規則 (待補充)

Activiti 6.0 中加入了基于 DMN 規範的規則引擎子產品,目前版本主要有 個資料表,儲存規則引擎相關的資料。

6.1 決策部署表

儲存決策資料,類似于流程定義部署,每一次部署,可以添加多份決策檔案,向部署表中寫入一條部署資料,對應資料表為 ACT_DMN_DEPLOYMENT 該表主要有以下字段。

爺兒您要是看的樂,打個賞也讓姑娘樂一樂

德瑪西亞之WorkFlow(四)資料庫設計德瑪西亞之WorkFlow(四)資料庫設計
德瑪西亞之WorkFlow(四)資料庫設計德瑪西亞之WorkFlow(四)資料庫設計

繼續閱讀