Files
zt-closet-backend/.codebuddy/plans/生成数据库_ER_图_drawio_d0c6a093.md
T
2026-09-11 01:41:52 +08:00

5.8 KiB
Raw Blame History

name, overview, todos
name overview todos
生成数据库 ER 图 drawio 基于 internal/mysqlmodel 下 22 张表模型,生成可直接用 draw.io 打开编辑的整体数据库 ER 图文件(docs/zt-closet-er.drawio),按业务域分组布局、全字段展示、标注主键/唯一索引/外键关系。
id content status
create-drawio-skeleton 创建 docs/zt-closet-er.drawio 骨架:四个业务域分区容器(背景色、标题、图例)并规划网格坐标 completed
id content status dependencies
draw-user-domain-entities 绘制用户域 5 张表实体(users、user_quotas、quota_flow_logs、user_daily_usages、user_notifications),含全字段、PK/UK 标注 completed
create-drawio-skeleton
id content status dependencies
draw-wardrobe-domain-entities 绘制衣橱域 9 张表实体(clothes、outfits、outfit_items、closet_shares、closet_share_items、collects、likes、两个 audit_logs) completed
create-drawio-skeleton
id content status dependencies
draw-trade-ai-entities 绘制交易域 5 张表(goods、orders、refund_flow_logs、vip_flow_logs、benefit_grant_tasks)与 AI/运营域 3 张表(horoscopes、ai_recommend_flow_logs、ai_horoscope_flow_logs) completed
create-drawio-skeleton
id content status dependencies
draw-relationships 按 20 条关系清单绘制 1:N 连线(乌鸦脚样式、1/N 标签、就近路由),重点优化 users 13 条关联线 completed
draw-user-domain-entities
draw-wardrobe-domain-entities
draw-trade-ai-entities
id content status dependencies
validate-xml-layout 用 Python xml.etree 或 xmllint 校验 XML 合法性,抽查坐标无重叠、连线端点 id 引用完整,修正布局问题 completed
draw-relationships

产品概述

基于项目现有 22 张数据库表(internal/mysqlmodel 全部模型),生成一份完整的数据库 ER 图,输出为 draw.io 可打开、可编辑的 .drawio 文件,纳入项目 git 管理。

核心功能

  • 22 张表实体完整呈现:每张表以「表头 + 字段行」表格样式展示全部字段(含类型、注释),主键加粗标注,唯一索引字段标注 UK,外键字段标注 →目标表。
  • 四个业务域分区布局:用户域、衣橱域、交易域、AI/运营域,每域使用不同底色容器与标题区分,域内表就近排布。
  • 关系连线:按盘点出的 20 条 1:N 关系绘制连线(users 关联 13 张子表、outfits/clothes/goods/orders/closet_shares/horoscopes 各自关联),采用「就近直连 + 简洁路由」保证可读性,连线端使用乌鸦脚样式并标注 1:N。
  • 可编辑可扩展:文件为标准 mxGraph XML 格式,可用 draw.io 桌面版/网页版直接打开编辑,后续模型变更可手工维护。

技术方案

  • 输出格式:draw.io 原生 mxGraph XML(手写生成,无需第三方库),文件名 docs/zt-closet-er.drawio(新建 docs 目录)。
  • 布局方案:纵向四层分区(用户域 → 衣橱域 → 交易域 → AI/运营域),每域一个带背景色的父容器(mxCell vertex container),表实体以固定尺寸(约 320x220 起,随字段数增高)网格排布,坐标手工规划避免重叠;users 表置于左上角作为中心实体,减少其 13 条关联线的交叉。
  • 实体结构:表头行显示表名(含色带与白字),字段行格式为「字段名: 类型」+ 注释,PK 加粗、UK 标注唯一索引名、FK 后缀 →目标表;Model 公共字段(created_at/updated_at/deleted_at/created_by/updated_by/deleted_by)在大表以「+ 公共字段」折叠行表达,避免图面过长。
  • 连线:使用 mxCell edge,source/target 指向实体 id,末端样式(endArrow/endSize/startFill)表达 1:N,edgeLabel 标注「1」与「N」;users 的关联线按目标域就近出口,避免长线穿越。
  • 校验:生成后用 Python xml.etree.ElementTree 或 xmllint 解析验证 XML 合法性,并抽查坐标无重叠、连线端点引用的 id 均存在。

实现细节

  • 实体清单与字段来源:internal/mysqlmodel 下 22 个模型(users、user_quotas、quota_flow_logs、user_daily_usages、user_notifications、clothes、outfits、outfit_items、closet_shares、closet_share_items、collects、likes、outfit_audit_logs、closet_audit_logs、goods、orders、refund_flow_logs、vip_flow_logs、benefit_grant_tasks、horoscopes、ai_recommend_flow_logs、ai_horoscope_flow_logs)。
  • 唯一索引标注:uk_user_wx_open_id、uk_user_quota、uk_quota_flow_idem、uk_daily_usage_user_date、uk_collect_user_target、uk_like_user_target、uk_order_no、uk_refund_flow_no、uk_vip_flow_idem、uk_benefit_task_idem、uk_horoscope_date_zodiac。
  • 关系清单(20 条 1:N):users→clothes/outfits/closet_shares/user_quotas/user_daily_usages/user_notifications/orders/refund_flow_logs/vip_flow_logs/benefit_grant_tasks/collects/likes/ai_recommend_flow_logs;outfits→outfit_items/outfit_audit_logs/collects/likes;clothes→outfit_items/closet_share_items;closet_shares→closet_share_items/closet_audit_logs;goods→orders/benefit_grant_tasks;orders→refund_flow_logs/benefit_grant_tasks;horoscopes→ai_horoscope_flow_logs。
  • 图面性能:仅静态 XML,无运行时开销;文件预计 40-80KB,生成一次即可。

目录结构

project-root/
└── docs/
    └── zt-closet-er.drawio   # [NEW] 数据库 ER 图(draw.io 格式)。包含 4 个业务域分区容器、22 张表实体、20 条 1:N 关系连线、图例说明。mxGraph XML 根节点 mxfile/diagram/mxGraphModel,实体为 vertex,连线为 edge,坐标与样式按分区配色(用户域蓝、衣橱域绿、交易域橙、AI运营域紫)。