# 福建水务业务系统数据库设计 ## 目录 - [1. 数据库设计概述](#1-数据库设计概述) - [2. 数据库架构](#2-数据库架构) - [3. 主要数据实体](#3-主要数据实体) - [4. 表结构设计](#4-表结构设计) - [5. 索引设计](#5-索引设计) - [6. 数据安全性设计](#6-数据安全性设计) ## 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 数据审计 - 关键业务操作的数据变更记录 - 敏感数据访问日志记录 - 数据异常访问监控与告警