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