# 数据库表结构与关系文档 ## 目录 1. [用户相关表](#用户相关表) 2. [权限相关表](#权限相关表) 3. [店铺相关表](#店铺相关表) 4. [商品相关表](#商品相关表) 5. [订单相关表](#订单相关表) 6. [支付与退款相关表](#支付与退款相关表) 7. [评价相关表](#评价相关表) 8. [表与表之间的关系](#表与表之间的关系) ## 用户相关表 ### users表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 用户ID | 主键,自增 | | username | VARCHAR | 用户名 | 唯一 | | password | VARCHAR | 密码 | 加密存储 | | email | VARCHAR | 邮箱 | 唯一 | | phone | VARCHAR | 手机号 | 唯一 | | avatar | VARCHAR | 头像URL | | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | lastLoginTime | DATE | 最后登录时间 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### user_details表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 详情ID | 主键,自增 | | userId | BIGINT | 用户ID | 外键,关联users表 | | realName | VARCHAR | 真实姓名 | | | idCard | VARCHAR | 身份证号 | | | gender | VARCHAR | 性别 | 男、女、保密 | | birthday | DATE | 生日 | | | address | VARCHAR | 地址 | | | province | VARCHAR | 省份 | | | city | VARCHAR | 城市 | | | district | VARCHAR | 区县 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ## 权限相关表 ### roles表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 角色ID | 主键,自增 | | roleName | VARCHAR | 角色名称 | | | description | VARCHAR | 角色描述 | | | roleType | INTEGER | 角色类型 | 0:默认用户,1:店主,2:管理员 | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### permissions表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 权限ID | 主键,自增 | | permissionName | VARCHAR | 权限名称 | | | permissionCode | VARCHAR | 权限编码 | | | description | VARCHAR | 权限描述 | | | module | VARCHAR | 所属模块 | | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### user_roles表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 关联ID | 主键,自增 | | userId | BIGINT | 用户ID | 外键,关联users表 | | roleId | BIGINT | 角色ID | 外键,关联roles表 | | createdAt | DATE | 创建时间 | | ### role_permissions表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 关联ID | 主键,自增 | | roleId | BIGINT | 角色ID | 外键,关联roles表 | | permissionId | BIGINT | 权限ID | 外键,关联permissions表 | | createdAt | DATE | 创建时间 | | ## 店铺相关表 ### shops表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 店铺ID | 主键,自增 | | shopName | VARCHAR | 店铺名称 | | | userId | BIGINT | 店主用户ID | 外键,关联users表 | | categoryId | BIGINT | 店铺分类ID | 外键,关联shop_categories表 | | shopLogo | VARCHAR | 店铺Logo | | | coverImage | VARCHAR | 店铺封面图 | | | description | VARCHAR | 店铺描述 | | | address | VARCHAR | 店铺地址 | | | contactPhone | VARCHAR | 联系电话 | | | contactPerson | VARCHAR | 联系人 | | | rating | DECIMAL | 店铺评分 | | | salesVolume | INTEGER | 销量 | | | status | INTEGER | 状态 | 0: 未审核, 1: 已审核, 2: 已关闭, 3: 审核失败 | | businessLicense | VARCHAR | 营业执照 | | | businessStartTime | DATE | 营业时间开始 | | | businessEndTime | DATE | 营业时间结束 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### shop_categories表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 分类ID | 主键,自增 | | categoryName | VARCHAR | 分类名称 | | | parentId | BIGINT | 父分类ID | 顶级分类为0 | | level | INTEGER | 分类级别 | | | icon | VARCHAR | 分类图标 | | | sort | INTEGER | 排序 | | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ## 商品相关表 ### products表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 商品ID | 主键,自增 | | productName | VARCHAR | 商品名称 | | | shopId | BIGINT | 店铺ID | 外键,关联shops表 | | categoryId | BIGINT | 商品分类ID | 外键,关联product_categories表 | | description | VARCHAR | 商品描述 | | | mainImage | VARCHAR | 主图URL | | | originalPrice | DECIMAL | 原价 | | | currentPrice | DECIMAL | 当前价格 | | | salesVolume | INTEGER | 销量 | | | status | INTEGER | 状态 | 0:下架, 1:上架 | | isDeleted | INTEGER | 是否删除 | 0: 未删除, 1: 已删除 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### product_categories表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 分类ID | 主键,自增 | | categoryName | VARCHAR | 分类名称 | | | parentId | BIGINT | 父分类ID | 顶级分类为0 | | level | INTEGER | 分类级别 | 1、2、3 | | icon | VARCHAR | 分类图标 | | | banner | VARCHAR | 分类横幅 | | | sort | INTEGER | 排序 | | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### product_attributes表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 属性ID | 主键,自增 | | attributeName | VARCHAR | 属性名称 | | | categoryId | BIGINT | 分类ID | 外键,关联product_categories表 | | attributeType | INTEGER | 属性类型 | 0: 规格属性, 1: 销售属性 | | sort | INTEGER | 排序 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### product_attribute_values表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 属性值ID | 主键,自增 | | productId | BIGINT | 商品ID | 外键,关联products表 | | attributeId | BIGINT | 属性ID | 外键,关联product_attributes表 | | attributeValue | VARCHAR | 属性值 | | | sort | INTEGER | 排序 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### product_images表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 图片ID | 主键,自增 | | productId | BIGINT | 商品ID | 外键,关联products表 | | imageUrl | VARCHAR | 图片URL | | | sort | INTEGER | 排序 | | | isMain | INTEGER | 是否主图 | 0:非主图, 1:主图 | | createdAt | DATE | 创建时间 | | ### product_skus表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | SKU ID | 主键,自增 | | productId | BIGINT | 商品ID | 外键,关联products表 | | skuCode | VARCHAR | SKU编码 | | | skuSpecs | VARCHAR | SKU规格信息 | JSON格式存储 | | price | DECIMAL | 价格 | | | stock | INTEGER | 库存 | | | image | VARCHAR | 图片 | | | status | INTEGER | 状态 | 0:禁用, 1:启用 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### product_inventories表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 库存ID | 主键,自增 | | skuId | BIGINT | SKU ID | 外键,关联product_skus表 | | currentStock | INTEGER | 当前库存 | | | safetyStock | INTEGER | 安全库存 | | | lockStock | INTEGER | 锁定库存 | | | lastUpdateTime | DATE | 最后更新时间 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ## 订单相关表 ### orders表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 订单ID | 主键,自增 | | orderNo | VARCHAR | 订单号 | | | userId | BIGINT | 用户ID | 外键,关联users表 | | shopId | BIGINT | 店铺ID | 外键,关联shops表 | | totalAmount | DECIMAL | 总金额 | | | actualAmount | DECIMAL | 实际支付金额 | | | shippingFee | DECIMAL | 运费 | | | orderStatus | INTEGER | 订单状态 | 0:待付款, 1:待发货, 2:待收货, 3:已完成, 4:已取消, 5:已退款 | | shippingAddress | VARCHAR | 收货地址 | | | receiverName | VARCHAR | 收件人姓名 | | | receiverPhone | VARCHAR | 收件人电话 | | | paymentMethod | VARCHAR | 支付方式 | | | paymentTime | DATE | 支付时间 | | | shippingTime | DATE | 发货时间 | | | deliveryTime | DATE | 送达时间 | | | completeTime | DATE | 完成时间 | | | remark | VARCHAR | 备注 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### order_items表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 订单项ID | 主键,自增 | | orderId | BIGINT | 订单ID | 外键,关联orders表 | | productId | BIGINT | 商品ID | 外键,关联products表 | | skuId | BIGINT | SKU ID | 外键,关联product_skus表 | | productName | VARCHAR | 商品名称 | | | skuSpecs | VARCHAR | SKU规格 | | | productImage | VARCHAR | 商品图片 | | | price | DECIMAL | 价格 | | | quantity | INTEGER | 数量 | | | subtotal | DECIMAL | 小计 | | | itemStatus | INTEGER | 商品状态 | 0:正常, 1:已退款, 2:退款中 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### order_status_history表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 历史ID | 主键,自增 | | orderId | BIGINT | 订单ID | 外键,关联orders表 | | previousStatus | INTEGER | 之前状态 | | | currentStatus | INTEGER | 当前状态 | | | changeReason | VARCHAR | 变更原因 | | | operator | VARCHAR | 操作人 | | | changeTime | DATE | 变更时间 | | | createdAt | DATE | 创建时间 | | ## 支付与退款相关表 ### payments表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 支付ID | 主键,自增 | | paymentNo | VARCHAR | 支付单号 | | | orderId | BIGINT | 订单ID | 外键,关联orders表 | | userId | BIGINT | 用户ID | 外键,关联users表 | | amount | DECIMAL | 支付金额 | | | paymentMethod | VARCHAR | 支付方式 | | | transactionId | VARCHAR | 第三方交易流水号 | | | paymentStatus | INTEGER | 支付状态 | 0:待支付, 1:支付成功, 2:支付失败, 3:已退款 | | paymentUrl | VARCHAR | 支付链接 | | | expireTime | DATE | 过期时间 | | | paymentTime | DATE | 支付时间 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ### refunds表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 退款ID | 主键,自增 | | refundNo | VARCHAR | 退款单号 | | | orderId | BIGINT | 订单ID | 外键,关联orders表 | | orderItemId | BIGINT | 订单项ID | 外键,关联order_items表 | | userId | BIGINT | 用户ID | 外键,关联users表 | | shopId | BIGINT | 店铺ID | 外键,关联shops表 | | refundAmount | DECIMAL | 退款金额 | | | refundReason | VARCHAR | 退款原因 | | | refundType | VARCHAR | 退款类型 | | | refundStatus | INTEGER | 退款状态 | 0:申请中, 1:退款成功, 2:退款失败, 3:已拒绝 | | refundAccount | VARCHAR | 退款账户 | | | transactionId | VARCHAR | 交易ID | | | applyTime | DATE | 申请时间 | | | processTime | DATE | 处理时间 | | | processRemark | VARCHAR | 处理备注 | | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ## 评价相关表 ### shop_ratings表 | 字段名 | 类型 | 描述 | 备注 | | :--- | :--- | :--- | :--- | | id | BIGINT | 评价ID | 主键,自增 | | shopId | BIGINT | 店铺ID | 外键,关联shops表 | | userId | BIGINT | 用户ID | 外键,关联users表 | | orderId | BIGINT | 订单ID | 外键,关联orders表 | | rating | INTEGER | 评分 | 1-5星 | | content | VARCHAR | 评价内容 | | | images | VARCHAR | 评价图片 | JSON格式存储 | | status | INTEGER | 状态 | 0:待审核, 1:已审核, 2:已删除 | | createdAt | DATE | 创建时间 | | | updatedAt | DATE | 更新时间 | | ## 表与表之间的关系 ### 一对一关系 1. **users 和 user_details** - 关系:一对一 - 描述:每个用户只有一个详细信息记录 - 外键:user_details.userId -> users.id ### 一对多关系 1. **users 和 shops** - 关系:一对多 - 描述:一个用户可以创建多个店铺(店主) - 外键:shops.userId -> users.id 2. **shops 和 products** - 关系:一对多 - 描述:一个店铺可以有多个商品 - 外键:products.shopId -> shops.id 3. **users 和 orders** - 关系:一对多 - 描述:一个用户可以有多个订单 - 外键:orders.userId -> users.id 4. **shops 和 orders** - 关系:一对多 - 描述:一个店铺可以有多个订单 - 外键:orders.shopId -> shops.id 5. **orders 和 order_items** - 关系:一对多 - 描述:一个订单可以包含多个商品项 - 外键:order_items.orderId -> orders.id 6. **products 和 product_images** - 关系:一对多 - 描述:一个商品可以有多个图片 - 外键:product_images.productId -> products.id 7. **products 和 product_skus** - 关系:一对多 - 描述:一个商品可以有多个SKU - 外键:product_skus.productId -> products.id 8. **product_skus 和 product_inventories** - 关系:一对一/一对多(实际为一对一) - 描述:一个SKU对应一个库存记录 - 外键:product_inventories.skuId -> product_skus.id 9. **orders 和 order_status_history** - 关系:一对多 - 描述:一个订单可以有多个状态历史记录 - 外键:order_status_history.orderId -> orders.id 10. **orders 和 payments** - 关系:一对多 - 描述:一个订单可以有多个支付记录(如多次支付尝试) - 外键:payments.orderId -> orders.id 11. **orders 和 refunds** - 关系:一对多 - 描述:一个订单可以有多个退款记录 - 外键:refunds.orderId -> orders.id 12. **order_items 和 refunds** - 关系:一对多 - 描述:一个订单项可以有多个退款记录 - 外键:refunds.orderItemId -> order_items.id 13. **shops 和 shop_ratings** - 关系:一对多 - 描述:一个店铺可以有多个评价 - 外键:shop_ratings.shopId -> shops.id 14. **users 和 shop_ratings** - 关系:一对多 - 描述:一个用户可以对多个店铺进行评价 - 外键:shop_ratings.userId -> users.id 15. **orders 和 shop_ratings** - 关系:一对一 - 描述:一个订单对应一个店铺评价 - 外键:shop_ratings.orderId -> orders.id 16. **product_categories 和 products** - 关系:一对多 - 描述:一个商品分类可以包含多个商品 - 外键:products.categoryId -> product_categories.id 17. **shop_categories 和 shops** - 关系:一对多 - 描述:一个店铺分类可以包含多个店铺 - 外键:shops.categoryId -> shop_categories.id 18. **product_categories 和 product_attributes** - 关系:一对多 - 描述:一个商品分类可以有多个属性 - 外键:product_attributes.categoryId -> product_categories.id 19. **products 和 product_attribute_values** - 关系:一对多 - 描述:一个商品可以有多个属性值 - 外键:product_attribute_values.productId -> products.id 20. **product_attributes 和 product_attribute_values** - 关系:一对多 - 描述:一个属性可以有多个值 - 外键:product_attribute_values.attributeId -> product_attributes.id ### 多对多关系 1. **users 和 roles** - 关系:多对多 - 描述:一个用户可以有多个角色,一个角色可以分配给多个用户 - 关联表:user_roles (userId, roleId) 2. **roles 和 permissions** - 关系:多对多 - 描述:一个角色可以有多个权限,一个权限可以分配给多个角色 - 关联表:role_permissions (roleId, permissionId) ### 自关联关系 1. **shop_categories 和 shop_categories** - 关系:自关联(一对多) - 描述:店铺分类的父子关系 - 外键:shop_categories.parentId -> shop_categories.id 2. **product_categories 和 product_categories** - 关系:自关联(一对多) - 描述:商品分类的父子关系 - 外键:product_categories.parentId -> product_categories.id