fujian_water_biz_doc/water_biz_database_design.md

285 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 福建水务业务系统数据库设计
## 目录
- [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 数据审计
- 关键业务操作的数据变更记录
- 敏感数据访问日志记录
- 数据异常访问监控与告警