福建水务业务系统数据库设计
目录
1. 数据库设计概述
福建水务业务系统的数据库设计基于 SQL Server 2012 数据库管理系统,采用关系型数据库模型,以支持业务系统的高并发、高可靠性需求。数据库设计遵循标准化、安全性、扩展性和性能优化的原则,为业务系统提供稳定、高效的数据存储和访问支持。
1.1 设计目标
- 支持系统功能需求,满足业务处理的数据需求
- 优化数据库性能,支持高并发访问
- 确保数据安全性,防止数据泄露和丢失
- 支持系统横向扩展,适应业务增长需求
- 支持多租户架构,实现数据隔离
1.2 设计原则
- 规范化设计:遵循数据库设计的第三范式,减少数据冗余
- 适度冗余:对于常用查询,适度保留冗余字段,提高查询效率
- 模块化:按业务模块划分表组,便于维护和扩展
- 安全性:设计完善的权限控制和数据加密方案
- 可扩展性:预留扩展字段,支持业务功能的扩展
2. 数据库架构
2.1 总体架构
系统采用集中式数据库架构,主要包含以下组件:
- 主数据库:存储核心业务数据,支持事务处理
- 报表数据库:存储统计分析数据,支持复杂查询和报表生成
- 历史数据库:存储历史业务数据,减轻主数据库负担
- 缓存系统:使用内存数据库缓存热点数据,提高访问效率
2.2 多租户设计
系统采用数据分区方式实现多租户架构,主要包括:
- 共享数据库,共享模式:所有租户共享同一数据库实例和表结构
- 租户标识列:在每个表中增加租户标识列,实现数据隔离
- 视图隔离:为不同租户创建视图,限制数据访问范围
- 权限控制:通过数据库权限控制租户对数据的访问
3. 主要数据实体
系统主要包含以下核心数据实体:
3.1 客户实体
- 客户基本信息:存储客户的基本资料
- 表卡信息:存储水表基本信息和安装位置
- 账户信息:存储客户账户信息和余额
- 联系人信息:存储客户联系人信息
3.2 营收实体
- 抄表记录:存储水表抄读记录
- 账单信息:存储客户水费账单
- 缴费记录:存储客户缴费记录
- 调价记录:存储水价调整记录
3.3 表务实体
- 水表档案:存储水表的完整信息和生命周期
- 表务工单:存储表务作业工单信息
- 仓库信息:存储水表仓库信息
- 出入库记录:存储水表出入库记录
3.4 报装实体
- 报装申请:存储新用户报装申请信息
- 报装工单:存储报装作业工单信息
- 施工记录:存储报装施工记录
- 验收记录:存储报装验收记录
3.5 系统管理实体
- 组织机构:存储系统组织机构信息
- 用户信息:存储系统用户信息
- 角色权限:存储系统角色和权限信息
- 系统日志:存储系统操作日志
4. 表结构设计
以下是系统主要表结构设计,按业务模块划分:
4.1 客户管理相关表
4.1.1 客户基本信息表(TB_CUSTOMER)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
是 |
客户编号,主键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| CUSTOMER_NAME |
VARCHAR |
100 |
否 |
否 |
客户名称 |
| CUSTOMER_TYPE |
VARCHAR |
10 |
否 |
否 |
客户类型 |
| ID_TYPE |
VARCHAR |
10 |
是 |
否 |
证件类型 |
| ID_NUMBER |
VARCHAR |
30 |
是 |
否 |
证件号码 |
| PHONE |
VARCHAR |
20 |
是 |
否 |
联系电话 |
| ADDRESS |
VARCHAR |
200 |
是 |
否 |
地址 |
| AREA_CODE |
VARCHAR |
20 |
是 |
否 |
行政区划代码 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
4.1.2 表卡信息表(TB_METER_INFO)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| METER_ID |
VARCHAR |
20 |
否 |
是 |
水表编号,主键 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
否 |
客户编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| METER_NO |
VARCHAR |
30 |
否 |
否 |
水表号 |
| METER_TYPE |
VARCHAR |
10 |
否 |
否 |
水表类型 |
| METER_MODEL |
VARCHAR |
20 |
是 |
否 |
水表型号 |
| METER_CALIBER |
VARCHAR |
10 |
是 |
否 |
水表口径 |
| INSTALL_DATE |
DATE |
- |
是 |
否 |
安装日期 |
| INSTALL_POSITION |
VARCHAR |
200 |
是 |
否 |
安装位置 |
| INITIAL_READING |
DECIMAL |
10,2 |
否 |
否 |
初始读数 |
| CURRENT_READING |
DECIMAL |
10,2 |
否 |
否 |
当前读数 |
| READING_CYCLE |
VARCHAR |
10 |
否 |
否 |
抄表周期 |
| BOOK_ID |
VARCHAR |
20 |
是 |
否 |
册本编号 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.1.3 账户信息表(TB_ACCOUNT)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| ACCOUNT_ID |
VARCHAR |
20 |
否 |
是 |
账户编号,主键 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
否 |
客户编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| BALANCE |
DECIMAL |
12,2 |
否 |
否 |
账户余额 |
| CREDIT_AMOUNT |
DECIMAL |
12,2 |
是 |
否 |
信用额度 |
| LAST_PAYMENT_DATE |
DATE |
- |
是 |
否 |
最近缴费日期 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.2 营收管理相关表
4.2.1 抄表记录表(TB_METER_READING)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| READING_ID |
VARCHAR |
20 |
否 |
是 |
抄表记录编号,主键 |
| METER_ID |
VARCHAR |
20 |
否 |
否 |
水表编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| READING_DATE |
DATE |
- |
否 |
否 |
抄表日期 |
| READING_VALUE |
DECIMAL |
10,2 |
否 |
否 |
抄表读数 |
| PREV_READING_VALUE |
DECIMAL |
10,2 |
是 |
否 |
上次读数 |
| WATER_USAGE |
DECIMAL |
10,2 |
否 |
否 |
用水量 |
| READING_TYPE |
VARCHAR |
10 |
否 |
否 |
抄表类型(人工/远传/自报) |
| READER_ID |
VARCHAR |
20 |
是 |
否 |
抄表员编号 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| REMARK |
VARCHAR |
200 |
是 |
否 |
备注 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.2.2 账单信息表(TB_BILL)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| BILL_ID |
VARCHAR |
20 |
否 |
是 |
账单编号,主键 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
否 |
客户编号,外键 |
| METER_ID |
VARCHAR |
20 |
否 |
否 |
水表编号,外键 |
| READING_ID |
VARCHAR |
20 |
是 |
否 |
抄表记录编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| BILL_MONTH |
VARCHAR |
7 |
否 |
否 |
账期(格式:YYYY-MM) |
| WATER_USAGE |
DECIMAL |
10,2 |
否 |
否 |
用水量 |
| WATER_FEE |
DECIMAL |
10,2 |
否 |
否 |
水费金额 |
| OTHER_FEE |
DECIMAL |
10,2 |
是 |
否 |
其他费用 |
| TOTAL_AMOUNT |
DECIMAL |
10,2 |
否 |
否 |
总金额 |
| DUE_DATE |
DATE |
- |
否 |
否 |
缴费截止日期 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.2.3 缴费记录表(TB_PAYMENT)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| PAYMENT_ID |
VARCHAR |
20 |
否 |
是 |
缴费记录编号,主键 |
| BILL_ID |
VARCHAR |
20 |
是 |
否 |
账单编号,外键 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
否 |
客户编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| PAYMENT_TYPE |
VARCHAR |
10 |
否 |
否 |
缴费类型 |
| PAYMENT_CHANNEL |
VARCHAR |
10 |
否 |
否 |
缴费渠道 |
| PAYMENT_AMOUNT |
DECIMAL |
10,2 |
否 |
否 |
缴费金额 |
| PAYMENT_DATE |
DATETIME |
- |
否 |
否 |
缴费时间 |
| TRANSACTION_NO |
VARCHAR |
30 |
是 |
否 |
交易流水号 |
| OPERATOR_ID |
VARCHAR |
20 |
是 |
否 |
操作员编号 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| REMARK |
VARCHAR |
200 |
是 |
否 |
备注 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.3 表务管理相关表
4.3.1 水表档案表(TB_METER_ARCHIVE)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| METER_ARCHIVE_ID |
VARCHAR |
20 |
否 |
是 |
水表档案编号,主键 |
| METER_ID |
VARCHAR |
20 |
否 |
否 |
水表编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| FACTORY |
VARCHAR |
50 |
是 |
否 |
生产厂家 |
| PRODUCTION_DATE |
DATE |
- |
是 |
否 |
生产日期 |
| VALID_PERIOD |
INT |
- |
是 |
否 |
有效期(月) |
| VERIFICATION_DATE |
DATE |
- |
是 |
否 |
检定日期 |
| NEXT_VERIFICATION_DATE |
DATE |
- |
是 |
否 |
下次检定日期 |
| STATUS |
VARCHAR |
10 |
否 |
否 |
状态 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
4.3.2 表务工单表(TB_METER_WORKORDER)
| 字段名 |
数据类型 |
长度 |
是否为空 |
主键 |
描述 |
| WORKORDER_ID |
VARCHAR |
20 |
否 |
是 |
工单编号,主键 |
| METER_ID |
VARCHAR |
20 |
否 |
否 |
水表编号,外键 |
| CUSTOMER_ID |
VARCHAR |
20 |
否 |
否 |
客户编号,外键 |
| TENANT_ID |
VARCHAR |
20 |
否 |
否 |
租户标识 |
| WORKORDER_TYPE |
VARCHAR |
10 |
否 |
否 |
工单类型 |
| WORKORDER_STATUS |
VARCHAR |
10 |
否 |
否 |
工单状态 |
| APPLY_DATE |
DATE |
- |
否 |
否 |
申请日期 |
| PLAN_DATE |
DATE |
- |
是 |
否 |
计划执行日期 |
| EXECUTE_DATE |
DATE |
- |
是 |
否 |
实际执行日期 |
| APPLICANT_ID |
VARCHAR |
20 |
是 |
否 |
申请人编号 |
| EXECUTOR_ID |
VARCHAR |
20 |
是 |
否 |
执行人编号 |
| REASON |
VARCHAR |
200 |
是 |
否 |
原因 |
| RESULT |
VARCHAR |
200 |
是 |
否 |
结果 |
| CREATE_TIME |
DATETIME |
- |
否 |
否 |
创建时间 |
| UPDATE_TIME |
DATETIME |
- |
是 |
否 |
更新时间 |
5. 索引设计
为提高系统性能,针对主要查询场景设计了以下索引:
5.1 主键索引
5.2 外键索引
- 表关联字段建立外键索引,如 CUSTOMER_ID, METER_ID 等
5.3 常用查询字段索引
- 客户表:CUSTOMER_NAME, PHONE, ID_NUMBER
- 水表表:METER_NO, BOOK_ID
- 账单表:BILL_MONTH, STATUS
- 缴费表:PAYMENT_DATE, TRANSACTION_NO
- 抄表表:READING_DATE
5.4 复合索引
- 客户表:(TENANT_ID, CUSTOMER_TYPE)
- 账单表:(TENANT_ID, CUSTOMER_ID, BILL_MONTH)
- 抄表表:(TENANT_ID, METER_ID, READING_DATE)
6. 数据安全性设计
6.1 数据加密
- 敏感个人信息(如身份证号码、银行账号等)采用加密存储
- 加密算法采用 AES-256 或同等安全级别的加密方式
6.2 权限控制
- 采用基于角色的访问控制(RBAC)模型
- 对不同角色用户设置不同的数据访问权限
- 实现行级、列级的细粒度权限控制
6.3 数据备份与恢复
- 定期全量备份,每日增量备份
- 异地数据灾备,确保数据安全
- 完善的数据恢复机制,支持按时间点恢复
6.4 数据审计
- 关键业务操作的数据变更记录
- 敏感数据访问日志记录
- 数据异常访问监控与告警