Skip to content
Merged

doc #49

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/ER/ER.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions doc/ER/store_end.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions doc/ER/transaction.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions doc/ER/user_end.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions doc/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 文档说明

## 提交的文档

所有提交的文档都位于 `doc/数据库设计文档` 目录下。包括概念设计文档、逻辑设计文档和需求分析文档。

## 文档目录
- [doc/草稿](./草稿) 中存放了开发过程中的需求分析、数据字典等草稿
- [doc/数据库设计文档](./数据库设计文档) 中存放了提交版本的数据库设计文档
- [doc/数据流图](./数据流图) 中存放了数据流图
- [doc/ER](./ER) 中存放了ER图
14 changes: 14 additions & 0 deletions doc/数据库设计文档/概念设计文档.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# 概念设计文档

### 总ER图
![总ER图](../ER/ER.svg)

### 分ER图
#### 店铺相关分ER图
![店铺相关分ER图](../ER/store_end.svg)

#### 用户相关分ER图
![用户相关分ER图](../ER/user_end.svg)

#### 事务相关分ER图
![事务相关分ER图](../ER/transaction.svg)
319 changes: 319 additions & 0 deletions doc/数据库设计文档/逻辑设计文档.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
# 电商平台数据库逻辑设计文档

## 数据表设计

### 1. 用户表 (User)

**表名**: `User`
**功能**: 存储平台所有用户的基本信息,包括顾客、商家和管理员

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| UserID | INT | PRIMARY KEY, AUTO_INCREMENT | 用户唯一标识符 |
| Username | VARCHAR(255) | NOT NULL, UNIQUE | 用户名,全局唯一 |
| PasswordHash | VARCHAR(255) | NOT NULL | 密码的哈希值+盐 |
| Email | VARCHAR(255) | UNIQUE | 用户邮箱地址,可选但唯一 |
| PhoneNumber | VARCHAR(50) | NULL | 用户手机号码,可选 |
| UserRole | ENUM | NOT NULL, DEFAULT 'customer' | 用户角色:customer(顾客)、merchant(商家)、admin(管理员) |
| RegistrationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 用户注册时间 |
| LastLoginDate | DATETIME | NULL | 最后登录时间 |
| DefaultAddressID | INT | NULL, FOREIGN KEY | 默认收货地址ID,关联ShippingAddress表 |
| AccountStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 账户状态:ACTIVE(活跃)、INACTIVE(非活跃)、SUSPENDED_BY_ADMIN(被管理员禁用) |

**设计说明**:
- 支持多种用户角色,通过UserRole字段区分权限
- 密码采用哈希存储,确保安全性
- 预留默认地址字段,提升用户体验
- 账户状态支持管理员管理功能

### 2. 收货地址表 (ShippingAddress)

**表名**: `ShippingAddress`
**功能**: 存储用户的收货地址信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| AddressID | INT | PRIMARY KEY, AUTO_INCREMENT | 地址唯一标识符 |
| UserID | INT | NOT NULL, FOREIGN KEY | 所属用户ID |
| RecipientName | VARCHAR(255) | NOT NULL | 收货人姓名 |
| PhoneNumber | VARCHAR(50) | NOT NULL | 收货人电话 |
| FullAddress_Text | TEXT | NOT NULL | 完整地址信息 |
| IsDefault | BOOLEAN | NOT NULL, DEFAULT FALSE | 是否为默认地址 |

**设计说明**:
- 支持用户管理多个收货地址
- IsDefault字段配合User表的DefaultAddressID实现默认地址功能
- 地址信息采用TEXT存储,支持详细地址描述

### 3. 店铺表 (Store)

**表名**: `Store`
**功能**: 存储商家店铺的基本信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| StoreID | INT | PRIMARY KEY, AUTO_INCREMENT | 店铺唯一标识符 |
| StoreName | VARCHAR(255) | NOT NULL | 店铺名称 |
| OwnerUserID | INT | NOT NULL, FOREIGN KEY | 店主用户ID |
| Description | TEXT | NULL | 店铺描述 |
| LogoURL | VARCHAR(512) | NULL | 店铺Logo图片地址 |
| StoreStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 店铺状态:ACTIVE(正常营业)、INACTIVE_BY_MERCHANT(商家暂停)、SUSPENDED_BY_ADMIN(管理员暂停)、CLOSED_PERMANENTLY_BY_ADMIN(永久关闭) |
| CreationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 店铺创建时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 每个店铺关联一个商家用户
- 支持店铺状态管理,区分商家自主操作和管理员操作
- 记录创建和更新时间,便于审计

### 4. 商品分类表 (ProductCategory)

**表名**: `ProductCategory`
**功能**: 存储商品分类的层级结构

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| CategoryID | INT | PRIMARY KEY, AUTO_INCREMENT | 分类唯一标识符 |
| CategoryName | VARCHAR(255) | NOT NULL | 分类名称 |
| ParentCategoryID | INT | NULL, FOREIGN KEY | 父分类ID,自关联 |
| CategoryDescription | TEXT | NULL | 分类描述 |

**设计说明**:
- 采用自关联设计,支持多级分类结构
- ParentCategoryID为NULL表示顶级分类
- 支持分类的层级管理和导航

### 5. 商品表 (Product)

**表名**: `Product`
**功能**: 存储商品的详细信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| ProductID | INT | PRIMARY KEY, AUTO_INCREMENT | 商品唯一标识符 |
| ProductName | VARCHAR(255) | NOT NULL | 商品名称 |
| ProductDescription | TEXT | NULL | 商品详细描述 |
| Price | DECIMAL(10,2) | NOT NULL | 商品单价 |
| ProductStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 商品状态:ACTIVE(在售)、INACTIVE_BY_MERCHANT(商家下架)、SUSPENDED_BY_ADMIN(管理员下架)、DISCONTINUED(停产) |
| StoreID | INT | NOT NULL, FOREIGN KEY | 所属店铺ID |
| CategoryID | INT | NOT NULL, FOREIGN KEY | 所属分类ID |
| StockQuantity | INT | NOT NULL, DEFAULT 0 | 库存数量 |
| MainImageURL | VARCHAR(512) | NULL | 主图片地址 |
| CreationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 商品创建时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 价格采用DECIMAL精确数值类型
- 库存数量增加非负约束,确保数据完整性
- 商品状态支持多种管理场景
- 关联店铺和分类,便于分类浏览和店铺管理

### 6. 商品图片表 (ProductImage)

**表名**: `ProductImage`
**功能**: 存储商品的多张图片信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| ImageID | INT | PRIMARY KEY, AUTO_INCREMENT | 图片唯一标识符 |
| ProductID | INT | NOT NULL, FOREIGN KEY | 所属商品ID |
| ImageURL | VARCHAR(512) | NOT NULL | 图片存储地址 |
| ImageType | VARCHAR(50) | NOT NULL | 图片类型:MAIN(主图)、THUMBNAIL(缩略图)、DETAIL(详情图) |
| SortOrder | INT | NULL | 图片排序序号 |
| UploadDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 图片上传时间 |

**设计说明**:
- 支持商品多图展示
- 通过ImageType区分图片用途
- SortOrder支持图片排序显示

### 7. 购物车表 (CartItem)

**表名**: `CartItem`
**功能**: 存储用户购物车中的商品

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| CartItemID | INT | PRIMARY KEY, AUTO_INCREMENT | 购物车项目唯一标识符 |
| UserID | INT | NOT NULL, FOREIGN KEY | 所属用户ID |
| ProductID | INT | NOT NULL, FOREIGN KEY | 商品ID |
| Quantity | INT | NOT NULL, DEFAULT 1 | 商品数量 |
| PriceAtAddition | DECIMAL(10,2) | NOT NULL | 加入购物车时的商品价格 |
| AddedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 添加到购物车的时间 |

**设计说明**:
- 记录加入购物车时的价格,避免价格变动影响
- 数量字段增加正数约束
- 支持购物车商品的时间排序

### 8. 支付事务表 (PaymentTransaction)

**表名**: `PaymentTransaction`
**功能**: 记录用户的支付事务信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| PaymentTransactionID | INT | PRIMARY KEY, AUTO_INCREMENT | 支付事务唯一标识符 |
| UserID | INT | NOT NULL, FOREIGN KEY | 用户ID |
| TotalAmount | DECIMAL(10,2) | NOT NULL | 支付总金额 |
| PaymentMethod | VARCHAR(50) | NOT NULL | 支付方式 |
| ExternalGatewayTransactionID | VARCHAR(255) | NULL | 外部支付网关交易号 |
| Status | ENUM | NOT NULL, DEFAULT 'PENDING' | 支付状态:PENDING(待支付)、SUCCESSFUL(成功)、FAILED(失败) |
| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| CompletionTime | DATETIME | NULL | 完成时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 支持多种支付方式
- 记录外部支付网关信息,便于对账
- 完整的支付状态跟踪

### 9. 订单表 (Order)

**表名**: `Order`
**功能**: 存储订单的基本信息

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| OrderID | INT | PRIMARY KEY, AUTO_INCREMENT | 订单唯一标识符 |
| UserID | INT | NOT NULL, FOREIGN KEY | 用户ID |
| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID |
| PaymentTransactionID | INT | NOT NULL, FOREIGN KEY | 关联的支付事务ID |
| OrderStatus | ENUM | NOT NULL, DEFAULT 'PENDING_PAYMENT' | 订单状态:PENDING_PAYMENT(待支付)、PAID_AND_PENDING_PROCESSING(已支付待处理)、PROCESSING_BY_MERCHANT(商家处理中)、SHIPPED(已发货)、DELIVERED(已送达)、COMPLETED(已完成)、CANCELLED_BY_USER(用户取消)、CANCELLED_BY_MERCHANT(商家取消)、CANCELLED_BY_SYSTEM(系统取消) |
| OrderTotalAmount | DECIMAL(10,2) | NOT NULL | 订单商品总金额 |
| DiscountAmount | DECIMAL(10,2) | NULL, DEFAULT 0.00 | 优惠金额 |
| ShippingFee | DECIMAL(10,2) | NULL, DEFAULT 0.00 | 运费 |
| FinalAmountForThisOrder | DECIMAL(10,2) | NOT NULL | 订单最终金额 |
| ShippingAddress_RecipientName | VARCHAR(255) | NOT NULL | 收货人姓名(冗余) |
| ShippingAddress_PhoneNumber | VARCHAR(50) | NOT NULL | 收货人电话(冗余) |
| ShippingAddress_Full | TEXT | NOT NULL | 完整收货地址(冗余) |
| Notes_ByUser | TEXT | NULL | 用户备注 |
| Notes_ByMerchant | TEXT | NULL | 商家备注 |
| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 订单创建时间 |
| PaymentConfirmationTime | DATETIME | NULL | 支付确认时间 |
| ShippingTime | DATETIME | NULL | 发货时间 |
| DeliveryTime | DATETIME | NULL | 送达时间 |
| CompletionTime | DATETIME | NULL | 完成时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 按店铺拆分订单,支持多商家模式
- 冗余存储收货地址信息,避免地址修改影响历史订单
- 完整的订单状态流转,支持各种业务场景
- 记录订单各个关键时间点

### 10. 订单项目表 (OrderItem)

**表名**: `OrderItem`
**功能**: 存储订单中的具体商品项目

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| OrderItemID | INT | PRIMARY KEY, AUTO_INCREMENT | 订单项目唯一标识符 |
| OrderID | INT | NOT NULL, FOREIGN KEY | 所属订单ID |
| ProductID | INT | NOT NULL, FOREIGN KEY | 商品ID |
| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID(冗余) |
| Quantity | INT | NOT NULL | 购买数量 |
| PriceAtPurchase | DECIMAL(10,2) | NOT NULL | 购买时的商品单价 |
| ProductNameAtPurchase | VARCHAR(255) | NOT NULL | 购买时的商品名称(冗余) |
| ProductImageURLAtPurchase | VARCHAR(512) | NULL | 购买时的商品图片(冗余) |
| Subtotal | DECIMAL(10,2) | NOT NULL | 小计金额 |

**设计说明**:
- 冗余存储商品信息,保证历史订单数据完整性
- 记录购买时价格,避免价格变动影响订单
- 小计金额便于订单总额计算

### 11. 店铺变更请求表 (StoreChangeRequest)

**表名**: `StoreChangeRequest`
**功能**: 存储店铺相关的变更请求,支持审核流程

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| ChangeRequestID | INT | PRIMARY KEY, AUTO_INCREMENT | 变更请求唯一标识符 |
| StoreID | INT | NULL, FOREIGN KEY | 目标店铺ID,创建请求时可为空 |
| RequestingUserID | INT | NOT NULL, FOREIGN KEY | 请求用户ID |
| RequestType | ENUM | NOT NULL | 请求类型:STORE_CREATE(创建)、STORE_UPDATE(更新)、STORE_DELETE(删除) |
| ProposedData_JSON | JSON | NULL | 建议的变更数据,JSON格式 |
| Status | ENUM | NOT NULL, DEFAULT 'PENDING_APPROVAL' | 请求状态:PENDING_APPROVAL(待审核)、APPROVED(已批准)、REJECTED(已拒绝)、APPLIED(已应用)、CANCELLED_BY_USER(用户取消) |
| SubmitterNotes | TEXT | NULL | 提交者备注 |
| AdminReviewerID | INT | NULL, FOREIGN KEY | 审核管理员ID |
| ReviewTimestamp | DATETIME | NULL | 审核时间 |
| AdminNotes | TEXT | NULL | 管理员审核备注 |
| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 请求创建时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 支持店铺的创建、更新、删除审核流程
- 使用JSON字段存储灵活的变更数据
- 完整的审核状态跟踪
- 记录审核人员和时间,便于审计

### 12. 商品变更请求表 (ProductChangeRequest)

**表名**: `ProductChangeRequest`
**功能**: 存储商品相关的变更请求,支持审核流程

| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------|
| ChangeRequestID | INT | PRIMARY KEY, AUTO_INCREMENT | 变更请求唯一标识符 |
| ProductID | INT | NULL, FOREIGN KEY | 目标商品ID,创建请求时可为空 |
| MerchantUserID | INT | NOT NULL, FOREIGN KEY | 商家用户ID |
| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID |
| RequestType | ENUM | NOT NULL | 请求类型:PRODUCT_CREATE(创建)、PRODUCT_UPDATE(更新)、PRODUCT_DELETE(删除) |
| ProposedData_JSON | JSON | NULL | 建议的变更数据,JSON格式 |
| Status | ENUM | NOT NULL, DEFAULT 'PENDING_APPROVAL' | 请求状态 |
| SubmitterNotes | TEXT | NULL | 提交者备注 |
| AdminReviewerID | INT | NULL, FOREIGN KEY | 审核管理员ID |
| ReviewTimestamp | DATETIME | NULL | 审核时间 |
| AdminNotes | TEXT | NULL | 管理员审核备注 |
| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 请求创建时间 |
| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 |

**设计说明**:
- 类似店铺变更请求,支持商品的审核流程
- 确保商品变更的合规性
- 记录变更历史,便于追溯

## 关系设计说明

### 主要外键关系

1. **用户相关关系**:
- User ← ShippingAddress (一对多)
- User ← Store (一对多,商家可拥有多个店铺)
- User ← CartItem (一对多)
- User ← PaymentTransaction (一对多)
- User ← Order (一对多)

2. **店铺相关关系**:
- Store ← Product (一对多)
- Store ← Order (一对多)
- Store ← StoreChangeRequest (一对多)

3. **商品相关关系**:
- ProductCategory ← Product (一对多)
- Product ← ProductImage (一对多)
- Product ← CartItem (一对多)
- Product ← OrderItem (一对多)

4. **订单相关关系**:
- PaymentTransaction ← Order (一对多)
- Order ← OrderItem (一对多)

### 设计特点

1. **数据完整性**: 通过外键约束保证数据一致性
2. **历史数据保护**: 订单相关表冗余存储关键信息,避免数据修改影响历史记录
3. **审核流程支持**: 变更请求表支持完整的审核流程
4. **扩展性**: JSON字段支持灵活的数据存储
5. **性能优化**: 合理的索引设计支持高效查询

## 索引设计

主要索引包括:
- 所有主键自动创建聚簇索引
- 外键字段创建非聚簇索引
- 用户名、邮箱等唯一约束字段的唯一索引
- 订单状态、商品状态等常查询字段的普通索引
Loading