e-scooter-rental-system/docs/数据库设计.md

4.3 KiB

数据库设计文档

数据库: MongoDB

集合: vehicles, orders, customers


1. 车辆集合 (vehicles)

字段说明

字段名 类型 必填 说明
vehicleId String 车架号/车辆编号 (唯一)
model String 车型
brand String 品牌
color String 颜色
batteryType String 电池类型
batteryCapacity Number 电池容量 (Ah)
batteryStatus String 电池状态: 正常/老化/待更换
status String 车辆状态: 空闲/在租/维修中/已报废/待回收
location Object GPS位置 {type, coordinates}
lastLocationUpdate Date 最后位置更新时间
currentOrderId ObjectId 当前订单ID (关联orders)
totalRentDays Number 累计租赁天数
lastMaintenanceDate Date 最后保养日期
nextMaintenanceDate Date 下次保养日期
maintenanceHistory Array 维修历史记录
purchaseDate Date 购买日期
purchasePrice Number 购买价格
purchaseSupplier String 供应商
notes String 备注
createdAt Date 创建时间
updatedAt Date 更新时间

索引

  • vehicleId: 唯一索引
  • location: 2dsphere 索引 (用于地理查询)

2. 订单集合 (orders)

字段说明

字段名 类型 必填 说明
orderNumber String 订单号 (唯一)
customer ObjectId 客户ID (关联customers)
vehicle ObjectId 车辆ID (关联vehicles)
startDate Date 开始日期
endDate Date 结束日期
actualEndDate Date 实际结束日期
rentalFee Number 租金 (元/天)
deposit Number 押金
totalAmount Number 总金额
paidAmount Number 已支付金额
status String 订单状态: 待支付/进行中/已完成/逾期/已取消/已退款
overdueDays Number 逾期天数
overdueFee Number 逾期费用
paymentMethod String 支付方式: 微信/支付宝/现金/银行卡
paymentDate Date 支付日期
contractUrl String 合同文件路径
contractSigned Boolean 合同是否签署
notes String 备注
createdAt Date 创建时间
updatedAt Date 更新时间

索引

  • orderNumber: 唯一索引
  • customer: 普通索引
  • vehicle: 普通索引
  • status: 普通索引
  • endDate: 普通索引 (用于查询逾期订单)

3. 客户集合 (customers)

字段说明

字段名 类型 必填 说明
customerId String 客户编号 (唯一)
name String 姓名
phone String 手机号
idCard String 身份证号
address String 地址
email String 邮箱
totalRentals Number 总租赁次数
totalSpent Number 总消费金额
currentRentals Number 当前租赁数量
creditScore Number 信用评分 (0-100)
creditLevel String 信用等级: 优秀/良好/一般/较差
accountStatus String 账户状态: 正常/冻结/注销
notes String 备注
createdAt Date 创建时间
updatedAt Date 更新时间

索引

  • customerId: 唯一索引
  • phone: 唯一索引
  • name: 普通索引 (用于搜索)

4. 关系说明

车辆 ↔ 订单

  • 一辆车同一时间只能有一个进行中的订单
  • 车辆状态会随订单状态变化

客户 ↔ 订单

  • 一个客户可以有多个订单
  • 客户的租赁次数和消费金额会随订单更新

订单 ↔ 车辆/客户

  • 订单必须关联一辆车和一个客户
  • 订单完成后,车辆状态变为空闲

5. 数据验证规则

车辆

  • vehicleId 必须唯一
  • status 必须在预定义枚举中
  • location 必须是有效的经纬度坐标

订单

  • orderNumber 必须唯一
  • startDate 必须早于 endDate
  • rentalFee 必须大于 0
  • status 必须在预定义枚举中

客户

  • customerId 必须唯一
  • phone 必须唯一
  • creditScore 必须在 0-100 之间
  • creditLevel 由 creditScore 自动计算