fujian_water_biz_doc/water_biz_database_design.md

12 KiB
Raw Blame History

福建水务业务系统数据库设计

目录

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 数据审计

  • 关键业务操作的数据变更记录
  • 敏感数据访问日志记录
  • 数据异常访问监控与告警