180 lines
38 KiB
Plaintext
180 lines
38 KiB
Plaintext
<mxfile host="app.diagrams.net" modified="2026-09-07T00:00:00.000Z" agent="CodeBuddy" version="24.0.0">
|
||
<diagram id="zt-closet-er" name="zt-closet 数据库 ER 图">
|
||
<mxGraphModel dx="900" dy="500" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="0" fold="1" page="1" pageScale="1" pageWidth="2600" pageHeight="1200" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="0" />
|
||
<mxCell id="1" parent="0" />
|
||
|
||
<!-- ============ 图例 ============ -->
|
||
<mxCell id="legend" value="<b>图例</b><br><b>PK</b> 主键 <b>UK</b> 唯一索引<br>→ 外键关联目标表<br>⋯ 每表均含 GORM 公共字段:<br> created_at / updated_at /<br> deleted_at(软删除) / created_by /<br> updated_by / deleted_by<br>连线:| 端为一,三叉端为多(1:N)" style="text;html=1;align=left;verticalAlign=top;spacing=8;fontSize=11;rounded=0;fillColor=#FFFFFF;strokeColor=#999999;" vertex="1" parent="1">
|
||
<mxGeometry x="1960" y="790" width="280" height="170" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 用户域容器 ============ -->
|
||
<mxCell id="zone-user" value="用户域 Users" style="rounded=1;html=1;verticalAlign=top;align=center;fontSize=15;fontStyle=1;fillColor=#EAF2FB;strokeColor=#1E6091;strokeWidth=2;container=1;collapsible=0;whiteSpace=wrap;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="40" width="640" height="620" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ AI/运营域容器 ============ -->
|
||
<mxCell id="zone-ai" value="AI / 运营域" style="rounded=1;html=1;verticalAlign=top;align=center;fontSize=15;fontStyle=1;fillColor=#F3EFFB;strokeColor=#6C3FA0;strokeWidth=2;container=1;collapsible=0;whiteSpace=wrap;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="700" width="640" height="400" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 衣橱域容器 ============ -->
|
||
<mxCell id="zone-wardrobe" value="衣橱域 Wardrobe" style="rounded=1;html=1;verticalAlign=top;align=center;fontSize=15;fontStyle=1;fillColor=#EAF6EE;strokeColor=#2E7D32;strokeWidth=2;container=1;collapsible=0;whiteSpace=wrap;" vertex="1" parent="1">
|
||
<mxGeometry x="720" y="40" width="1180" height="1060" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 交易域容器 ============ -->
|
||
<mxCell id="zone-trade" value="交易域 Trade" style="rounded=1;html=1;verticalAlign=top;align=center;fontSize=15;fontStyle=1;fillColor=#FDF2E7;strokeColor=#C77700;strokeWidth=2;container=1;collapsible=0;whiteSpace=wrap;" vertex="1" parent="1">
|
||
<mxGeometry x="1940" y="40" width="620" height="700" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 用户域实体 ============ -->
|
||
<!-- users -->
|
||
<mxCell id="tbl-users" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;">users</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>user_uuid VARCHAR</td></tr><tr><td>wx_open_id VARCHAR <b>UK</b></td><td>username VARCHAR</td></tr><tr><td>avatar VARCHAR</td><td>sex TINYINT</td></tr><tr><td>birth_day BIGINT</td><td>phone VARCHAR</td></tr><tr><td>is_new_user TINYINT</td><td>status TINYINT</td></tr><tr><td>ban_reason VARCHAR</td><td>ban_start BIGINT</td></tr><tr><td>ban_expire BIGINT</td><td>vip_type TINYINT</td></tr><tr><td>vip_start BIGINT</td><td>vip_expire BIGINT</td></tr><tr><td>last_login_time BIGINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#1E6091;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="90" width="300" height="206" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- user_quotas -->
|
||
<mxCell id="tbl-user-quotas" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;">user_quotas</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>user_id → users <b>UK</b></td></tr><tr><td>quota_type TINYINT <b>UK</b></td><td>total BIGINT</td></tr><tr><td>used BIGINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#1E6091;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="320" width="300" height="98" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- user_daily_usages -->
|
||
<mxCell id="tbl-user-daily-usages" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;">user_daily_usages</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>user_id → users <b>UK</b></td></tr><tr><td>stat_date BIGINT <b>UK</b></td><td>ai_recommend_count BIGINT</td></tr><tr><td>outfit_share_count BIGINT</td><td>closet_share_count BIGINT</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#1E6091;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="440" width="300" height="116" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- user_notifications -->
|
||
<mxCell id="tbl-user-notifications" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;">user_notifications</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>notification_uuid VARCHAR</td></tr><tr><td>user_id → users</td><td>msg_type TINYINT</td></tr><tr><td>sender_id BIGINT</td><td>title VARCHAR</td></tr><tr><td>content VARCHAR</td><td>is_read TINYINT</td></tr><tr><td>read_time BIGINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#1E6091;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="578" width="300" height="134" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- quota_flow_logs -->
|
||
<mxCell id="tbl-quota-flow-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;">quota_flow_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>quota_flow_uuid VARCHAR</td></tr><tr><td>user_id → users</td><td>change_target TINYINT</td></tr><tr><td>change_type TINYINT <b>UK</b></td><td>change_num BIGINT</td></tr><tr><td>old_value BIGINT</td><td>new_value BIGINT</td></tr><tr><td>order_no VARCHAR <b>UK</b></td><td>quota_type TINYINT <b>UK</b></td></tr><tr><td>related_id BIGINT</td><td>reason VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#1E6091;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="380" y="90" width="280" height="152" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 衣橱域实体 ============ -->
|
||
<!-- clothes -->
|
||
<mxCell id="tbl-clothes" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">clothes</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>clothes_uuid VARCHAR</td></tr><tr><td>user_id → users</td><td>category_main VARCHAR</td></tr><tr><td>category_sub VARCHAR</td><td>style VARCHAR</td></tr><tr><td>color VARCHAR</td><td>color_sub VARCHAR</td></tr><tr><td>thickness VARCHAR</td><td>version VARCHAR</td></tr><tr><td>material VARCHAR</td><td>pattern VARCHAR</td></tr><tr><td>sleeve_type VARCHAR</td><td>clothes_type VARCHAR</td></tr><tr><td>neckline_type VARCHAR</td><td>formality VARCHAR</td></tr><tr><td>occasions VARCHAR</td><td>visual_impact VARCHAR</td></tr><tr><td>name VARCHAR</td><td>remark VARCHAR</td></tr><tr><td>processed_image VARCHAR</td><td>image_size BIGINT</td></tr><tr><td>image_process_status TINYINT</td><td>fail_reason VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="740" y="90" width="300" height="290" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- closet_shares -->
|
||
<mxCell id="tbl-closet-shares" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">closet_shares</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>share_uuid VARCHAR</td></tr><tr><td>user_id → users</td><td>share_type TINYINT</td></tr><tr><td>expire_time BIGINT</td><td>status TINYINT</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="740" y="410" width="300" height="116" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- closet_share_items -->
|
||
<mxCell id="tbl-closet-share-items" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">closet_share_items</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>share_uuid → closet_shares</td></tr><tr><td>clothes_id → clothes</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="740" y="546" width="300" height="72" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- closet_audit_logs -->
|
||
<mxCell id="tbl-closet-audit-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">closet_audit_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>target_id → closet_shares</td></tr><tr><td>audit_result TINYINT</td><td>reject_reason VARCHAR</td></tr><tr><td>audit_time BIGINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="740" y="638" width="300" height="94" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- outfits -->
|
||
<mxCell id="tbl-outfits" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">outfits</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>outfit_uuid VARCHAR</td></tr><tr><td>user_id → users</td><td>outfit_name VARCHAR</td></tr><tr><td>outfit_desc VARCHAR</td><td>scene VARCHAR</td></tr><tr><td>source TINYINT</td><td>is_public TINYINT</td></tr><tr><td>audit_status TINYINT</td><td>status TINYINT</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1080" y="90" width="300" height="140" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- outfit_items -->
|
||
<mxCell id="tbl-outfit-items" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">outfit_items</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>outfit_id → outfits</td></tr><tr><td>clothes_id → clothes</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1080" y="250" width="300" height="72" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- collects -->
|
||
<mxCell id="tbl-collects" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">collects</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>collect_type TINYINT <b>UK</b></td></tr><tr><td>target_id → outfits <b>UK</b></td><td>user_id → users <b>UK</b></td></tr><tr><td>status TINYINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1080" y="342" width="300" height="94" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- likes -->
|
||
<mxCell id="tbl-likes" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">likes</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>like_type TINYINT <b>UK</b></td></tr><tr><td>target_id → outfits <b>UK</b></td><td>user_id → users <b>UK</b></td></tr><tr><td>status TINYINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1080" y="456" width="300" height="94" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- outfit_audit_logs -->
|
||
<mxCell id="tbl-outfit-audit-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;">outfit_audit_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>target_id → outfits</td></tr><tr><td>audit_result TINYINT</td><td>reject_reason VARCHAR</td></tr><tr><td>audit_time BIGINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#2E7D32;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1080" y="570" width="300" height="94" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 交易域实体 ============ -->
|
||
<!-- goods -->
|
||
<mxCell id="tbl-goods" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;">goods</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>goods_code VARCHAR</td></tr><tr><td>goods_name VARCHAR</td><td>goods_type TINYINT</td></tr><tr><td>price BIGINT</td><td>discount_price BIGINT</td></tr><tr><td>member_days BIGINT</td><td>cos_quota BIGINT</td></tr><tr><td>ai_recommend_quota BIGINT</td><td>closet_share_quota BIGINT</td></tr><tr><td>outfit_share_quota BIGINT</td><td>description VARCHAR</td></tr><tr><td>status TINYINT</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#C77700;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1960" y="90" width="280" height="160" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- orders -->
|
||
<mxCell id="tbl-orders" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;">orders</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>order_no VARCHAR <b>UK</b></td></tr><tr><td>user_id → users</td><td>goods_id → goods</td></tr><tr><td>goods_name VARCHAR</td><td>unit_price BIGINT</td></tr><tr><td>total_amount BIGINT</td><td>pay_amount BIGINT</td></tr><tr><td>pay_channel TINYINT</td><td>order_status TINYINT</td></tr><tr><td>transaction_id VARCHAR</td><td>member_days BIGINT</td></tr><tr><td>cos_quota BIGINT</td><td>ai_recommend_quota BIGINT</td></tr><tr><td>closet_share_quota BIGINT</td><td>outfit_share_quota BIGINT</td></tr><tr><td>expire_time BIGINT</td><td>pay_time BIGINT</td></tr><tr><td>refund_time BIGINT</td><td>refund_amount BIGINT</td></tr><tr><td>remark VARCHAR</td><td>callback_raw VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#C77700;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1960" y="270" width="280" height="240" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- refund_flow_logs -->
|
||
<mxCell id="tbl-refund-flow-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;">refund_flow_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>order_id → orders</td></tr><tr><td>order_no VARCHAR</td><td>user_id → users</td></tr><tr><td>refund_no VARCHAR <b>UK</b></td><td>wechat_refund_no VARCHAR</td></tr><tr><td>refund_amount BIGINT</td><td>refund_reason VARCHAR</td></tr><tr><td>status TINYINT</td><td>apply_time BIGINT</td></tr><tr><td>success_time BIGINT</td><td>fail_reason VARCHAR</td></tr><tr><td>callback_raw VARCHAR</td><td>⋯ 公共字段</td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#C77700;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="1960" y="530" width="280" height="160" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- vip_flow_logs -->
|
||
<mxCell id="tbl-vip-flow-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;">vip_flow_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>user_id → users</td></tr><tr><td>change_type TINYINT <b>UK</b></td><td>old_vip_type TINYINT</td></tr><tr><td>new_vip_type TINYINT</td><td>old_vip_expire BIGINT</td></tr><tr><td>new_vip_expire BIGINT</td><td>order_no VARCHAR <b>UK</b></td></tr><tr><td>source TINYINT</td><td>reason VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#C77700;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="2260" y="90" width="280" height="140" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- benefit_grant_tasks -->
|
||
<mxCell id="tbl-benefit-grant-tasks" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;">benefit_grant_tasks</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>user_id → users</td></tr><tr><td>order_no VARCHAR <b>UK</b> → orders</td><td>goods_id → goods</td></tr><tr><td>benefit_type TINYINT <b>UK</b></td><td>amount BIGINT</td></tr><tr><td>status TINYINT</td><td>retry_count INT</td></tr><tr><td>max_retry INT</td><td>last_error VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#C77700;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="2260" y="250" width="280" height="120" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ AI/运营域实体 ============ -->
|
||
<!-- horoscopes -->
|
||
<mxCell id="tbl-horoscopes" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;">horoscopes</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>stat_date BIGINT <b>UK</b></td></tr><tr><td>zodiac VARCHAR <b>UK</b></td><td>overall_score TINYINT</td></tr><tr><td>love_score TINYINT</td><td>career_score TINYINT</td></tr><tr><td>wealth_score TINYINT</td><td>daily_text VARCHAR</td></tr><tr><td>lucky_color VARCHAR</td><td>lucky_number VARCHAR</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#6C3FA0;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="750" width="300" height="120" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ai_recommend_flow_logs -->
|
||
<mxCell id="tbl-ai-recommend-flow-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;">ai_recommend_flow_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>request_id VARCHAR</td></tr><tr><td>server_request_id VARCHAR</td><td>user_id → users</td></tr><tr><td>model_version VARCHAR</td><td>prompt_tokens BIGINT</td></tr><tr><td>completion_tokens BIGINT</td><td>result_content VARCHAR</td></tr><tr><td>status TINYINT</td><td>fail_reason VARCHAR</td></tr><tr><td>request_time BIGINT</td><td>response_time BIGINT</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#6C3FA0;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="890" width="300" height="140" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ai_horoscope_flow_logs -->
|
||
<mxCell id="tbl-ai-horoscope-flow-logs" value="<table border="0" cellspacing="0" cellpadding="2" style="width:100%;font-size:11px;"><tr><td colspan="2" style="background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;">ai_horoscope_flow_logs</td></tr><tr><td><b>id</b> BIGINT <b>PK</b></td><td>request_id VARCHAR</td></tr><tr><td>zodiac VARCHAR</td><td>server_request_id VARCHAR</td></tr><tr><td>stat_date BIGINT</td><td>model_version VARCHAR</td></tr><tr><td>prompt_tokens BIGINT</td><td>completion_tokens BIGINT</td></tr><tr><td>result_content VARCHAR</td><td>horoscope_id → horoscopes</td></tr><tr><td>status TINYINT</td><td>fail_reason VARCHAR</td></tr><tr><td>request_time BIGINT</td><td>response_time BIGINT</td></tr><tr><td>⋯ 公共字段</td><td></td></tr></table>" style="shape=table;html=1;whiteSpace=wrap;align=left;verticalAlign=top;fillColor=#FFFFFF;strokeColor=#6C3FA0;rounded=0;" vertex="1" parent="1">
|
||
<mxGeometry x="380" y="750" width="280" height="160" as="geometry" />
|
||
</mxCell>
|
||
|
||
<!-- ============ 关系连线(ER:| 端为一,三叉端为多) ============ -->
|
||
<mxCell id="e-u-quotas" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.2;exitY=1;entryX=0.2;entryY=0;" edge="1" parent="1" source="tbl-users" target="tbl-user-quotas"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-daily" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.88;entryX=1;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-user-daily-usages"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-notifications" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.96;entryX=1;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-user-notifications"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-flow-logs" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.08;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-quota-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-clothes" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.2;entryX=0;entryY=0.2;" edge="1" parent="1" source="tbl-users" target="tbl-clothes"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-outfits" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.35;entryX=0;entryY=0.4;" edge="1" parent="1" source="tbl-users" target="tbl-outfits"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-closet-shares" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-closet-shares"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-collects" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.65;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-collects"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-likes" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.8;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-likes"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-orders" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.3;exitY=0;entryX=0.3;entryY=0;" edge="1" parent="1" source="tbl-users" target="tbl-orders"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-refund" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.4;exitY=0;entryX=0.3;entryY=0;" edge="1" parent="1" source="tbl-users" target="tbl-refund-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-vip" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.15;exitY=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="tbl-users" target="tbl-vip-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-benefit" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.2;exitY=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="tbl-users" target="tbl-benefit-grant-tasks"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-u-ai-rec" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0;exitY=0.9;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-users" target="tbl-ai-recommend-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-items" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.4;exitY=1;entryX=0.4;entryY=0;" edge="1" parent="1" source="tbl-outfits" target="tbl-outfit-items"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-audit" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.8;entryX=1;entryY=0.5;" edge="1" parent="1" source="tbl-outfits" target="tbl-outfit-audit-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-collects" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.3;entryX=1;entryY=0.5;" edge="1" parent="1" source="tbl-outfits" target="tbl-collects"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-likes" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.6;entryX=1;entryY=0.5;" edge="1" parent="1" source="tbl-outfits" target="tbl-likes"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-c-outfit-items" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.35;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-clothes" target="tbl-outfit-items"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-c-share-items" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.55;exitY=1;entryX=0.45;entryY=0;" edge="1" parent="1" source="tbl-clothes" target="tbl-closet-share-items"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-cs-items" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="tbl-closet-shares" target="tbl-closet-share-items"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-cs-audit" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.85;exitY=1;entryX=0.85;entryY=0;" edge="1" parent="1" source="tbl-closet-shares" target="tbl-closet-audit-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-g-orders" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.4;exitY=1;entryX=0.4;entryY=0;" edge="1" parent="1" source="tbl-goods" target="tbl-orders"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-g-benefit" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-goods" target="tbl-benefit-grant-tasks"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-refund" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=0.3;exitY=1;entryX=0.3;entryY=0;" edge="1" parent="1" source="tbl-orders" target="tbl-refund-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-o-benefit" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.3;entryX=0;entryY=0.5;" edge="1" parent="1" source="tbl-orders" target="tbl-benefit-grant-tasks"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
<mxCell id="e-h-aih" style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERone;startFill=0;endArrow=ERmany;endFill=0;strokeColor=#555555;rounded=0;exitX=1;exitY=0.4;entryX=0;entryY=0.4;" edge="1" parent="1" source="tbl-horoscopes" target="tbl-ai-horoscope-flow-logs"><mxGeometry relative="1" as="geometry" /></mxCell>
|
||
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
</mxfile>
|