优鲜系统数据库设计文档
1. 数据库概述
1.1 数据库说明
- 数据库名称: fresh_system
- 数据库类型: MySQL 8.0+
- 字符集: utf8mb4
- 排序规则: utf8mb4_unicode_ci
- 设计原则:
- 遵循数据库设计三范式
- 合理使用索引提升查询性能
- 预留扩展字段便于后续功能扩展
- 统一使用逻辑删除(is_deleted字段)
1.2 命名规范
- 表名: 使用小写字母,多个单词用下划线分隔,表名使用复数形式(如:users, orders)
- 字段名: 使用小写字母,多个单词用下划线分隔(如:user_id, created_at)
- 主键: 统一使用 id 作为主键,类型为 BIGINT,自增
- 外键: 使用
关联表名_id格式(如:user_id, order_id) - 时间字段: created_at(创建时间)、updated_at(更新时间)、deleted_at(删除时间)
2. 数据库表设计
2.1 用户相关表
2.1.1 用户表(users)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| phone | VARCHAR | 20 | NOT NULL | - | 手机号(唯一) |
| password | VARCHAR | 255 | NULL | - | 密码(加密存储) |
| nickname | VARCHAR | 50 | NULL | - | 昵称 |
| avatar | VARCHAR | 500 | NULL | - | 头像URL |
| gender | TINYINT | - | NULL | 0 | 性别(0-未知,1-男,2-女) |
| real_name | VARCHAR | 50 | NULL | - | 真实姓名 |
| id_card | VARCHAR | 18 | NULL | - | 身份证号 |
| is_real_name_verified | TINYINT | - | NOT NULL | 0 | 是否实名认证(0-否,1-是) |
| wx_openid | VARCHAR | 100 | NULL | - | 微信OpenID |
| wx_unionid | VARCHAR | 100 | NULL | - | 微信UnionID |
| default_community_id | BIGINT | - | NULL | - | 默认小区ID |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除(0-否,1-是) |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
| deleted_at | DATETIME | - | NULL | - | 删除时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_phone (phone)
- INDEX idx_wx_openid (wx_openid)
- INDEX idx_default_community_id (default_community_id)
- INDEX idx_status (status)
- INDEX idx_is_deleted (is_deleted)
2.1.2 会员表(members)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| member_level_id | BIGINT | - | NOT NULL | - | 会员等级ID |
| points | INT | - | NOT NULL | 0 | 积分 |
| growth_value | INT | - | NOT NULL | 0 | 成长值 |
| birthday | DATE | - | NULL | - | 生日 |
| expire_time | DATETIME | - | NULL | - | 会员到期时间 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-失效,1-有效) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_user_id (user_id)
- INDEX idx_member_level_id (member_level_id)
- INDEX idx_status (status)
2.1.3 会员等级表(member_levels)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| level_name | VARCHAR | 50 | NOT NULL | - | 等级名称 |
| level_code | VARCHAR | 20 | NOT NULL | - | 等级代码 |
| min_growth_value | INT | - | NOT NULL | 0 | 最小成长值 |
| max_growth_value | INT | - | NULL | - | 最大成长值 |
| discount_rate | DECIMAL | 5,2 | NOT NULL | 1.00 | 折扣率(0.01-1.00) |
| points_rate | DECIMAL | 5,2 | NOT NULL | 1.00 | 积分倍率 |
| birthday_gift | VARCHAR | 500 | NULL | - | 生日礼包配置(JSON) |
| upgrade_reward | VARCHAR | 500 | NULL | - | 升级奖励配置(JSON) |
| sort_order | INT | - | NOT NULL | 0 | 排序顺序 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_level_code (level_code)
- INDEX idx_sort_order (sort_order)
2.1.4 收货地址表(user_addresses)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| contact_name | VARCHAR | 50 | NOT NULL | - | 联系人姓名 |
| contact_phone | VARCHAR | 20 | NOT NULL | - | 联系人电话 |
| province | VARCHAR | 50 | NOT NULL | - | 省份 |
| city | VARCHAR | 50 | NOT NULL | - | 城市 |
| district | VARCHAR | 50 | NOT NULL | - | 区县 |
| address | VARCHAR | 200 | NOT NULL | - | 详细地址 |
| longitude | DECIMAL | 10,7 | NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NULL | - | 纬度 |
| community_id | BIGINT | - | NULL | - | 所属小区ID |
| is_default | TINYINT | - | NOT NULL | 0 | 是否默认地址(0-否,1-是) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_community_id (community_id)
- INDEX idx_is_default (is_default)
2.2 商品相关表
2.2.1 商品分类表(product_categories)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| parent_id | BIGINT | - | NULL | 0 | 父分类ID(0表示一级分类) |
| category_name | VARCHAR | 50 | NOT NULL | - | 分类名称 |
| category_icon | VARCHAR | 500 | NULL | - | 分类图标URL |
| sort_order | INT | - | NOT NULL | 0 | 排序顺序 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_parent_id (parent_id)
- INDEX idx_sort_order (sort_order)
2.2.2 商品表(products)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| category_id | BIGINT | - | NOT NULL | - | 商品分类ID |
| product_name | VARCHAR | 100 | NOT NULL | - | 商品名称 |
| product_desc | TEXT | - | NULL | - | 商品描述 |
| product_images | TEXT | - | NULL | - | 商品图片(JSON数组) |
| unit | VARCHAR | 20 | NOT NULL | - | 单位(如:斤、个、份) |
| original_price | DECIMAL | 10,2 | NOT NULL | - | 原价 |
| sale_price | DECIMAL | 10,2 | NOT NULL | - | 售价 |
| member_price | DECIMAL | 10,2 | NULL | - | 会员价 |
| is_farmer_direct | TINYINT | - | NOT NULL | 0 | 是否农户直采(0-否,1-是) |
| farmer_id | BIGINT | - | NULL | - | 农户ID |
| purchase_video_id | BIGINT | - | NULL | - | 采购视频ID |
| video_status | TINYINT | - | NOT NULL | 0 | 视频审核状态(0-未审核,1-审核通过,2-审核拒绝) |
| sales_count | INT | - | NOT NULL | 0 | 销量 |
| view_count | INT | - | NOT NULL | 0 | 浏览量 |
| sort_order | INT | - | NOT NULL | 0 | 排序顺序 |
| status | TINYINT | - | NOT NULL | 0 | 状态(0-下架,1-上架) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_category_id (category_id)
- INDEX idx_farmer_id (farmer_id)
- INDEX idx_is_farmer_direct (is_farmer_direct)
- INDEX idx_status (status)
- INDEX idx_sort_order (sort_order)
2.2.3 采购视频表(purchase_videos)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| video_name | VARCHAR | 200 | NOT NULL | - | 视频名称 |
| video_url | VARCHAR | 500 | NOT NULL | - | 视频URL |
| video_cover | VARCHAR | 500 | NULL | - | 视频封面URL |
| video_duration | INT | - | NULL | - | 视频时长(秒) |
| video_size | BIGINT | - | NULL | - | 视频大小(字节) |
| farmer_id | BIGINT | - | NULL | - | 农户ID |
| purchase_plan_id | BIGINT | - | NULL | - | 采购计划ID |
| upload_user_id | BIGINT | - | NOT NULL | - | 上传用户ID |
| audit_status | TINYINT | - | NOT NULL | 0 | 审核状态(0-待审核,1-审核通过,2-审核拒绝) |
| audit_user_id | BIGINT | - | NULL | - | 审核用户ID |
| audit_time | DATETIME | - | NULL | - | 审核时间 |
| audit_remark | VARCHAR | 500 | NULL | - | 审核备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_farmer_id (farmer_id)
- INDEX idx_purchase_plan_id (purchase_plan_id)
- INDEX idx_audit_status (audit_status)
2.3 门店相关表
2.3.1 门店表(stores)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_name | VARCHAR | 100 | NOT NULL | - | 门店名称 |
| store_address | VARCHAR | 200 | NOT NULL | - | 门店地址 |
| contact_name | VARCHAR | 50 | NOT NULL | - | 联系人姓名 |
| contact_phone | VARCHAR | 20 | NOT NULL | - | 联系电话 |
| longitude | DECIMAL | 10,7 | NOT NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NOT NULL | - | 纬度 |
| business_hours | VARCHAR | 100 | NULL | - | 营业时间 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-关闭,1-营业,2-休息) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_status (status)
2.3.2 门店小区关联表(store_communities)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| community_id | BIGINT | - | NOT NULL | - | 小区ID |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_store_community (store_id, community_id)
- INDEX idx_store_id (store_id)
- INDEX idx_community_id (community_id)
2.4 小区相关表
2.4.1 小区表(communities)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| community_name | VARCHAR | 100 | NOT NULL | - | 小区名称 |
| community_address | VARCHAR | 200 | NOT NULL | - | 小区地址 |
| longitude | DECIMAL | 10,7 | NOT NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NOT NULL | - | 纬度 |
| building_info | TEXT | - | NULL | - | 楼栋信息(JSON) |
| service_store_id | BIGINT | - | NULL | - | 服务门店ID |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-停用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_service_store_id (service_store_id)
- INDEX idx_status (status)
2.5 订单相关表
2.5.1 订单表(orders)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| order_no | VARCHAR | 50 | NOT NULL | - | 订单号(唯一) |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| community_id | BIGINT | - | NOT NULL | - | 小区ID |
| address_id | BIGINT | - | NOT NULL | - | 收货地址ID |
| contact_name | VARCHAR | 50 | NOT NULL | - | 收货人姓名 |
| contact_phone | VARCHAR | 20 | NOT NULL | - | 收货人电话 |
| delivery_address | VARCHAR | 500 | NOT NULL | - | 配送地址 |
| delivery_time | DATETIME | - | NULL | - | 配送时间 |
| product_amount | DECIMAL | 10,2 | NOT NULL | 0.00 | 商品金额 |
| delivery_fee | DECIMAL | 10,2 | NOT NULL | 0.00 | 配送费 |
| coupon_amount | DECIMAL | 10,2 | NOT NULL | 0.00 | 优惠券抵扣金额 |
| total_amount | DECIMAL | 10,2 | NOT NULL | 0.00 | 订单总金额 |
| coupon_id | BIGINT | - | NULL | - | 使用的优惠券ID |
| payment_method | TINYINT | - | NULL | - | 支付方式(1-微信,2-支付宝,3-余额) |
| payment_status | TINYINT | - | NOT NULL | 0 | 支付状态(0-待支付,1-已支付,2-已退款) |
| payment_time | DATETIME | - | NULL | - | 支付时间 |
| order_status | TINYINT | - | NOT NULL | 0 | 订单状态(0-待支付,1-待配送,2-配送中,3-已完成,4-已取消) |
| cancel_reason | VARCHAR | 500 | NULL | - | 取消原因 |
| cancel_time | DATETIME | - | NULL | - | 取消时间 |
| delivery_start_time | DATETIME | - | NULL | - | 配送开始时间 |
| delivery_end_time | DATETIME | - | NULL | - | 配送完成时间 |
| remark | VARCHAR | 500 | NULL | - | 订单备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_order_no (order_no)
- INDEX idx_user_id (user_id)
- INDEX idx_store_id (store_id)
- INDEX idx_community_id (community_id)
- INDEX idx_order_status (order_status)
- INDEX idx_payment_status (payment_status)
- INDEX idx_created_at (created_at)
2.5.2 订单商品表(order_items)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| product_name | VARCHAR | 100 | NOT NULL | - | 商品名称(快照) |
| product_image | VARCHAR | 500 | NULL | - | 商品图片(快照) |
| product_price | DECIMAL | 10,2 | NOT NULL | - | 商品单价(快照) |
| quantity | INT | - | NOT NULL | - | 购买数量 |
| subtotal | DECIMAL | 10,2 | NOT NULL | - | 小计金额 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_order_id (order_id)
- INDEX idx_product_id (product_id)
2.5.3 购物车表(shopping_carts)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| quantity | INT | - | NOT NULL | 1 | 商品数量 |
| is_selected | TINYINT | - | NOT NULL | 1 | 是否选中(0-否,1-是) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_user_product (user_id, product_id)
- INDEX idx_user_id (user_id)
- INDEX idx_product_id (product_id)
2.6 配送相关表
2.6.1 配送员表(delivery_staff)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_id | BIGINT | - | NOT NULL | - | 所属门店ID |
| staff_name | VARCHAR | 50 | NOT NULL | - | 配送员姓名 |
| staff_phone | VARCHAR | 20 | NOT NULL | - | 配送员电话 |
| id_card | VARCHAR | 18 | NULL | - | 身份证号 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-休息,1-空闲,2-配送中) |
| current_longitude | DECIMAL | 10,7 | NULL | - | 当前经度 |
| current_latitude | DECIMAL | 10,7 | NULL | - | 当前纬度 |
| location_update_time | DATETIME | - | NULL | - | 位置更新时间 |
| total_orders | INT | - | NOT NULL | 0 | 总配送订单数 |
| avg_delivery_time | INT | - | NOT NULL | 0 | 平均配送时间(分钟) |
| rating_score | DECIMAL | 3,2 | NOT NULL | 5.00 | 评分(0-5分) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_store_id (store_id)
- INDEX idx_status (status)
2.6.2 配送订单表(delivery_orders)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| delivery_staff_id | BIGINT | - | NULL | - | 配送员ID |
| delivery_status | TINYINT | - | NOT NULL | 0 | 配送状态(0-待分配,1-已分配,2-配送中,3-已完成,4-异常) |
| assign_time | DATETIME | - | NULL | - | 分配时间 |
| start_time | DATETIME | - | NULL | - | 开始配送时间 |
| complete_time | DATETIME | - | NULL | - | 完成时间 |
| expected_time | DATETIME | - | NULL | - | 预计送达时间 |
| actual_time | DATETIME | - | NULL | - | 实际送达时间 |
| delivery_duration | INT | - | NULL | - | 配送时长(分钟) |
| is_timeout | TINYINT | - | NOT NULL | 0 | 是否超时(0-否,1-是) |
| route_info | TEXT | - | NULL | - | 配送路线信息(JSON) |
| remark | VARCHAR | 500 | NULL | - | 配送备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_order_id (order_id)
- INDEX idx_delivery_staff_id (delivery_staff_id)
- INDEX idx_delivery_status (delivery_status)
2.7 库存相关表
2.7.1 门店库存表(store_inventories)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| quantity | INT | - | NOT NULL | 0 | 库存数量 |
| safe_quantity | INT | - | NOT NULL | 0 | 安全库存 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_store_product (store_id, product_id)
- INDEX idx_store_id (store_id)
- INDEX idx_product_id (product_id)
2.7.2 库存调整记录表(inventory_adjustments)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| adjustment_type | TINYINT | - | NOT NULL | - | 调整类型(1-增加,2-减少) |
| quantity | INT | - | NOT NULL | - | 调整数量 |
| before_quantity | INT | - | NOT NULL | - | 调整前库存 |
| after_quantity | INT | - | NOT NULL | - | 调整后库存 |
| reason | VARCHAR | 500 | NULL | - | 调整原因 |
| operator_id | BIGINT | - | NOT NULL | - | 操作人ID |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_store_id (store_id)
- INDEX idx_product_id (product_id)
- INDEX idx_created_at (created_at)
2.7.3 库存盘点表(inventory_checks)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| check_date | DATE | - | NOT NULL | - | 盘点日期 |
| check_status | TINYINT | - | NOT NULL | 0 | 盘点状态(0-进行中,1-已完成) |
| operator_id | BIGINT | - | NOT NULL | - | 操作人ID |
| remark | VARCHAR | 500 | NULL | - | 备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_store_id (store_id)
- INDEX idx_check_date (check_date)
2.7.4 库存盘点明细表(inventory_check_items)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| check_id | BIGINT | - | NOT NULL | - | 盘点ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| system_quantity | INT | - | NOT NULL | - | 系统库存 |
| actual_quantity | INT | - | NOT NULL | - | 实际库存 |
| difference | INT | - | NOT NULL | - | 差异数量 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_check_id (check_id)
- INDEX idx_product_id (product_id)
2.8 采购相关表
2.8.1 农户表(farmers)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| farmer_name | VARCHAR | 50 | NOT NULL | - | 农户姓名 |
| farmer_phone | VARCHAR | 20 | NOT NULL | - | 农户电话 |
| farmer_address | VARCHAR | 200 | NOT NULL | - | 农户地址 |
| id_card | VARCHAR | 18 | NULL | - | 身份证号 |
| cooperation_products | TEXT | - | NULL | - | 合作商品(JSON数组) |
| rating_score | DECIMAL | 3,2 | NOT NULL | 5.00 | 评分(0-5分) |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-停用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_status (status)
2.8.2 供应商表(suppliers)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| supplier_name | VARCHAR | 100 | NOT NULL | - | 供应商名称 |
| contact_name | VARCHAR | 50 | NOT NULL | - | 联系人姓名 |
| contact_phone | VARCHAR | 20 | NOT NULL | - | 联系电话 |
| supplier_address | VARCHAR | 200 | NULL | - | 供应商地址 |
| rating_score | DECIMAL | 3,2 | NOT NULL | 5.00 | 评分(0-5分) |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-停用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_status (status)
2.8.3 采购计划表(purchase_plans)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| plan_no | VARCHAR | 50 | NOT NULL | - | 采购计划编号 |
| store_id | BIGINT | - | NOT NULL | - | 门店ID |
| supplier_id | BIGINT | - | NULL | - | 供应商ID |
| farmer_id | BIGINT | - | NULL | - | 农户ID |
| plan_date | DATE | - | NOT NULL | - | 计划采购日期 |
| plan_status | TINYINT | - | NOT NULL | 0 | 计划状态(0-待审批,1-已审批,2-执行中,3-已完成,4-已取消) |
| approver_id | BIGINT | - | NULL | - | 审批人ID |
| approve_time | DATETIME | - | NULL | - | 审批时间 |
| approve_remark | VARCHAR | 500 | NULL | - | 审批备注 |
| executor_id | BIGINT | - | NULL | - | 执行人ID |
| execute_time | DATETIME | - | NULL | - | 执行时间 |
| remark | VARCHAR | 500 | NULL | - | 备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_plan_no (plan_no)
- INDEX idx_store_id (store_id)
- INDEX idx_plan_status (plan_status)
2.8.4 采购计划明细表(purchase_plan_items)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| plan_id | BIGINT | - | NOT NULL | - | 采购计划ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| plan_quantity | INT | - | NOT NULL | - | 计划采购数量 |
| actual_quantity | INT | - | NULL | - | 实际采购数量 |
| unit_price | DECIMAL | 10,2 | NULL | - | 单价 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_plan_id (plan_id)
- INDEX idx_product_id (product_id)
2.9 支付相关表
2.9.1 支付记录表(payments)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| payment_no | VARCHAR | 50 | NOT NULL | - | 支付单号(唯一) |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| payment_method | TINYINT | - | NOT NULL | - | 支付方式(1-微信,2-支付宝,3-余额) |
| payment_amount | DECIMAL | 10,2 | NOT NULL | - | 支付金额 |
| payment_status | TINYINT | - | NOT NULL | 0 | 支付状态(0-待支付,1-支付成功,2-支付失败) |
| third_party_no | VARCHAR | 100 | NULL | - | 第三方支付单号 |
| payment_time | DATETIME | - | NULL | - | 支付时间 |
| callback_data | TEXT | - | NULL | - | 回调数据(JSON) |
| remark | VARCHAR | 500 | NULL | - | 备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_payment_no (payment_no)
- INDEX idx_order_id (order_id)
- INDEX idx_user_id (user_id)
- INDEX idx_payment_status (payment_status)
2.9.2 退款记录表(refunds)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| refund_no | VARCHAR | 50 | NOT NULL | - | 退款单号(唯一) |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| payment_id | BIGINT | - | NOT NULL | - | 支付记录ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| refund_amount | DECIMAL | 10,2 | NOT NULL | - | 退款金额 |
| refund_reason | VARCHAR | 500 | NULL | - | 退款原因 |
| refund_status | TINYINT | - | NOT NULL | 0 | 退款状态(0-待审核,1-审核通过,2-审核拒绝,3-退款成功,4-退款失败) |
| auditor_id | BIGINT | - | NULL | - | 审核人ID |
| audit_time | DATETIME | - | NULL | - | 审核时间 |
| audit_remark | VARCHAR | 500 | NULL | - | 审核备注 |
| refund_time | DATETIME | - | NULL | - | 退款时间 |
| third_party_no | VARCHAR | 100 | NULL | - | 第三方退款单号 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_refund_no (refund_no)
- INDEX idx_order_id (order_id)
- INDEX idx_user_id (user_id)
- INDEX idx_refund_status (refund_status)
2.9.3 用户账户表(user_accounts)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| balance | DECIMAL | 10,2 | NOT NULL | 0.00 | 账户余额 |
| frozen_balance | DECIMAL | 10,2 | NOT NULL | 0.00 | 冻结余额 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_user_id (user_id)
2.9.4 资金流水表(account_transactions)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| transaction_type | TINYINT | - | NOT NULL | - | 交易类型(1-充值,2-消费,3-退款,4-提现) |
| transaction_amount | DECIMAL | 10,2 | NOT NULL | - | 交易金额 |
| balance_before | DECIMAL | 10,2 | NOT NULL | - | 交易前余额 |
| balance_after | DECIMAL | 10,2 | NOT NULL | - | 交易后余额 |
| related_id | BIGINT | - | NULL | - | 关联ID(订单ID、支付ID等) |
| related_type | VARCHAR | 50 | NULL | - | 关联类型(order, payment, refund等) |
| remark | VARCHAR | 500 | NULL | - | 备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_transaction_type (transaction_type)
- INDEX idx_created_at (created_at)
2.10 评价相关表
2.10.1 商品评价表(product_reviews)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| order_item_id | BIGINT | - | NOT NULL | - | 订单商品ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| quality_score | TINYINT | - | NOT NULL | - | 质量评分(1-5分) |
| freshness_score | TINYINT | - | NOT NULL | - | 新鲜度评分(1-5分) |
| price_score | TINYINT | - | NOT NULL | - | 价格评分(1-5分) |
| overall_score | DECIMAL | 3,2 | NOT NULL | - | 综合评分(1-5分) |
| review_content | TEXT | - | NULL | - | 评价内容 |
| review_images | TEXT | - | NULL | - | 评价图片(JSON数组) |
| reply_content | TEXT | - | NULL | - | 商家回复内容 |
| reply_time | DATETIME | - | NULL | - | 回复时间 |
| audit_status | TINYINT | - | NOT NULL | 0 | 审核状态(0-待审核,1-审核通过,2-审核拒绝) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_order_id (order_id)
- INDEX idx_user_id (user_id)
- INDEX idx_product_id (product_id)
- INDEX idx_audit_status (audit_status)
2.10.2 配送评价表(delivery_reviews)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| delivery_staff_id | BIGINT | - | NULL | - | 配送员ID |
| speed_score | TINYINT | - | NOT NULL | - | 配送速度评分(1-5分) |
| service_score | TINYINT | - | NOT NULL | - | 服务态度评分(1-5分) |
| overall_score | DECIMAL | 3,2 | NOT NULL | - | 综合评分(1-5分) |
| review_content | TEXT | - | NULL | - | 评价内容 |
| audit_status | TINYINT | - | NOT NULL | 0 | 审核状态(0-待审核,1-审核通过,2-审核拒绝) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_order_id (order_id)
- INDEX idx_user_id (user_id)
- INDEX idx_delivery_staff_id (delivery_staff_id)
- INDEX idx_audit_status (audit_status)
2.11 营销相关表
2.11.1 优惠券表(coupons)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| coupon_name | VARCHAR | 100 | NOT NULL | - | 优惠券名称 |
| coupon_type | TINYINT | - | NOT NULL | - | 优惠券类型(1-满减券,2-折扣券) |
| discount_amount | DECIMAL | 10,2 | NULL | - | 优惠金额(满减券) |
| discount_rate | DECIMAL | 5,2 | NULL | - | 折扣率(折扣券,0.01-1.00) |
| min_amount | DECIMAL | 10,2 | NOT NULL | 0.00 | 最低使用金额 |
| total_count | INT | - | NOT NULL | - | 发放总数(-1表示不限制) |
| used_count | INT | - | NOT NULL | 0 | 已使用数量 |
| start_time | DATETIME | - | NOT NULL | - | 开始时间 |
| end_time | DATETIME | - | NOT NULL | - | 结束时间 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_coupon_type (coupon_type)
- INDEX idx_status (status)
- INDEX idx_start_time (start_time)
- INDEX idx_end_time (end_time)
2.11.2 用户优惠券表(user_coupons)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| coupon_id | BIGINT | - | NOT NULL | - | 优惠券ID |
| status | TINYINT | - | NOT NULL | 0 | 状态(0-未使用,1-已使用,2-已过期) |
| use_time | DATETIME | - | NULL | - | 使用时间 |
| order_id | BIGINT | - | NULL | - | 使用的订单ID |
| expire_time | DATETIME | - | NOT NULL | - | 过期时间 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_coupon_id (coupon_id)
- INDEX idx_status (status)
- INDEX idx_expire_time (expire_time)
2.11.3 促销活动表(promotions)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| promotion_name | VARCHAR | 100 | NOT NULL | - | 活动名称 |
| promotion_type | TINYINT | - | NOT NULL | - | 活动类型(1-限时折扣,2-满减活动) |
| discount_rate | DECIMAL | 5,2 | NULL | - | 折扣率(限时折扣) |
| discount_amount | DECIMAL | 10,2 | NULL | - | 满减金额(满减活动) |
| min_amount | DECIMAL | 10,2 | NULL | - | 最低金额(满减活动) |
| start_time | DATETIME | - | NOT NULL | - | 开始时间 |
| end_time | DATETIME | - | NOT NULL | - | 结束时间 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_promotion_type (promotion_type)
- INDEX idx_status (status)
- INDEX idx_start_time (start_time)
- INDEX idx_end_time (end_time)
2.11.4 促销活动商品表(promotion_products)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| promotion_id | BIGINT | - | NOT NULL | - | 活动ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_promotion_product (promotion_id, product_id)
- INDEX idx_promotion_id (promotion_id)
- INDEX idx_product_id (product_id)
2.12 系统管理相关表
2.12.1 管理员表(admins)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| username | VARCHAR | 50 | NOT NULL | - | 用户名(唯一) |
| password | VARCHAR | 255 | NOT NULL | - | 密码(加密存储) |
| real_name | VARCHAR | 50 | NULL | - | 真实姓名 |
| phone | VARCHAR | 20 | NULL | - | 手机号 |
| VARCHAR | 100 | NULL | - | 邮箱 | |
| role_id | BIGINT | - | NULL | - | 角色ID |
| store_id | BIGINT | - | NULL | - | 所属门店ID(门店管理员) |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| last_login_time | DATETIME | - | NULL | - | 最后登录时间 |
| last_login_ip | VARCHAR | 50 | NULL | - | 最后登录IP |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_username (username)
- INDEX idx_role_id (role_id)
- INDEX idx_store_id (store_id)
- INDEX idx_status (status)
2.12.2 角色表(roles)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| role_name | VARCHAR | 50 | NOT NULL | - | 角色名称 |
| role_code | VARCHAR | 50 | NOT NULL | - | 角色代码(唯一) |
| role_desc | VARCHAR | 500 | NULL | - | 角色描述 |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-禁用,1-启用) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_role_code (role_code)
2.12.3 权限表(permissions)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| parent_id | BIGINT | - | NULL | 0 | 父权限ID(0表示一级权限) |
| permission_name | VARCHAR | 50 | NOT NULL | - | 权限名称 |
| permission_code | VARCHAR | 100 | NOT NULL | - | 权限代码(唯一) |
| permission_type | TINYINT | - | NOT NULL | - | 权限类型(1-菜单,2-按钮,3-数据) |
| menu_path | VARCHAR | 200 | NULL | - | 菜单路径 |
| sort_order | INT | - | NOT NULL | 0 | 排序顺序 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_permission_code (permission_code)
- INDEX idx_parent_id (parent_id)
2.12.4 角色权限关联表(role_permissions)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| role_id | BIGINT | - | NOT NULL | - | 角色ID |
| permission_id | BIGINT | - | NOT NULL | - | 权限ID |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_role_permission (role_id, permission_id)
- INDEX idx_role_id (role_id)
- INDEX idx_permission_id (permission_id)
2.12.5 系统配置表(system_configs)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| config_key | VARCHAR | 100 | NOT NULL | - | 配置键(唯一) |
| config_value | TEXT | - | NULL | - | 配置值 |
| config_desc | VARCHAR | 500 | NULL | - | 配置描述 |
| config_type | VARCHAR | 50 | NULL | - | 配置类型 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_config_key (config_key)
2.12.6 操作日志表(operation_logs)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| admin_id | BIGINT | - | NULL | - | 管理员ID |
| operation_type | VARCHAR | 50 | NOT NULL | - | 操作类型 |
| operation_desc | VARCHAR | 500 | NULL | - | 操作描述 |
| request_method | VARCHAR | 10 | NULL | - | 请求方法 |
| request_url | VARCHAR | 500 | NULL | - | 请求URL |
| request_params | TEXT | - | NULL | - | 请求参数(JSON) |
| response_data | TEXT | - | NULL | - | 响应数据(JSON) |
| ip_address | VARCHAR | 50 | NULL | - | IP地址 |
| user_agent | VARCHAR | 500 | NULL | - | 用户代理 |
| execution_time | INT | - | NULL | - | 执行时间(毫秒) |
| status | TINYINT | - | NOT NULL | 1 | 状态(0-失败,1-成功) |
| error_message | TEXT | - | NULL | - | 错误信息 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_admin_id (admin_id)
- INDEX idx_operation_type (operation_type)
- INDEX idx_created_at (created_at)
2.12.7 积分记录表(points_records)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NOT NULL | - | 用户ID |
| points_type | TINYINT | - | NOT NULL | - | 积分类型(1-获得,2-消费) |
| points | INT | - | NOT NULL | - | 积分数量 |
| points_before | INT | - | NOT NULL | - | 操作前积分 |
| points_after | INT | - | NOT NULL | - | 操作后积分 |
| source_type | VARCHAR | 50 | NULL | - | 来源类型(order, sign, exchange等) |
| source_id | BIGINT | - | NULL | - | 来源ID |
| remark | VARCHAR | 500 | NULL | - | 备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_points_type (points_type)
- INDEX idx_source_type (source_type, source_id)
- INDEX idx_created_at (created_at)
2.13 其他补充表
2.13.1 小区扩展申请表(community_applications)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| application_no | VARCHAR | 50 | NOT NULL | - | 申请编号(唯一) |
| community_name | VARCHAR | 100 | NOT NULL | - | 小区名称 |
| community_address | VARCHAR | 200 | NOT NULL | - | 小区地址 |
| longitude | DECIMAL | 10,7 | NOT NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NOT NULL | - | 纬度 |
| applicant_name | VARCHAR | 50 | NOT NULL | - | 申请人姓名 |
| applicant_phone | VARCHAR | 20 | NOT NULL | - | 申请人电话 |
| applicant_type | TINYINT | - | NOT NULL | - | 申请人类型(1-个人,2-物业,3-其他) |
| building_count | INT | - | NULL | - | 楼栋数量 |
| household_count | INT | - | NULL | - | 户数 |
| application_status | TINYINT | - | NOT NULL | 0 | 申请状态(0-待审核,1-审核通过,2-审核拒绝,3-已分配门店) |
| assigned_store_id | BIGINT | - | NULL | - | 分配的门店ID |
| auditor_id | BIGINT | - | NULL | - | 审核人ID |
| audit_time | DATETIME | - | NULL | - | 审核时间 |
| audit_remark | VARCHAR | 500 | NULL | - | 审核备注 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_application_no (application_no)
- INDEX idx_application_status (application_status)
- INDEX idx_assigned_store_id (assigned_store_id)
2.13.2 消息通知表(notifications)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NULL | - | 用户ID(NULL表示系统通知) |
| notification_type | TINYINT | - | NOT NULL | - | 通知类型(1-订单,2-配送,3-系统,4-营销) |
| title | VARCHAR | 100 | NOT NULL | - | 通知标题 |
| content | TEXT | - | NOT NULL | - | 通知内容 |
| related_id | BIGINT | - | NULL | - | 关联ID(订单ID等) |
| related_type | VARCHAR | 50 | NULL | - | 关联类型 |
| send_method | TINYINT | - | NOT NULL | 1 | 发送方式(1-APP推送,2-短信,3-站内信) |
| send_status | TINYINT | - | NOT NULL | 0 | 发送状态(0-待发送,1-已发送,2-发送失败) |
| send_time | DATETIME | - | NULL | - | 发送时间 |
| read_status | TINYINT | - | NOT NULL | 0 | 阅读状态(0-未读,1-已读) |
| read_time | DATETIME | - | NULL | - | 阅读时间 |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_notification_type (notification_type)
- INDEX idx_read_status (read_status)
- INDEX idx_created_at (created_at)
2.13.3 配送路线表(delivery_routes)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| delivery_order_id | BIGINT | - | NOT NULL | - | 配送订单ID |
| route_order | INT | - | NOT NULL | - | 路线顺序 |
| order_id | BIGINT | - | NOT NULL | - | 订单ID |
| longitude | DECIMAL | 10,7 | NOT NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NOT NULL | - | 纬度 |
| address | VARCHAR | 500 | NOT NULL | - | 地址 |
| estimated_time | INT | - | NULL | - | 预计时间(分钟) |
| actual_time | INT | - | NULL | - | 实际时间(分钟) |
| is_deleted | TINYINT | - | NOT NULL | 0 | 是否删除 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_delivery_order_id (delivery_order_id)
- INDEX idx_order_id (order_id)
2.13.4 配送员位置历史表(delivery_staff_locations)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| delivery_staff_id | BIGINT | - | NOT NULL | - | 配送员ID |
| longitude | DECIMAL | 10,7 | NOT NULL | - | 经度 |
| latitude | DECIMAL | 10,7 | NOT NULL | - | 纬度 |
| speed | DECIMAL | 5,2 | NULL | - | 速度(km/h) |
| direction | DECIMAL | 5,2 | NULL | - | 方向(度) |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 记录时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_delivery_staff_id (delivery_staff_id)
- INDEX idx_created_at (created_at)
2.13.5 商品价格历史表(product_price_history)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| product_id | BIGINT | - | NOT NULL | - | 商品ID |
| original_price | DECIMAL | 10,2 | NOT NULL | - | 原价 |
| sale_price | DECIMAL | 10,2 | NOT NULL | - | 售价 |
| member_price | DECIMAL | 10,2 | NULL | - | 会员价 |
| operator_id | BIGINT | - | NOT NULL | - | 操作人ID |
| change_reason | VARCHAR | 500 | NULL | - | 变更原因 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_product_id (product_id)
- INDEX idx_created_at (created_at)
2.13.6 登录日志表(login_logs)
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | AUTO_INCREMENT | 主键ID |
| user_id | BIGINT | - | NULL | - | 用户ID |
| user_type | TINYINT | - | NOT NULL | - | 用户类型(1-客户,2-管理员) |
| login_type | TINYINT | - | NOT NULL | - | 登录类型(1-手机号,2-微信,3-用户名) |
| login_account | VARCHAR | 100 | NOT NULL | - | 登录账号 |
| ip_address | VARCHAR | 50 | NULL | - | IP地址 |
| user_agent | VARCHAR | 500 | NULL | - | 用户代理 |
| login_status | TINYINT | - | NOT NULL | - | 登录状态(0-失败,1-成功) |
| fail_reason | VARCHAR | 500 | NULL | - | 失败原因 |
| created_at | DATETIME | - | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
索引:
- PRIMARY KEY (id)
- INDEX idx_user_id (user_id)
- INDEX idx_user_type (user_type)
- INDEX idx_login_status (login_status)
- INDEX idx_created_at (created_at)
3. 数据库关系说明
3.1 核心业务关系
- 用户-订单关系: 一个用户可以有多个订单,一个订单只属于一个用户
- 订单-商品关系: 一个订单可以包含多个商品,一个商品可以出现在多个订单中(通过订单商品表关联)
- 门店-小区关系: 一个门店可以服务多个小区,一个小区对应一个门店(通过门店小区关联表)
- 商品-分类关系: 一个商品属于一个分类,一个分类可以有多个商品
- 商品-农户关系: 一个商品可以关联一个农户(农户直采),一个农户可以提供多个商品
- 订单-配送关系: 一个订单对应一个配送订单,一个配送员可以配送多个订单
- 门店-库存关系: 一个门店可以有多个商品库存,一个商品可以在多个门店有库存
3.2 数据完整性约束
- 外键约束: 所有外键字段都建立了索引,建议在应用层控制数据完整性
- 唯一性约束: 关键业务字段(如订单号、支付单号等)建立了唯一索引
- 逻辑删除: 所有业务表都使用
is_deleted字段实现逻辑删除,保留历史数据 - 时间戳: 所有表都包含
created_at和updated_at字段,便于数据追踪
4. 索引设计说明
4.1 索引设计原则
- 主键索引: 所有表都使用自增BIGINT作为主键
- 唯一索引: 业务唯一字段(如手机号、订单号等)建立唯一索引
- 外键索引: 所有外键字段都建立普通索引
- 查询索引: 根据常用查询条件建立组合索引
- 时间索引: 对时间字段建立索引,便于时间范围查询
4.2 重要索引说明
- 订单表: 建立了
(user_id, created_at)和(order_status, created_at)组合索引,优化用户订单查询和状态查询 - 商品表: 建立了
(category_id, status)和(is_farmer_direct, status)组合索引,优化商品筛选查询 - 库存表: 建立了
(store_id, product_id)唯一索引,确保每个门店每个商品只有一条库存记录
5. 数据字典
5.1 状态枚举值
5.1.1 用户状态(users.status)
- 0: 禁用
- 1: 启用
5.1.2 订单状态(orders.order_status)
- 0: 待支付
- 1: 待配送
- 2: 配送中
- 3: 已完成
- 4: 已取消
5.1.3 支付状态(orders.payment_status)
- 0: 待支付
- 1: 已支付
- 2: 已退款
5.1.4 配送状态(delivery_orders.delivery_status)
- 0: 待分配
- 1: 已分配
- 2: 配送中
- 3: 已完成
- 4: 异常
5.1.5 商品状态(products.status)
- 0: 下架
- 1: 上架
5.1.6 审核状态(通用)
- 0: 待审核
- 1: 审核通过
- 2: 审核拒绝
5.2 类型枚举值
5.2.1 支付方式(payments.payment_method)
- 1: 微信支付
- 2: 支付宝支付
- 3: 余额支付
5.2.2 优惠券类型(coupons.coupon_type)
- 1: 满减券
- 2: 折扣券
5.2.3 促销活动类型(promotions.promotion_type)
- 1: 限时折扣
- 2: 满减活动
5.2.4 交易类型(account_transactions.transaction_type)
- 1: 充值
- 2: 消费
- 3: 退款
- 4: 提现
6. 数据库优化建议
6.1 性能优化
分表策略:
- 订单表、支付记录表等大数据量表建议按时间分表
- 操作日志表建议按月分表
读写分离:
- 建议配置主从复制,实现读写分离
- 查询类操作走从库,写操作走主库
缓存策略:
- 商品信息、分类信息等热点数据使用Redis缓存
- 用户信息、会员信息等使用Redis缓存
索引优化:
- 定期分析慢查询日志,优化索引
- 避免过度索引,影响写入性能
6.2 数据安全
备份策略:
- 每日全量备份
- 实时binlog备份
- 定期异地备份
权限控制:
- 数据库用户权限最小化原则
- 生产环境禁止直接操作数据库
数据加密:
- 敏感字段(如密码、身份证号)加密存储
- 传输过程使用SSL加密
6.3 扩展性考虑
字段预留:
- 部分表预留扩展字段(如remark字段)
- JSON字段存储灵活配置信息
分库分表:
- 当单表数据量超过千万时考虑分表
- 按业务模块考虑分库
归档策略:
- 历史订单数据定期归档
- 操作日志数据定期清理
7. 数据库初始化脚本
7.1 初始化数据
系统需要初始化以下基础数据:
- 会员等级数据: 初始化默认会员等级(普通会员、银卡会员、金卡会员等)
- 商品分类数据: 初始化商品分类(叶菜类、根茎类、瓜果类、菌菇类等)
- 系统配置数据: 初始化系统参数(配送时间、配送费、会员折扣等)
- 角色权限数据: 初始化系统角色和权限(系统管理员、门店管理员、配送员等)
7.2 示例SQL
-- 初始化会员等级
INSERT INTO member_levels (level_name, level_code, min_growth_value, max_growth_value, discount_rate, points_rate, sort_order, status) VALUES
('普通会员', 'REGULAR', 0, 999, 1.00, 1.00, 1, 1),
('银卡会员', 'SILVER', 1000, 4999, 0.95, 1.20, 2, 1),
('金卡会员', 'GOLD', 5000, 9999, 0.90, 1.50, 3, 1),
('钻石会员', 'DIAMOND', 10000, NULL, 0.85, 2.00, 4, 1);
-- 初始化商品分类
INSERT INTO product_categories (parent_id, category_name, sort_order, status) VALUES
(0, '叶菜类', 1, 1),
(0, '根茎类', 2, 1),
(0, '瓜果类', 3, 1),
(0, '菌菇类', 4, 1);
-- 初始化系统配置
INSERT INTO system_configs (config_key, config_value, config_desc, config_type) VALUES
('delivery_time_limit', '15', '配送时间限制(分钟)', 'delivery'),
('delivery_fee', '5.00', '配送费(元)', 'delivery'),
('member_discount_rate', '0.95', '会员折扣率', 'member');
备注: 以上为优鲜系统的数据库设计文档,涵盖了系统的所有核心业务表。数据库设计遵循三范式原则,合理使用索引,预留扩展字段,便于后续功能扩展和维护。
