# 爱鉴花项目数据库设计文档 ## 1. 数据库概述 本项目使用MySQL 8.0作为主数据库,存储用户、商品、订单、识别记录等核心业务数据。 ## 2. 数据库表结构 ### 2.1 用户表 (users) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 用户ID | 主键,自增 | | username | varchar(50) | 用户名 | 唯一索引 | | email | varchar(100) | 邮箱 | 唯一索引 | | phone | varchar(20) | 手机号 | 唯一索引 | | password_hash | varchar(255) | 密码哈希 | 非空 | | real_name | varchar(50) | 真实姓名 | 可空 | | avatar_url | varchar(255) | 头像URL | 可空 | | user_type | enum | 用户类型 | 非空 | | status | tinyint | 状态 | 默认1 | | last_login | timestamp | 最后登录时间 | 可空 | | created_at | timestamp | 创建时间 | 默认当前时间 | | updated_at | timestamp | 更新时间 | 自动更新 | ### 2.2 商品分类表 (categories) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | int | 分类ID | 主键,自增 | | name | varchar(100) | 分类名称 | 非空 | | parent_id | int | 父分类ID | 默认0 | | sort_order | int | 排序 | 默认0 | | status | tinyint | 状态 | 默认1 | | created_at | timestamp | 创建时间 | 默认当前时间 | | updated_at | timestamp | 更新时间 | 自动更新 | ### 2.3 商品表 (products) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 商品ID | 主键,自增 | | name | varchar(200) | 商品名称 | 非空 | | category_id | int | 分类ID | 索引 | | price | decimal(10,2) | 价格 | 非空 | | stock | int | 库存 | 默认0 | | image | varchar(255) | 图片URL | 可空 | | description | text | 商品描述 | 可空 | | status | tinyint | 状态 | 默认1 | | created_at | timestamp | 创建时间 | 默认当前时间 | | updated_at | timestamp | 更新时间 | 自动更新 | ### 2.4 订单表 (orders) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 订单ID | 主键,自增 | | user_id | bigint | 用户ID | 非空,索引 | | total_amount | decimal(10,2) | 订单总额 | 非空 | | payment_status | tinyint | 支付状态 | 默认0 | | shipping_status | tinyint | 配送状态 | 默认0 | | shipping_address | text | 配送地址 | 可空 | | created_at | timestamp | 创建时间 | 默认当前时间 | | updated_at | timestamp | 更新时间 | 自动更新 | ### 2.5 订单商品表 (order_items) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 订单项ID | 主键,自增 | | order_id | bigint | 订单ID | 非空,索引 | | product_id | bigint | 商品ID | 非空,索引 | | quantity | int | 数量 | 非空 | | unit_price | decimal(10,2) | 单价 | 非空 | ### 2.6 识别记录表 (identifications) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 记录ID | 主键,自增 | | user_id | bigint | 用户ID | 非空,索引 | | image_url | varchar(255) | 图片URL | 非空 | | result | text | 识别结果 | 可空 | | confidence | decimal(5,4) | 置信度 | 可空 | | created_at | timestamp | 创建时间 | 默认当前时间 | ### 2.7 收货地址表 (addresses) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | bigint | 地址ID | 主键,自增 | | user_id | bigint | 用户ID | 非空,索引 | | recipient | varchar(100) | 收货人 | 非空 | | phone | varchar(20) | 手机号 | 非空 | | address | text | 详细地址 | 非空 | | is_default | tinyint | 是否默认 | 默认0 | | created_at | timestamp | 创建时间 | 默认当前时间 | | updated_at | timestamp | 更新时间 | 自动更新 | ## 3. 索引设计 ### 3.1 唯一索引 - users.phone: 手机号唯一索引 - users.email: 邮箱唯一索引 - users.username: 用户名唯一索引 ### 3.2 普通索引 - products.category_id: 商品分类索引 - orders.user_id: 订单用户索引 - orders.created_at: 订单时间索引 - identifications.user_id: 识别记录用户索引 - identifications.created_at: 识别时间索引 - addresses.user_id: 地址用户索引 ## 4. 测试数据统计 已插入的测试数据: - 用户数据: 3条 - 商品分类: 7条 - 商品数据: 5条 - 订单数据: 3条 - 订单商品: 4条 - 识别记录: 3条 - 收货地址: 3条 ## 5. 数据库变更记录 ### 2024-03-15 更新 - 修复用户表缺少last_login字段的问题 - 密码字段从password_hash改为password,使用bcrypt加密存储 - 增加数据库初始化脚本,包含默认管理员账号(admin/admin123) ## 5. 数据库连接信息 **生产环境**: - 主机: 129.211.213.226:9527 - 数据库: ajhdata - 用户名: root - 密码: aiotAiot123! **连接池配置**: - 最大连接数: 200 - 最小连接数: 20 - 超时时间: 30秒 ## 6. 字符编码和时区 - 字符编码: UTF8MB4(支持emoji表情) - 时区设置: 东八区(+08:00) --- *本文档最后更新: 2024年1月* *数据库版本: MySQL 8.0*