MySQL schema Class 初稿

整理 TaskStore PoC 第一版四個 C# record class 的欄位、MySQL 型別、索引與描述。

返回 docs

MySQL schema Class 初稿

本文件用於整理 MySQL TaskStore PoC 第一版的 C# schema class 初稿。目標是讓 MySQL 欄位型別、索引與描述可以先在 C# Class 中維護,再由 Schema Generator 產生 MySQL 5.6.2 相容 DDL。

本文件仍屬設計初稿,不代表已經同意修改程式 repo、安裝套件、建立資料表、變更 public method 或改變專案啟動方式。

設計原則

共用型別規則

語意MySQL 型別C# 型別說明
識別碼varchar(64)stringTaskId、NodeId、DeviceId 等
名稱varchar(128)stringWorkflowName、NodeName、DeviceName
狀態varchar(32)stringrunning、completed、failed 等
錯誤碼varchar(64)string標準 ErrorCode
原始資料longtextstringRawRequest、RawResponse、AdapterData、StackTrace
時間datetimeDateTime?不使用小數秒

第一版資料表總覽

C# ClassTable用途
TaskExecutionRecordtask_executions任務層級狀態與摘要
NodeExecutionRecordnode_executions節點執行歷程
CommandExecutionRecordcommand_executionsAdapter / Device command 執行結果
TaskErrorRecordtask_errors錯誤快照與例外資訊

TaskExecutionRecord

用途:保存一次 Workflow / Task 執行的總體狀態。建議 Table:task_executions

[DbTable("task_executions", Description = "任務執行紀錄")]
[DbIndex("idx_task_workflow", "workflow_id")]
[DbIndex("idx_task_status", "status")]
[DbIndex("idx_task_started_at", "started_at")]
[DbIndex("idx_task_error_code", "error_code")]
public class TaskExecutionRecord
{
    [DbColumn("task_id", "varchar(64)", IsPrimaryKey = true, IsRequired = true, Description = "任務識別碼")]
    public string TaskId { get; set; }

    [DbColumn("workflow_id", "varchar(64)", IsRequired = true, Description = "Workflow 識別碼")]
    public string WorkflowId { get; set; }

    [DbColumn("status", "varchar(32)", IsRequired = true, Description = "任務狀態")]
    public string Status { get; set; }
}

完整建議欄位包含 TaskIdWorkflowIdWorkflowNameWorkflowVersionStatusStartNodeIdCurrentNodeIdStartedAtEndedAtTimeTakenMsResultCodeResultMessageErrorCodeOperatorNameHostNameAppVersionCreatedAtUpdatedAt

NodeExecutionRecord

用途:保存每個 Workflow Node 的執行結果、重試與錯誤摘要。建議 Table:node_executions

PropertyColumnMySQL 型別必填描述
NodeExecutionIdnode_execution_idvarchar(64)是,PK節點執行紀錄識別碼
TaskIdtask_idvarchar(64)所屬任務識別碼
NodeIdnode_idvarchar(64)Workflow Node 識別碼
Statusstatusvarchar(32)節點狀態
DeviceIddevice_idvarchar(64)節點使用設備
CommandNamecommand_namevarchar(64)節點執行命令
StartedAtstarted_atdatetime開始時間
ErrorCodeerror_codevarchar(64)節點錯誤代碼

CommandExecutionRecord

用途:保存 Adapter / Device command 的實際執行紀錄,包含 RawRequest、RawResponse 與 AdapterData。建議 Table:command_executions

PropertyColumnMySQL 型別必填描述
CommandExecutionIdcommand_execution_idvarchar(64)是,PK命令執行紀錄識別碼
TaskIdtask_idvarchar(64)所屬任務識別碼
DeviceIddevice_idvarchar(64)設備識別碼
ConnectionTypeconnection_typevarchar(32)TCP、UDP、Serial、ModbusTcp 等
CommandNamecommand_namevarchar(64)命令名稱
Statusstatusvarchar(32)命令狀態
RawRequestraw_requestlongtext原始請求內容
RawResponseraw_responselongtext原始回應內容
AdapterDataadapter_datalongtextAdapter 附加資料

TaskErrorRecord

用途:保存錯誤快照,讓任務、節點、命令錯誤可被獨立查詢。建議 Table:task_errors

PropertyColumnMySQL 型別必填描述
ErrorRecordIderror_record_idvarchar(64)是,PK錯誤紀錄識別碼
TaskIdtask_idvarchar(64)所屬任務識別碼
ErrorCodeerror_codevarchar(64)標準錯誤代碼
ErrorMessageerror_messagetext錯誤訊息
ExceptionTypeexception_typevarchar(128)Exception 型別
StackTracestack_tracelongtextStack trace
SourceLayersource_layervarchar(64)Core、Adapter、Infrastructure、Host
OccurredAtoccurred_atdatetime錯誤發生時間

不建議第一版納入的欄位

欄位延後原因
site_id多案場尚未進入第二階段第一個 PoC
tenant_id權限與租戶模型尚未定義
user_id使用者系統尚未導入
device_group_id設備主檔與群組管理尚未定義
json 型態欄位MySQL 5.6.2 不適合使用

待確認問題

  1. CreatedAt / StartedAt / EndedAt 是否統一由程式端寫入。
  2. 時間是否統一保存 UTC,顯示時再轉本地時間。
  3. 第一版是否允許 RawRequest / RawResponse 保存完整內容。
  4. AdapterData 是否需限制大小或只保存摘要。
  5. 第一版是否先不建立外鍵,只保留索引與邏輯關聯。

建議下一步

MySQL 行前連線資訊確認請參考:MySQL 行前連線資訊確認

建議下一步做「MySQL 行前連線資訊確認」,先確認測試 database、Host、Port、User、Password 提供方式與權限。

資訊齊全後再進入「Schema Attribute 實作前確認」與程式 repo 實作。