-- Workflow 编排核心表。 CREATE TABLE IF NOT EXISTS workflow_definition ( id BIGSERIAL PRIMARY KEY, project_id BIGINT, workflow_code VARCHAR(100) NOT NULL, workflow_name VARCHAR(200) NOT NULL, description VARCHAR(1000), bound_agent_id BIGINT, status VARCHAR(50) NOT NULL DEFAULT 'DRAFT', version INTEGER NOT NULL DEFAULT 1, create_time TIMESTAMP, update_time TIMESTAMP, remark VARCHAR(500) DEFAULT '', create_by VARCHAR(64), update_by VARCHAR(64), CONSTRAINT uk_workflow_definition_code UNIQUE (workflow_code), CONSTRAINT fk_workflow_definition_project_id FOREIGN KEY (project_id) REFERENCES studio_project (id), CONSTRAINT fk_workflow_definition_agent_id FOREIGN KEY (bound_agent_id) REFERENCES agent_definition (id) ); CREATE TABLE IF NOT EXISTS workflow_version ( id BIGSERIAL PRIMARY KEY, workflow_id BIGINT NOT NULL, version_no INTEGER NOT NULL, snapshot_name VARCHAR(100) NOT NULL, graph_json JSONB NOT NULL DEFAULT '{}'::jsonb, publish_status VARCHAR(50) NOT NULL DEFAULT 'DRAFT', published_time TIMESTAMP, version INTEGER NOT NULL DEFAULT 1, create_time TIMESTAMP, update_time TIMESTAMP, remark VARCHAR(500) DEFAULT '', create_by VARCHAR(64), update_by VARCHAR(64), CONSTRAINT uk_workflow_version_no UNIQUE (workflow_id, version_no), CONSTRAINT fk_workflow_version_workflow_id FOREIGN KEY (workflow_id) REFERENCES workflow_definition (id) ); CREATE TABLE IF NOT EXISTS workflow_run ( id BIGSERIAL PRIMARY KEY, request_id VARCHAR(64) NOT NULL, workflow_id BIGINT, workflow_version_id BIGINT, agent_id BIGINT, run_source VARCHAR(50) NOT NULL, status VARCHAR(50) NOT NULL, input_json JSONB NOT NULL DEFAULT '{}'::jsonb, output_json JSONB NOT NULL DEFAULT '{}'::jsonb, duration_ms INTEGER, estimated_cost NUMERIC(14, 8), version INTEGER NOT NULL DEFAULT 1, create_time TIMESTAMP, update_time TIMESTAMP, remark VARCHAR(500) DEFAULT '', create_by VARCHAR(64), update_by VARCHAR(64), CONSTRAINT uk_workflow_run_request_id UNIQUE (request_id), CONSTRAINT fk_workflow_run_workflow_id FOREIGN KEY (workflow_id) REFERENCES workflow_definition (id), CONSTRAINT fk_workflow_run_version_id FOREIGN KEY (workflow_version_id) REFERENCES workflow_version (id), CONSTRAINT fk_workflow_run_agent_id FOREIGN KEY (agent_id) REFERENCES agent_definition (id) ); CREATE TABLE IF NOT EXISTS workflow_run_step ( id BIGSERIAL PRIMARY KEY, run_id BIGINT NOT NULL, node_id VARCHAR(100) NOT NULL, node_type VARCHAR(50) NOT NULL, node_name VARCHAR(200), status VARCHAR(50) NOT NULL, input_json JSONB NOT NULL DEFAULT '{}'::jsonb, output_json JSONB NOT NULL DEFAULT '{}'::jsonb, duration_ms INTEGER, error_message VARCHAR(1000), version INTEGER NOT NULL DEFAULT 1, create_time TIMESTAMP, update_time TIMESTAMP, remark VARCHAR(500) DEFAULT '', create_by VARCHAR(64), update_by VARCHAR(64), CONSTRAINT fk_workflow_run_step_run_id FOREIGN KEY (run_id) REFERENCES workflow_run (id) ); CREATE INDEX IF NOT EXISTS idx_workflow_definition_project_id ON workflow_definition (project_id); CREATE INDEX IF NOT EXISTS idx_workflow_definition_status ON workflow_definition (status); CREATE INDEX IF NOT EXISTS idx_workflow_version_workflow_id ON workflow_version (workflow_id); CREATE INDEX IF NOT EXISTS idx_workflow_run_workflow_id ON workflow_run (workflow_id); CREATE INDEX IF NOT EXISTS idx_workflow_run_status ON workflow_run (status); CREATE INDEX IF NOT EXISTS idx_workflow_run_step_run_id ON workflow_run_step (run_id); COMMENT ON TABLE workflow_definition IS 'Workflow定义表'; COMMENT ON TABLE workflow_version IS 'Workflow版本快照表'; COMMENT ON TABLE workflow_run IS 'Workflow运行记录表'; COMMENT ON TABLE workflow_run_step IS 'Workflow运行步骤表';