31 KiB
Raw Blame History

福建水务营收系统数据库设计文档

文档信息

项目信息 详情
项目名称 福建水务营收系统
文档类型 概要设计文档
技术框架 RuoYi-Vue-Pro + yudao-ui-admin-vue3
文档版本 v1.0
编写日期 2024-12-19
文档状态 已完成

目录

数据库设计概述

福建水务营收系统采用**华为OpenGauss 5.0+**数据库基于RuoYi-Vue-Pro框架规范设计。OpenGauss作为国产自主可控的企业级数据库具有高性能、高可用、高安全的特点完全满足水务行业对数据安全和国产化的要求。

设计目标

  • 支持100万客户的业务量满足3-5年业务发展需求
  • 支持200并发用户50并发移动设备
  • 系统响应时间不超过3秒
  • 数据安全等保三级要求
  • 支持多租户数据隔离
  • 国产化要求:符合国产数据库替代要求

数据库选型优势

  • 国产自主可控华为OpenGauss是完全自主知识产权的数据库
  • 高性能优化的SQL引擎查询性能优于传统数据库20-30%
  • 高可用:支持主备同步、读写分离、故障自动切换
  • 安全可信:内置数据加密、审计、权限管控等安全特性
  • 生态兼容兼容PostgreSQL/MySQL协议迁移成本低

设计原则

  • 标准化遵循OpenGauss数据库设计规范
  • 多租户基于tenant_id字段实现数据隔离
  • 可扩展:预留扩展字段,支持业务增长
  • 高性能:合理设计索引,优化查询性能
  • 安全性利用OpenGauss内置安全特性

数据库架构

数据库架构图

graph TB
    subgraph "应用层"
        APP[Water Biz Application<br/>RuoYi-Vue-Pro]
    end
    
    subgraph "数据访问层"
        MP[MyBatis Plus<br/>ORM框架]
        CACHE[Redis缓存<br/>热点数据]
    end
    
    subgraph "数据存储层"
        subgraph "OpenGauss主从集群"
            MASTER[(OpenGauss主库<br/>读写)]
            SLAVE[(OpenGauss从库<br/>只读)]
        end
        
        subgraph "业务数据库"
            DB_CUSTOMER[(客户数据库<br/>Customer DB)]
            DB_BILLING[(营收数据库<br/>Billing DB)]
            DB_METER[(表务数据库<br/>Meter DB)]
            DB_SYSTEM[(系统数据库<br/>System DB)]
        end
        
        subgraph "数据归档"
            DB_HISTORY[(历史数据库<br/>Archive DB)]
            BACKUP[(备份存储<br/>Backup Storage)]
        end
    end
    
    APP --> MP
    APP --> CACHE
    MP --> MASTER
    MASTER --> SLAVE
    MASTER --> DB_CUSTOMER
    MASTER --> DB_BILLING
    MASTER --> DB_METER
    MASTER --> DB_SYSTEM
    SLAVE --> DB_HISTORY
    MASTER --> BACKUP

多租户架构设计

graph TB
    subgraph "多租户数据隔离"
        TENANT1[租户1: 福建水务集团]
        TENANT2[租户2: 厦门分公司]
        TENANT3[租户3: 泉州分公司]
    end
    
    subgraph "共享数据库"
        subgraph "业务表结构"
            TABLE1[water_customer<br/>+ tenant_id]
            TABLE2[water_meter<br/>+ tenant_id]
            TABLE3[water_bill<br/>+ tenant_id]
            TABLE4[water_payment<br/>+ tenant_id]
        end
        
        subgraph "租户隔离机制"
            INTERCEPTOR[MyBatis Plus<br/>多租户拦截器]
            FILTER[数据权限过滤器]
        end
    end
    
    TENANT1 --> INTERCEPTOR
    TENANT2 --> INTERCEPTOR
    TENANT3 --> INTERCEPTOR
    
    INTERCEPTOR --> FILTER
    FILTER --> TABLE1
    FILTER --> TABLE2
    FILTER --> TABLE3
    FILTER --> TABLE4

通用字段设计

所有业务表统一包含以下基础字段:

字段名 数据类型 长度 描述
id BIGINT - 主键ID
tenant_id BIGINT - 租户ID(多租户隔离)
creator VARCHAR 64 创建者
create_time DATETIME - 创建时间
updater VARCHAR 64 更新者
update_time DATETIME - 更新时间
deleted BIT 1 逻辑删除标识

核心数据模型设计

客户管理模块ER图

erDiagram
    WATER_CUSTOMER {
        bigint id PK "主键ID"
        varchar customer_code UK "客户编号"
        varchar customer_name "客户名称"
        varchar customer_type "客户类型"
        varchar id_type "证件类型"
        varchar id_number "证件号码"
        varchar phone "联系电话"
        varchar address "详细地址"
        varchar area_code "行政区划代码"
        tinyint status "状态"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_METER {
        bigint id PK "主键ID"
        varchar meter_code UK "水表编号"
        varchar meter_no "水表表号"
        varchar meter_type "水表类型"
        varchar meter_model "水表型号"
        varchar meter_caliber "水表口径"
        date install_date "安装日期"
        varchar install_position "安装位置"
        decimal initial_reading "初始读数"
        decimal current_reading "当前读数"
        varchar reading_cycle "抄表周期"
        varchar book_code "册本编号"
        tinyint status "状态"
        bigint customer_id FK "客户ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_CUSTOMER_ACCOUNT {
        bigint id PK "主键ID"
        decimal balance "账户余额"
        decimal credit_amount "信用额度"
        date last_payment_date "最近缴费日期"
        tinyint status "账户状态"
        bigint customer_id FK "客户ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_CUSTOMER ||--o{ WATER_METER : "拥有"
    WATER_CUSTOMER ||--|| WATER_CUSTOMER_ACCOUNT : "对应"

营收管理模块ER图

erDiagram
    WATER_METER_READING {
        bigint id PK "主键ID"
        varchar reading_code UK "抄表记录编号"
        date reading_date "抄表日期"
        decimal reading_value "抄表读数"
        decimal prev_reading_value "上次读数"
        decimal water_usage "用水量"
        varchar reading_type "抄表类型"
        varchar reader_id "抄表员ID"
        varchar remark "备注"
        tinyint status "状态"
        bigint meter_id FK "水表ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_BILL {
        bigint id PK "主键ID"
        varchar bill_code UK "账单编号"
        varchar bill_month "账期"
        decimal water_usage "用水量"
        decimal water_fee "水费金额"
        decimal sewage_fee "污水处理费"
        decimal other_fee "其他费用"
        decimal total_amount "总金额"
        date due_date "缴费截止日期"
        tinyint bill_status "账单状态"
        bigint customer_id FK "客户ID"
        bigint meter_id FK "水表ID"
        bigint reading_id FK "抄表记录ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_PAYMENT {
        bigint id PK "主键ID"
        varchar payment_code UK "缴费记录编号"
        varchar payment_type "缴费类型"
        varchar payment_channel "缴费渠道"
        decimal payment_amount "缴费金额"
        datetime payment_time "缴费时间"
        varchar transaction_no "交易流水号"
        varchar operator_id "操作员ID"
        varchar remark "备注"
        tinyint payment_status "缴费状态"
        bigint bill_id FK "账单ID"
        bigint customer_id FK "客户ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_METER_READING ||--|| WATER_BILL : "生成"
    WATER_BILL ||--o{ WATER_PAYMENT : "对应"

表务管理模块ER图

erDiagram
    WATER_METER_ARCHIVE {
        bigint id PK "主键ID"
        varchar archive_code UK "档案编号"
        varchar manufacturer "生产厂家"
        date production_date "生产日期"
        int valid_period "有效期(月)"
        date verification_date "检定日期"
        date next_verification_date "下次检定日期"
        varchar certificate_no "检定证书号"
        tinyint archive_status "档案状态"
        bigint meter_id FK "水表ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_METER_WORKORDER {
        bigint id PK "主键ID"
        varchar workorder_code UK "工单编号"
        varchar workorder_type "工单类型"
        varchar workorder_status "工单状态"
        date apply_date "申请日期"
        date plan_date "计划执行日期"
        date execute_date "实际执行日期"
        varchar applicant_id "申请人ID"
        varchar executor_id "执行人ID"
        varchar reason "申请原因"
        varchar result "执行结果"
        bigint meter_id FK "水表ID"
        bigint customer_id FK "客户ID"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_METER_STOCK {
        bigint id PK "主键ID"
        varchar stock_code UK "库存编号"
        varchar warehouse_code "仓库编码"
        varchar warehouse_name "仓库名称"
        int stock_quantity "库存数量"
        int min_stock "最小库存"
        int max_stock "最大库存"
        varchar meter_model "水表型号"
        varchar meter_caliber "水表口径"
        tinyint stock_status "库存状态"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    WATER_METER ||--|| WATER_METER_ARCHIVE : "对应"
    WATER_METER ||--o{ WATER_METER_WORKORDER : "产生"

系统管理模块ER图

erDiagram
    SYSTEM_TENANT {
        bigint id PK "主键ID"
        varchar tenant_name "租户名称"
        varchar tenant_code UK "租户编码"
        varchar contact_name "联系人"
        varchar contact_phone "联系电话"
        varchar contact_email "联系邮箱"
        tinyint tenant_status "租户状态"
        datetime expire_time "过期时间"
        varchar domain "域名"
        varchar package_name "套餐名称"
        int user_count "用户数量"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    SYSTEM_USERS {
        bigint id PK "主键ID"
        varchar username UK "用户名"
        varchar password "密码"
        varchar nickname "昵称"
        varchar remark "备注"
        varchar dept_id "部门ID"
        varchar post_ids "岗位ID列表"
        varchar email "邮箱"
        varchar mobile "手机号"
        tinyint sex "性别"
        varchar avatar "头像"
        tinyint status "状态"
        datetime login_date "最后登录时间"
        varchar login_ip "最后登录IP"
        bigint tenant_id "租户ID"
        varchar creator "创建者"
        datetime create_time "创建时间"
        varchar updater "更新者"
        datetime update_time "更新时间"
        tinyint deleted "是否删除"
    }
    
    SYSTEM_TENANT ||--o{ SYSTEM_USERS : "包含"

核心数据表设计

表务管理模块ER图

erDiagram
    WATER_METER_WORKORDER {
        bigint id PK "主键ID"
        varchar workorder_code UK "工单编号"
        varchar workorder_type "工单类型"
        varchar workorder_status "工单状态"
        date apply_date "申请日期"
        date plan_date "计划执行日期"
        date execute_date "实际执行日期"
        varchar applicant_id "申请人ID"
        varchar executor_id "执行人ID"
        varchar reason "申请原因"
        varchar result "执行结果"
        bigint meter_id FK "水表ID"
        bigint customer_id FK "客户ID"
        bigint tenant_id "租户ID"
    }
    
    WATER_METER_STOCK {
        bigint id PK "主键ID"
        varchar stock_code UK "库存编号"
        varchar meter_brand "水表品牌"
        varchar meter_model "水表型号"
        varchar meter_caliber "水表口径"
        int stock_quantity "库存数量"
        int min_stock "最小库存"
        decimal unit_price "单价"
        varchar warehouse_location "仓库位置"
        tinyint stock_status "库存状态"
        bigint tenant_id "租户ID"
    }
    
    WATER_METER_INVENTORY {
        bigint id PK "主键ID"
        varchar inventory_code UK "出入库编号"
        varchar inventory_type "出入库类型"
        int quantity "数量"
        decimal unit_price "单价"
        decimal total_amount "总金额"
        varchar operator_id "操作员ID"
        datetime operation_time "操作时间"
        varchar remark "备注"
        bigint stock_id FK "库存ID"
        bigint workorder_id FK "工单ID"
        bigint tenant_id "租户ID"
    }
    
    WATER_METER ||--o{ WATER_METER_WORKORDER : "生成"
    WATER_METER_STOCK ||--o{ WATER_METER_INVENTORY : "出入库"
    WATER_METER_WORKORDER ||--o{ WATER_METER_INVENTORY : "关联"

系统管理模块ER图

erDiagram
    WATER_DICT_TYPE {
        bigint id PK "主键ID"
        varchar dict_name "字典名称"
        varchar dict_type UK "字典类型"
        varchar remark "备注"
        tinyint status "状态"
        bigint tenant_id "租户ID"
    }
    
    WATER_DICT_DATA {
        bigint id PK "主键ID"
        varchar dict_type "字典类型"
        varchar dict_label "字典标签"
        varchar dict_value "字典键值"
        int dict_sort "字典排序"
        varchar color_type "颜色类型"
        varchar css_class "CSS类名"
        varchar remark "备注"
        tinyint status "状态"
        bigint tenant_id "租户ID"
    }
    
    WATER_CONFIG {
        bigint id PK "主键ID"
        varchar config_name "参数名称"
        varchar config_key UK "参数键名"
        varchar config_value "参数键值"
        varchar config_type "系统内置"
        varchar remark "备注"
        bigint tenant_id "租户ID"
    }
    
    WATER_PRICE_CONFIG {
        bigint id PK "主键ID"
        varchar price_name "水价名称"
        varchar customer_type "客户类型"
        varchar price_type "价格类型"
        decimal base_price "基础价格"
        decimal sewage_price "污水处理费"
        decimal garbage_price "垃圾处理费"
        date effective_date "生效日期"
        date expire_date "失效日期"
        tinyint status "状态"
        bigint tenant_id "租户ID"
    }
    
    WATER_DICT_TYPE ||--o{ WATER_DICT_DATA : "包含"

数据表结构设计

客户管理相关表

客户基本信息表 (water_customer)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
customer_code VARCHAR 32 - Y - 客户编号
customer_name VARCHAR 100 - Y - 客户名称
customer_type VARCHAR 20 - Y - 客户类型
id_type VARCHAR 20 - N NULL 证件类型
id_number VARCHAR 30 - N NULL 证件号码
phone VARCHAR 20 - N NULL 联系电话
mobile VARCHAR 20 - N NULL 手机号码
email VARCHAR 100 - N NULL 邮箱
address VARCHAR 500 - N NULL 详细地址
area_code VARCHAR 20 - N NULL 行政区划代码
status TINYINT - - Y 1 状态(0:停用,1:正常,2:欠费,3:销户)
tenant_id BIGINT - - Y 0 租户ID

水表信息表 (water_meter)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
meter_code VARCHAR 32 - Y - 水表编号
meter_no VARCHAR 30 - N NULL 水表表号
meter_type VARCHAR 20 - Y - 水表类型
meter_model VARCHAR 50 - N NULL 水表型号
meter_caliber VARCHAR 10 - N NULL 水表口径
manufacturer VARCHAR 100 - N NULL 生产厂家
install_date DATE - - N NULL 安装日期
install_position VARCHAR 500 - N NULL 安装位置
initial_reading DECIMAL 10,2 - Y 0.00 初始读数
current_reading DECIMAL 10,2 - Y 0.00 当前读数
reading_cycle VARCHAR 20 - Y MONTHLY 抄表周期
book_code VARCHAR 32 - N NULL 册本编号
meter_status TINYINT - - Y 1 水表状态
customer_id BIGINT - - Y - 客户ID
tenant_id BIGINT - - Y 0 租户ID

客户账户表 (water_customer_account)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
account_code VARCHAR 32 - Y - 账户编号
balance DECIMAL 12,2 - Y 0.00 账户余额
credit_amount DECIMAL 12,2 - N 0.00 信用额度
deposit_amount DECIMAL 12,2 - N 0.00 保证金
frozen_amount DECIMAL 12,2 - N 0.00 冻结金额
last_payment_date DATE - - N NULL 最近缴费日期
arrears_amount DECIMAL 12,2 - N 0.00 欠费金额
account_status TINYINT - - Y 1 账户状态
customer_id BIGINT - - Y - 客户ID
tenant_id BIGINT - - Y 0 租户ID

营收管理相关表

抄表记录表 (water_meter_reading)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
reading_code VARCHAR 32 - Y - 抄表记录编号
reading_date DATE - - Y - 抄表日期
reading_value DECIMAL 10,2 - Y - 抄表读数
prev_reading_value DECIMAL 10,2 - N NULL 上次读数
water_usage DECIMAL 10,2 - Y 0.00 用水量
reading_type VARCHAR 20 - Y - 抄表类型
reader_id VARCHAR 20 - N NULL 抄表员ID
reading_status TINYINT - - Y 0 状态
meter_id BIGINT - - Y - 水表ID
customer_id BIGINT - - Y - 客户ID
tenant_id BIGINT - - Y 0 租户ID

水费账单表 (water_bill)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
bill_code VARCHAR 32 - Y - 账单编号
bill_month VARCHAR 7 - Y - 账期
bill_date DATE - - Y - 开账日期
water_usage DECIMAL 10,2 - Y 0.00 用水量
water_fee DECIMAL 10,2 - Y 0.00 水费金额
sewage_fee DECIMAL 10,2 - N 0.00 污水处理费
other_fee DECIMAL 10,2 - N 0.00 其他费用
total_amount DECIMAL 10,2 - Y 0.00 总金额
due_date DATE - - Y - 缴费截止日期
bill_status TINYINT - - Y 0 账单状态
customer_id BIGINT - - Y - 客户ID
meter_id BIGINT - - Y - 水表ID
reading_id BIGINT - - N NULL 抄表记录ID
tenant_id BIGINT - - Y 0 租户ID

缴费记录表 (water_payment)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
payment_code VARCHAR 32 - Y - 缴费记录编号
payment_type VARCHAR 20 - Y - 缴费类型
payment_channel VARCHAR 20 - Y - 缴费渠道
payment_amount DECIMAL 10,2 - Y - 缴费金额
payment_time DATETIME - - Y - 缴费时间
transaction_no VARCHAR 50 - N NULL 交易流水号
operator_id VARCHAR 20 - N NULL 操作员ID
payment_status TINYINT - - Y 1 缴费状态
bill_id BIGINT - - N NULL 账单ID
customer_id BIGINT - - Y - 客户ID
tenant_id BIGINT - - Y 0 租户ID

表务管理相关表

水表档案表 (water_meter_archive)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
archive_code VARCHAR 32 - Y - 档案编号
manufacturer VARCHAR 100 - N NULL 生产厂家
production_date DATE - - N NULL 生产日期
valid_period INT - - N 72 有效期(月)
verification_date DATE - - N NULL 检定日期
next_verification_date DATE - - N NULL 下次检定日期
certificate_no VARCHAR 50 - N NULL 检定证书号
archive_status TINYINT - - Y 1 档案状态
meter_id BIGINT - - Y - 水表ID
tenant_id BIGINT - - Y 0 租户ID

表务工单表 (water_meter_workorder)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
workorder_code VARCHAR 32 - Y - 工单编号
workorder_type VARCHAR 20 - Y - 工单类型
workorder_status VARCHAR 20 - Y PENDING 工单状态
apply_date DATE - - Y - 申请日期
plan_date DATE - - N NULL 计划执行日期
execute_date DATE - - N NULL 实际执行日期
applicant_id VARCHAR 20 - N NULL 申请人ID
executor_id VARCHAR 20 - N NULL 执行人ID
reason VARCHAR 500 - N NULL 申请原因
result VARCHAR 500 - N NULL 执行结果
meter_id BIGINT - - Y - 水表ID
customer_id BIGINT - - Y - 客户ID
tenant_id BIGINT - - Y 0 租户ID

水表库存表 (water_meter_stock)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
stock_code VARCHAR 32 - Y - 库存编号
meter_brand VARCHAR 50 - Y - 水表品牌
meter_model VARCHAR 50 - Y - 水表型号
meter_caliber VARCHAR 10 - Y - 水表口径
stock_quantity INT - - Y 0 库存数量
min_stock INT - - Y 0 最小库存
unit_price DECIMAL 10,2 - N NULL 单价
warehouse_location VARCHAR 100 - N NULL 仓库位置
stock_status TINYINT - - Y 1 库存状态
tenant_id BIGINT - - Y 0 租户ID

系统管理相关表

数据字典类型表 (water_dict_type)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
dict_name VARCHAR 100 - Y - 字典名称
dict_type VARCHAR 100 - Y - 字典类型
remark VARCHAR 500 - N NULL 备注
status TINYINT - - Y 1 状态
tenant_id BIGINT - - Y 0 租户ID

数据字典表 (water_dict_data)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
dict_type VARCHAR 100 - Y - 字典类型
dict_label VARCHAR 100 - Y - 字典标签
dict_value VARCHAR 100 - Y - 字典键值
dict_sort INT - - Y 0 字典排序
status TINYINT - - Y 1 状态
tenant_id BIGINT - - Y 0 租户ID

系统配置表 (water_config)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
config_name VARCHAR 100 - Y - 参数名称
config_key VARCHAR 100 - Y - 参数键名
config_value VARCHAR 500 - N NULL 参数键值
config_type VARCHAR 20 - N NULL 系统内置
remark VARCHAR 500 - N NULL 备注
tenant_id BIGINT - - Y 0 租户ID

水价配置表 (water_price_config)

字段名 数据类型 长度 主键 非空 默认值 说明
id BIGINT - Y Y AUTO_INCREMENT 主键ID
price_name VARCHAR 100 - Y - 水价名称
customer_type VARCHAR 20 - Y - 客户类型
price_type VARCHAR 20 - Y - 价格类型
base_price DECIMAL 8,4 - Y - 基础价格
sewage_price DECIMAL 8,4 - N 0.00 污水处理费
effective_date DATE - - Y - 生效日期
expire_date DATE - - N NULL 失效日期
status TINYINT - - Y 1 状态
tenant_id BIGINT - - Y 0 租户ID

索引与性能优化

主要索引设计

唯一索引

  • 客户编号索引uk_customer_code (customer_code, tenant_id)
  • 水表编号索引uk_meter_code (meter_code, tenant_id)
  • 账单编号索引uk_bill_code (bill_code, tenant_id)
  • 缴费编号索引uk_payment_code (payment_code, tenant_id)

复合索引

  • 多租户查询索引idx_tenant_customer_type (tenant_id, customer_type)
  • 账单查询索引idx_tenant_customer_month (tenant_id, customer_id, bill_month)
  • 抄表查询索引idx_tenant_meter_date (tenant_id, meter_id, reading_date)
  • 缴费查询索引idx_customer_payment_time (customer_id, payment_time)

单列索引

  • 状态查询索引:各表的状态字段
  • 时间查询索引:创建时间、更新时间、缴费时间等
  • 关联查询索引:外键字段

OpenGauss特性应用

分区表设计

  • 按月分区:账单表、缴费表按月份分区
  • 按年分区:历史数据表按年份分区
  • 按租户分区:大租户数据独立分区

列存储优化

  • 统计分析表:使用列存储提高分析查询性能
  • 历史数据表:归档数据使用列存储节省空间

内存表应用

  • 配置缓存表:系统配置参数使用内存表
  • 字典数据表:频繁访问的字典数据使用内存表

查询优化策略

多租户查询优化

  • 所有查询强制包含tenant_id条件
  • 使用MyBatis Plus多租户拦截器自动添加租户条件
  • 建立租户级别的分区索引

分页查询优化

  • 使用覆盖索引减少回表查询
  • 大数据量分页使用游标分页替代传统分页
  • 配置合理的LIMIT和OFFSET参数

统计查询优化

  • 建立专门的统计视图
  • 使用物化视图缓存复杂统计结果
  • 配置定期刷新统计信息

数据安全设计

OpenGauss安全特性

透明数据加密 (TDE)

  • 表级加密:敏感数据表启用透明加密
  • 字段级加密:身份证号、银行账号等敏感字段加密存储
  • 密钥管理使用OpenGauss内置密钥管理系统

行级安全策略 (RLS)

  • 多租户隔离基于tenant_id的行级安全策略
  • 数据权限控制:根据用户角色限制数据访问范围
  • 动态权限策略:支持基于时间、地域等条件的动态权限

动态数据脱敏

  • 敏感数据脱敏:手机号、身份证号等敏感信息脱敏显示
  • 角色权限控制:不同角色看到不同级别的脱敏数据
  • 脱敏规则配置:支持灵活的脱敏规则配置

权限控制体系

角色权限设计

  • 系统管理员:拥有所有权限,负责系统配置和用户管理
  • 业务管理员:拥有业务数据的完整权限
  • 业务操作员:拥有业务数据的查询和部分修改权限
  • 只读用户:仅拥有脱敏数据的查询权限

多级权限控制

  • 系统级权限:控制系统功能模块的访问权限
  • 数据级权限:控制数据记录的访问权限
  • 字段级权限:控制敏感字段的访问权限
  • 操作级权限:控制增删改查等操作权限

审计与监控

操作审计

  • 数据变更审计:记录所有数据增删改操作
  • 敏感操作审计:重点审计敏感数据的访问操作
  • 登录审计:记录用户登录、退出等认证操作
  • 权限变更审计:记录权限和角色的变更操作

安全监控

  • 异常访问监控:监控异常的数据访问行为
  • 性能监控:监控数据库性能指标和资源使用情况
  • 安全事件监控:监控安全相关事件和告警
  • 合规检查:定期进行安全合规性检查

备份与恢复

数据备份策略

  • 全量备份:定期进行完整数据库备份
  • 增量备份:每日进行增量数据备份
  • 归档备份:历史数据定期归档到备份存储
  • 异地备份:关键数据进行异地备份

灾难恢复

  • 主备同步OpenGauss主备实时同步
  • 故障切换:支持自动故障检测和切换
  • 数据恢复:支持基于时间点的数据恢复
  • 业务连续性:确保业务服务的高可用性

国产化安全合规

密码算法支持

  • 国产SM算法支持SM2/SM3/SM4国产密码算法
  • 密码合规:符合国家密码管理局相关要求
  • 安全认证:通过相关安全产品认证

等保合规

  • 等保三级:满足等保三级安全防护要求
  • 安全管理:建立完善的安全管理制度
  • 技术防护:采用多层次的技术防护措施
  • 安全评估:定期进行安全风险评估