Files
zt-closet-backend/design/zt-closet-er.drawio
T
2026-09-11 01:41:52 +08:00

180 lines
38 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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="&lt;b&gt;图例&lt;/b&gt;&lt;br&gt;&lt;b&gt;PK&lt;/b&gt; 主键 &lt;b&gt;UK&lt;/b&gt; 唯一索引&lt;br&gt;→ 外键关联目标表&lt;br&gt;⋯ 每表均含 GORM 公共字段:&lt;br&gt;  created_at / updated_at /&lt;br&gt;  deleted_at(软删除) / created_by /&lt;br&gt;  updated_by / deleted_by&lt;br&gt;连线:| 端为一,三叉端为多(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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;wx_open_id VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;username VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avatar VARCHAR&lt;/td&gt;&lt;td&gt;sex TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;birth_day BIGINT&lt;/td&gt;&lt;td&gt;phone VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;is_new_user TINYINT&lt;/td&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ban_reason VARCHAR&lt;/td&gt;&lt;td&gt;ban_start BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ban_expire BIGINT&lt;/td&gt;&lt;td&gt;vip_type TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vip_start BIGINT&lt;/td&gt;&lt;td&gt;vip_expire BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;last_login_time BIGINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;user_quotas&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;quota_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;total BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;used BIGINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;user_daily_usages&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;stat_date BIGINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;ai_recommend_count BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;outfit_share_count BIGINT&lt;/td&gt;&lt;td&gt;closet_share_count BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;user_notifications&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;notification_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;msg_type TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sender_id BIGINT&lt;/td&gt;&lt;td&gt;title VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;content VARCHAR&lt;/td&gt;&lt;td&gt;is_read TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;read_time BIGINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#1E6091;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;quota_flow_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;quota_flow_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;change_target TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;change_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;change_num BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;old_value BIGINT&lt;/td&gt;&lt;td&gt;new_value BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;order_no VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;quota_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;related_id BIGINT&lt;/td&gt;&lt;td&gt;reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;clothes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;clothes_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;category_main VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;category_sub VARCHAR&lt;/td&gt;&lt;td&gt;style VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;color VARCHAR&lt;/td&gt;&lt;td&gt;color_sub VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;thickness VARCHAR&lt;/td&gt;&lt;td&gt;version VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;material VARCHAR&lt;/td&gt;&lt;td&gt;pattern VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sleeve_type VARCHAR&lt;/td&gt;&lt;td&gt;clothes_type VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;neckline_type VARCHAR&lt;/td&gt;&lt;td&gt;formality VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;occasions VARCHAR&lt;/td&gt;&lt;td&gt;visual_impact VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;name VARCHAR&lt;/td&gt;&lt;td&gt;remark VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;processed_image VARCHAR&lt;/td&gt;&lt;td&gt;image_size BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;image_process_status TINYINT&lt;/td&gt;&lt;td&gt;fail_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;closet_shares&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;share_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;share_type TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;expire_time BIGINT&lt;/td&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;closet_share_items&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;share_uuid → closet_shares&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clothes_id → clothes&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;closet_audit_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;target_id → closet_shares&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;audit_result TINYINT&lt;/td&gt;&lt;td&gt;reject_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;audit_time BIGINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;outfits&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;outfit_uuid VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;outfit_name VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;outfit_desc VARCHAR&lt;/td&gt;&lt;td&gt;scene VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;source TINYINT&lt;/td&gt;&lt;td&gt;is_public TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;audit_status TINYINT&lt;/td&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;outfit_items&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;outfit_id → outfits&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clothes_id → clothes&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;collects&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;collect_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;target_id → outfits &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;likes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;like_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;target_id → outfits &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#2E7D32;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;outfit_audit_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;target_id → outfits&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;audit_result TINYINT&lt;/td&gt;&lt;td&gt;reject_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;audit_time BIGINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;goods&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;goods_code VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;goods_name VARCHAR&lt;/td&gt;&lt;td&gt;goods_type TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;price BIGINT&lt;/td&gt;&lt;td&gt;discount_price BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;member_days BIGINT&lt;/td&gt;&lt;td&gt;cos_quota BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ai_recommend_quota BIGINT&lt;/td&gt;&lt;td&gt;closet_share_quota BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;outfit_share_quota BIGINT&lt;/td&gt;&lt;td&gt;description VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;orders&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;order_no VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;td&gt;goods_id → goods&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;goods_name VARCHAR&lt;/td&gt;&lt;td&gt;unit_price BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;total_amount BIGINT&lt;/td&gt;&lt;td&gt;pay_amount BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pay_channel TINYINT&lt;/td&gt;&lt;td&gt;order_status TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;transaction_id VARCHAR&lt;/td&gt;&lt;td&gt;member_days BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cos_quota BIGINT&lt;/td&gt;&lt;td&gt;ai_recommend_quota BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;closet_share_quota BIGINT&lt;/td&gt;&lt;td&gt;outfit_share_quota BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;expire_time BIGINT&lt;/td&gt;&lt;td&gt;pay_time BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;refund_time BIGINT&lt;/td&gt;&lt;td&gt;refund_amount BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;remark VARCHAR&lt;/td&gt;&lt;td&gt;callback_raw VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;refund_flow_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;order_id → orders&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;order_no VARCHAR&lt;/td&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;refund_no VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;wechat_refund_no VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;refund_amount BIGINT&lt;/td&gt;&lt;td&gt;refund_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;apply_time BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;success_time BIGINT&lt;/td&gt;&lt;td&gt;fail_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;callback_raw VARCHAR&lt;/td&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;vip_flow_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;change_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;old_vip_type TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;new_vip_type TINYINT&lt;/td&gt;&lt;td&gt;old_vip_expire BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;new_vip_expire BIGINT&lt;/td&gt;&lt;td&gt;order_no VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;source TINYINT&lt;/td&gt;&lt;td&gt;reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#C77700;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;benefit_grant_tasks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;order_no VARCHAR &lt;b&gt;UK&lt;/b&gt; → orders&lt;/td&gt;&lt;td&gt;goods_id → goods&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;benefit_type TINYINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;amount BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;retry_count INT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;max_retry INT&lt;/td&gt;&lt;td&gt;last_error VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;horoscopes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;stat_date BIGINT &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zodiac VARCHAR &lt;b&gt;UK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;overall_score TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;love_score TINYINT&lt;/td&gt;&lt;td&gt;career_score TINYINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;wealth_score TINYINT&lt;/td&gt;&lt;td&gt;daily_text VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;lucky_color VARCHAR&lt;/td&gt;&lt;td&gt;lucky_number VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;ai_recommend_flow_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;request_id VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;server_request_id VARCHAR&lt;/td&gt;&lt;td&gt;user_id → users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;model_version VARCHAR&lt;/td&gt;&lt;td&gt;prompt_tokens BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;completion_tokens BIGINT&lt;/td&gt;&lt;td&gt;result_content VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;fail_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;request_time BIGINT&lt;/td&gt;&lt;td&gt;response_time BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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="&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; style=&quot;width:100%;font-size:11px;&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;background:#6C3FA0;color:#FFFFFF;font-weight:bold;text-align:center;&quot;&gt;ai_horoscope_flow_logs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt; BIGINT &lt;b&gt;PK&lt;/b&gt;&lt;/td&gt;&lt;td&gt;request_id VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zodiac VARCHAR&lt;/td&gt;&lt;td&gt;server_request_id VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;stat_date BIGINT&lt;/td&gt;&lt;td&gt;model_version VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;prompt_tokens BIGINT&lt;/td&gt;&lt;td&gt;completion_tokens BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;result_content VARCHAR&lt;/td&gt;&lt;td&gt;horoscope_id → horoscopes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status TINYINT&lt;/td&gt;&lt;td&gt;fail_reason VARCHAR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;request_time BIGINT&lt;/td&gt;&lt;td&gt;response_time BIGINT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;⋯ 公共字段&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;" 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>