Files
makemd/docs/05_Database_Design.md
2026-03-30 16:55:04 +08:00

11 KiB
Raw Permalink Blame History

数据库设计

1. 数据库概述

Crawlful Hub 项目使用 MySQL 8.0 作为数据库,采用了关系型数据库设计,确保数据的一致性和完整性。本文档详细介绍了项目的数据库表结构、索引和关系。

2. 数据库表结构

2.1 用户表cf_user

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 用户 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
username VARCHAR(255) NOT NULL, UNIQUE 用户名
password VARCHAR(255) NOT NULL 密码(加密存储)
email VARCHAR(255) NOT NULL, UNIQUE 邮箱
role VARCHAR(50) 角色
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

2.2 商品表cf_product

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 商品 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
shop_id VARCHAR(255) 店铺 ID
title VARCHAR(255) NOT NULL 商品标题
description TEXT 商品描述
main_image VARCHAR(255) 商品主图
platform VARCHAR(50) 平台
platform_product_id VARCHAR(255) 平台商品 ID
price DECIMAL(10,2) 价格
cost_price DECIMAL(10,2) 成本价格
quantity INT 数量
status VARCHAR(50) 状态
phash VARCHAR(255) 图片哈希
semantic_hash VARCHAR(255) 语义哈希
vector_embedding TEXT 向量嵌入
attributes JSON 属性
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

2.3 订单表cf_order

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 订单 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
shop_id VARCHAR(255) 店铺 ID
platform VARCHAR(50) 平台
platform_order_id VARCHAR(255) 平台订单 ID
status VARCHAR(50) 状态
total_amount DECIMAL(10,2) 总金额
currency VARCHAR(10) 货币
customer_info JSON 客户信息
items JSON 商品列表
shipping_address JSON shipping 地址
tracking_number VARCHAR(255) 跟踪号
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

2.4 支付表cf_payment

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 支付 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
order_id BIGINT FOREIGN KEY (order_id) REFERENCES cf_order(id) 订单 ID
payment_method VARCHAR(50) 支付方式
amount DECIMAL(10,2) 金额
currency VARCHAR(10) 货币
status VARCHAR(50) 状态
transaction_id VARCHAR(255) 交易 ID
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

2.5 物流表cf_logistics

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 物流 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
order_id BIGINT FOREIGN KEY (order_id) REFERENCES cf_order(id) 订单 ID
shipping_method VARCHAR(50) 物流方式
tracking_number VARCHAR(255) 跟踪号
carrier VARCHAR(50) 物流公司
status VARCHAR(50) 状态
estimated_delivery_date DATETIME 预计送达日期
actual_delivery_date DATETIME 实际送达日期
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

2.6 告警表cf_alert

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 告警 ID
tenant_id VARCHAR(255) NOT NULL 租户 ID
alert_type VARCHAR(50) 告警类型
severity VARCHAR(50) 严重程度
message TEXT 告警消息
status VARCHAR(50) 状态
source VARCHAR(255) 告警来源
threshold VARCHAR(255) 阈值
actual_value VARCHAR(255) 实际值
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
resolved_at DATETIME 解决时间

2.7 审计表cf_audit

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 审计日志 ID
tenant_id VARCHAR(255) 租户 ID
shop_id VARCHAR(255) 店铺 ID
user_id BIGINT 用户 ID
action VARCHAR(255) 操作类型
resource_type VARCHAR(255) 资源类型
resource_id VARCHAR(255) 资源 ID
ip_address VARCHAR(100) IP 地址
user_agent TEXT 用户代理
details TEXT 详细信息
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间

2.8 配置表cf_config

字段名 数据类型 约束 描述
id BIGINT PRIMARY KEY, AUTO_INCREMENT 配置 ID
tenant_id VARCHAR(255) 租户 ID
shop_id VARCHAR(255) 店铺 ID
config_key VARCHAR(255) NOT NULL 配置键
config_value VARCHAR(255) NOT NULL 配置值
config_type VARCHAR(50) 配置类型
description TEXT 配置描述
created_at DATETIME DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

3. 索引设计

3.1 用户表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_user_tenant_id tenant_id INDEX 租户 ID 索引
UNIQUE username UNIQUE 用户名唯一索引
UNIQUE email UNIQUE 邮箱唯一索引

3.2 商品表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_product_tenant_id tenant_id INDEX 租户 ID 索引
idx_product_platform platform INDEX 平台索引

3.3 订单表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_order_tenant_id tenant_id INDEX 租户 ID 索引
idx_order_platform platform INDEX 平台索引

3.4 支付表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_payment_tenant_id tenant_id INDEX 租户 ID 索引
idx_payment_order_id order_id INDEX 订单 ID 索引

3.5 物流表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_logistics_tenant_id tenant_id INDEX 租户 ID 索引
idx_logistics_order_id order_id INDEX 订单 ID 索引

3.6 告警表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_alert_tenant_id tenant_id INDEX 租户 ID 索引
idx_alert_status status INDEX 状态索引
idx_alert_severity severity INDEX 严重程度索引
idx_alert_alert_type alert_type INDEX 告警类型索引
idx_alert_created_at created_at INDEX 创建时间索引

3.7 审计表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_audit_tenant_id tenant_id INDEX 租户 ID 索引
idx_audit_shop_id shop_id INDEX 店铺 ID 索引
idx_audit_user_id user_id INDEX 用户 ID 索引
idx_audit_action action INDEX 操作类型索引
idx_audit_resource_type resource_type INDEX 资源类型索引
idx_audit_created_at created_at INDEX 创建时间索引

3.8 配置表索引

索引名 字段 类型 描述
PRIMARY id PRIMARY 主键索引
idx_config_tenant_id tenant_id INDEX 租户 ID 索引
idx_config_shop_id shop_id INDEX 店铺 ID 索引
idx_config_key config_key INDEX 配置键索引

4. 关系设计

4.1 表关系

  • 用户与订单:一对多关系,一个用户可以创建多个订单
  • 订单与支付:一对一关系,一个订单对应一个支付
  • 订单与物流:一对一关系,一个订单对应一个物流
  • 租户与所有表:一对多关系,一个租户可以有多个用户、商品、订单等

4.2 外键约束

表名 外键字段 引用表 引用字段 约束
cf_payment order_id cf_order id ON DELETE CASCADE
cf_logistics order_id cf_order id ON DELETE CASCADE

5. 数据类型选择

5.1 字符串类型

  • VARCHAR:用于存储可变长度的字符串,如用户名、邮箱等
  • TEXT:用于存储较长的文本,如商品描述、详细信息等
  • JSON:用于存储 JSON 格式的数据,如客户信息、商品列表等

5.2 数值类型

  • BIGINT:用于存储较大的整数,如 ID 等
  • INT:用于存储整数,如数量等
  • DECIMAL(10,2):用于存储金额,确保精度

5.3 日期类型

  • DATETIME:用于存储日期和时间,如创建时间、更新时间等

6. 数据库迁移

Crawlful Hub 项目使用 Flyway 进行数据库迁移,确保数据库结构的版本控制和一致性。

6.1 迁移脚本

脚本名 描述
V1__init_schema.sql 初始化数据库表结构
V2__add_alert_table.sql 添加告警表

6.2 迁移执行

  1. 进入项目目录:

    cd d:\trae_projects\makemd\makemd\serverjava
    
  2. 执行数据库迁移:

    mvn flyway:migrate
    

7. 性能优化

7.1 索引优化

  • 添加适当的索引:为频繁查询的字段添加索引
  • 避免过度索引:不要为所有字段添加索引,只为必要的字段添加
  • 使用复合索引:对于多字段查询,使用复合索引

7.2 查询优化

  • 使用分页查询:避免一次性加载大量数据
  • 使用索引覆盖查询:减少回表操作
  • 避免全表扫描:使用索引进行查询
  • 使用预编译语句:减少 SQL 解析时间

7.3 连接池优化

  • 使用 HikariCP:高性能的数据库连接池
  • 配置合理的连接数:根据系统负载配置连接数
  • 设置连接超时:避免连接占用过长时间

8. 安全考虑

8.1 数据加密

  • 密码加密:使用 BCrypt 加密用户密码
  • 敏感数据加密:对敏感数据进行加密存储

8.2 访问控制

  • 最小权限原则:只授予必要的数据库权限
  • 使用参数化查询:防止 SQL 注入攻击
  • 定期审计:定期审计数据库访问日志

9. 总结

本数据库设计文档详细介绍了 Crawlful Hub 项目的数据库表结构、索引和关系。通过合理的数据库设计,确保了系统的性能和可靠性。