智慧加油站小程序数据库设计文档

智慧加油站系统 - 数据库与API设计文档

1. 数据库设计

1.1 ER模型

系统的核心实体关系如下:

复制代码
用户(User) ---< 订单(Order) ---< 加油记录(RefuelRecord)
   |               |                |
   |               |                v
   v               v            油枪(OilGun)
角色(Role)      油品(Oil)          |
   |               |                |
   v               v                v
权限(Permission)  价格历史(PriceHistory)  站点(Station)

1.2 数据库表结构

1.2.1 用户相关表
用户表(users)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 用户ID
username varchar 50 否 用户名
password varchar 255 否 密码(加密存储)
real_name varchar 50 是 真实姓名
mobile varchar 20 是 手机号码
email varchar 100 是 电子邮箱
role_id int 11 否 角色ID
avatar varchar 255 是 头像URL
status tinyint 1 否 1 状态(1-正常,0-禁用)
last_login_time datetime 是 最后登录时间
last_login_ip varchar 50 是 最后登录IP
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:username
  • 普通索引:role_id,mobile
会员表(members)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 会员ID
user_id int 11 否 关联用户ID
member_no varchar 30 否 会员卡号
level tinyint 1 否 1 会员等级(1-普通,2-银卡,3-金卡,4-钻石)
balance decimal (10,2) 否 0.00 账户余额
points int 11 否 0 积分
join_time datetime 否 CURRENT_TIMESTAMP 加入时间
expire_time datetime 是 过期时间
status tinyint 1 否 1 状态(1-正常,0-冻结)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:user_id,member_no
  • 普通索引:level
角色表(roles)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 角色ID
name varchar 50 否 角色名称
code varchar 50 否 角色编码
description varchar 255 是 角色描述
status tinyint 1 否 1 状态(1-启用,0-禁用)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:code
权限表(permissions)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 权限ID
name varchar 50 否 权限名称
code varchar 50 否 权限编码
description varchar 255 是 权限描述
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:code
角色权限关联表(role_permissions)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 关联ID
role_id int 11 否 角色ID
permission_id int 11 否 权限ID
created_at datetime 否 CURRENT_TIMESTAMP 创建时间

索引:

  • 主键:id
  • 唯一索引:role_id, permission_id
1.2.2 订单相关表
订单表(orders)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 订单ID
order_no varchar 50 否 订单编号
member_id int 11 否 会员ID
station_id int 11 否 加油站ID
oil_id int 11 否 油品ID
oil_gun_id int 11 否 油枪ID
amount decimal (10,2) 否 0.00 加油金额
quantity decimal (10,2) 否 0.00 加油升数
unit_price decimal (10,2) 否 0.00 单价
discount_amount decimal (10,2) 否 0.00 优惠金额
payment_method tinyint 1 否 1 支付方式(1-余额,2-微信,3-支付宝,4-银行卡)
order_type tinyint 1 否 1 订单类型(1-加油,2-充值,3-商品)
status tinyint 1 否 0 状态(0-待支付,1-已支付,2-已完成,3-已取消,4-退款中,5-已退款)
remark varchar 255 是 备注
paid_time datetime 是 支付时间
refuel_start_time datetime 是 加油开始时间
refuel_end_time datetime 是 加油结束时间
transaction_id varchar 100 是 三方支付交易ID
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:order_no
  • 普通索引:member_id,station_id,oil_gun_id,status,created_at
支付记录表(payment_records)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 记录ID
order_id int 11 否 订单ID
transaction_no varchar 100 否 交易编号
member_id int 11 否 会员ID
payment_method tinyint 1 否 支付方式(1-余额,2-微信,3-支付宝,4-银行卡)
amount decimal (10,2) 否 0.00 支付金额
payment_time datetime 否 CURRENT_TIMESTAMP 支付时间
status tinyint 1 否 0 状态(0-处理中,1-成功,2-失败)
callback_data text 是 回调数据
external_payment_id varchar 100 是 外部支付系统ID
refund_status tinyint 1 否 0 退款状态(0-无退款,1-部分退款,2-全额退款)
refund_amount decimal (10,2) 否 0.00 退款金额
refund_time datetime 是 退款时间
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:transaction_no,external_payment_id
  • 普通索引:order_id,member_id,payment_time
账户流水表(account_transactions)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 流水ID
transaction_no varchar 50 否 流水号
member_id int 11 否 会员ID
type tinyint 1 否 类型(1-充值,2-消费,3-退款,4-赠送)
amount decimal (10,2) 否 0.00 金额
balance decimal (10,2) 否 0.00 交易后余额
order_id int 11 是 关联订单ID
description varchar 255 是 交易描述
operator_id int 11 是 操作员ID
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:transaction_no
  • 普通索引:member_id,type,order_id,created_at
1.2.3 油品相关表
油品表(oils)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 油品ID
name varchar 50 否 油品名称
code varchar 20 否 油品编码
type tinyint 1 否 油品类型(1-汽油,2-柴油)
standard varchar 20 否 油品标准(如92#,95#)
color varchar 10 是 颜色表示(十六进制颜色码)
status tinyint 1 否 1 状态(1-可用,0-不可用)
description varchar 255 是 描述
density decimal (10,4) 是 密度(kg/L)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:code
  • 普通索引:type,standard
油品价格表(oil_prices)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 价格ID
oil_id int 11 否 油品ID
station_id int 11 否 加油站ID(0表示总部定价)
price decimal (10,2) 否 0.00 零售价格
cost_price decimal (10,2) 否 0.00 成本价格
start_time datetime 否 CURRENT_TIMESTAMP 生效开始时间
end_time datetime 是 生效结束时间
status tinyint 1 否 1 状态(1-生效,0-历史)
creator_id int 11 否 创建人ID
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:oil_id, station_id, start_time
  • 普通索引:station_id,status,start_time
会员折扣表(member_discounts)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 折扣ID
level tinyint 1 否 会员等级
oil_id int 11 否 油品ID(0表示所有油品)
discount_type tinyint 1 否 1 折扣类型(1-折扣率,2-固定金额)
discount_value decimal (10,2) 否 0.00 折扣值(折扣率为0-1之间小数)
start_time datetime 否 CURRENT_TIMESTAMP 生效开始时间
end_time datetime 是 生效结束时间
status tinyint 1 否 1 状态(1-生效,0-过期)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:level,oil_id,status,start_time,end_time
1.2.4 站点相关表
加油站表(stations)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 站点ID
name varchar 100 否 站点名称
code varchar 20 否 站点编码
address varchar 255 否 详细地址
province varchar 50 否 省份
city varchar 50 否 城市
district varchar 50 否 区县
longitude decimal (10,6) 是 经度
latitude decimal (10,6) 是 纬度
contact_person varchar 50 是 联系人
contact_phone varchar 20 是 联系电话
business_hours varchar 50 是 营业时间
status tinyint 1 否 1 站点状态(1-营业,0-停业,2-维护中)
is_self_service tinyint 1 否 0 是否自助(1-是,0-否)
manager_id int 11 是 站长用户ID
open_date date 是 开业日期
description text 是 站点描述
image varchar 255 是 站点图片
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:code
  • 普通索引:status,province,city,is_self_service
油罐表(oil_tanks)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 油罐ID
station_id int 11 否 加油站ID
name varchar 50 否 油罐名称
code varchar 20 否 油罐编码
oil_id int 11 否 储存油品ID
capacity decimal (10,2) 否 0.00 容量(升)
current_volume decimal (10,2) 否 0.00 当前体积(升)
warning_level decimal (10,2) 否 0.00 警戒体积(升)
status tinyint 1 否 1 状态(1-正常,0-停用,2-维护中)
last_check_time datetime 是 最后检查时间
last_fill_time datetime 是 最后加注时间
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:station_id, code
  • 普通索引:station_id,oil_id,status
油枪表(oil_guns)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 油枪ID
station_id int 11 否 加油站ID
oil_tank_id int 11 否 油罐ID
number varchar 10 否 枪号
position varchar 50 是 位置描述
oil_id int 11 否 油品ID
status tinyint 1 否 1 状态(1-可用,0-不可用,2-维护中)
device_id varchar 50 是 设备ID
flow_meter_id varchar 50 是 流量计ID
is_self_service tinyint 1 否 0 是否自助(1-是,0-否)
last_maintenance_time datetime 是 最后维护时间
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:station_id, number
  • 普通索引:station_id,oil_tank_id,oil_id,status,is_self_service
1.2.5 排班管理相关表
班次定义表(shift_definitions)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 班次ID
station_id int 11 否 加油站ID(0表示所有站点通用)
name varchar 50 否 班次名称(如早班、中班、晚班)
start_time time 否 开始时间
end_time time 否 结束时间
duration decimal (5,2) 否 持续时长(小时)
is_next_day tinyint 1 否 0 是否跨天(0-否,1-是)
min_staff int 4 否 1 最少人数
status tinyint 1 否 1 状态(1-启用,0-禁用)
remark varchar 255 是 备注
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:station_id,status
排班计划表(shift_schedules)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 排班ID
station_id int 11 否 加油站ID
user_id int 11 否 员工用户ID
shift_id int 11 否 班次ID
schedule_date date 否 排班日期
schedule_type tinyint 1 否 1 排班类型(1-正常,2-加班,3-调休)
status tinyint 1 否 1 状态(1-正常,2-已替换,3-已取消)
replaced_by int 11 是 替班人ID
create_user_id int 11 否 创建人ID
remark varchar 255 是 备注
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:station_id, user_id, schedule_date, shift_id
  • 普通索引:user_id,schedule_date,status,shift_id
考勤记录表(attendance_records)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 考勤ID
station_id int 11 否 加油站ID
user_id int 11 否 员工用户ID
shift_schedule_id int 11 是 关联排班ID
attendance_date date 否 考勤日期
check_in_time datetime 是 签到时间
check_out_time datetime 是 签退时间
check_in_location varchar 100 是 签到位置
check_out_location varchar 100 是 签退位置
check_in_photo varchar 255 是 签到照片URL
check_out_photo varchar 255 是 签退照片URL
status tinyint 1 否 0 状态(0-未签到,1-已签到未签退,2-已签退,3-迟到,4-早退,5-旷工,6-请假)
work_hours decimal (5,2) 是 工作时长(小时)
verify_user_id int 11 是 审核人ID
verify_time datetime 是 审核时间
remark varchar 255 是 备注
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:station_id,user_id,attendance_date,status,shift_schedule_id
休假申请表(leave_applications)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 申请ID
station_id int 11 否 加油站ID
user_id int 11 否 申请人ID
leave_type tinyint 1 否 休假类型(1-事假,2-病假,3-年假,4-调休,5-其他)
start_time datetime 否 开始时间
end_time datetime 否 结束时间
duration decimal (5,2) 否 时长(天)
reason varchar 255 否 请假原因
attachment varchar 255 是 附件URL
status tinyint 1 否 0 状态(0-待审核,1-已批准,2-已拒绝,3-已取消)
approver_id int 11 是 审批人ID
approve_time datetime 是 审批时间
approve_comment varchar 255 是 审批意见
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:station_id,user_id,status,start_time,end_time
换班申请表(shift_change_requests)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 申请ID
station_id int 11 否 加油站ID
requester_id int 11 否 申请人ID
original_schedule_id int 11 否 原排班ID
replacement_user_id int 11 否 替班人ID
replacement_shift_id int 11 是 替班班次ID(为空表示使用原班次)
request_reason varchar 255 是 申请原因
status tinyint 1 否 0 状态(0-待确认,1-已确认,2-已拒绝,3-已取消)
confirm_time datetime 是 确认时间
approve_user_id int 11 是 管理员审批人ID
approve_time datetime 是 管理员审批时间
approve_status tinyint 1 是 审批状态(0-待审批,1-已通过,2-已拒绝)
remark varchar 255 是 备注
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:station_id,requester_id,replacement_user_id,original_schedule_id,status
班组管理表(work_teams)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 班组ID
station_id int 11 否 加油站ID
name varchar 50 否 班组名称
leader_id int 11 是 班组长ID
description varchar 255 是 描述
status tinyint 1 否 1 状态(1-启用,0-禁用)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 普通索引:station_id,leader_id,status
班组成员表(team_members)
字段名 类型 长度 允许空 主键 默认值 说明
id int 11 否 是 自增 记录ID
team_id int 11 否 班组ID
user_id int 11 否 成员用户ID
join_time datetime 否 CURRENT_TIMESTAMP 加入时间
position varchar 50 是 职位
is_leader tinyint 1 否 0 是否班组长(1-是,0-否)
status tinyint 1 否 1 状态(1-在职,0-离职)
created_at datetime 否 CURRENT_TIMESTAMP 创建时间
updated_at datetime 否 CURRENT_TIMESTAMP 更新时间

索引:

  • 主键:id
  • 唯一索引:team_id, user_id
  • 普通索引:user_id,status,is_leader
相关推荐
高级程序源2 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
KIDULT°2 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
我不是程序员三三2 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna2 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
天行健,君子而铎3 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
牛战士coding3 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
goehou4 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
我不会插花弄玉4 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql
周小董5 小时前
[1369]Windows上安装PostgreSQL
数据库·windows·postgresql
一只积极向上的小咸鱼7 小时前
第一性原理思考:从拆解问题到用实验检验答案
数据库