txw/txw-mhzc/docs/共性能力-收藏与收录-表设计说明.md
2026-05-24 10:55:36 +08:00

22 KiB
Raw Blame History

共性能力平台 — 收藏与收录 数据库设计说明

属性 内容
文档版本 v2.0
编写日期 2026-05-23
修订日期 2026-05-23
编写人 (待填写)
审核人 (待填写)
适用系统 txw-mhzc 门户 — 共性能力页 /gxnlpt
适用数据库 MySQL 8.0+InnoDButf8mb4);本文 DDL/索引以 MySQL 为准,不承诺 Oracle 等库可直接复用
关联前端 txw-mhzc-web/src/pages/index/views/gxnlpt/index.vue
DDL 脚本 txw-mhzc/sql/txw_mhzc_gxnl_slxxb_gxscb.sql

修订记录

版本 日期 修订人 审核人 说明
v1.0 2026-05-23 初稿双表、ER、基础字段与状态
v2.0 2026-05-23 参照评审意见补充字段校验、命名规范、乐观锁、索引与唯一约束、状态矩阵、API 规范、一致性/异常/迁移/性能

1. 设计背景与目标

1.1 业务场景

能力 前端入口 业务特征
分类浏览 左侧 5 类导航 + 卡片 展示已上架网站条目
收录 「收录」表单 提交名称/链接/简介/分类/标签/联系人;审核后展示
收藏 星标 +「我的收藏」 登录用户对已上架条目收藏/取消

1.2 设计目标

  • 与供需体系(txw_gxzx_*)解耦,新建 txw_mhzc_gxnl_* 域表。
  • 字段、状态、索引、API 具备可落地校验规则,减少脏数据与并发覆盖。
  • 首期双表交付;审核流水、操作日志表列为可选扩展,并给出过渡期方案。

1.3 表清单

序号 物理表名 中文名 职责
1 txw_mhzc_gxnl_slxxb 共性能力收录信息表 主数据 + 收录申请 + 审核/上架
2 txw_mhzc_gxnl_gxscb 共性能力收藏表 用户收藏关系
(扩展) txw_mhzc_gxnl_slshb 收录审核流水表 多轮审核留痕(二期建议建表)
(扩展) 平台操作日志 复用现有审计/日志组件 关联 wz_uuid 追溯操作链路

2. 命名与缩写规范

2.1 后缀约定(全库统一)

后缀 含义 示例
_dm 代码(字典值、枚举) gxnl_fl_dmlyqd_dm
_mc 名称(展示冗余) gxnl_fl_mcqymc
_uuid 业务主键/外键 UUID wz_uuidyh_uuid
_bz 标志Y/N yxbzsjzt(上架标志,历史命名保留)
_jh 集合(逗号分隔) bqjh
_rq / _sj 日期/时间 lrrqshsj
lrr / xgr / shr 录入人/修改人/审核人 lrruuidxgruuid
tjr_ 提交人(门户侧填写) tjr_nctjr_lxdh

2.2 未使用后缀的字段说明

字段 说明
zt 业务状态(历史习惯,与 sjzt 成对使用,不改为 zt_dm 以降低迁移成本)
sjzt 上架状态(s=上架,j=见,与项目内 sjzt 一致)
bt 标题 title 缩写

2.3 易混字段语义(收录表)

字段 语义 赋值规则
yh_uuid 门户提交账号 用户登录提交时 = 当前 Session.yh_uuid;游客提交 = NULL
lrruuid 数据录入操作人 门户提交:登录用户 = yh_uuid,游客 = NULL;运营后台录入/导入 = 操作员 yh_uuid
tjr_nc / tjr_lxdh 表单展示用联系人 用户填写;可与账号信息不一致
xgruuid 最后修改人 审核、编辑、下架等写操作更新
shruuid 最后审核人 仅审核通过/驳回时写入

结论yh_uuid 表示「谁提交的」;lrruuid 表示「谁执行了入库动作」。多数登录场景二者相同;运营代录时 lrruuid=运营员,yh_uuid 可空。

2.4 已删除/弱化的字段

原字段 v2.0 处理
sjzt_bz 删除。运营备注统一走管理端备注或扩展表,避免与 shyj 混用

3. ER 图(与字段清单一致)

3.1 完整实体关系Mermaid

erDiagram
    TXW_MHZC_YHXXB ||--o{ TXW_MHZC_GXNL_GXSCB : "收藏"
    TXW_MHZC_GXNL_SLXXB ||--o{ TXW_MHZC_GXNL_GXSCB : "被收藏"
    TXW_MHZC_YHXXB ||--o{ TXW_MHZC_GXNL_SLXXB : "提交账号"
    TXW_MHZC_QYXXB ||--o{ TXW_MHZC_GXNL_SLXXB : "关联企业"
    TXW_MHZC_GXNL_SLXXB ||--o{ TXW_MHZC_GXNL_SLSHB : "审核流水(二期)"

    TXW_MHZC_GXNL_SLXXB {
        varchar wz_uuid PK
        varchar bt
        varchar wz_lj
        varchar jj
        char gxnl_fl_dm
        varchar gxnl_fl_mc
        varchar bqjh
        char zt
        char sjzt
        varchar lyqd_dm
        varchar tjr_nc
        varchar tjr_lxdh
        varchar yh_uuid
        varchar qyuuid
        varchar qymc
        varchar shyj
        varchar shruuid
        datetime shsj
        int shcs
        text shls_j
        int pxh
        int llcs
        int sccs
        int bbh
        varchar lrruuid
        datetime lrrq
        varchar xgruuid
        datetime xgrq
        char yxbz
    }

    TXW_MHZC_GXNL_GXSCB {
        varchar uuid PK
        varchar wz_uuid FK
        varchar yh_uuid FK
        datetime lrrq
        datetime qxrq
        char yxbz
    }

    TXW_MHZC_YHXXB {
        varchar yh_uuid PK
    }

    TXW_MHZC_QYXXB {
        varchar qyuuid PK
    }

3.2 关系与一致性(应用层)

关系 基数 一致性策略
用户 → 收藏 1:N 用户注销:异步任务将 gxscb.yxbz='N'sccs 重算;失败入补偿队列
收录 → 收藏 1:N 条目 yxbz='N' 或下架不删收藏行「我的收藏」JOIN 时标 yxzt=invalid
用户 → 收录 1:N 用户注销:不删 slxxbyh_uuid 保留用于审计
企业 → 收录 1:N 企业注销:qyuuid 置空或保留历史,不级联删条目

不建数据库外键:与 txw_gxzx_gxscb 等项目表一致;所有引用在 Service 层校验存在性。


4. 字段校验规则(入库前必校验)

4.1 通用约定

规范
时区 服务端统一 Asia/Shanghai
时间格式 DATETIME,入库 YYYY-MM-DD HH:mm:ss;接口 ISO8601 可选,入库前转换
UUID [a-zA-Z0-9_-]{1,50},系统生成优先
字符串 入库前 trim();全角空格转半角(可选)

4.2 txw_mhzc_gxnl_slxxb 字段校验

字段 类型/长度 必填 校验规则
wz_uuid VARCHAR(50) Y 系统生成,唯一
bt VARCHAR(200) Y 1~200 字符;禁止纯空格;禁止 <script 等 XSS 片段(输出编码为主,入库可做长度+危险字符拦截)
wz_lj VARCHAR(500) Y 必须 http://https:// 开头;总长 ≤500域名合法禁止 javascript:;入库前 URI 规范化
jj VARCHAR(40) Y* 用户收录必填,运营导入可空;1~40 字符(与前端 maxlength 一致)
gxnl_fl_dm CHAR(2) Y 枚举 01~05,否则拒绝
gxnl_fl_mc VARCHAR(50) N 由服务端根据 gxnl_fl_dm 填充,不信任前端
bqjh VARCHAR(500) N 最多 10 个标签;单标签 1~20 字符;仅中英文数字及 -_;英文逗号分隔;去重
zt CHAR(1) Y 枚举 0~4
sjzt CHAR(1) Y Y/N;仅当 zt=2 时允许 sjzt=Y
lyqd_dm VARCHAR(20) Y 枚举 admin/user/import
tjr_nc VARCHAR(50) N ≤50 字符
tjr_lxdh VARCHAR(20) N* 发验证码时必填;手机号 ^1[3-9]\d{9}$ 或座机 ^0\d{2,3}-?\d{7,8}$
yh_uuid VARCHAR(50) N 存在则校验 yhxxb 有效
qyuuid VARCHAR(50) N 存在则校验 qyxxb
qymc VARCHAR(200) N 由企业表冗余,不信任前端随意改
shyj VARCHAR(500) N 驳回时必填≤500 字符
shruuid VARCHAR(50) N 审核时必填
shsj DATETIME N 审核时必填
shcs INT Y ≥0每次驳回/通过 +1
shls_j TEXT N JSON 数组,见 §8.3;单条 ≤2000 字符建议
pxh INT Y 0~999999
llcs INT Y ≥0
sccs INT Y ≥0冗余字段,规则见 §7.2
bbh INT Y ≥0乐观锁更新时 WHERE bbh=?
lrruuid/xgruuid VARCHAR(50) N 写操作写入
lrrq/xgrq DATETIME N 首次/更新自动
yxbz CHAR(1) Y Y/N

4.3 txw_mhzc_gxnl_gxscb 字段校验

字段 类型/长度 必填 校验规则
uuid VARCHAR(50) Y 系统生成
wz_uuid VARCHAR(50) Y 须存在且 slxxb.yxbz=Yzt=2sjzt=Y
yh_uuid VARCHAR(50) Y 当前登录用户
lrrq DATETIME Y 收藏时写入
qxrq DATETIME N 取消收藏时写入
yxbz CHAR(1) Y Y/N

5. 表结构明细

5.1 txw_mhzc_gxnl_slxxb — 共性能力收录信息表

字段名 类型 默认 注释
wz_uuid VARCHAR(50) N 网站信息 UUID主键
bt VARCHAR(200) N 名称
wz_lj VARCHAR(500) N 网站链接http/https
jj VARCHAR(40) Y NULL 简介≤40 字
gxnl_fl_dm CHAR(2) N 分类代码 01~05
gxnl_fl_mc VARCHAR(50) Y NULL 分类名称冗余
bqjh VARCHAR(500) Y NULL 标签合集,逗号分隔,最多 10 个
zt CHAR(1) N 1 业务状态§6
sjzt CHAR(1) N N 上架状态 Y/N
lyqd_dm VARCHAR(20) N user 来源admin/user/import
tjr_nc VARCHAR(50) Y NULL 提交人昵称
tjr_lxdh VARCHAR(20) Y NULL 提交人联系方式
yh_uuid VARCHAR(50) Y NULL 提交账号 UUID
qyuuid VARCHAR(50) Y NULL 关联企业 UUID
qymc VARCHAR(200) Y NULL 企业名称冗余
shyj VARCHAR(500) Y NULL 当前轮次审核意见
shruuid VARCHAR(50) Y NULL 最后审核人
shsj DATETIME Y NULL 最后审核时间
shcs INT N 0 审核轮次(提交/重提/审核累计)
shls_j TEXT Y NULL 审核历史 JSON过渡期多轮审核
pxh INT N 0 排序号
llcs INT N 0 浏览次数
sccs INT N 0 有效收藏数冗余
bbh INT N 0 版本号(乐观锁)
lrruuid VARCHAR(50) Y NULL 录入人 UUID
lrrq DATETIME Y NULL 录入时间
xgruuid VARCHAR(50) Y NULL 修改人 UUID
xgrq DATETIME Y NULL 修改时间
yxbz CHAR(1) N Y 有效标志 Y/N

分类代码 gxnl_fl_dm

代码 名称 前端 anchor
01 碳核算平台 content-1
02 碳认证机构 content-2
03 碳交易平台 content-3
04 碳金融服务 content-4
05 碳技术咨询 content-5

5.2 txw_mhzc_gxnl_gxscb — 共性能力收藏表

字段名 类型 默认 注释
uuid VARCHAR(50) N 收藏记录 UUID
wz_uuid VARCHAR(50) N 关联网站信息
yh_uuid VARCHAR(50) N 收藏用户
lrrq DATETIME N 收藏时间
qxrq DATETIME Y NULL 取消收藏时间
yxbz CHAR(1) N Y Y=有效收藏 N=已取消

收藏写入策略(解决唯一约束与软删冲突)

  • 表级唯一约束:UNIQUE (yh_uuid, wz_uuid) 不变
  • 取消收藏UPDATE SET yxbz='N', qxrq=NOW(),不删行。
  • 再次收藏:若存在该行则 UPDATE SET yxbz='Y', lrrq=NOW(), qxrq=NULL;否则 INSERT
  • 禁止对同一 (yh_uuid, wz_uuid) 重复 INSERT

6. 状态流转矩阵

6.1 状态枚举

zt 业务状态

含义 门户列表 可收藏
0 草稿
1 待审核
2 审核通过 是* 是*
3 审核驳回
4 已下架

* 须同时 sjzt=Yyxbz=Y

sjzt 上架状态

含义
Y 门户可见
N 不可见

6.2 状态变更矩阵(含权限)

当前状态 事件 目标状态 操作角色 附加条件
用户提交收录 zt=1,sjzt=N 游客/登录用户 验证码通过
1 用户撤回 zt=0,sjzt=N 提交人本人 zt=1yh_uuid 匹配或手机号验证
0 用户再次提交 zt=1 提交人 更新同 wz_uuid
1 审核通过 zt=2,sjzt=Y 运营/管理员 shyj 可空;shcs+1
1 审核驳回 zt=3,sjzt=N 运营/管理员 shyj 必填
2,Y 运营下架 zt=4,sjzt=N 运营/管理员 可不删收藏记录
4,N 重新上架 zt=2,sjzt=Y 运营/管理员 yxbz=Y
3 修改后重提 zt=1,sjzt=N 提交人 shcs+1;历史写入 shls_j
任意 逻辑删除 yxbz=N 管理员 门户不可见;待审单不再展示在审核队列(或单独筛)

6.3 异常场景处理

场景 处理
待审条目被逻辑删除 审核接口返回「条目已失效」;不再出现在待审列表
已收藏条目下架 「我的收藏」仍展示,卡片标 「已失效」,不可跳转或灰显;scbz 仍 Y增加 yxzt=N
已收藏条目逻辑删除 同下架,yxzt=N
并发审核/编辑 UPDATE ... WHERE wz_uuid=? AND bbh=?;失败返回「数据已被修改,请刷新」
用户注销 收藏批量 yxbz=Nsccs 按条目异步重算

7. 收藏业务规则

7.1 方案选定

方案 说明 本期
软删 yxbz 取消置 N可统计、可复收藏 采用
物理删除 无法追溯取消行为 不采用

7.2 sccs 冗余维护规则

规则
含义 当前 有效收藏 数,等价于 COUNT(*) FROM gxscb WHERE wz_uuid=? AND yxbz='Y'
增加 toggle add 成功且由 N→Y 时 sccs+1(复收藏若从 N→Y 也 +1
减少 toggle remove 成功且由 Y→N 时 sccs-1,下限 0
并发 gxscb 更新同一事务;sccs 更新 WHERE sccs>=0
校验 每日凌晨 Job 全量校对,偏差 >0 则修复并告警
是否含注销用户 不含;注销时已置 yxbz=N

7.3 查询规则

  • 门户列表 scbzLEFT JOIN gxscb ON wz_uuid AND yh_uuid AND yxbz='Y'
  • 我的收藏gxscb.yxbz='Y' JOIN slxxb;下架条目带 yxzt 字段返回。

8. 审核流程

8.1 权限

角色 权限
游客 提交收录、验证码
登录用户 提交、撤回自己的待审单、收藏
运营 审核、上下架、编辑条目
管理员 全部 + 逻辑删除

首期不按分类分审核人;二期可在 slshb 增加 gxnl_fl_dm 路由。

8.2 多轮审核(过渡期)

未建 txw_mhzc_gxnl_slshb 前:

  • shyj / shruuid / shsj:保存 最后一轮 审核信息。
  • shls_jJSON 数组,元素示例:
{
  "shcs": 1,
  "shjg_dm": "3",
  "shyj": "链接无法访问",
  "shruuid": "admin-001",
  "shsj": "2026-05-23 14:00:00"
}

shjg_dm2 通过,3 驳回。

8.3 二期审核流水表(建议)

txw_mhzc_gxnl_slshbuuid, wz_uuid, shcs, shjg_dm, shyj, shruuid, shsj, lrrq
建成后 shls_j 可弃用,历史数据迁移入流水表。


9. 索引设计

9.1 设计原则MySQL 8.0

  • 组合索引字段顺序:等值条件按区分度从高到低,范围/排序字段放最后。
  • 门户主查:gxnl_fl_dm5 类)+ sjzt + zt + ORDER BY lrrq DESC
  • %keyword% 模糊查询 不走 BTree;名称搜索用 FULLTEXT 或 ES二期

9.2 txw_mhzc_gxnl_slxxb 索引

索引名 字段 说明
PRIMARY wz_uuid 主键
idx_slxx_fl_sjzt_zt_lrrq gxnl_fl_dm, sjzt, zt, lrrq 门户分类列表v2 调整顺序)
idx_slxx_zt_lrrq zt, lrrq 管理端待审 zt=1
idx_slxx_yh_lrrq yh_uuid, lrrq 我的提交
idx_slxx_yxbz yxbz 过滤有效数据
ft_slxx_bt_jj FULLTEXT(bt,jj) 名称/简介搜索(可选,见 DDL 注释)

idx_slxx_bt BTree 说明:仅适合 前缀 查询 LIKE 'keyword%'%keyword% 会失效,已改用 FULLTEXT。

9.3 txw_mhzc_gxnl_gxscb 索引

索引名 字段 说明
PRIMARY uuid
uk_gxsc_yh_wz yh_uuid, wz_uuid 唯一;配合 UPDATE 复收藏
idx_gxsc_yh_yxbz_lrrq yh_uuid, yxbz, lrrq 我的收藏
idx_gxsc_wz_yxbz wz_uuid, yxbz 统计/校对 sccs

10. 数据清理与归档

数据 策略
gxscbyxbz=Nqxrq < 1 年 可物理删除(夜间 Job
slxxbzt=3yxbz=Y 超过 2 年 归档至历史表或 yxbz=N
slxxbyxbz=N 保留 3 年后物理删除(合规待定)

11. API 规范(概要)

统一约定

  • Base/mhzc/gxnl
  • MethodPOST与项目现有 /gxdt 一致)
  • Content-Typeapplication/json
  • 分页:pageNo(从 1pageSize(默认 10最大 50
  • 排序:列表默认 lrrq DESC, pxh DESC
  • 响应:{ code, msg, data }code=0 成功

11.1 POST /mhzc/gxnl/wzxx/list — 分类列表

请求

{
  "pageNo": 1,
  "pageSize": 10,
  "gxnlFlDm": "01",
  "nr": "碳足迹",
  "onlySc": false
}
参数 类型 必填 说明
pageNo int Y ≥1
pageSize int N 默认 10最大 50
gxnlFlDm string N 01~05
nr string N 关键词;有值时走 FULLTEXT 或 LIKE见实现开关
onlySc boolean N true 时仅返回当前用户收藏

响应 data{ list: [{ wzUuid, bt, jj, wzLj, bqjh, gxnlFlMc, scbz, lrrq }], total }

11.2 POST /mhzc/gxnl/slxx/submit — 收录提交

请求

{
  "bt": "某某碳核算平台",
  "wzLj": "https://example.com",
  "jj": "简介文案",
  "gxnlFlDm": "01",
  "bqjh": "碳足迹,LCA",
  "tjrNc": "张三",
  "tjrLxdh": "13800138000",
  "captchaId": "xxx",
  "captchaCode": "123456"
}

异常码

code 说明
40001 参数校验失败(附 fieldErrors
40002 URL 格式非法
40003 分类代码不存在
40004 验证码错误或过期
40005 标签数量/格式超限

11.3 POST /mhzc/gxnl/slxx/audit — 审核

请求{ wzUuid, shjgDm: "2"|"3", shyj, bbh }
权限:运营/管理员
异常40010 状态不允许审核40011 乐观锁冲突

11.4 POST /mhzc/gxnl/slxx/withdraw — 撤回

请求{ wzUuid }
条件zt=1 且本人提交

11.5 POST /mhzc/gxnl/gxsc/toggle — 收藏切换

请求{ wzUuid, type: "add" | "remove" }小写,大小写敏感)
异常40101 未登录40020 条目不可收藏

11.6 POST /mhzc/gxnl/gxsc/myList — 我的收藏

请求{ pageNo, pageSize }
响应:含 yxztY=正常 N=已下架/删除)

11.7 POST /mhzc/gxnl/captcha/send

请求{ tjrLxdh, bizType: "gxnl_submit" }
限流:同一手机号 1 分钟 1 次1 小时 5 次


12. 数据迁移(自供需表)

目标 规则
txw_gxzx_gxxxb(若曾误用) txw_mhzc_gxnl_slxxb 仅迁移明确标记为共性能力的数据;bt_1→bt,链接从 kzwjfwnr 解析
txw_gxzx_gxscb txw_mhzc_gxnl_gxscb 不自动迁移gx_uuidwz_uuid 无稳定映射);需人工或脚本映射表
历史收藏 建议上线后用户重新收藏,或一次性脚本 + 映射表

迁移步骤:停写 → 备份 → 脚本导入 → 校对条数 → 抽测 → 开写。
锁表:大批量时按主键分批,避免长事务锁表。


13. 性能与容量(预估)

预估 措施
收录条目 5 万级/3 年 索引 + 归档
收藏记录 50 万级 分区(按年)二期考虑
列表 QPS 峰值 200 Redis 缓存分类列表 60s收藏态用户级缓存
收藏 toggle 峰值 50 行级锁 + 事务

14. 操作日志(扩展)

写操作(提交、审核、上下架、删除)通过现有平台审计日志记录,建议扩展字段:

  • bizType=gxnl_slxx
  • bizId=wz_uuid
  • op=submit|audit|onShelf|offShelf|delete

不在业务表增加 czrz_uuid;以日志中心为准。


15. 与现有表对比

维度 原供需表 v2.0 新表
链接 wz_lj + URL 校验
分类 关键词 gxnl_fl_dm
收藏唯一 gx_uuid wz_uuid + upsert
并发 无版本号 bbh 乐观锁
多轮审核 shqkb shls_j 过渡 + 二期 slshb

16. 前端字段映射

前端 表字段
submitForm.bt1 bt
submitForm.lj wz_lj
submitForm.jj jj
submitForm.fl gxnl_fl_dm
submitForm.bq bqjh
submitForm.nc tjr_nc
submitForm.lxfs tjr_lxdh
card.gxUuid wz_uuid(接口驼峰 wzUuid

17. DDL

见:txw-mhzc/sql/txw_mhzc_gxnl_slxxb_gxscb.sql