Claude Code Plugins

Community-maintained marketplace

Feedback

44-database-design

@TencentBlueKing/bk-ci
2.5k
0

BK-CI 数据库设计规范与表结构指南,涵盖命名规范、字段类型选择、索引设计、分表策略、数据归档。当用户设计数据库表、优化索引、规划分表策略或进行数据库架构设计时使用。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name 44-database-design
description BK-CI 数据库设计规范与表结构指南,涵盖命名规范、字段类型选择、索引设计、分表策略、数据归档。当用户设计数据库表、优化索引、规划分表策略或进行数据库架构设计时使用。

BK-CI 数据库设计规范与表结构指南

一、数据库架构概述

1.1 数据库分布

BK-CI 采用微服务架构,每个服务拥有独立的数据库:

数据库名 所属服务 说明
devops_ci_process Process 流水线核心数据,表最多(89KB DDL)
devops_ci_store Store 研发商店数据(87KB DDL)
devops_ci_auth Auth 权限认证数据(33KB DDL)
devops_ci_project Project 项目管理数据(25KB DDL)
devops_ci_quality Quality 质量红线数据(25KB DDL)
devops_ci_dispatch Dispatch 构建调度数据(24KB DDL)
devops_ci_repository Repository 代码库数据(19KB DDL)
devops_ci_metrics Metrics 度量数据(20KB DDL)
devops_ci_environment Environment 构建机环境数据(14KB DDL)
devops_ci_notify Notify 通知服务数据(14KB DDL)
devops_ci_ticket Ticket 凭证管理数据(5KB DDL)
devops_ci_artifactory Artifactory 制品库数据(4KB DDL)
devops_ci_openapi OpenAPI 开放接口数据(3KB DDL)
devops_ci_log Log 日志服务数据(2KB DDL)

1.2 SQL 脚本组织规范

support-files/sql/
├── 0001_ci_create-database_mysql.sql      # 创建所有数据库
├── 1001_ci_*_ddl_mysql.sql                # 各模块完整 DDL
├── 2001_v0.x/                             # v0.x 版本增量更新
├── 2002_v1.x/                             # v1.x 版本增量更新
├── 2003_v2.x/                             # v2.x 版本增量更新
├── 2004_v3.x/                             # v3.x 版本增量更新
├── 2025_v4.x/                             # v4.x 版本增量更新
└── 5001_init_dml/                         # 初始化数据

命名规范

  • 创建数据库:0001_{系统}_create-database_{db类型}.sql
  • 完整 DDL:1xxx_{系统}_{模块}_ddl_{db类型}.sql
  • 增量更新:2xxx_{系统}_{模块}_update_{版本号}_{db类型}.sql
  • 初始化数据:5001_{系统}_{模块}_dml_{db类型}.sql

二、核心表结构详解

2.1 Process 模块(流水线核心)

流水线信息表

-- T_PIPELINE_INFO:流水线基本信息
CREATE TABLE T_PIPELINE_INFO (
  PIPELINE_ID varchar(34) PRIMARY KEY,        -- 流水线ID(P-32位UUID)
  PROJECT_ID varchar(64) NOT NULL,            -- 项目ID
  PIPELINE_NAME varchar(255) NOT NULL,        -- 流水线名称
  VERSION int(11) DEFAULT 1,                  -- 版本号
  CHANNEL varchar(32),                        -- 渠道(BS/CODECC/AM等)
  CREATOR varchar(64) NOT NULL,               -- 创建者
  CREATE_TIME timestamp NOT NULL,             -- 创建时间
  LAST_MODIFY_USER varchar(64) NOT NULL,      -- 最近修改者
  UPDATE_TIME timestamp,                      -- 更新时间
  `DELETE` bit(1) DEFAULT b'0',               -- 软删除标记
  LOCKED bit(1) DEFAULT b'0',                 -- 锁定标记(PAC)
  UNIQUE KEY (PROJECT_ID, PIPELINE_NAME)
);

-- T_PIPELINE_RESOURCE:流水线编排资源
CREATE TABLE T_PIPELINE_RESOURCE (
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(34) NOT NULL,
  VERSION int(11) NOT NULL DEFAULT 1,         -- 版本号
  MODEL mediumtext,                           -- 流水线模型(JSON)
  YAML mediumtext,                            -- YAML 编排
  CREATOR varchar(64),
  CREATE_TIME timestamp NOT NULL,
  PRIMARY KEY (PIPELINE_ID, VERSION)
);

-- T_PIPELINE_SETTING:流水线配置
CREATE TABLE T_PIPELINE_SETTING (
  PIPELINE_ID varchar(34) PRIMARY KEY,
  PROJECT_ID varchar(64),
  NAME varchar(255),
  RUN_LOCK_TYPE int(11) DEFAULT 1,            -- 运行锁类型
  WAIT_QUEUE_TIME_SECOND int(11) DEFAULT 7200,-- 最大排队时长
  MAX_QUEUE_SIZE int(11) DEFAULT 10,          -- 最大排队数量
  CONCURRENCY_GROUP varchar(255),             -- 并发组
  BUILD_NUM_RULE varchar(512),                -- 构建号规则
  SUCCESS_SUBSCRIPTION text,                  -- 成功订阅
  FAILURE_SUBSCRIPTION text                   -- 失败订阅
);

构建历史表

-- T_PIPELINE_BUILD_HISTORY:构建历史(核心表)
CREATE TABLE T_PIPELINE_BUILD_HISTORY (
  BUILD_ID varchar(34) PRIMARY KEY,           -- 构建ID(b-32位UUID)
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(34) NOT NULL,
  BUILD_NUM int(20) DEFAULT 0,                -- 构建号
  VERSION int(11),                            -- 编排版本号
  STATUS int(11),                             -- 构建状态
  START_USER varchar(64),                     -- 启动者
  TRIGGER varchar(32) NOT NULL,               -- 触发方式
  TRIGGER_USER varchar(64),                   -- 触发者
  START_TIME timestamp,                       -- 开始时间
  END_TIME timestamp,                         -- 结束时间
  EXECUTE_TIME bigint(20),                    -- 执行时长
  MATERIAL mediumtext,                        -- 代码材料
  BUILD_PARAMETERS mediumtext,                -- 构建参数
  ERROR_TYPE int(11),                         -- 错误类型
  ERROR_CODE int(11),                         -- 错误码
  ERROR_MSG text,                             -- 错误信息
  
  -- 索引设计
  KEY STATUS_KEY (PROJECT_ID, PIPELINE_ID, STATUS),
  KEY INX_PROJECT_PIPELINE_NUM (PROJECT_ID, PIPELINE_ID, BUILD_NUM),
  KEY INX_PROJECT_PIPELINE_START_TIME (PROJECT_ID, PIPELINE_ID, START_TIME),
  KEY inx_status (STATUS),
  KEY inx_start_time (START_TIME)
);

-- T_PIPELINE_BUILD_SUMMARY:构建摘要(聚合表)
CREATE TABLE T_PIPELINE_BUILD_SUMMARY (
  PIPELINE_ID varchar(34) PRIMARY KEY,
  PROJECT_ID varchar(64) NOT NULL,
  BUILD_NUM int(11) DEFAULT 0,                -- 当前构建号
  FINISH_COUNT int(11) DEFAULT 0,             -- 完成次数
  RUNNING_COUNT int(11) DEFAULT 0,            -- 运行中次数
  QUEUE_COUNT int(11) DEFAULT 0,              -- 排队次数
  LATEST_BUILD_ID varchar(34),                -- 最近构建ID
  LATEST_STATUS int(11),                      -- 最近状态
  LATEST_START_TIME timestamp,                -- 最近开始时间
  LATEST_END_TIME timestamp                   -- 最近结束时间
);

构建任务表

-- T_PIPELINE_BUILD_TASK:构建任务详情
CREATE TABLE T_PIPELINE_BUILD_TASK (
  BUILD_ID varchar(34) NOT NULL,
  TASK_ID varchar(34) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(34) NOT NULL,
  STAGE_ID varchar(34) NOT NULL,
  CONTAINER_ID varchar(34) NOT NULL,
  TASK_NAME varchar(128),
  TASK_TYPE varchar(64) NOT NULL,             -- 任务类型
  TASK_ATOM varchar(128),                     -- 插件标识
  ATOM_CODE varchar(128),                     -- 插件代码
  STATUS int(11),                             -- 任务状态
  START_TIME timestamp,
  END_TIME timestamp,
  EXECUTE_COUNT int(11) DEFAULT 0,            -- 执行次数
  ERROR_TYPE int(11),
  ERROR_CODE int(11),
  ERROR_MSG text,
  TASK_PARAMS mediumtext,                     -- 任务参数(JSON)
  
  PRIMARY KEY (BUILD_ID, TASK_ID),
  KEY PROJECT_PIPELINE (PROJECT_ID, PIPELINE_ID)
);

-- T_PIPELINE_BUILD_STAGE:构建阶段
CREATE TABLE T_PIPELINE_BUILD_STAGE (
  BUILD_ID varchar(64) NOT NULL,
  STAGE_ID varchar(64) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(64) NOT NULL,
  SEQ int(11) NOT NULL,                       -- 阶段序号
  STATUS int(11),
  START_TIME timestamp,
  END_TIME timestamp,
  CHECK_IN mediumtext,                        -- 准入检查
  CHECK_OUT mediumtext,                       -- 准出检查
  PRIMARY KEY (BUILD_ID, STAGE_ID)
);

-- T_PIPELINE_BUILD_CONTAINER:构建容器
CREATE TABLE T_PIPELINE_BUILD_CONTAINER (
  BUILD_ID varchar(64) NOT NULL,
  STAGE_ID varchar(64) NOT NULL,
  CONTAINER_ID varchar(64) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(64) NOT NULL,
  CONTAINER_TYPE varchar(45),                 -- 容器类型
  SEQ int(11) NOT NULL,
  STATUS int(11),
  MATRIX_GROUP_FLAG BIT(1),                   -- 是否矩阵构建
  MATRIX_GROUP_ID varchar(64),                -- 矩阵组ID
  JOB_ID varchar(128),
  PRIMARY KEY (BUILD_ID, STAGE_ID, CONTAINER_ID)
);

-- T_PIPELINE_BUILD_VAR:构建变量
CREATE TABLE T_PIPELINE_BUILD_VAR (
  BUILD_ID varchar(34) NOT NULL,
  `KEY` varchar(255) NOT NULL,                -- 变量名
  `VALUE` varchar(4000),                      -- 变量值
  PROJECT_ID varchar(64),
  PIPELINE_ID varchar(64),
  VAR_TYPE VARCHAR(64),                       -- 变量类型
  READ_ONLY bit(1),                           -- 是否只读
  PRIMARY KEY (BUILD_ID, `KEY`)
);

构建执行记录表(RECORD 系列)

重要: BK-CI 有两套构建记录表,BUILD 系列用于引擎执行调度,RECORD 系列用于前端展示和历史查询。 RECORD 系列通过 EXECUTE_COUNT 字段支持同一构建的多次重试记录。

-- T_PIPELINE_BUILD_RECORD_MODEL:构建模型记录(支持多次执行)
CREATE TABLE T_PIPELINE_BUILD_RECORD_MODEL (
  BUILD_ID varchar(34) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(34) NOT NULL,
  RESOURCE_VERSION int(11) NOT NULL,          -- 编排版本
  BUILD_NUM int(20) NOT NULL,                 -- 构建次数
  EXECUTE_COUNT int(11) NOT NULL,             -- 执行次数(重试时递增)
  START_USER varchar(32) NOT NULL,
  MODEL_VAR mediumtext NOT NULL,              -- 模型级别变量(JSON)
  START_TYPE varchar(32) NOT NULL,            -- 触发方式
  QUEUE_TIME datetime(3) NOT NULL,
  START_TIME datetime(3) NULL,
  END_TIME datetime(3) NULL,
  STATUS varchar(32),
  ERROR_INFO text,                            -- 错误信息
  CANCEL_USER varchar(32),
  TIMESTAMPS text,                            -- 时间戳集合
  PRIMARY KEY (BUILD_ID, EXECUTE_COUNT)
);

-- T_PIPELINE_BUILD_RECORD_STAGE:阶段记录
CREATE TABLE T_PIPELINE_BUILD_RECORD_STAGE (
  BUILD_ID varchar(64) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(64) NOT NULL,
  RESOURCE_VERSION int(11),
  STAGE_ID varchar(64) NOT NULL,
  SEQ int(11) NOT NULL,
  STAGE_VAR text NOT NULL,                    -- 阶段级别变量
  STATUS varchar(32),
  EXECUTE_COUNT int(11) NOT NULL DEFAULT 1,
  START_TIME datetime(3) NULL,
  END_TIME datetime(3) NULL,
  TIMESTAMPS text,
  PRIMARY KEY (BUILD_ID, STAGE_ID, EXECUTE_COUNT)
);

-- T_PIPELINE_BUILD_RECORD_CONTAINER:容器记录
CREATE TABLE T_PIPELINE_BUILD_RECORD_CONTAINER (
  BUILD_ID varchar(64) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(64) NOT NULL,
  RESOURCE_VERSION int(11) NOT NULL,
  STAGE_ID varchar(64) NOT NULL,
  CONTAINER_ID varchar(64) NOT NULL,
  EXECUTE_COUNT int(11) NOT NULL DEFAULT 1,
  STATUS varchar(32),
  CONTAINER_VAR mediumtext NOT NULL,          -- 容器级别变量
  CONTAINER_TYPE varchar(45),
  CONTAIN_POST_TASK bit(1),                   -- 包含POST插件标识
  MATRIX_GROUP_FLAG bit(1),                   -- 矩阵标识
  MATRIX_GROUP_ID varchar(64),
  START_TIME datetime(3) NULL,
  END_TIME datetime(3) NULL,
  TIMESTAMPS text,
  PRIMARY KEY (BUILD_ID, CONTAINER_ID, EXECUTE_COUNT)
);

-- T_PIPELINE_BUILD_RECORD_TASK:任务记录
CREATE TABLE T_PIPELINE_BUILD_RECORD_TASK (
  BUILD_ID varchar(34) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  PIPELINE_ID varchar(34) NOT NULL,
  RESOURCE_VERSION int(11) NOT NULL,
  STAGE_ID varchar(34) NOT NULL,
  CONTAINER_ID varchar(34) NOT NULL,
  TASK_ID varchar(34) NOT NULL,
  TASK_SEQ int(11) NOT NULL DEFAULT 1,
  EXECUTE_COUNT int(11) NOT NULL DEFAULT 1,
  STATUS varchar(32),
  TASK_VAR mediumtext NOT NULL,               -- 任务级别变量
  POST_INFO text,                             -- POST插件关联信息
  CLASS_TYPE varchar(64) NOT NULL,
  ATOM_CODE varchar(128) NOT NULL,
  ORIGIN_CLASS_TYPE varchar(64),
  START_TIME datetime(3) NULL,
  END_TIME datetime(3) NULL,
  TIMESTAMPS text,
  ASYNC_STATUS varchar(32),                   -- 异步执行状态
  PRIMARY KEY (BUILD_ID, TASK_ID, EXECUTE_COUNT)
);

BUILD vs RECORD 表使用场景:

场景 BUILD 表 RECORD 表
引擎调度执行
Worker 拉取任务
前端构建详情页
查看历史执行记录
重试时保留历史 ❌ 覆盖 ✅ 新增

模板相关表

-- T_TEMPLATE:流水线模板
CREATE TABLE T_TEMPLATE (
  VERSION bigint(20) AUTO_INCREMENT,          -- 模板版本
  ID varchar(32) NOT NULL,                    -- 模板ID
  TEMPLATE_NAME varchar(64) NOT NULL,
  PROJECT_ID varchar(34) NOT NULL,
  VERSION_NAME varchar(64) NOT NULL,
  TEMPLATE mediumtext,                        -- 模板内容(JSON)
  TYPE varchar(32) DEFAULT 'CUSTOMIZE',       -- 类型
  STORE_FLAG bit(1) DEFAULT b'0',             -- 是否关联商店
  PRIMARY KEY (VERSION),
  KEY ID (ID)
);

-- T_TEMPLATE_PIPELINE:模板实例关联
CREATE TABLE T_TEMPLATE_PIPELINE (
  PIPELINE_ID varchar(34) PRIMARY KEY,
  PROJECT_ID varchar(64) NOT NULL,
  TEMPLATE_ID varchar(32) NOT NULL,
  VERSION bigint(20) NOT NULL,
  INSTANCE_TYPE VARCHAR(32) DEFAULT 'CONSTRAINT', -- FREEDOM/CONSTRAINT
  PARAM mediumtext,                           -- 实例参数
  STATUS varchar(32) DEFAULT 'UPDATED'
);

2.2 Project 模块(项目管理)

-- T_PROJECT:项目信息(核心表)
CREATE TABLE T_PROJECT (
  ID bigint(20) AUTO_INCREMENT,
  PROJECT_ID varchar(32) NOT NULL,            -- 项目ID(英文名)
  project_name varchar(64) NOT NULL,          -- 项目名称
  english_name varchar(64) NOT NULL,          -- 英文名称
  creator varchar(32),                        -- 创建者
  description text,                           -- 描述
  is_offlined bit(1) DEFAULT b'0',            -- 是否停用
  bg_id bigint(20),                           -- 事业群ID
  bg_name varchar(255),                       -- 事业群名称
  dept_id bigint(20),                         -- 部门ID
  dept_name varchar(255),                     -- 部门名称
  center_id bigint(20),                       -- 中心ID
  center_name varchar(255),                   -- 中心名称
  approval_status int(10) DEFAULT 1,          -- 审核状态
  CHANNEL varchar(32) DEFAULT 'BS',           -- 渠道
  pipeline_limit int(10) DEFAULT 500,         -- 流水线数量上限
  router_tag varchar(32),                     -- 路由标签
  properties text,                            -- 其他配置
  
  PRIMARY KEY (ID),
  UNIQUE KEY project_name (project_name),
  UNIQUE KEY project_id (PROJECT_ID),
  UNIQUE KEY english_name (english_name)
);

-- T_SERVICE:服务信息
CREATE TABLE T_SERVICE (
  id bigint(20) AUTO_INCREMENT PRIMARY KEY,
  name varchar(64),                           -- 服务名称
  english_name varchar(64),                   -- 英文名称
  service_type_id bigint(20),                 -- 服务类型
  link varchar(255),                          -- 跳转链接
  status varchar(64),                         -- 状态
  UNIQUE KEY service_name (name)
);

-- T_SHARDING_ROUTING_RULE:分片路由规则
CREATE TABLE T_SHARDING_ROUTING_RULE (
  ID varchar(32) PRIMARY KEY,
  ROUTING_NAME varchar(128) NOT NULL,         -- 路由名称
  ROUTING_RULE varchar(256) NOT NULL,         -- 路由规则
  CLUSTER_NAME varchar(64) DEFAULT 'prod',    -- 集群名称
  MODULE_CODE varchar(64) DEFAULT 'PROCESS',  -- 模块标识
  TYPE varchar(32) DEFAULT 'DB',              -- 路由类型
  DATA_SOURCE_NAME varchar(128) DEFAULT 'ds_0'-- 数据源名称
);

2.3 Auth 模块(权限认证)

-- T_AUTH_RESOURCE:资源表
CREATE TABLE T_AUTH_RESOURCE (
  ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_CODE varchar(32) NOT NULL,
  RESOURCE_TYPE varchar(32) NOT NULL,         -- 资源类型
  RESOURCE_CODE varchar(255) NOT NULL,        -- 资源ID
  RESOURCE_NAME varchar(255) NOT NULL,        -- 资源名
  IAM_RESOURCE_CODE varchar(32) NOT NULL,     -- IAM资源ID
  ENABLE bit(1) DEFAULT b'0',                 -- 是否启用权限管理
  RELATION_ID varchar(32) NOT NULL,           -- IAM分级管理员ID
  
  UNIQUE KEY IDX_PROJECT_RESOURCE (PROJECT_CODE, RESOURCE_TYPE, RESOURCE_CODE)
);

-- T_AUTH_RESOURCE_GROUP:资源用户组
CREATE TABLE T_AUTH_RESOURCE_GROUP (
  ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_CODE varchar(32) NOT NULL,
  RESOURCE_TYPE varchar(32) NOT NULL,
  RESOURCE_CODE varchar(255) NOT NULL,
  GROUP_CODE varchar(32) NOT NULL,            -- 用户组标识
  GROUP_NAME varchar(255) NOT NULL,           -- 用户组名称
  DEFAULT_GROUP bit(1) DEFAULT b'1',          -- 是否默认组
  RELATION_ID varchar(32) NOT NULL,           -- IAM组ID
  
  UNIQUE KEY (PROJECT_CODE, RESOURCE_TYPE, RESOURCE_CODE, GROUP_NAME)
);

-- T_AUTH_RESOURCE_GROUP_MEMBER:用户组成员
CREATE TABLE T_AUTH_RESOURCE_GROUP_MEMBER (
  ID bigint AUTO_INCREMENT PRIMARY KEY,
  PROJECT_CODE varchar(64) NOT NULL,
  RESOURCE_TYPE varchar(32) NOT NULL,
  RESOURCE_CODE varchar(255) NOT NULL,
  GROUP_CODE varchar(32) NOT NULL,
  IAM_GROUP_ID int(20) NOT NULL,
  MEMBER_ID varchar(64) NOT NULL,             -- 成员ID
  MEMBER_NAME varchar(512) NOT NULL,          -- 成员名
  MEMBER_TYPE varchar(32) NOT NULL,           -- 成员类型
  EXPIRED_TIME datetime NOT NULL,             -- 过期时间
  
  UNIQUE KEY (PROJECT_CODE, IAM_GROUP_ID, MEMBER_ID)
);

-- T_AUTH_ACTION:权限操作表
CREATE TABLE T_AUTH_ACTION (
  ACTION varchar(64) PRIMARY KEY,             -- 操作ID
  RESOURCE_TYPE varchar(64) NOT NULL,         -- 关联资源类型
  ACTION_NAME varchar(64) NOT NULL,           -- 操作名称
  ACTION_TYPE varchar(32)                     -- 操作类型
);

2.4 Store 模块(研发商店)

-- T_ATOM:插件信息
CREATE TABLE T_ATOM (
  ID varchar(32) PRIMARY KEY,
  NAME varchar(64) NOT NULL,                  -- 插件名称
  ATOM_CODE varchar(64) NOT NULL,             -- 插件唯一标识
  CLASS_TYPE varchar(64) NOT NULL,            -- 插件大类
  VERSION varchar(30) NOT NULL,               -- 版本号
  ATOM_STATUS tinyint(4) NOT NULL,            -- 插件状态
  ATOM_TYPE tinyint(4) DEFAULT 1,             -- 插件类型
  OS varchar(100) NOT NULL,                   -- 支持的操作系统
  CLASSIFY_ID varchar(32) NOT NULL,           -- 分类ID
  LATEST_FLAG bit(1) NOT NULL,                -- 是否最新版本
  DEFAULT_FLAG bit(1) DEFAULT b'0',           -- 是否默认插件
  PUBLISHER varchar(50) DEFAULT 'system',     -- 发布者
  PROPS text,                                 -- 插件属性(JSON)
  
  UNIQUE KEY (ATOM_CODE, VERSION),
  KEY inx_atom_status (ATOM_STATUS),
  KEY inx_latest_flag (LATEST_FLAG)
);

-- T_ATOM_ENV_INFO:插件执行环境
CREATE TABLE T_ATOM_ENV_INFO (
  ID varchar(32) PRIMARY KEY,
  ATOM_ID varchar(32) NOT NULL,
  PKG_PATH varchar(1024) NOT NULL,            -- 安装包路径
  LANGUAGE varchar(64),                       -- 开发语言
  TARGET varchar(256) NOT NULL,               -- 执行入口
  OS_NAME varchar(128),                       -- 操作系统
  OS_ARCH varchar(128),                       -- 系统架构
  RUNTIME_VERSION varchar(128),               -- 运行时版本
  DEFAULT_FLAG bit(1) DEFAULT b'1',           -- 是否默认环境
  
  UNIQUE KEY (ATOM_ID, OS_NAME, OS_ARCH)
);

-- T_STORE_PROJECT_REL:商店组件与项目关联
CREATE TABLE T_STORE_PROJECT_REL (
  ID varchar(32) PRIMARY KEY,
  STORE_CODE varchar(64) NOT NULL,            -- 组件编码
  PROJECT_CODE varchar(64) NOT NULL,          -- 项目ID
  TYPE tinyint(4) NOT NULL,                   -- 关联类型
  STORE_TYPE tinyint(4) DEFAULT 0,            -- 组件类型
  
  UNIQUE KEY (STORE_CODE, STORE_TYPE, PROJECT_CODE, TYPE, INSTANCE_ID, CREATOR)
);

-- T_STORE_STATISTICS_TOTAL:统计信息
CREATE TABLE T_STORE_STATISTICS_TOTAL (
  ID varchar(32) PRIMARY KEY,
  STORE_CODE varchar(64) NOT NULL,
  STORE_TYPE tinyint(4) DEFAULT 0,
  DOWNLOADS int(11) DEFAULT 0,                -- 下载量
  COMMITS int(11) DEFAULT 0,                  -- 评论数
  SCORE int(11) DEFAULT 0,                    -- 评分
  SCORE_AVERAGE decimal(3,1) DEFAULT 0.0,     -- 平均分
  PIPELINE_NUM INT(11) DEFAULT 0,             -- 流水线数
  
  UNIQUE KEY (STORE_CODE, STORE_TYPE)
);

2.5 Repository 模块(代码库)

-- T_REPOSITORY:代码库信息
CREATE TABLE T_REPOSITORY (
  REPOSITORY_ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_ID varchar(32) NOT NULL,
  USER_ID varchar(64) NOT NULL,
  ALIAS_NAME varchar(255) NOT NULL,           -- 别名
  URL varchar(255) NOT NULL,                  -- 仓库URL
  TYPE varchar(20) NOT NULL,                  -- 类型(SVN/GIT/GITHUB等)
  REPOSITORY_HASH_ID varchar(64),             -- 哈希ID
  IS_DELETED bit(1) NOT NULL,                 -- 是否删除
  ENABLE_PAC bit(1) DEFAULT false,            -- 是否开启PAC
  
  KEY PROJECT_ID (PROJECT_ID),
  KEY inx_alias_name (ALIAS_NAME)
);

-- T_REPOSITORY_CODE_GIT:Git代码库详情
CREATE TABLE T_REPOSITORY_CODE_GIT (
  REPOSITORY_ID bigint(20) PRIMARY KEY,
  PROJECT_NAME varchar(255) NOT NULL,         -- 项目名称
  USER_NAME varchar(64) NOT NULL,             -- 用户名
  CREDENTIAL_ID varchar(64) NOT NULL,         -- 凭据ID
  AUTH_TYPE varchar(8),                       -- 认证方式
  GIT_PROJECT_ID bigint(20) DEFAULT 0         -- Git项目ID
);

-- T_REPOSITORY_COMMIT:提交记录
CREATE TABLE T_REPOSITORY_COMMIT (
  ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  BUILD_ID varchar(34),
  PIPELINE_ID varchar(34),
  REPO_ID bigint(20),
  TYPE smallint(6),                           -- 1-svn, 2-git, 3-gitlab
  COMMIT varchar(64),                         -- 提交ID
  COMMITTER varchar(32),                      -- 提交者
  COMMIT_TIME datetime,                       -- 提交时间
  COMMENT longtext,                           -- 提交信息
  
  KEY IDX_BUILD_ID_TIME (BUILD_ID, COMMIT_TIME)
);

2.6 Dispatch 模块(构建调度)

-- T_DISPATCH_THIRDPARTY_AGENT_BUILD:第三方构建机任务
CREATE TABLE T_DISPATCH_THIRDPARTY_AGENT_BUILD (
  ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_ID varchar(64) NOT NULL,
  AGENT_ID varchar(32) NOT NULL,              -- 构建机ID
  PIPELINE_ID varchar(34) NOT NULL,
  BUILD_ID varchar(34) NOT NULL,
  VM_SEQ_ID varchar(34) NOT NULL,             -- 构建序列号
  STATUS int(11) NOT NULL,                    -- 状态
  WORKSPACE varchar(4096),                    -- 工作空间
  NODE_ID bigint(20) DEFAULT 0,               -- 节点ID
  DOCKER_INFO json,                           -- Docker构建信息
  
  UNIQUE KEY (BUILD_ID, VM_SEQ_ID),
  KEY idx_agent_id (AGENT_ID),
  KEY idx_status (STATUS)
);

-- T_DISPATCH_RUNNING_JOBS:运行中的任务
CREATE TABLE T_DISPATCH_RUNNING_JOBS (
  ID int(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_ID varchar(128) NOT NULL,
  VM_TYPE varchar(128) NOT NULL,              -- 构建机类型
  CHANNEL_CODE varchar(128) DEFAULT 'BS',     -- 构建来源
  BUILD_ID varchar(128) NOT NULL,
  VM_SEQ_ID varchar(128) NOT NULL,
  EXECUTE_COUNT int(11) NOT NULL,             -- 执行次数
  CREATED_TIME datetime NOT NULL,
  AGENT_START_TIME datetime,                  -- 构建机启动时间
  
  KEY inx_project_id (PROJECT_ID, VM_TYPE, CHANNEL_CODE),
  KEY inx_build_id (BUILD_ID)
);

-- T_DISPATCH_QUOTA_PROJECT:项目配额
CREATE TABLE T_DISPATCH_QUOTA_PROJECT (
  PROJECT_ID varchar(128) NOT NULL,
  VM_TYPE varchar(128) NOT NULL,
  CHANNEL_CODE varchar(128) DEFAULT 'BS',
  RUNNING_JOBS_MAX int(10) NOT NULL,          -- 最大并发JOB数
  RUNNING_TIME_JOB_MAX int(10) NOT NULL,      -- 单JOB最大执行时间
  RUNNING_TIME_PROJECT_MAX int(10) NOT NULL,  -- 项目最大执行时间
  
  PRIMARY KEY (PROJECT_ID, VM_TYPE, CHANNEL_CODE)
);

2.7 Environment 模块(构建机环境)

-- T_NODE:节点信息
CREATE TABLE T_NODE (
  NODE_ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_ID varchar(64) NOT NULL,
  NODE_IP varchar(64) NOT NULL,               -- 节点IP
  NODE_NAME varchar(64) NOT NULL,             -- 节点名称
  NODE_STATUS varchar(64) NOT NULL,           -- 节点状态
  NODE_TYPE varchar(64) NOT NULL,             -- 节点类型
  OS_NAME varchar(128),                       -- 操作系统
  DISPLAY_NAME varchar(128) DEFAULT '',       -- 别名
  PIPELINE_REF_COUNT int(11) DEFAULT 0,       -- 流水线引用数
  LAST_BUILD_TIME datetime,                   -- 最近构建时间
  
  KEY PROJECT_ID (PROJECT_ID),
  KEY NODE_IP (NODE_IP)
);

-- T_ENVIRONMENT_THIRDPARTY_AGENT:第三方构建机
CREATE TABLE T_ENVIRONMENT_THIRDPARTY_AGENT (
  ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  NODE_ID bigint(20),                         -- 节点ID
  PROJECT_ID varchar(64) NOT NULL,
  HOSTNAME varchar(128) DEFAULT '',           -- 主机名
  IP varchar(64) DEFAULT '',                  -- IP地址
  OS varchar(16) NOT NULL,                    -- 操作系统
  STATUS int(11) NOT NULL,                    -- 状态
  SECRET_KEY varchar(256) NOT NULL,           -- 密钥
  VERSION varchar(128),                       -- Agent版本
  PARALLEL_TASK_COUNT int(11),                -- 并行任务数
  DOCKER_PARALLEL_TASK_COUNT int(11),         -- Docker并行任务数
  
  KEY idx_agent_node (NODE_ID),
  KEY idx_agent_project (PROJECT_ID)
);

-- T_ENV:环境信息
CREATE TABLE T_ENV (
  ENV_ID bigint(20) AUTO_INCREMENT PRIMARY KEY,
  PROJECT_ID varchar(64) NOT NULL,
  ENV_NAME varchar(128) NOT NULL,             -- 环境名称
  ENV_TYPE varchar(128) NOT NULL,             -- 环境类型(DEV/TEST/BUILD)
  ENV_VARS text NOT NULL,                     -- 环境变量
  IS_DELETED bit(1) NOT NULL,
  
  KEY PROJECT_ID (PROJECT_ID)
);

-- T_ENV_NODE:环境-节点关联
CREATE TABLE T_ENV_NODE (
  ENV_ID bigint(20) NOT NULL,
  NODE_ID bigint(20) NOT NULL,
  PROJECT_ID varchar(64) NOT NULL,
  ENABLE_NODE bit(1) DEFAULT 1,               -- 是否启用
  
  PRIMARY KEY (ENV_ID, NODE_ID)
);

三、表设计规范

3.1 命名规范

类型 规范 示例
表名 T_ 前缀 + 大写下划线 T_PIPELINE_BUILD_HISTORY
主键 ID{表名}_ID PIPELINE_ID, BUILD_ID
外键 {关联表}_ID PROJECT_ID, NODE_ID
索引 idx_inx_ 前缀 idx_project_id, inx_status
唯一索引 uni_inx_UNI_ 前缀 uni_inx_code_version
时间字段 *_TIME 后缀 CREATE_TIME, UPDATE_TIME
标记字段 *_FLAG 后缀 LATEST_FLAG, DELETE_FLAG

3.2 ID 设计规范

项目ID:    英文名称(如 demo_project)
流水线ID:  p-{32位UUID} = 34位
构建ID:    b-{32位UUID} = 34位
任务ID:    t-{32位UUID} = 34位
阶段ID:    s-{32位UUID} = 34位
容器ID:    c-{32位UUID} = 34位
插件ID:    32位UUID
用户组ID:  32位UUID

3.3 状态字段设计

-- 构建状态(int 类型)
-- 参考 BuildStatus 枚举
0: QUEUE           -- 排队中
1: RUNNING         -- 运行中
2: SUCCEED         -- 成功
3: FAILED          -- 失败
4: CANCELED        -- 取消
5: TERMINATE       -- 终止
...

-- 插件状态(tinyint 类型)
0: 初始化
1: 提交中
2: 验证中
3: 验证失败
4: 测试中
5: 审核中
6: 审核驳回
7: 已发布
8: 上架中止
9: 下架中
10: 已下架

3.4 字段类型规范

场景 类型 说明
主键ID varchar(32)bigint(20) UUID 用 varchar,自增用 bigint
项目/流水线ID varchar(64) 预留足够长度
名称 varchar(64) ~ varchar(255) 根据业务需求
描述 varchar(1024)text 短描述用 varchar
JSON 数据 mediumtextjson 大 JSON 用 mediumtext
时间 datetimetimestamp 需要自动更新用 timestamp
布尔 bit(1) 默认 b'0'
状态 int(11)tinyint(4) 枚举值用 tinyint

3.5 索引设计规范

-- 1. 主键索引
PRIMARY KEY (`ID`)

-- 2. 唯一索引(业务唯一约束)
UNIQUE KEY `uni_inx_code_version` (`ATOM_CODE`, `VERSION`)

-- 3. 普通索引(查询优化)
KEY `idx_project_pipeline` (`PROJECT_ID`, `PIPELINE_ID`)

-- 4. 复合索引(遵循最左前缀原则)
KEY `STATUS_KEY` (`PROJECT_ID`, `PIPELINE_ID`, `STATUS`)

-- 5. 时间索引(范围查询)
KEY `inx_start_time` (`START_TIME`)
KEY `inx_create_time` (`CREATE_TIME`)

四、SQL 脚本编写规范

4.1 幂等性要求

-- 1. 建表必须使用 IF NOT EXISTS
CREATE TABLE IF NOT EXISTS `T_EXAMPLE` (...);

-- 2. 插入数据使用 INSERT IGNORE 防止覆盖
INSERT IGNORE INTO T_EXAMPLE (ID, NAME) VALUES (1, 'test');

-- 3. 需要强制刷新的系统数据使用 ON DUPLICATE KEY UPDATE
INSERT INTO T_EXAMPLE (ID, NAME) VALUES (1, 'test')
ON DUPLICATE KEY UPDATE NAME = 'test';

-- 4. 禁止直接删除表后重建
-- 错误:DROP TABLE IF EXISTS T_EXAMPLE; CREATE TABLE T_EXAMPLE...
-- 正确:CREATE TABLE IF NOT EXISTS T_EXAMPLE...

4.2 字段变更规范

-- 1. 新增字段必须有默认值或允许 NULL
ALTER TABLE T_EXAMPLE ADD COLUMN NEW_FIELD varchar(64) DEFAULT '';
ALTER TABLE T_EXAMPLE ADD COLUMN NEW_FIELD varchar(64) NULL;

-- 2. 禁止改名字段(会导致数据丢失)
-- 错误:ALTER TABLE T_EXAMPLE CHANGE OLD_NAME NEW_NAME varchar(64);

-- 3. 使用存储过程判断字段是否存在
DELIMITER $$
CREATE PROCEDURE IF NOT EXISTS add_column_if_not_exists()
BEGIN
    IF NOT EXISTS (
        SELECT * FROM information_schema.columns 
        WHERE table_schema = DATABASE() 
        AND table_name = 'T_EXAMPLE' 
        AND column_name = 'NEW_FIELD'
    ) THEN
        ALTER TABLE T_EXAMPLE ADD COLUMN NEW_FIELD varchar(64) DEFAULT '';
    END IF;
END$$
DELIMITER ;
CALL add_column_if_not_exists();
DROP PROCEDURE IF EXISTS add_column_if_not_exists;

4.3 索引变更规范

-- 添加索引(使用存储过程判断)
DELIMITER $$
CREATE PROCEDURE IF NOT EXISTS add_index_if_not_exists()
BEGIN
    IF NOT EXISTS (
        SELECT * FROM information_schema.statistics 
        WHERE table_schema = DATABASE() 
        AND table_name = 'T_EXAMPLE' 
        AND index_name = 'idx_name'
    ) THEN
        ALTER TABLE T_EXAMPLE ADD INDEX idx_name (NAME);
    END IF;
END$$
DELIMITER ;
CALL add_index_if_not_exists();
DROP PROCEDURE IF EXISTS add_index_if_not_exists;

五、分库分表设计

5.1 分片策略

BK-CI 支持数据库分片,通过 T_SHARDING_ROUTING_RULE 表配置路由规则:

-- 分片路由规则
CREATE TABLE T_SHARDING_ROUTING_RULE (
  ID varchar(32) PRIMARY KEY,
  ROUTING_NAME varchar(128) NOT NULL,         -- 路由名称(项目ID)
  ROUTING_RULE varchar(256) NOT NULL,         -- 路由规则
  CLUSTER_NAME varchar(64) DEFAULT 'prod',    -- 集群名称
  MODULE_CODE varchar(64) DEFAULT 'PROCESS',  -- 模块标识
  TYPE varchar(32) DEFAULT 'DB',              -- 路由类型(DB/TABLE)
  DATA_SOURCE_NAME varchar(128) DEFAULT 'ds_0'-- 数据源名称
);

5.2 数据源配置

-- 数据源配置
CREATE TABLE T_DATA_SOURCE (
  ID varchar(32) PRIMARY KEY,
  CLUSTER_NAME varchar(64) NOT NULL,
  MODULE_CODE varchar(64) NOT NULL,
  DATA_SOURCE_NAME varchar(128) NOT NULL,
  FULL_FLAG bit(1) DEFAULT b'0',              -- 容量是否满
  DS_URL varchar(1024),                       -- 数据源URL
  TAG varchar(128),                           -- 数据源标签
  TYPE varchar(32) DEFAULT 'DB'               -- DB/ARCHIVE_DB
);

六、常用查询模式

6.1 流水线查询

-- 查询项目下的流水线列表
SELECT * FROM T_PIPELINE_INFO 
WHERE PROJECT_ID = ? AND `DELETE` = 0
ORDER BY CREATE_TIME DESC;

-- 查询流水线最新版本编排
SELECT * FROM T_PIPELINE_RESOURCE 
WHERE PIPELINE_ID = ? 
ORDER BY VERSION DESC LIMIT 1;

-- 查询流水线构建历史
SELECT * FROM T_PIPELINE_BUILD_HISTORY 
WHERE PROJECT_ID = ? AND PIPELINE_ID = ?
ORDER BY BUILD_NUM DESC
LIMIT ?, ?;

6.2 构建查询

-- 查询构建详情
SELECT h.*, d.MODEL 
FROM T_PIPELINE_BUILD_HISTORY h
LEFT JOIN T_PIPELINE_BUILD_DETAIL d ON h.BUILD_ID = d.BUILD_ID
WHERE h.BUILD_ID = ?;

-- 查询构建任务列表
SELECT * FROM T_PIPELINE_BUILD_TASK 
WHERE BUILD_ID = ?
ORDER BY STAGE_ID, CONTAINER_ID, TASK_SEQ;

-- 查询构建变量
SELECT * FROM T_PIPELINE_BUILD_VAR 
WHERE BUILD_ID = ?;

6.3 统计查询

-- 项目流水线数量统计
SELECT PROJECT_ID, COUNT(*) as count 
FROM T_PIPELINE_INFO 
WHERE `DELETE` = 0
GROUP BY PROJECT_ID;

-- 构建状态统计
SELECT STATUS, COUNT(*) as count 
FROM T_PIPELINE_BUILD_HISTORY 
WHERE PROJECT_ID = ? AND PIPELINE_ID = ?
GROUP BY STATUS;

七、性能优化建议

7.1 索引优化

  1. 复合索引遵循最左前缀原则
  2. 高频查询字段建立索引
  3. 避免在索引列上使用函数
  4. 定期分析慢查询日志

7.2 查询优化

  1. 使用 LIMIT 限制返回行数
  2. **避免 SELECT ***
  3. 使用覆盖索引
  4. 大表分页使用游标分页

7.3 表设计优化

  1. 大字段(TEXT/BLOB)拆分到独立表
  2. 历史数据定期归档
  3. 热点数据使用缓存
  4. 考虑读写分离