report-database-er-new.html 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>数智健调 - 数据库ER图</title>
  7. <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
  8. <style>
  9. body {
  10. font-family: 'Microsoft YaHei', sans-serif;
  11. max-width: 1200px;
  12. margin: 0 auto;
  13. padding: 20px;
  14. background: #f5f5f5;
  15. }
  16. h1 { color: #333; text-align: center; }
  17. h2 { color: #666; border-bottom: 2px solid #3b82f6; padding-bottom: 10px; }
  18. .mermaid { background: white; padding: 20px; border-radius: 8px; margin: 20px 0; }
  19. .description { background: white; padding: 15px; border-radius: 8px; margin: 10px 0; }
  20. table { width: 100%; border-collapse: collapse; margin: 10px 0; }
  21. th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
  22. th { background: #3b82f6; color: white; }
  23. tr:nth-child(even) { background: #f9f9f9; }
  24. </style>
  25. </head>
  26. <body>
  27. <h1>🗄️ 数智健调 - 数据库ER图</h1>
  28. <h2>实体关系图</h2>
  29. <div class="mermaid">
  30. erDiagram
  31. USERS ||--o{ WEIGHT_RECORDS : "has"
  32. USERS ||--o| WEIGHT_GOALS : "has"
  33. USERS ||--o{ TAGS : "creates"
  34. WEIGHT_RECORDS }o--o{ TAGS : "tagged_with"
  35. USERS ||--o{ ANOMALY_LOGS : "has"
  36. USERS {
  37. varchar id PK "用户ID(UUID)"
  38. varchar phone UK "手机号"
  39. varchar nickname "昵称"
  40. varchar school_id FK "学校ID"
  41. varchar grade "年级"
  42. boolean is_under_14 "是否未满14岁"
  43. varchar parent_phone "家长手机号"
  44. timestamp created_at "创建时间"
  45. timestamp updated_at "更新时间"
  46. }
  47. WEIGHT_RECORDS {
  48. varchar id PK "记录ID(UUID)"
  49. varchar user_id FK "用户ID"
  50. date record_date "记录日期"
  51. time measurement_time "测量时间"
  52. decimal weight "体重(kg)"
  53. decimal body_fat "体脂率(%)"
  54. decimal muscle_mass "肌肉含量(kg)"
  55. enum measurement_condition "测量条件"
  56. text notes "备注"
  57. timestamp created_at "创建时间"
  58. }
  59. WEIGHT_GOALS {
  60. varchar id PK "目标ID(UUID)"
  61. varchar user_id FK "用户ID"
  62. decimal target_weight "目标体重(kg)"
  63. decimal target_body_fat "目标体脂率(%)"
  64. date target_date "目标日期"
  65. decimal start_weight "起始体重(kg)"
  66. date start_date "开始日期"
  67. decimal weekly_target "每周目标减重量"
  68. enum status "状态"
  69. timestamp created_at "创建时间"
  70. }
  71. TAGS {
  72. varchar id PK "标签ID(UUID)"
  73. varchar user_id FK "用户ID"
  74. varchar tag_name "标签名称"
  75. enum tag_type "类型"
  76. varchar color "颜色代码"
  77. timestamp created_at "创建时间"
  78. }
  79. ANOMALY_LOGS {
  80. varchar id PK "日志ID(UUID)"
  81. varchar user_id FK "用户ID"
  82. enum anomaly_type "异常类型"
  83. enum severity "严重程度"
  84. text message "提示信息"
  85. date detected_date "检测日期"
  86. json related_record_ids "相关记录ID"
  87. boolean is_read "是否已读"
  88. timestamp created_at "创建时间"
  89. }
  90. </div>
  91. <h2>数据表详细设计</h2>
  92. <h3>1. 用户表 (users)</h3>
  93. <table>
  94. <tr><th>字段名</th><th>类型</th><th>约束</th><th>说明</th></tr>
  95. <tr><td>id</td><td>VARCHAR(36)</td><td>PRIMARY KEY</td><td>用户ID(UUID)</td></tr>
  96. <tr><td>phone</td><td>VARCHAR(20)</td><td>UNIQUE, NOT NULL</td><td>手机号</td></tr>
  97. <tr><td>nickname</td><td>VARCHAR(50)</td><td>NOT NULL</td><td>昵称</td></tr>
  98. <tr><td>school_id</td><td>VARCHAR(36)</td><td>-</td><td>学校ID</td></tr>
  99. <tr><td>grade</td><td>VARCHAR(20)</td><td>-</td><td>年级</td></tr>
  100. <tr><td>created_at</td><td>TIMESTAMP</td><td>DEFAULT CURRENT_TIMESTAMP</td><td>创建时间</td></tr>
  101. </table>
  102. <h3>2. 体重记录表 (weight_records)</h3>
  103. <table>
  104. <tr><th>字段名</th><th>类型</th><th>约束</th><th>说明</th></tr>
  105. <tr><td>id</td><td>VARCHAR(36)</td><td>PRIMARY KEY</td><td>记录ID(UUID)</td></tr>
  106. <tr><td>user_id</td><td>VARCHAR(36)</td><td>FOREIGN KEY</td><td>用户ID</td></tr>
  107. <tr><td>record_date</td><td>DATE</td><td>NOT NULL</td><td>记录日期</td></tr>
  108. <tr><td>weight</td><td>DECIMAL(5,2)</td><td>NOT NULL, CHECK(30-200)</td><td>体重(kg)</td></tr>
  109. <tr><td>body_fat</td><td>DECIMAL(4,2)</td><td>NOT NULL, CHECK(5-60)</td><td>体脂率(%)</td></tr>
  110. <tr><td>muscle_mass</td><td>DECIMAL(5,2)</td><td>NOT NULL, CHECK(10-100)</td><td>肌肉含量(kg)</td></tr>
  111. <tr><td>measurement_condition</td><td>ENUM</td><td>-</td><td>fasting/after_meal</td></tr>
  112. <tr><td>notes</td><td>TEXT</td><td>-</td><td>备注</td></tr>
  113. </table>
  114. <h3>3. 体重目标表 (weight_goals)</h3>
  115. <table>
  116. <tr><th>字段名</th><th>类型</th><th>约束</th><th>说明</th></tr>
  117. <tr><td>id</td><td>VARCHAR(36)</td><td>PRIMARY KEY</td><td>目标ID(UUID)</td></tr>
  118. <tr><td>user_id</td><td>VARCHAR(36)</td><td>FOREIGN KEY</td><td>用户ID</td></tr>
  119. <tr><td>target_weight</td><td>DECIMAL(5,2)</td><td>NOT NULL</td><td>目标体重(kg)</td></tr>
  120. <tr><td>target_date</td><td>DATE</td><td>NOT NULL</td><td>目标日期</td></tr>
  121. <tr><td>start_weight</td><td>DECIMAL(5,2)</td><td>NOT NULL</td><td>起始体重(kg)</td></tr>
  122. <tr><td>start_date</td><td>DATE</td><td>NOT NULL</td><td>开始日期</td></tr>
  123. <tr><td>status</td><td>ENUM</td><td>DEFAULT 'active'</td><td>active/completed/abandoned</td></tr>
  124. </table>
  125. <div class="description">
  126. <h3>设计说明</h3>
  127. <ul>
  128. <li><strong>主键设计</strong>:所有表使用UUID作为主键,便于分布式扩展</li>
  129. <li><strong>外键约束</strong>:使用ON DELETE CASCADE确保数据一致性</li>
  130. <li><strong>索引优化</strong>:在常用查询字段上建立索引提升性能</li>
  131. <li><strong>软删除</strong>:使用deleted_at字段实现软删除功能</li>
  132. </ul>
  133. </div>
  134. </body>
  135. </html>