fujian_water_biz_doc/output/water_biz_database_design.html

1765 lines
200 KiB
HTML
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.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="系统设计团队" />
<title>福建水务营收系统-数据库设计</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
/* CSS for syntax highlighting */
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ background-color: #f8f8f8; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ef2929; } /* Alert */
code span.an { color: #8f5902; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #204a87; } /* Attribute */
code span.bn { color: #0000cf; } /* BaseN */
code span.cf { color: #204a87; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4e9a06; } /* Char */
code span.cn { color: #8f5902; } /* Constant */
code span.co { color: #8f5902; font-style: italic; } /* Comment */
code span.cv { color: #8f5902; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #8f5902; font-weight: bold; font-style: italic; } /* Documentation */
code span.dt { color: #204a87; } /* DataType */
code span.dv { color: #0000cf; } /* DecVal */
code span.er { color: #a40000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #0000cf; } /* Float */
code span.fu { color: #204a87; font-weight: bold; } /* Function */
code span.im { } /* Import */
code span.in { color: #8f5902; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #204a87; font-weight: bold; } /* Keyword */
code span.op { color: #ce5c00; font-weight: bold; } /* Operator */
code span.ot { color: #8f5902; } /* Other */
code span.pp { color: #8f5902; font-style: italic; } /* Preprocessor */
code span.sc { color: #ce5c00; font-weight: bold; } /* SpecialChar */
code span.ss { color: #4e9a06; } /* SpecialString */
code span.st { color: #4e9a06; } /* String */
code span.va { color: #000000; } /* Variable */
code span.vs { color: #4e9a06; } /* VerbatimString */
code span.wa { color: #8f5902; font-weight: bold; font-style: italic; } /* Warning */
</style>
<link rel="stylesheet" href="output/document_style.css" />
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header id="title-block-header">
<h1 class="title">福建水务营收系统-数据库设计</h1>
<p class="author">系统设计团队</p>
<p class="date">2024年12月19日</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#福建水务营收系统数据库设计文档"
id="toc-福建水务营收系统数据库设计文档"><span
class="toc-section-number">1</span> 福建水务营收系统数据库设计文档</a>
<ul>
<li><a href="#文档信息" id="toc-文档信息"><span
class="toc-section-number">1.1</span> 文档信息</a></li>
<li><a href="#目录" id="toc-目录"><span
class="toc-section-number">1.2</span> 目录</a></li>
<li><a href="#一数据库设计概述" id="toc-一数据库设计概述"><span
class="toc-section-number">1.3</span> 一、数据库设计概述</a>
<ul>
<li><a href="#设计目标" id="toc-设计目标"><span
class="toc-section-number">1.3.1</span> 1.1 设计目标</a></li>
<li><a href="#数据库选型优势" id="toc-数据库选型优势"><span
class="toc-section-number">1.3.2</span> 1.2 数据库选型优势</a></li>
<li><a href="#设计原则" id="toc-设计原则"><span
class="toc-section-number">1.3.3</span> 1.3 设计原则</a></li>
</ul></li>
<li><a href="#二数据库架构" id="toc-二数据库架构"><span
class="toc-section-number">1.4</span> 二、数据库架构</a>
<ul>
<li><a href="#数据库架构图" id="toc-数据库架构图"><span
class="toc-section-number">1.4.1</span> 1. 数据库架构图</a></li>
<li><a href="#多租户架构设计" id="toc-多租户架构设计"><span
class="toc-section-number">1.4.2</span> 2. 多租户架构设计</a></li>
<li><a href="#通用字段设计" id="toc-通用字段设计"><span
class="toc-section-number">1.4.3</span> 3. 通用字段设计</a></li>
</ul></li>
<li><a href="#三核心数据模型er图" id="toc-三核心数据模型er图"><span
class="toc-section-number">1.5</span> 三、核心数据模型ER图</a>
<ul>
<li><a href="#客户管理模块er图" id="toc-客户管理模块er图"><span
class="toc-section-number">1.5.1</span> 1. 客户管理模块ER图</a></li>
<li><a href="#营收管理模块er图" id="toc-营收管理模块er图"><span
class="toc-section-number">1.5.2</span> 2. 营收管理模块ER图</a></li>
<li><a href="#表务管理模块er图" id="toc-表务管理模块er图"><span
class="toc-section-number">1.5.3</span> 3. 表务管理模块ER图</a></li>
<li><a href="#系统管理模块er图" id="toc-系统管理模块er图"><span
class="toc-section-number">1.5.4</span> 4. 系统管理模块ER图</a></li>
</ul></li>
<li><a href="#四核心数据表设计" id="toc-四核心数据表设计"><span
class="toc-section-number">1.6</span> 四、核心数据表设计</a>
<ul>
<li><a href="#表务管理模块er图-1" id="toc-表务管理模块er图-1"><span
class="toc-section-number">1.6.1</span> 1. 表务管理模块ER图</a></li>
<li><a href="#系统管理模块er图-1" id="toc-系统管理模块er图-1"><span
class="toc-section-number">1.6.2</span> 2. 系统管理模块ER图</a></li>
</ul></li>
<li><a href="#五完整ddl语句" id="toc-五完整ddl语句"><span
class="toc-section-number">1.7</span> 五、完整DDL语句</a>
<ul>
<li><a href="#客户管理相关表ddl" id="toc-客户管理相关表ddl"><span
class="toc-section-number">1.7.1</span> 1. 客户管理相关表DDL</a>
<ul>
<li><a href="#客户基本信息表" id="toc-客户基本信息表"><span
class="toc-section-number">1.7.1.1</span> 1.1 客户基本信息表</a></li>
<li><a href="#水表信息表" id="toc-水表信息表"><span
class="toc-section-number">1.7.1.2</span> 1.2 水表信息表</a></li>
</ul></li>
<li><a href="#表务工单管理表ddl" id="toc-表务工单管理表ddl"><span
class="toc-section-number">1.7.2</span> 3. 表务工单管理表DDL</a>
<ul>
<li><a href="#表务工单表" id="toc-表务工单表"><span
class="toc-section-number">1.7.2.1</span> 3.1 表务工单表</a></li>
<li><a href="#水表库存管理表" id="toc-水表库存管理表"><span
class="toc-section-number">1.7.2.2</span> 3.2 水表库存管理表</a></li>
</ul></li>
<li><a href="#系统管理相关表ddl" id="toc-系统管理相关表ddl"><span
class="toc-section-number">1.7.3</span> 4. 系统管理相关表DDL</a>
<ul>
<li><a href="#数据字典类型表" id="toc-数据字典类型表"><span
class="toc-section-number">1.7.3.1</span> 4.1 数据字典类型表</a></li>
</ul></li>
<li><a href="#完整ddl语句列表" id="toc-完整ddl语句列表"><span
class="toc-section-number">1.7.4</span> 5. 完整DDL语句列表</a>
<ul>
<li><a href="#客户基本信息表-opengauss版本"
id="toc-客户基本信息表-opengauss版本"><span
class="toc-section-number">1.7.4.1</span> 5.1 客户基本信息表
(OpenGauss版本)</a></li>
<li><a href="#水表信息表-1" id="toc-水表信息表-1"><span
class="toc-section-number">1.7.4.2</span> 1.2 水表信息表</a></li>
<li><a href="#客户账户表" id="toc-客户账户表"><span
class="toc-section-number">1.7.4.3</span> 1.3 客户账户表</a></li>
</ul></li>
<li><a href="#营收管理相关表ddl" id="toc-营收管理相关表ddl"><span
class="toc-section-number">1.7.5</span> 2. 营收管理相关表DDL</a>
<ul>
<li><a href="#抄表记录表" id="toc-抄表记录表"><span
class="toc-section-number">1.7.5.1</span> 2.1 抄表记录表</a></li>
<li><a href="#水费账单表" id="toc-水费账单表"><span
class="toc-section-number">1.7.5.2</span> 2.2 水费账单表</a></li>
<li><a href="#缴费记录表" id="toc-缴费记录表"><span
class="toc-section-number">1.7.5.3</span> 2.3 缴费记录表</a></li>
</ul></li>
<li><a href="#表务管理相关表ddl" id="toc-表务管理相关表ddl"><span
class="toc-section-number">1.7.6</span> 3. 表务管理相关表DDL</a>
<ul>
<li><a href="#水表档案表" id="toc-水表档案表"><span
class="toc-section-number">1.7.6.1</span> 3.1 水表档案表</a></li>
</ul></li>
<li><a href="#系统管理相关表ddl-1" id="toc-系统管理相关表ddl-1"><span
class="toc-section-number">1.7.7</span> 4. 系统管理相关表DDL</a>
<ul>
<li><a href="#数据字典表" id="toc-数据字典表"><span
class="toc-section-number">1.7.7.1</span> 4.1 数据字典表</a></li>
</ul></li>
<li><a href="#初始化数据脚本" id="toc-初始化数据脚本"><span
class="toc-section-number">1.7.8</span> 5. 初始化数据脚本</a></li>
</ul></li>
<li><a href="#六opengauss数据库特性应用"
id="toc-六opengauss数据库特性应用"><span
class="toc-section-number">1.8</span> 六、OpenGauss数据库特性应用</a>
<ul>
<li><a href="#opengauss高级特性" id="toc-opengauss高级特性"><span
class="toc-section-number">1.8.1</span> 1. OpenGauss高级特性</a>
<ul>
<li><a href="#分区表设计" id="toc-分区表设计"><span
class="toc-section-number">1.8.1.1</span> 1.1 分区表设计</a></li>
<li><a href="#列存储表" id="toc-列存储表"><span
class="toc-section-number">1.8.1.2</span> 1.2 列存储表</a></li>
<li><a href="#内存表" id="toc-内存表"><span
class="toc-section-number">1.8.1.3</span> 1.3 内存表</a></li>
</ul></li>
<li><a href="#性能优化配置" id="toc-性能优化配置"><span
class="toc-section-number">1.8.2</span> 2. 性能优化配置</a>
<ul>
<li><a href="#连接池配置" id="toc-连接池配置"><span
class="toc-section-number">1.8.2.1</span> 2.1 连接池配置</a></li>
<li><a href="#并行查询" id="toc-并行查询"><span
class="toc-section-number">1.8.2.2</span> 2.2 并行查询</a></li>
</ul></li>
</ul></li>
<li><a href="#七索引设计与优化" id="toc-七索引设计与优化"><span
class="toc-section-number">1.9</span> 七、索引设计与优化</a>
<ul>
<li><a href="#基础索引设计" id="toc-基础索引设计"><span
class="toc-section-number">1.9.1</span> 1. 基础索引设计</a>
<ul>
<li><a href="#主键索引" id="toc-主键索引"><span
class="toc-section-number">1.9.1.1</span> 1.1 主键索引</a></li>
<li><a href="#唯一索引" id="toc-唯一索引"><span
class="toc-section-number">1.9.1.2</span> 1.2 唯一索引</a></li>
<li><a href="#复合索引" id="toc-复合索引"><span
class="toc-section-number">1.9.1.3</span> 1.3 复合索引</a></li>
</ul></li>
<li><a href="#opengauss特殊索引" id="toc-opengauss特殊索引"><span
class="toc-section-number">1.9.2</span> 2. OpenGauss特殊索引</a>
<ul>
<li><a href="#hash索引" id="toc-hash索引"><span
class="toc-section-number">1.9.2.1</span> 2.1 HASH索引</a></li>
<li><a href="#gin索引" id="toc-gin索引"><span
class="toc-section-number">1.9.2.2</span> 2.2 GIN索引</a></li>
<li><a href="#部分索引" id="toc-部分索引"><span
class="toc-section-number">1.9.2.3</span> 2.3 部分索引</a></li>
</ul></li>
</ul></li>
<li><a href="#八opengauss数据安全设计"
id="toc-八opengauss数据安全设计"><span
class="toc-section-number">1.10</span> 八、OpenGauss数据安全设计</a>
<ul>
<li><a href="#内置安全特性" id="toc-内置安全特性"><span
class="toc-section-number">1.10.1</span> 1. 内置安全特性</a>
<ul>
<li><a href="#透明数据加密-tde" id="toc-透明数据加密-tde"><span
class="toc-section-number">1.10.1.1</span> 1.1 透明数据加密
(TDE)</a></li>
<li><a href="#行级安全策略-rls" id="toc-行级安全策略-rls"><span
class="toc-section-number">1.10.1.2</span> 1.2 行级安全策略
(RLS)</a></li>
<li><a href="#动态数据脱敏" id="toc-动态数据脱敏"><span
class="toc-section-number">1.10.1.3</span> 1.3 动态数据脱敏</a></li>
</ul></li>
<li><a href="#权限控制体系" id="toc-权限控制体系"><span
class="toc-section-number">1.10.2</span> 2. 权限控制体系</a>
<ul>
<li><a href="#角色权限设计" id="toc-角色权限设计"><span
class="toc-section-number">1.10.2.1</span> 2.1 角色权限设计</a></li>
<li><a href="#列级权限控制" id="toc-列级权限控制"><span
class="toc-section-number">1.10.2.2</span> 2.2 列级权限控制</a></li>
</ul></li>
<li><a href="#审计与监控" id="toc-审计与监控"><span
class="toc-section-number">1.10.3</span> 3. 审计与监控</a>
<ul>
<li><a href="#审计日志配置" id="toc-审计日志配置"><span
class="toc-section-number">1.10.3.1</span> 3.1 审计日志配置</a></li>
<li><a href="#敏感操作监控" id="toc-敏感操作监控"><span
class="toc-section-number">1.10.3.2</span> 3.2 敏感操作监控</a></li>
</ul></li>
<li><a href="#数据备份与灾备" id="toc-数据备份与灾备"><span
class="toc-section-number">1.10.4</span> 4. 数据备份与灾备</a>
<ul>
<li><a href="#opengauss备份策略" id="toc-opengauss备份策略"><span
class="toc-section-number">1.10.4.1</span> 4.1
OpenGauss备份策略</a></li>
<li><a href="#主备同步配置" id="toc-主备同步配置"><span
class="toc-section-number">1.10.4.2</span> 4.2 主备同步配置</a></li>
</ul></li>
<li><a href="#国产化安全合规" id="toc-国产化安全合规"><span
class="toc-section-number">1.10.5</span> 5. 国产化安全合规</a>
<ul>
<li><a href="#等保三级要求" id="toc-等保三级要求"><span
class="toc-section-number">1.10.5.1</span> 5.1 等保三级要求</a></li>
<li><a href="#国产化认证" id="toc-国产化认证"><span
class="toc-section-number">1.10.5.2</span> 5.2 国产化认证</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</nav>
<h1 data-number="1" id="福建水务营收系统数据库设计文档"><span
class="header-section-number">1</span>
福建水务营收系统数据库设计文档</h1>
<h2 data-number="1.1" id="文档信息"><span
class="header-section-number">1.1</span> 文档信息</h2>
<table>
<thead>
<tr>
<th>项目信息</th>
<th>详情</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>项目名称</strong></td>
<td>福建水务营收系统</td>
</tr>
<tr>
<td><strong>文档类型</strong></td>
<td>概要设计文档</td>
</tr>
<tr>
<td><strong>技术框架</strong></td>
<td>RuoYi-Vue-Pro + yudao-ui-admin-vue3</td>
</tr>
<tr>
<td><strong>文档版本</strong></td>
<td>v1.0</td>
</tr>
<tr>
<td><strong>编写日期</strong></td>
<td>2024-12-19</td>
</tr>
<tr>
<td><strong>文档状态</strong></td>
<td>✅ 已完成</td>
</tr>
</tbody>
</table>
<h2 data-number="1.2" id="目录"><span
class="header-section-number">1.2</span> 目录</h2>
<ul>
<li><a href="#一数据库设计概述">一、数据库设计概述</a></li>
<li><a href="#二数据库架构">二、数据库架构</a></li>
<li><a href="#三核心数据模型er图">三、核心数据模型ER图</a></li>
<li><a href="#四核心数据表设计">四、核心数据表设计</a></li>
<li><a href="#五完整ddl语句">五、完整DDL语句</a></li>
<li><a
href="#六opengauss数据库特性应用">六、OpenGauss数据库特性应用</a></li>
<li><a href="#七索引设计与优化">七、索引设计与优化</a></li>
<li><a
href="#八opengauss数据安全设计">八、OpenGauss数据安全设计</a></li>
</ul>
<h2 data-number="1.3" id="一数据库设计概述"><span
class="header-section-number">1.3</span> 一、数据库设计概述</h2>
<p>福建水务营收系统采用<strong>华为OpenGauss
5.0+</strong>数据库基于RuoYi-Vue-Pro框架规范设计。OpenGauss作为国产自主可控的企业级数据库具有高性能、高可用、高安全的特点完全满足水务行业对数据安全和国产化的要求。数据库架构支持多租户、高并发、高可用的业务需求为水务营收业务提供稳定可靠的数据存储服务。</p>
<h3 data-number="1.3.1" id="设计目标"><span
class="header-section-number">1.3.1</span> 1.1 设计目标</h3>
<ul>
<li>支持100万客户的业务量满足3-5年业务发展需求</li>
<li>支持200并发用户50并发移动设备</li>
<li>系统响应时间不超过3秒</li>
<li>数据安全等保三级要求</li>
<li>支持多租户数据隔离</li>
<li><strong>国产化要求</strong>:符合国产数据库替代要求</li>
</ul>
<h3 data-number="1.3.2" id="数据库选型优势"><span
class="header-section-number">1.3.2</span> 1.2 数据库选型优势</h3>
<ul>
<li><strong>国产自主可控</strong>华为OpenGauss是完全自主知识产权的数据库</li>
<li><strong>高性能</strong>优化的SQL引擎查询性能优于传统数据库20-30%</li>
<li><strong>高可用</strong>:支持主备同步、读写分离、故障自动切换</li>
<li><strong>安全可信</strong>:内置数据加密、审计、权限管控等安全特性</li>
<li><strong>生态兼容</strong>兼容PostgreSQL/MySQL协议迁移成本低</li>
</ul>
<h3 data-number="1.3.3" id="设计原则"><span
class="header-section-number">1.3.3</span> 1.3 设计原则</h3>
<ul>
<li><strong>标准化</strong>遵循OpenGauss数据库设计规范</li>
<li><strong>多租户</strong>基于tenant_id字段实现数据隔离</li>
<li><strong>可扩展</strong>:预留扩展字段,支持业务增长</li>
<li><strong>高性能</strong>:合理设计索引,优化查询性能</li>
<li><strong>安全性</strong>利用OpenGauss内置安全特性</li>
</ul>
<h2 data-number="1.4" id="二数据库架构"><span
class="header-section-number">1.4</span> 二、数据库架构</h2>
<h3 data-number="1.4.1" id="数据库架构图"><span
class="header-section-number">1.4.1</span> 1. 数据库架构图</h3>
<p><strong>图表 1</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_1.png"
alt="图表 1" />
<figcaption aria-hidden="true">图表 1</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>graph TB
subgraph &quot;应用层&quot;
APP[Water Biz Application&lt;br/&gt;RuoYi-Vue-Pro]
end
subgraph &quot;数据访问层&quot;
MP[MyBatis Plus&lt;br/&gt;ORM框架]
CACHE[Redis缓存&lt;br/&gt;热点数据]
end
subgraph &quot;数据存储层&quot;
subgraph &quot;OpenGauss主从集群&quot;
MASTER[(OpenGauss主库&lt;br/&gt;读写)]
SLAVE[(OpenGauss从库&lt;br/&gt;只读)]
end
subgraph &quot;业务数据库&quot;
DB_CUSTOMER[(客户数据库&lt;br/&gt;Customer DB)]
DB_BILLING[(营收数据库&lt;br/&gt;Billing DB)]
DB_METER[(表务数据库&lt;br/&gt;Meter DB)]
DB_SYSTEM[(系统数据库&lt;br/&gt;System DB)]
end
subgraph &quot;数据归档&quot;
DB_HISTORY[(历史数据库&lt;br/&gt;Archive DB)]
BACKUP[(备份存储&lt;br/&gt;Backup Storage)]
end
end
APP --&gt; MP
APP --&gt; CACHE
MP --&gt; MASTER
MASTER --&gt; SLAVE
MASTER --&gt; DB_CUSTOMER
MASTER --&gt; DB_BILLING
MASTER --&gt; DB_METER
MASTER --&gt; DB_SYSTEM
SLAVE --&gt; DB_HISTORY
MASTER --&gt; BACKUP
</code></pre>
</details>
<h3 data-number="1.4.2" id="多租户架构设计"><span
class="header-section-number">1.4.2</span> 2. 多租户架构设计</h3>
<p><strong>图表 2</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_2.png"
alt="图表 2" />
<figcaption aria-hidden="true">图表 2</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>graph TB
subgraph &quot;多租户数据隔离&quot;
TENANT1[租户1: 福建水务集团]
TENANT2[租户2: 厦门分公司]
TENANT3[租户3: 泉州分公司]
end
subgraph &quot;共享数据库&quot;
subgraph &quot;业务表结构&quot;
TABLE1[water_customer&lt;br/&gt;+ tenant_id]
TABLE2[water_meter&lt;br/&gt;+ tenant_id]
TABLE3[water_bill&lt;br/&gt;+ tenant_id]
TABLE4[water_payment&lt;br/&gt;+ tenant_id]
end
subgraph &quot;租户隔离机制&quot;
INTERCEPTOR[MyBatis Plus&lt;br/&gt;多租户拦截器]
FILTER[数据权限过滤器]
end
end
TENANT1 --&gt; INTERCEPTOR
TENANT2 --&gt; INTERCEPTOR
TENANT3 --&gt; INTERCEPTOR
INTERCEPTOR --&gt; FILTER
FILTER --&gt; TABLE1
FILTER --&gt; TABLE2
FILTER --&gt; TABLE3
FILTER --&gt; TABLE4
</code></pre>
</details>
<h3 data-number="1.4.3" id="通用字段设计"><span
class="header-section-number">1.4.3</span> 3. 通用字段设计</h3>
<p>所有业务表统一包含以下基础字段:</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>长度</th>
<th>默认值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>BIGINT</td>
<td>-</td>
<td>AUTO_INCREMENT</td>
<td>主键ID</td>
</tr>
<tr>
<td>tenant_id</td>
<td>BIGINT</td>
<td>-</td>
<td>0</td>
<td>租户ID(多租户隔离)</td>
</tr>
<tr>
<td>creator</td>
<td>VARCHAR</td>
<td>64</td>
<td></td>
<td>创建者</td>
</tr>
<tr>
<td>create_time</td>
<td>DATETIME</td>
<td>-</td>
<td>CURRENT_TIMESTAMP</td>
<td>创建时间</td>
</tr>
<tr>
<td>updater</td>
<td>VARCHAR</td>
<td>64</td>
<td></td>
<td>更新者</td>
</tr>
<tr>
<td>update_time</td>
<td>DATETIME</td>
<td>-</td>
<td>CURRENT_TIMESTAMP</td>
<td>更新时间</td>
</tr>
<tr>
<td>deleted</td>
<td>BIT</td>
<td>1</td>
<td>0</td>
<td>逻辑删除标识</td>
</tr>
</tbody>
</table>
<h2 data-number="1.5" id="三核心数据模型er图"><span
class="header-section-number">1.5</span> 三、核心数据模型ER图</h2>
<h3 data-number="1.5.1" id="客户管理模块er图"><span
class="header-section-number">1.5.1</span> 1. 客户管理模块ER图</h3>
<p><strong>图表 3</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_3.png"
alt="图表 3" />
<figcaption aria-hidden="true">图表 3</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
WATER_CUSTOMER {
bigint id PK &quot;主键ID&quot;
varchar customer_code UK &quot;客户编号&quot;
varchar customer_name &quot;客户名称&quot;
varchar customer_type &quot;客户类型&quot;
varchar id_type &quot;证件类型&quot;
varchar id_number &quot;证件号码&quot;
varchar phone &quot;联系电话&quot;
varchar address &quot;详细地址&quot;
varchar area_code &quot;行政区划代码&quot;
tinyint status &quot;状态&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_METER {
bigint id PK &quot;主键ID&quot;
varchar meter_code UK &quot;水表编号&quot;
varchar meter_no &quot;水表表号&quot;
varchar meter_type &quot;水表类型&quot;
varchar meter_model &quot;水表型号&quot;
varchar meter_caliber &quot;水表口径&quot;
date install_date &quot;安装日期&quot;
varchar install_position &quot;安装位置&quot;
decimal initial_reading &quot;初始读数&quot;
decimal current_reading &quot;当前读数&quot;
varchar reading_cycle &quot;抄表周期&quot;
varchar book_code &quot;册本编号&quot;
tinyint status &quot;状态&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_CUSTOMER_ACCOUNT {
bigint id PK &quot;主键ID&quot;
decimal balance &quot;账户余额&quot;
decimal credit_amount &quot;信用额度&quot;
date last_payment_date &quot;最近缴费日期&quot;
tinyint status &quot;账户状态&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_CUSTOMER ||--o{ WATER_METER : &quot;拥有&quot;
WATER_CUSTOMER ||--|| WATER_CUSTOMER_ACCOUNT : &quot;对应&quot;
</code></pre>
</details>
<h3 data-number="1.5.2" id="营收管理模块er图"><span
class="header-section-number">1.5.2</span> 2. 营收管理模块ER图</h3>
<p><strong>图表 4</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_4.png"
alt="图表 4" />
<figcaption aria-hidden="true">图表 4</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
WATER_METER_READING {
bigint id PK &quot;主键ID&quot;
varchar reading_code UK &quot;抄表记录编号&quot;
date reading_date &quot;抄表日期&quot;
decimal reading_value &quot;抄表读数&quot;
decimal prev_reading_value &quot;上次读数&quot;
decimal water_usage &quot;用水量&quot;
varchar reading_type &quot;抄表类型&quot;
varchar reader_id &quot;抄表员ID&quot;
varchar remark &quot;备注&quot;
tinyint status &quot;状态&quot;
bigint meter_id FK &quot;水表ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_BILL {
bigint id PK &quot;主键ID&quot;
varchar bill_code UK &quot;账单编号&quot;
varchar bill_month &quot;账期&quot;
decimal water_usage &quot;用水量&quot;
decimal water_fee &quot;水费金额&quot;
decimal sewage_fee &quot;污水处理费&quot;
decimal other_fee &quot;其他费用&quot;
decimal total_amount &quot;总金额&quot;
date due_date &quot;缴费截止日期&quot;
tinyint bill_status &quot;账单状态&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint meter_id FK &quot;水表ID&quot;
bigint reading_id FK &quot;抄表记录ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_PAYMENT {
bigint id PK &quot;主键ID&quot;
varchar payment_code UK &quot;缴费记录编号&quot;
varchar payment_type &quot;缴费类型&quot;
varchar payment_channel &quot;缴费渠道&quot;
decimal payment_amount &quot;缴费金额&quot;
datetime payment_time &quot;缴费时间&quot;
varchar transaction_no &quot;交易流水号&quot;
varchar operator_id &quot;操作员ID&quot;
varchar remark &quot;备注&quot;
tinyint payment_status &quot;缴费状态&quot;
bigint bill_id FK &quot;账单ID&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_METER_READING ||--|| WATER_BILL : &quot;生成&quot;
WATER_BILL ||--o{ WATER_PAYMENT : &quot;对应&quot;
</code></pre>
</details>
<h3 data-number="1.5.3" id="表务管理模块er图"><span
class="header-section-number">1.5.3</span> 3. 表务管理模块ER图</h3>
<p><strong>图表 5</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_5.png"
alt="图表 5" />
<figcaption aria-hidden="true">图表 5</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
WATER_METER_ARCHIVE {
bigint id PK &quot;主键ID&quot;
varchar archive_code UK &quot;档案编号&quot;
varchar manufacturer &quot;生产厂家&quot;
date production_date &quot;生产日期&quot;
int valid_period &quot;有效期(月)&quot;
date verification_date &quot;检定日期&quot;
date next_verification_date &quot;下次检定日期&quot;
varchar certificate_no &quot;检定证书号&quot;
tinyint archive_status &quot;档案状态&quot;
bigint meter_id FK &quot;水表ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_METER_WORKORDER {
bigint id PK &quot;主键ID&quot;
varchar workorder_code UK &quot;工单编号&quot;
varchar workorder_type &quot;工单类型&quot;
varchar workorder_status &quot;工单状态&quot;
date apply_date &quot;申请日期&quot;
date plan_date &quot;计划执行日期&quot;
date execute_date &quot;实际执行日期&quot;
varchar applicant_id &quot;申请人ID&quot;
varchar executor_id &quot;执行人ID&quot;
varchar reason &quot;申请原因&quot;
varchar result &quot;执行结果&quot;
bigint meter_id FK &quot;水表ID&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_METER_STOCK {
bigint id PK &quot;主键ID&quot;
varchar stock_code UK &quot;库存编号&quot;
varchar warehouse_code &quot;仓库编码&quot;
varchar warehouse_name &quot;仓库名称&quot;
int stock_quantity &quot;库存数量&quot;
int min_stock &quot;最小库存&quot;
int max_stock &quot;最大库存&quot;
varchar meter_model &quot;水表型号&quot;
varchar meter_caliber &quot;水表口径&quot;
tinyint stock_status &quot;库存状态&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
WATER_METER ||--|| WATER_METER_ARCHIVE : &quot;对应&quot;
WATER_METER ||--o{ WATER_METER_WORKORDER : &quot;产生&quot;
</code></pre>
</details>
<h3 data-number="1.5.4" id="系统管理模块er图"><span
class="header-section-number">1.5.4</span> 4. 系统管理模块ER图</h3>
<p><strong>图表 6</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_6.png"
alt="图表 6" />
<figcaption aria-hidden="true">图表 6</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
SYSTEM_TENANT {
bigint id PK &quot;主键ID&quot;
varchar tenant_name &quot;租户名称&quot;
varchar tenant_code UK &quot;租户编码&quot;
varchar contact_name &quot;联系人&quot;
varchar contact_phone &quot;联系电话&quot;
varchar contact_email &quot;联系邮箱&quot;
tinyint tenant_status &quot;租户状态&quot;
datetime expire_time &quot;过期时间&quot;
varchar domain &quot;域名&quot;
varchar package_name &quot;套餐名称&quot;
int user_count &quot;用户数量&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
SYSTEM_USERS {
bigint id PK &quot;主键ID&quot;
varchar username UK &quot;用户名&quot;
varchar password &quot;密码&quot;
varchar nickname &quot;昵称&quot;
varchar remark &quot;备注&quot;
varchar dept_id &quot;部门ID&quot;
varchar post_ids &quot;岗位ID列表&quot;
varchar email &quot;邮箱&quot;
varchar mobile &quot;手机号&quot;
tinyint sex &quot;性别&quot;
varchar avatar &quot;头像&quot;
tinyint status &quot;状态&quot;
datetime login_date &quot;最后登录时间&quot;
varchar login_ip &quot;最后登录IP&quot;
bigint tenant_id &quot;租户ID&quot;
varchar creator &quot;创建者&quot;
datetime create_time &quot;创建时间&quot;
varchar updater &quot;更新者&quot;
datetime update_time &quot;更新时间&quot;
tinyint deleted &quot;是否删除&quot;
}
SYSTEM_TENANT ||--o{ SYSTEM_USERS : &quot;包含&quot;
</code></pre>
</details>
<h2 data-number="1.6" id="四核心数据表设计"><span
class="header-section-number">1.6</span> 四、核心数据表设计</h2>
<h3 data-number="1.6.1" id="表务管理模块er图-1"><span
class="header-section-number">1.6.1</span> 1. 表务管理模块ER图</h3>
<p><strong>图表 7</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_7.png"
alt="图表 7" />
<figcaption aria-hidden="true">图表 7</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
WATER_METER_WORKORDER {
bigint id PK &quot;主键ID&quot;
varchar workorder_code UK &quot;工单编号&quot;
varchar workorder_type &quot;工单类型&quot;
varchar workorder_status &quot;工单状态&quot;
date apply_date &quot;申请日期&quot;
date plan_date &quot;计划执行日期&quot;
date execute_date &quot;实际执行日期&quot;
varchar applicant_id &quot;申请人ID&quot;
varchar executor_id &quot;执行人ID&quot;
varchar reason &quot;申请原因&quot;
varchar result &quot;执行结果&quot;
bigint meter_id FK &quot;水表ID&quot;
bigint customer_id FK &quot;客户ID&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_METER_STOCK {
bigint id PK &quot;主键ID&quot;
varchar stock_code UK &quot;库存编号&quot;
varchar meter_brand &quot;水表品牌&quot;
varchar meter_model &quot;水表型号&quot;
varchar meter_caliber &quot;水表口径&quot;
int stock_quantity &quot;库存数量&quot;
int min_stock &quot;最小库存&quot;
decimal unit_price &quot;单价&quot;
varchar warehouse_location &quot;仓库位置&quot;
tinyint stock_status &quot;库存状态&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_METER_INVENTORY {
bigint id PK &quot;主键ID&quot;
varchar inventory_code UK &quot;出入库编号&quot;
varchar inventory_type &quot;出入库类型&quot;
int quantity &quot;数量&quot;
decimal unit_price &quot;单价&quot;
decimal total_amount &quot;总金额&quot;
varchar operator_id &quot;操作员ID&quot;
datetime operation_time &quot;操作时间&quot;
varchar remark &quot;备注&quot;
bigint stock_id FK &quot;库存ID&quot;
bigint workorder_id FK &quot;工单ID&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_METER ||--o{ WATER_METER_WORKORDER : &quot;生成&quot;
WATER_METER_STOCK ||--o{ WATER_METER_INVENTORY : &quot;出入库&quot;
WATER_METER_WORKORDER ||--o{ WATER_METER_INVENTORY : &quot;关联&quot;
</code></pre>
</details>
<h3 data-number="1.6.2" id="系统管理模块er图-1"><span
class="header-section-number">1.6.2</span> 2. 系统管理模块ER图</h3>
<p><strong>图表 8</strong></p>
<figure>
<img src="temp_mermaid_water_biz_database_design_6403/diagram_8.png"
alt="图表 8" />
<figcaption aria-hidden="true">图表 8</figcaption>
</figure>
<details>
<summary>
查看图表源码
</summary>
<pre class="mermaid"><code>erDiagram
WATER_DICT_TYPE {
bigint id PK &quot;主键ID&quot;
varchar dict_name &quot;字典名称&quot;
varchar dict_type UK &quot;字典类型&quot;
varchar remark &quot;备注&quot;
tinyint status &quot;状态&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_DICT_DATA {
bigint id PK &quot;主键ID&quot;
varchar dict_type &quot;字典类型&quot;
varchar dict_label &quot;字典标签&quot;
varchar dict_value &quot;字典键值&quot;
int dict_sort &quot;字典排序&quot;
varchar color_type &quot;颜色类型&quot;
varchar css_class &quot;CSS类名&quot;
varchar remark &quot;备注&quot;
tinyint status &quot;状态&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_CONFIG {
bigint id PK &quot;主键ID&quot;
varchar config_name &quot;参数名称&quot;
varchar config_key UK &quot;参数键名&quot;
varchar config_value &quot;参数键值&quot;
varchar config_type &quot;系统内置&quot;
varchar remark &quot;备注&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_PRICE_CONFIG {
bigint id PK &quot;主键ID&quot;
varchar price_name &quot;水价名称&quot;
varchar customer_type &quot;客户类型&quot;
varchar price_type &quot;价格类型&quot;
decimal base_price &quot;基础价格&quot;
decimal sewage_price &quot;污水处理费&quot;
decimal garbage_price &quot;垃圾处理费&quot;
date effective_date &quot;生效日期&quot;
date expire_date &quot;失效日期&quot;
tinyint status &quot;状态&quot;
bigint tenant_id &quot;租户ID&quot;
}
WATER_DICT_TYPE ||--o{ WATER_DICT_DATA : &quot;包含&quot;
</code></pre>
</details>
<h2 data-number="1.7" id="五完整ddl语句"><span
class="header-section-number">1.7</span> 五、完整DDL语句</h2>
<h3 data-number="1.7.1" id="客户管理相关表ddl"><span
class="header-section-number">1.7.1</span> 1. 客户管理相关表DDL</h3>
<h4 data-number="1.7.1.1" id="客户基本信息表"><span
class="header-section-number">1.7.1.1</span> 1.1 客户基本信息表</h4>
<div class="sourceCode" id="cb9"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_customer` (</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a> `customer_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户编号&#39;</span>,</span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a> `customer_name` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户名称&#39;</span>,</span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a> `customer_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户类型(居民:RESIDENT,非居民:NON_RESIDENT,工业:INDUSTRIAL,行政:ADMINISTRATIVE)&#39;</span>,</span>
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a> `id_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;证件类型(身份证:ID_CARD,营业执照:BUSINESS_LICENSE)&#39;</span>,</span>
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a> `id_number` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;证件号码&#39;</span>,</span>
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a> `phone` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;联系电话&#39;</span>,</span>
<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a> `mobile` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;手机号码&#39;</span>,</span>
<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a> `email` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;邮箱&#39;</span>,</span>
<span id="cb9-11"><a href="#cb9-11" aria-hidden="true" tabindex="-1"></a> `address` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;详细地址&#39;</span>,</span>
<span id="cb9-12"><a href="#cb9-12" aria-hidden="true" tabindex="-1"></a> `area_code` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;行政区划代码&#39;</span>,</span>
<span id="cb9-13"><a href="#cb9-13" aria-hidden="true" tabindex="-1"></a> `postal_code` <span class="dt">varchar</span>(<span class="dv">10</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;邮政编码&#39;</span>,</span>
<span id="cb9-14"><a href="#cb9-14" aria-hidden="true" tabindex="-1"></a> `contact_person` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;联系人&#39;</span>,</span>
<span id="cb9-15"><a href="#cb9-15" aria-hidden="true" tabindex="-1"></a> `bank_account` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;银行账户&#39;</span>,</span>
<span id="cb9-16"><a href="#cb9-16" aria-hidden="true" tabindex="-1"></a> `bank_name` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;开户银行&#39;</span>,</span>
<span id="cb9-17"><a href="#cb9-17" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注信息&#39;</span>,</span>
<span id="cb9-18"><a href="#cb9-18" aria-hidden="true" tabindex="-1"></a> `status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;状态(0:停用,1:正常,2:欠费,3:销户)&#39;</span>,</span>
<span id="cb9-19"><a href="#cb9-19" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb9-20"><a href="#cb9-20" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb9-21"><a href="#cb9-21" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb9-22"><a href="#cb9-22" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb9-23"><a href="#cb9-23" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb9-24"><a href="#cb9-24" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb9-25"><a href="#cb9-25" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb9-26"><a href="#cb9-26" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_customer_code` (`customer_code`, `tenant_id`),</span>
<span id="cb9-27"><a href="#cb9-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_name` (`customer_name`),</span>
<span id="cb9-28"><a href="#cb9-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_phone` (`phone`),</span>
<span id="cb9-29"><a href="#cb9-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_id_number` (`id_number`),</span>
<span id="cb9-30"><a href="#cb9-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_customer_type` (`tenant_id`, `customer_type`),</span>
<span id="cb9-31"><a href="#cb9-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_status` (`status`),</span>
<span id="cb9-32"><a href="#cb9-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_create_time` (`create_time`)</span>
<span id="cb9-33"><a href="#cb9-33" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;客户基本信息表&#39;</span>;</span></code></pre></div>
<h4 data-number="1.7.1.2" id="水表信息表"><span
class="header-section-number">1.7.1.2</span> 1.2 水表信息表</h4>
<div class="sourceCode" id="cb10"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter` (</span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a> `meter_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表编号&#39;</span>,</span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a> `meter_no` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表表号&#39;</span>,</span>
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a> `meter_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表类型(机械:MECHANICAL,智能:SMART,远传:REMOTE)&#39;</span>,</span>
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true" tabindex="-1"></a> `meter_model` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表型号&#39;</span>,</span>
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true" tabindex="-1"></a> `meter_caliber` <span class="dt">varchar</span>(<span class="dv">10</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表口径(15mm,20mm,25mm等)&#39;</span>,</span>
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true" tabindex="-1"></a> `manufacturer` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产厂家&#39;</span>,</span>
<span id="cb10-9"><a href="#cb10-9" aria-hidden="true" tabindex="-1"></a> `production_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产日期&#39;</span>,</span>
<span id="cb10-10"><a href="#cb10-10" aria-hidden="true" tabindex="-1"></a> `install_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;安装日期&#39;</span>,</span>
<span id="cb10-11"><a href="#cb10-11" aria-hidden="true" tabindex="-1"></a> `install_position` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;安装位置&#39;</span>,</span>
<span id="cb10-12"><a href="#cb10-12" aria-hidden="true" tabindex="-1"></a> `longitude` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">7</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;经度&#39;</span>,</span>
<span id="cb10-13"><a href="#cb10-13" aria-hidden="true" tabindex="-1"></a> `latitude` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">7</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;纬度&#39;</span>,</span>
<span id="cb10-14"><a href="#cb10-14" aria-hidden="true" tabindex="-1"></a> `initial_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;初始读数&#39;</span>,</span>
<span id="cb10-15"><a href="#cb10-15" aria-hidden="true" tabindex="-1"></a> `current_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;当前读数&#39;</span>,</span>
<span id="cb10-16"><a href="#cb10-16" aria-hidden="true" tabindex="-1"></a> `reading_cycle` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;MONTHLY&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表周期(月度:MONTHLY,双月:BIMONTHLY,季度:QUARTERLY)&#39;</span>,</span>
<span id="cb10-17"><a href="#cb10-17" aria-hidden="true" tabindex="-1"></a> `book_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;册本编号&#39;</span>,</span>
<span id="cb10-18"><a href="#cb10-18" aria-hidden="true" tabindex="-1"></a> `reading_route` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表路线&#39;</span>,</span>
<span id="cb10-19"><a href="#cb10-19" aria-hidden="true" tabindex="-1"></a> `meter_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表状态(0:停用,1:正常,2:故障,3:拆除)&#39;</span>,</span>
<span id="cb10-20"><a href="#cb10-20" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb10-21"><a href="#cb10-21" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb10-22"><a href="#cb10-22" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb10-23"><a href="#cb10-23" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb10-24"><a href="#cb10-24" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb10-25"><a href="#cb10-25" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb10-26"><a href="#cb10-26" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb10-27"><a href="#cb10-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb10-28"><a href="#cb10-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_meter_code` (`meter_code`, `tenant_id`),</span>
<span id="cb10-29"><a href="#cb10-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_no` (`meter_no`),</span>
<span id="cb10-30"><a href="#cb10-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_id` (`customer_id`),</span>
<span id="cb10-31"><a href="#cb10-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_book_code` (`book_code`),</span>
<span id="cb10-32"><a href="#cb10-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_type` (`meter_type`),</span>
<span id="cb10-33"><a href="#cb10-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_status` (`meter_status`),</span>
<span id="cb10-34"><a href="#cb10-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_status` (`tenant_id`, `meter_status`),</span>
<span id="cb10-35"><a href="#cb10-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_meter_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`)</span>
<span id="cb10-36"><a href="#cb10-36" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;水表信息表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.2" id="表务工单管理表ddl"><span
class="header-section-number">1.7.2</span> 3. 表务工单管理表DDL</h3>
<h4 data-number="1.7.2.1" id="表务工单表"><span
class="header-section-number">1.7.2.1</span> 3.1 表务工单表</h4>
<div class="sourceCode" id="cb11"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter_workorder` (</span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a> `workorder_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;工单编号&#39;</span>,</span>
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a> `workorder_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;工单类型(换表:CHANGE,移表:MOVE,拆表:REMOVE,装表:INSTALL,维修:REPAIR)&#39;</span>,</span>
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a> `workorder_status` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;PENDING&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;工单状态(待处理:PENDING,执行中:PROCESSING,已完成:COMPLETED,已取消:CANCELLED)&#39;</span>,</span>
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a> `apply_date` <span class="dt">date</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;申请日期&#39;</span>,</span>
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a> `plan_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;计划执行日期&#39;</span>,</span>
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a> `execute_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;实际执行日期&#39;</span>,</span>
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a> `applicant_id` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;申请人ID&#39;</span>,</span>
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a> `applicant_name` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;申请人姓名&#39;</span>,</span>
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a> `executor_id` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;执行人ID&#39;</span>,</span>
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a> `executor_name` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;执行人姓名&#39;</span>,</span>
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true" tabindex="-1"></a> `reason` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;申请原因&#39;</span>,</span>
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true" tabindex="-1"></a> `result` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;执行结果&#39;</span>,</span>
<span id="cb11-15"><a href="#cb11-15" aria-hidden="true" tabindex="-1"></a> `old_meter_no` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;旧水表表号&#39;</span>,</span>
<span id="cb11-16"><a href="#cb11-16" aria-hidden="true" tabindex="-1"></a> `new_meter_no` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;新水表表号&#39;</span>,</span>
<span id="cb11-17"><a href="#cb11-17" aria-hidden="true" tabindex="-1"></a> `old_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;旧表读数&#39;</span>,</span>
<span id="cb11-18"><a href="#cb11-18" aria-hidden="true" tabindex="-1"></a> `new_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;新表读数&#39;</span>,</span>
<span id="cb11-19"><a href="#cb11-19" aria-hidden="true" tabindex="-1"></a> `cost_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;费用金额&#39;</span>,</span>
<span id="cb11-20"><a href="#cb11-20" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb11-21"><a href="#cb11-21" aria-hidden="true" tabindex="-1"></a> `meter_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表ID&#39;</span>,</span>
<span id="cb11-22"><a href="#cb11-22" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb11-23"><a href="#cb11-23" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb11-24"><a href="#cb11-24" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb11-25"><a href="#cb11-25" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb11-26"><a href="#cb11-26" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb11-27"><a href="#cb11-27" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb11-28"><a href="#cb11-28" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb11-29"><a href="#cb11-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb11-30"><a href="#cb11-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_workorder_code` (`workorder_code`, `tenant_id`),</span>
<span id="cb11-31"><a href="#cb11-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_workorder_type` (`workorder_type`),</span>
<span id="cb11-32"><a href="#cb11-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_workorder_status` (`workorder_status`),</span>
<span id="cb11-33"><a href="#cb11-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_apply_date` (`apply_date`),</span>
<span id="cb11-34"><a href="#cb11-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_id` (`meter_id`),</span>
<span id="cb11-35"><a href="#cb11-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_id` (`customer_id`),</span>
<span id="cb11-36"><a href="#cb11-36" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_type_status` (`tenant_id`, `workorder_type`, `workorder_status`),</span>
<span id="cb11-37"><a href="#cb11-37" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_workorder_meter` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`meter_id`) <span class="kw">REFERENCES</span> `water_meter` (`id`),</span>
<span id="cb11-38"><a href="#cb11-38" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_workorder_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`)</span>
<span id="cb11-39"><a href="#cb11-39" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;表务工单表&#39;</span>;</span></code></pre></div>
<h4 data-number="1.7.2.2" id="水表库存管理表"><span
class="header-section-number">1.7.2.2</span> 3.2 水表库存管理表</h4>
<div class="sourceCode" id="cb12"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter_stock` (</span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a> `stock_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;库存编号&#39;</span>,</span>
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a> `meter_brand` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表品牌&#39;</span>,</span>
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a> `meter_model` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表型号&#39;</span>,</span>
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a> `meter_caliber` <span class="dt">varchar</span>(<span class="dv">10</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表口径&#39;</span>,</span>
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a> `meter_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表类型&#39;</span>,</span>
<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a> `stock_quantity` <span class="dt">int</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;库存数量&#39;</span>,</span>
<span id="cb12-9"><a href="#cb12-9" aria-hidden="true" tabindex="-1"></a> `min_stock` <span class="dt">int</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;最小库存&#39;</span>,</span>
<span id="cb12-10"><a href="#cb12-10" aria-hidden="true" tabindex="-1"></a> `max_stock` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;最大库存&#39;</span>,</span>
<span id="cb12-11"><a href="#cb12-11" aria-hidden="true" tabindex="-1"></a> `unit_price` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;单价&#39;</span>,</span>
<span id="cb12-12"><a href="#cb12-12" aria-hidden="true" tabindex="-1"></a> `warehouse_location` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;仓库位置&#39;</span>,</span>
<span id="cb12-13"><a href="#cb12-13" aria-hidden="true" tabindex="-1"></a> `supplier` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;供应商&#39;</span>,</span>
<span id="cb12-14"><a href="#cb12-14" aria-hidden="true" tabindex="-1"></a> `purchase_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;进货日期&#39;</span>,</span>
<span id="cb12-15"><a href="#cb12-15" aria-hidden="true" tabindex="-1"></a> `warranty_period` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="st">&#39;24&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;质保期(月)&#39;</span>,</span>
<span id="cb12-16"><a href="#cb12-16" aria-hidden="true" tabindex="-1"></a> `stock_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;库存状态(0:停用,1:正常,2:缺货,3:超储)&#39;</span>,</span>
<span id="cb12-17"><a href="#cb12-17" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb12-18"><a href="#cb12-18" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb12-19"><a href="#cb12-19" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb12-20"><a href="#cb12-20" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb12-21"><a href="#cb12-21" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb12-22"><a href="#cb12-22" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb12-23"><a href="#cb12-23" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb12-24"><a href="#cb12-24" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb12-25"><a href="#cb12-25" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_stock_code` (`stock_code`, `tenant_id`),</span>
<span id="cb12-26"><a href="#cb12-26" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_brand` (`meter_brand`),</span>
<span id="cb12-27"><a href="#cb12-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_model` (`meter_model`),</span>
<span id="cb12-28"><a href="#cb12-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_caliber` (`meter_caliber`),</span>
<span id="cb12-29"><a href="#cb12-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_stock_status` (`stock_status`),</span>
<span id="cb12-30"><a href="#cb12-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_brand_model` (`tenant_id`, `meter_brand`, `meter_model`)</span>
<span id="cb12-31"><a href="#cb12-31" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;水表库存管理表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.3" id="系统管理相关表ddl"><span
class="header-section-number">1.7.3</span> 4. 系统管理相关表DDL</h3>
<h4 data-number="1.7.3.1" id="数据字典类型表"><span
class="header-section-number">1.7.3.1</span> 4.1 数据字典类型表</h4>
<div class="sourceCode" id="cb13"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_dict_type` (</span>
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a> `dict_name` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典名称&#39;</span>,</span>
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a> `dict_type` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典类型&#39;</span>,</span>
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true" tabindex="-1"></a> `status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;状态(0:停用,1:正常)&#39;</span>,</span>
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb13-8"><a href="#cb13-8" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb13-9"><a href="#cb13-9" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb13-10"><a href="#cb13-10" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb13-11"><a href="#cb13-11" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb13-12"><a href="#cb13-12" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb13-13"><a href="#cb13-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb13-14"><a href="#cb13-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_dict_type` (`dict_type`, `tenant_id`),</span>
<span id="cb13-15"><a href="#cb13-15" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_status` (`status`)</span>
<span id="cb13-16"><a href="#cb13-16" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;数据字典类型表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.4" id="完整ddl语句列表"><span
class="header-section-number">1.7.4</span> 5. 完整DDL语句列表</h3>
<h4 data-number="1.7.4.1" id="客户基本信息表-opengauss版本"><span
class="header-section-number">1.7.4.1</span> 5.1 客户基本信息表
(OpenGauss版本)</h4>
<div class="sourceCode" id="cb14"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- OpenGauss数据库DDL语句</span></span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> water_customer (</span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">id</span> SERIAL <span class="kw">PRIMARY</span> <span class="kw">KEY</span>,</span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a> customer_code <span class="dt">VARCHAR</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a> customer_name <span class="dt">VARCHAR</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a> customer_type <span class="dt">VARCHAR</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">CHECK</span> (customer_type <span class="kw">IN</span> (<span class="st">&#39;RESIDENT&#39;</span>,<span class="st">&#39;NON_RESIDENT&#39;</span>,<span class="st">&#39;INDUSTRIAL&#39;</span>,<span class="st">&#39;ADMINISTRATIVE&#39;</span>)),</span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a> id_type <span class="dt">VARCHAR</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">CHECK</span> (id_type <span class="kw">IN</span> (<span class="st">&#39;ID_CARD&#39;</span>,<span class="st">&#39;BUSINESS_LICENSE&#39;</span>) <span class="kw">OR</span> id_type <span class="kw">IS</span> <span class="kw">NULL</span>),</span>
<span id="cb14-8"><a href="#cb14-8" aria-hidden="true" tabindex="-1"></a> id_number <span class="dt">VARCHAR</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-9"><a href="#cb14-9" aria-hidden="true" tabindex="-1"></a> phone <span class="dt">VARCHAR</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-10"><a href="#cb14-10" aria-hidden="true" tabindex="-1"></a> mobile <span class="dt">VARCHAR</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-11"><a href="#cb14-11" aria-hidden="true" tabindex="-1"></a> email <span class="dt">VARCHAR</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-12"><a href="#cb14-12" aria-hidden="true" tabindex="-1"></a> address <span class="dt">VARCHAR</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-13"><a href="#cb14-13" aria-hidden="true" tabindex="-1"></a> area_code <span class="dt">VARCHAR</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-14"><a href="#cb14-14" aria-hidden="true" tabindex="-1"></a> postal_code <span class="dt">VARCHAR</span>(<span class="dv">10</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-15"><a href="#cb14-15" aria-hidden="true" tabindex="-1"></a> contact_person <span class="dt">VARCHAR</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-16"><a href="#cb14-16" aria-hidden="true" tabindex="-1"></a> bank_account <span class="dt">VARCHAR</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-17"><a href="#cb14-17" aria-hidden="true" tabindex="-1"></a> bank_name <span class="dt">VARCHAR</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-18"><a href="#cb14-18" aria-hidden="true" tabindex="-1"></a> remark <span class="dt">VARCHAR</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span>,</span>
<span id="cb14-19"><a href="#cb14-19" aria-hidden="true" tabindex="-1"></a> status <span class="dt">SMALLINT</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="dv">1</span> <span class="kw">CHECK</span> (status <span class="kw">IN</span> (<span class="dv">0</span>,<span class="dv">1</span>,<span class="dv">2</span>,<span class="dv">3</span>)),</span>
<span id="cb14-20"><a href="#cb14-20" aria-hidden="true" tabindex="-1"></a> tenant_id BIGINT <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="dv">0</span>,</span>
<span id="cb14-21"><a href="#cb14-21" aria-hidden="true" tabindex="-1"></a> creator <span class="dt">VARCHAR</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span>,</span>
<span id="cb14-22"><a href="#cb14-22" aria-hidden="true" tabindex="-1"></a> create_time <span class="dt">TIMESTAMP</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span>,</span>
<span id="cb14-23"><a href="#cb14-23" aria-hidden="true" tabindex="-1"></a> updater <span class="dt">VARCHAR</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span>,</span>
<span id="cb14-24"><a href="#cb14-24" aria-hidden="true" tabindex="-1"></a> update_time <span class="dt">TIMESTAMP</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span>,</span>
<span id="cb14-25"><a href="#cb14-25" aria-hidden="true" tabindex="-1"></a> deleted <span class="dt">BOOLEAN</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="kw">FALSE</span></span>
<span id="cb14-26"><a href="#cb14-26" aria-hidden="true" tabindex="-1"></a>);</span>
<span id="cb14-27"><a href="#cb14-27" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-28"><a href="#cb14-28" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建注释</span></span>
<span id="cb14-29"><a href="#cb14-29" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">TABLE</span> water_customer <span class="kw">IS</span> <span class="st">&#39;客户基本信息表&#39;</span>;</span>
<span id="cb14-30"><a href="#cb14-30" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.<span class="kw">id</span> <span class="kw">IS</span> <span class="st">&#39;主键ID&#39;</span>;</span>
<span id="cb14-31"><a href="#cb14-31" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.customer_code <span class="kw">IS</span> <span class="st">&#39;客户编号&#39;</span>;</span>
<span id="cb14-32"><a href="#cb14-32" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.customer_name <span class="kw">IS</span> <span class="st">&#39;客户名称&#39;</span>;</span>
<span id="cb14-33"><a href="#cb14-33" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.customer_type <span class="kw">IS</span> <span class="st">&#39;客户类型(居民:RESIDENT,非居民:NON_RESIDENT,工业:INDUSTRIAL,行政:ADMINISTRATIVE)&#39;</span>;</span>
<span id="cb14-34"><a href="#cb14-34" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.id_type <span class="kw">IS</span> <span class="st">&#39;证件类型(身份证:ID_CARD,营业执照:BUSINESS_LICENSE)&#39;</span>;</span>
<span id="cb14-35"><a href="#cb14-35" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.id_number <span class="kw">IS</span> <span class="st">&#39;证件号码&#39;</span>;</span>
<span id="cb14-36"><a href="#cb14-36" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.phone <span class="kw">IS</span> <span class="st">&#39;联系电话&#39;</span>;</span>
<span id="cb14-37"><a href="#cb14-37" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.mobile <span class="kw">IS</span> <span class="st">&#39;手机号码&#39;</span>;</span>
<span id="cb14-38"><a href="#cb14-38" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.email <span class="kw">IS</span> <span class="st">&#39;邮箱&#39;</span>;</span>
<span id="cb14-39"><a href="#cb14-39" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.address <span class="kw">IS</span> <span class="st">&#39;详细地址&#39;</span>;</span>
<span id="cb14-40"><a href="#cb14-40" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.area_code <span class="kw">IS</span> <span class="st">&#39;行政区划代码&#39;</span>;</span>
<span id="cb14-41"><a href="#cb14-41" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.postal_code <span class="kw">IS</span> <span class="st">&#39;邮政编码&#39;</span>;</span>
<span id="cb14-42"><a href="#cb14-42" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.contact_person <span class="kw">IS</span> <span class="st">&#39;联系人&#39;</span>;</span>
<span id="cb14-43"><a href="#cb14-43" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.bank_account <span class="kw">IS</span> <span class="st">&#39;银行账户&#39;</span>;</span>
<span id="cb14-44"><a href="#cb14-44" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.bank_name <span class="kw">IS</span> <span class="st">&#39;开户银行&#39;</span>;</span>
<span id="cb14-45"><a href="#cb14-45" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.remark <span class="kw">IS</span> <span class="st">&#39;备注信息&#39;</span>;</span>
<span id="cb14-46"><a href="#cb14-46" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.status <span class="kw">IS</span> <span class="st">&#39;状态(0:停用,1:正常,2:欠费,3:销户)&#39;</span>;</span>
<span id="cb14-47"><a href="#cb14-47" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.tenant_id <span class="kw">IS</span> <span class="st">&#39;租户ID&#39;</span>;</span>
<span id="cb14-48"><a href="#cb14-48" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.creator <span class="kw">IS</span> <span class="st">&#39;创建者&#39;</span>;</span>
<span id="cb14-49"><a href="#cb14-49" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.create_time <span class="kw">IS</span> <span class="st">&#39;创建时间&#39;</span>;</span>
<span id="cb14-50"><a href="#cb14-50" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.updater <span class="kw">IS</span> <span class="st">&#39;更新者&#39;</span>;</span>
<span id="cb14-51"><a href="#cb14-51" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.update_time <span class="kw">IS</span> <span class="st">&#39;更新时间&#39;</span>;</span>
<span id="cb14-52"><a href="#cb14-52" aria-hidden="true" tabindex="-1"></a><span class="kw">COMMENT</span> <span class="kw">ON</span> <span class="kw">COLUMN</span> water_customer.deleted <span class="kw">IS</span> <span class="st">&#39;是否删除&#39;</span>;</span>
<span id="cb14-53"><a href="#cb14-53" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-54"><a href="#cb14-54" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建索引</span></span>
<span id="cb14-55"><a href="#cb14-55" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">UNIQUE</span> <span class="kw">INDEX</span> uk_customer_code <span class="kw">ON</span> water_customer (customer_code, tenant_id);</span>
<span id="cb14-56"><a href="#cb14-56" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_customer_name <span class="kw">ON</span> water_customer (customer_name);</span>
<span id="cb14-57"><a href="#cb14-57" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_phone <span class="kw">ON</span> water_customer (phone);</span>
<span id="cb14-58"><a href="#cb14-58" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_id_number <span class="kw">ON</span> water_customer (id_number);</span>
<span id="cb14-59"><a href="#cb14-59" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_tenant_customer_type <span class="kw">ON</span> water_customer (tenant_id, customer_type);</span>
<span id="cb14-60"><a href="#cb14-60" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_status <span class="kw">ON</span> water_customer (status);</span>
<span id="cb14-61"><a href="#cb14-61" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_create_time <span class="kw">ON</span> water_customer (create_time);</span>
<span id="cb14-62"><a href="#cb14-62" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-63"><a href="#cb14-63" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建更新时间触发器</span></span>
<span id="cb14-64"><a href="#cb14-64" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">OR</span> <span class="kw">REPLACE</span> <span class="kw">FUNCTION</span> update_timestamp()</span>
<span id="cb14-65"><a href="#cb14-65" aria-hidden="true" tabindex="-1"></a>RETURNS <span class="kw">TRIGGER</span> <span class="kw">AS</span> $$</span>
<span id="cb14-66"><a href="#cb14-66" aria-hidden="true" tabindex="-1"></a><span class="cf">BEGIN</span></span>
<span id="cb14-67"><a href="#cb14-67" aria-hidden="true" tabindex="-1"></a> <span class="kw">NEW</span>.update_time <span class="op">=</span> <span class="fu">CURRENT_TIMESTAMP</span>;</span>
<span id="cb14-68"><a href="#cb14-68" aria-hidden="true" tabindex="-1"></a> <span class="kw">RETURN</span> <span class="kw">NEW</span>;</span>
<span id="cb14-69"><a href="#cb14-69" aria-hidden="true" tabindex="-1"></a><span class="cf">END</span>;</span>
<span id="cb14-70"><a href="#cb14-70" aria-hidden="true" tabindex="-1"></a>$$ LANGUAGE plpgsql;</span>
<span id="cb14-71"><a href="#cb14-71" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb14-72"><a href="#cb14-72" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TRIGGER</span> water_customer_update_timestamp</span>
<span id="cb14-73"><a href="#cb14-73" aria-hidden="true" tabindex="-1"></a> <span class="kw">BEFORE</span> <span class="kw">UPDATE</span> <span class="kw">ON</span> water_customer</span>
<span id="cb14-74"><a href="#cb14-74" aria-hidden="true" tabindex="-1"></a> <span class="cf">FOR</span> <span class="kw">EACH</span> <span class="kw">ROW</span></span>
<span id="cb14-75"><a href="#cb14-75" aria-hidden="true" tabindex="-1"></a> <span class="kw">EXECUTE</span> <span class="kw">FUNCTION</span> update_timestamp();</span></code></pre></div>
<h4 data-number="1.7.4.2" id="水表信息表-1"><span
class="header-section-number">1.7.4.2</span> 1.2 水表信息表</h4>
<div class="sourceCode" id="cb15"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter` (</span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a> `meter_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表编号&#39;</span>,</span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a> `meter_no` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表表号&#39;</span>,</span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a> `meter_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表类型(机械:MECHANICAL,智能:SMART,远传:REMOTE)&#39;</span>,</span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a> `meter_model` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表型号&#39;</span>,</span>
<span id="cb15-7"><a href="#cb15-7" aria-hidden="true" tabindex="-1"></a> `meter_caliber` <span class="dt">varchar</span>(<span class="dv">10</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表口径(15mm,20mm,25mm等)&#39;</span>,</span>
<span id="cb15-8"><a href="#cb15-8" aria-hidden="true" tabindex="-1"></a> `manufacturer` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产厂家&#39;</span>,</span>
<span id="cb15-9"><a href="#cb15-9" aria-hidden="true" tabindex="-1"></a> `production_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产日期&#39;</span>,</span>
<span id="cb15-10"><a href="#cb15-10" aria-hidden="true" tabindex="-1"></a> `install_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;安装日期&#39;</span>,</span>
<span id="cb15-11"><a href="#cb15-11" aria-hidden="true" tabindex="-1"></a> `install_position` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;安装位置&#39;</span>,</span>
<span id="cb15-12"><a href="#cb15-12" aria-hidden="true" tabindex="-1"></a> `longitude` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">7</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;经度&#39;</span>,</span>
<span id="cb15-13"><a href="#cb15-13" aria-hidden="true" tabindex="-1"></a> `latitude` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">7</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;纬度&#39;</span>,</span>
<span id="cb15-14"><a href="#cb15-14" aria-hidden="true" tabindex="-1"></a> `initial_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;初始读数&#39;</span>,</span>
<span id="cb15-15"><a href="#cb15-15" aria-hidden="true" tabindex="-1"></a> `current_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;当前读数&#39;</span>,</span>
<span id="cb15-16"><a href="#cb15-16" aria-hidden="true" tabindex="-1"></a> `reading_cycle` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;MONTHLY&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表周期(月度:MONTHLY,双月:BIMONTHLY,季度:QUARTERLY)&#39;</span>,</span>
<span id="cb15-17"><a href="#cb15-17" aria-hidden="true" tabindex="-1"></a> `book_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;册本编号&#39;</span>,</span>
<span id="cb15-18"><a href="#cb15-18" aria-hidden="true" tabindex="-1"></a> `reading_route` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表路线&#39;</span>,</span>
<span id="cb15-19"><a href="#cb15-19" aria-hidden="true" tabindex="-1"></a> `meter_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表状态(0:停用,1:正常,2:故障,3:拆除)&#39;</span>,</span>
<span id="cb15-20"><a href="#cb15-20" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb15-21"><a href="#cb15-21" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb15-22"><a href="#cb15-22" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb15-23"><a href="#cb15-23" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb15-24"><a href="#cb15-24" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb15-25"><a href="#cb15-25" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb15-26"><a href="#cb15-26" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb15-27"><a href="#cb15-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb15-28"><a href="#cb15-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_meter_code` (`meter_code`, `tenant_id`),</span>
<span id="cb15-29"><a href="#cb15-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_no` (`meter_no`),</span>
<span id="cb15-30"><a href="#cb15-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_id` (`customer_id`),</span>
<span id="cb15-31"><a href="#cb15-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_book_code` (`book_code`),</span>
<span id="cb15-32"><a href="#cb15-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_type` (`meter_type`),</span>
<span id="cb15-33"><a href="#cb15-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_status` (`meter_status`),</span>
<span id="cb15-34"><a href="#cb15-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_status` (`tenant_id`, `meter_status`),</span>
<span id="cb15-35"><a href="#cb15-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_meter_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`)</span>
<span id="cb15-36"><a href="#cb15-36" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;水表信息表&#39;</span>;</span></code></pre></div>
<h4 data-number="1.7.4.3" id="客户账户表"><span
class="header-section-number">1.7.4.3</span> 1.3 客户账户表</h4>
<div class="sourceCode" id="cb16"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_customer_account` (</span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a> `account_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;账户编号&#39;</span>,</span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a> `balance` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;账户余额&#39;</span>,</span>
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a> `credit_amount` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;信用额度&#39;</span>,</span>
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a> `deposit_amount` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;保证金&#39;</span>,</span>
<span id="cb16-7"><a href="#cb16-7" aria-hidden="true" tabindex="-1"></a> `frozen_amount` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;冻结金额&#39;</span>,</span>
<span id="cb16-8"><a href="#cb16-8" aria-hidden="true" tabindex="-1"></a> `last_payment_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;最近缴费日期&#39;</span>,</span>
<span id="cb16-9"><a href="#cb16-9" aria-hidden="true" tabindex="-1"></a> `last_payment_amount` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;最近缴费金额&#39;</span>,</span>
<span id="cb16-10"><a href="#cb16-10" aria-hidden="true" tabindex="-1"></a> `arrears_amount` <span class="dt">decimal</span>(<span class="dv">12</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;欠费金额&#39;</span>,</span>
<span id="cb16-11"><a href="#cb16-11" aria-hidden="true" tabindex="-1"></a> `arrears_months` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;欠费月数&#39;</span>,</span>
<span id="cb16-12"><a href="#cb16-12" aria-hidden="true" tabindex="-1"></a> `account_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;账户状态(0:停用,1:正常,2:欠费,3:冻结)&#39;</span>,</span>
<span id="cb16-13"><a href="#cb16-13" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb16-14"><a href="#cb16-14" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb16-15"><a href="#cb16-15" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb16-16"><a href="#cb16-16" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb16-17"><a href="#cb16-17" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb16-18"><a href="#cb16-18" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb16-19"><a href="#cb16-19" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb16-20"><a href="#cb16-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb16-21"><a href="#cb16-21" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_account_code` (`account_code`, `tenant_id`),</span>
<span id="cb16-22"><a href="#cb16-22" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_customer_account` (`customer_id`, `tenant_id`),</span>
<span id="cb16-23"><a href="#cb16-23" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_account_status` (`account_status`),</span>
<span id="cb16-24"><a href="#cb16-24" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_balance` (`balance`),</span>
<span id="cb16-25"><a href="#cb16-25" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_arrears` (`arrears_amount`),</span>
<span id="cb16-26"><a href="#cb16-26" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_account_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`)</span>
<span id="cb16-27"><a href="#cb16-27" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;客户账户信息表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.5" id="营收管理相关表ddl"><span
class="header-section-number">1.7.5</span> 2. 营收管理相关表DDL</h3>
<h4 data-number="1.7.5.1" id="抄表记录表"><span
class="header-section-number">1.7.5.1</span> 2.1 抄表记录表</h4>
<div class="sourceCode" id="cb17"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter_reading` (</span>
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a> `reading_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表记录编号&#39;</span>,</span>
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a> `reading_date` <span class="dt">date</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表日期&#39;</span>,</span>
<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a> `reading_time` datetime <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表时间&#39;</span>,</span>
<span id="cb17-6"><a href="#cb17-6" aria-hidden="true" tabindex="-1"></a> `reading_value` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表读数&#39;</span>,</span>
<span id="cb17-7"><a href="#cb17-7" aria-hidden="true" tabindex="-1"></a> `prev_reading_value` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;上次读数&#39;</span>,</span>
<span id="cb17-8"><a href="#cb17-8" aria-hidden="true" tabindex="-1"></a> `water_usage` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;用水量&#39;</span>,</span>
<span id="cb17-9"><a href="#cb17-9" aria-hidden="true" tabindex="-1"></a> `reading_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表类型(手工:MANUAL,远传:REMOTE,自报:SELF_REPORT,估算:ESTIMATE)&#39;</span>,</span>
<span id="cb17-10"><a href="#cb17-10" aria-hidden="true" tabindex="-1"></a> `reading_method` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表方式(现场:FIELD,拍照:PHOTO,NFC:NFC,扫码:SCAN)&#39;</span>,</span>
<span id="cb17-11"><a href="#cb17-11" aria-hidden="true" tabindex="-1"></a> `reader_id` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表员ID&#39;</span>,</span>
<span id="cb17-12"><a href="#cb17-12" aria-hidden="true" tabindex="-1"></a> `reader_name` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表员姓名&#39;</span>,</span>
<span id="cb17-13"><a href="#cb17-13" aria-hidden="true" tabindex="-1"></a> `photo_url` <span class="dt">varchar</span>(<span class="dv">255</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表照片URL&#39;</span>,</span>
<span id="cb17-14"><a href="#cb17-14" aria-hidden="true" tabindex="-1"></a> `reading_location` <span class="dt">varchar</span>(<span class="dv">200</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表位置&#39;</span>,</span>
<span id="cb17-15"><a href="#cb17-15" aria-hidden="true" tabindex="-1"></a> `abnormal_flag` tinyint <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;异常标识(0:正常,1:异常)&#39;</span>,</span>
<span id="cb17-16"><a href="#cb17-16" aria-hidden="true" tabindex="-1"></a> `abnormal_reason` <span class="dt">varchar</span>(<span class="dv">200</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;异常原因&#39;</span>,</span>
<span id="cb17-17"><a href="#cb17-17" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb17-18"><a href="#cb17-18" aria-hidden="true" tabindex="-1"></a> `reading_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;状态(0:未复核,1:已复核,2:已开账,3:作废)&#39;</span>,</span>
<span id="cb17-19"><a href="#cb17-19" aria-hidden="true" tabindex="-1"></a> `meter_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表ID&#39;</span>,</span>
<span id="cb17-20"><a href="#cb17-20" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb17-21"><a href="#cb17-21" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb17-22"><a href="#cb17-22" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb17-23"><a href="#cb17-23" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb17-24"><a href="#cb17-24" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb17-25"><a href="#cb17-25" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb17-26"><a href="#cb17-26" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb17-27"><a href="#cb17-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb17-28"><a href="#cb17-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_reading_code` (`reading_code`, `tenant_id`),</span>
<span id="cb17-29"><a href="#cb17-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_reading_date` (`meter_id`, `reading_date`),</span>
<span id="cb17-30"><a href="#cb17-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_reading_date` (`reading_date`),</span>
<span id="cb17-31"><a href="#cb17-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_reader_id` (`reader_id`),</span>
<span id="cb17-32"><a href="#cb17-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_reading_status` (`reading_status`),</span>
<span id="cb17-33"><a href="#cb17-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_id` (`customer_id`),</span>
<span id="cb17-34"><a href="#cb17-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_meter_date` (`tenant_id`, `meter_id`, `reading_date`),</span>
<span id="cb17-35"><a href="#cb17-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_reading_meter` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`meter_id`) <span class="kw">REFERENCES</span> `water_meter` (`id`),</span>
<span id="cb17-36"><a href="#cb17-36" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_reading_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`)</span>
<span id="cb17-37"><a href="#cb17-37" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;抄表记录表&#39;</span>;</span></code></pre></div>
<h4 data-number="1.7.5.2" id="水费账单表"><span
class="header-section-number">1.7.5.2</span> 2.2 水费账单表</h4>
<div class="sourceCode" id="cb18"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_bill` (</span>
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a> `bill_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;账单编号&#39;</span>,</span>
<span id="cb18-4"><a href="#cb18-4" aria-hidden="true" tabindex="-1"></a> `bill_month` <span class="dt">varchar</span>(<span class="dv">7</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;账期(格式:YYYY-MM)&#39;</span>,</span>
<span id="cb18-5"><a href="#cb18-5" aria-hidden="true" tabindex="-1"></a> `bill_date` <span class="dt">date</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;开账日期&#39;</span>,</span>
<span id="cb18-6"><a href="#cb18-6" aria-hidden="true" tabindex="-1"></a> `water_usage` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;用水量&#39;</span>,</span>
<span id="cb18-7"><a href="#cb18-7" aria-hidden="true" tabindex="-1"></a> `prev_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;上期读数&#39;</span>,</span>
<span id="cb18-8"><a href="#cb18-8" aria-hidden="true" tabindex="-1"></a> `current_reading` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;本期读数&#39;</span>,</span>
<span id="cb18-9"><a href="#cb18-9" aria-hidden="true" tabindex="-1"></a> `reading_days` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表间隔天数&#39;</span>,</span>
<span id="cb18-10"><a href="#cb18-10" aria-hidden="true" tabindex="-1"></a> `water_price` <span class="dt">decimal</span>(<span class="dv">8</span>,<span class="dv">4</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水价单价&#39;</span>,</span>
<span id="cb18-11"><a href="#cb18-11" aria-hidden="true" tabindex="-1"></a> `water_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;水费金额&#39;</span>,</span>
<span id="cb18-12"><a href="#cb18-12" aria-hidden="true" tabindex="-1"></a> `sewage_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;污水处理费&#39;</span>,</span>
<span id="cb18-13"><a href="#cb18-13" aria-hidden="true" tabindex="-1"></a> `garbage_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;垃圾处理费&#39;</span>,</span>
<span id="cb18-14"><a href="#cb18-14" aria-hidden="true" tabindex="-1"></a> `other_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;其他费用&#39;</span>,</span>
<span id="cb18-15"><a href="#cb18-15" aria-hidden="true" tabindex="-1"></a> `adjustment_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;调整费用&#39;</span>,</span>
<span id="cb18-16"><a href="#cb18-16" aria-hidden="true" tabindex="-1"></a> `late_fee` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;滞纳金&#39;</span>,</span>
<span id="cb18-17"><a href="#cb18-17" aria-hidden="true" tabindex="-1"></a> `total_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;总金额&#39;</span>,</span>
<span id="cb18-18"><a href="#cb18-18" aria-hidden="true" tabindex="-1"></a> `paid_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;已缴金额&#39;</span>,</span>
<span id="cb18-19"><a href="#cb18-19" aria-hidden="true" tabindex="-1"></a> `balance_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;余额&#39;</span>,</span>
<span id="cb18-20"><a href="#cb18-20" aria-hidden="true" tabindex="-1"></a> `due_date` <span class="dt">date</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费截止日期&#39;</span>,</span>
<span id="cb18-21"><a href="#cb18-21" aria-hidden="true" tabindex="-1"></a> `billing_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;NORMAL&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;开账类型(正常:NORMAL,追补:SUPPLEMENT,调整:ADJUSTMENT)&#39;</span>,</span>
<span id="cb18-22"><a href="#cb18-22" aria-hidden="true" tabindex="-1"></a> `bill_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;账单状态(0:未缴费,1:已缴费,2:部分缴费,3:作废)&#39;</span>,</span>
<span id="cb18-23"><a href="#cb18-23" aria-hidden="true" tabindex="-1"></a> `payment_status` tinyint <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费状态(0:未缴,1:已缴,2:部分缴费)&#39;</span>,</span>
<span id="cb18-24"><a href="#cb18-24" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb18-25"><a href="#cb18-25" aria-hidden="true" tabindex="-1"></a> `meter_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表ID&#39;</span>,</span>
<span id="cb18-26"><a href="#cb18-26" aria-hidden="true" tabindex="-1"></a> `reading_id` bigint <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;抄表记录ID&#39;</span>,</span>
<span id="cb18-27"><a href="#cb18-27" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb18-28"><a href="#cb18-28" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb18-29"><a href="#cb18-29" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb18-30"><a href="#cb18-30" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb18-31"><a href="#cb18-31" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb18-32"><a href="#cb18-32" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb18-33"><a href="#cb18-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb18-34"><a href="#cb18-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_bill_code` (`bill_code`, `tenant_id`),</span>
<span id="cb18-35"><a href="#cb18-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_bill_month` (`customer_id`, `bill_month`),</span>
<span id="cb18-36"><a href="#cb18-36" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_meter_bill_month` (`meter_id`, `bill_month`),</span>
<span id="cb18-37"><a href="#cb18-37" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_bill_status` (`bill_status`),</span>
<span id="cb18-38"><a href="#cb18-38" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_due_date` (`due_date`),</span>
<span id="cb18-39"><a href="#cb18-39" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_tenant_customer_month` (`tenant_id`, `customer_id`, `bill_month`),</span>
<span id="cb18-40"><a href="#cb18-40" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_bill_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`),</span>
<span id="cb18-41"><a href="#cb18-41" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_bill_meter` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`meter_id`) <span class="kw">REFERENCES</span> `water_meter` (`id`),</span>
<span id="cb18-42"><a href="#cb18-42" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_bill_reading` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`reading_id`) <span class="kw">REFERENCES</span> `water_meter_reading` (`id`)</span>
<span id="cb18-43"><a href="#cb18-43" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;水费账单表&#39;</span>;</span></code></pre></div>
<h4 data-number="1.7.5.3" id="缴费记录表"><span
class="header-section-number">1.7.5.3</span> 2.3 缴费记录表</h4>
<div class="sourceCode" id="cb19"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_payment` (</span>
<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a> `payment_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费记录编号&#39;</span>,</span>
<span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a> `payment_type` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费类型(正常缴费:NORMAL,预存:PREPAID,退费:REFUND)&#39;</span>,</span>
<span id="cb19-5"><a href="#cb19-5" aria-hidden="true" tabindex="-1"></a> `payment_channel` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费渠道(现金:CASH,银行卡:BANK_CARD,微信:WECHAT,支付宝:ALIPAY,银行代扣:BANK_DEDUCT)&#39;</span>,</span>
<span id="cb19-6"><a href="#cb19-6" aria-hidden="true" tabindex="-1"></a> `payment_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费金额&#39;</span>,</span>
<span id="cb19-7"><a href="#cb19-7" aria-hidden="true" tabindex="-1"></a> `actual_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;实收金额&#39;</span>,</span>
<span id="cb19-8"><a href="#cb19-8" aria-hidden="true" tabindex="-1"></a> `change_amount` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;0.00&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;找零金额&#39;</span>,</span>
<span id="cb19-9"><a href="#cb19-9" aria-hidden="true" tabindex="-1"></a> `payment_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费时间&#39;</span>,</span>
<span id="cb19-10"><a href="#cb19-10" aria-hidden="true" tabindex="-1"></a> `transaction_no` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;交易流水号&#39;</span>,</span>
<span id="cb19-11"><a href="#cb19-11" aria-hidden="true" tabindex="-1"></a> `third_party_no` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;第三方交易号&#39;</span>,</span>
<span id="cb19-12"><a href="#cb19-12" aria-hidden="true" tabindex="-1"></a> `operator_id` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;操作员ID&#39;</span>,</span>
<span id="cb19-13"><a href="#cb19-13" aria-hidden="true" tabindex="-1"></a> `operator_name` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;操作员姓名&#39;</span>,</span>
<span id="cb19-14"><a href="#cb19-14" aria-hidden="true" tabindex="-1"></a> `outlet_code` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;营业网点代码&#39;</span>,</span>
<span id="cb19-15"><a href="#cb19-15" aria-hidden="true" tabindex="-1"></a> `pos_machine_no` <span class="dt">varchar</span>(<span class="dv">20</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;POS机编号&#39;</span>,</span>
<span id="cb19-16"><a href="#cb19-16" aria-hidden="true" tabindex="-1"></a> `invoice_no` <span class="dt">varchar</span>(<span class="dv">30</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;发票号码&#39;</span>,</span>
<span id="cb19-17"><a href="#cb19-17" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb19-18"><a href="#cb19-18" aria-hidden="true" tabindex="-1"></a> `payment_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;缴费状态(0:待确认,1:成功,2:失败,3:退费)&#39;</span>,</span>
<span id="cb19-19"><a href="#cb19-19" aria-hidden="true" tabindex="-1"></a> `bill_id` bigint <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;账单ID&#39;</span>,</span>
<span id="cb19-20"><a href="#cb19-20" aria-hidden="true" tabindex="-1"></a> `customer_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;客户ID&#39;</span>,</span>
<span id="cb19-21"><a href="#cb19-21" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb19-22"><a href="#cb19-22" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb19-23"><a href="#cb19-23" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb19-24"><a href="#cb19-24" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb19-25"><a href="#cb19-25" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb19-26"><a href="#cb19-26" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb19-27"><a href="#cb19-27" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb19-28"><a href="#cb19-28" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_payment_code` (`payment_code`, `tenant_id`),</span>
<span id="cb19-29"><a href="#cb19-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_customer_payment_time` (`customer_id`, `payment_time`),</span>
<span id="cb19-30"><a href="#cb19-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_payment_time` (`payment_time`),</span>
<span id="cb19-31"><a href="#cb19-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_transaction_no` (`transaction_no`),</span>
<span id="cb19-32"><a href="#cb19-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_operator_id` (`operator_id`),</span>
<span id="cb19-33"><a href="#cb19-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_payment_status` (`payment_status`),</span>
<span id="cb19-34"><a href="#cb19-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_bill_id` (`bill_id`),</span>
<span id="cb19-35"><a href="#cb19-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_payment_customer` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`customer_id`) <span class="kw">REFERENCES</span> `water_customer` (`id`),</span>
<span id="cb19-36"><a href="#cb19-36" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_payment_bill` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`bill_id`) <span class="kw">REFERENCES</span> `water_bill` (`id`)</span>
<span id="cb19-37"><a href="#cb19-37" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;缴费记录表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.6" id="表务管理相关表ddl"><span
class="header-section-number">1.7.6</span> 3. 表务管理相关表DDL</h3>
<h4 data-number="1.7.6.1" id="水表档案表"><span
class="header-section-number">1.7.6.1</span> 3.1 水表档案表</h4>
<div class="sourceCode" id="cb20"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_meter_archive` (</span>
<span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a> `archive_code` <span class="dt">varchar</span>(<span class="dv">32</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;档案编号&#39;</span>,</span>
<span id="cb20-4"><a href="#cb20-4" aria-hidden="true" tabindex="-1"></a> `manufacturer` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产厂家&#39;</span>,</span>
<span id="cb20-5"><a href="#cb20-5" aria-hidden="true" tabindex="-1"></a> `production_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;生产日期&#39;</span>,</span>
<span id="cb20-6"><a href="#cb20-6" aria-hidden="true" tabindex="-1"></a> `valid_period` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="st">&#39;72&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;有效期(月)&#39;</span>,</span>
<span id="cb20-7"><a href="#cb20-7" aria-hidden="true" tabindex="-1"></a> `verification_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;检定日期&#39;</span>,</span>
<span id="cb20-8"><a href="#cb20-8" aria-hidden="true" tabindex="-1"></a> `next_verification_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;下次检定日期&#39;</span>,</span>
<span id="cb20-9"><a href="#cb20-9" aria-hidden="true" tabindex="-1"></a> `certificate_no` <span class="dt">varchar</span>(<span class="dv">50</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;检定证书号&#39;</span>,</span>
<span id="cb20-10"><a href="#cb20-10" aria-hidden="true" tabindex="-1"></a> `verification_agency` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;检定机构&#39;</span>,</span>
<span id="cb20-11"><a href="#cb20-11" aria-hidden="true" tabindex="-1"></a> `accuracy_level` <span class="dt">varchar</span>(<span class="dv">10</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;精度等级&#39;</span>,</span>
<span id="cb20-12"><a href="#cb20-12" aria-hidden="true" tabindex="-1"></a> `max_flow` <span class="dt">decimal</span>(<span class="dv">8</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;最大流量&#39;</span>,</span>
<span id="cb20-13"><a href="#cb20-13" aria-hidden="true" tabindex="-1"></a> `nominal_flow` <span class="dt">decimal</span>(<span class="dv">8</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;常用流量&#39;</span>,</span>
<span id="cb20-14"><a href="#cb20-14" aria-hidden="true" tabindex="-1"></a> `min_flow` <span class="dt">decimal</span>(<span class="dv">8</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;最小流量&#39;</span>,</span>
<span id="cb20-15"><a href="#cb20-15" aria-hidden="true" tabindex="-1"></a> `working_pressure` <span class="dt">decimal</span>(<span class="dv">8</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;工作压力&#39;</span>,</span>
<span id="cb20-16"><a href="#cb20-16" aria-hidden="true" tabindex="-1"></a> `purchase_date` <span class="dt">date</span> <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;采购日期&#39;</span>,</span>
<span id="cb20-17"><a href="#cb20-17" aria-hidden="true" tabindex="-1"></a> `purchase_price` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;采购价格&#39;</span>,</span>
<span id="cb20-18"><a href="#cb20-18" aria-hidden="true" tabindex="-1"></a> `supplier` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;供应商&#39;</span>,</span>
<span id="cb20-19"><a href="#cb20-19" aria-hidden="true" tabindex="-1"></a> `warranty_period` <span class="dt">int</span> <span class="kw">DEFAULT</span> <span class="st">&#39;24&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;质保期(月)&#39;</span>,</span>
<span id="cb20-20"><a href="#cb20-20" aria-hidden="true" tabindex="-1"></a> `installation_cost` <span class="dt">decimal</span>(<span class="dv">10</span>,<span class="dv">2</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;安装费用&#39;</span>,</span>
<span id="cb20-21"><a href="#cb20-21" aria-hidden="true" tabindex="-1"></a> `archive_status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;档案状态(0:停用,1:正常,2:报废)&#39;</span>,</span>
<span id="cb20-22"><a href="#cb20-22" aria-hidden="true" tabindex="-1"></a> `meter_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;水表ID&#39;</span>,</span>
<span id="cb20-23"><a href="#cb20-23" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb20-24"><a href="#cb20-24" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb20-25"><a href="#cb20-25" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb20-26"><a href="#cb20-26" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb20-27"><a href="#cb20-27" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb20-28"><a href="#cb20-28" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb20-29"><a href="#cb20-29" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb20-30"><a href="#cb20-30" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_archive_code` (`archive_code`, `tenant_id`),</span>
<span id="cb20-31"><a href="#cb20-31" aria-hidden="true" tabindex="-1"></a> <span class="kw">UNIQUE</span> <span class="kw">KEY</span> `uk_meter_archive` (`meter_id`, `tenant_id`),</span>
<span id="cb20-32"><a href="#cb20-32" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_manufacturer` (`manufacturer`),</span>
<span id="cb20-33"><a href="#cb20-33" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_verification_date` (`verification_date`),</span>
<span id="cb20-34"><a href="#cb20-34" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_next_verification_date` (`next_verification_date`),</span>
<span id="cb20-35"><a href="#cb20-35" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_archive_status` (`archive_status`),</span>
<span id="cb20-36"><a href="#cb20-36" aria-hidden="true" tabindex="-1"></a> <span class="kw">CONSTRAINT</span> `fk_archive_meter` <span class="kw">FOREIGN</span> <span class="kw">KEY</span> (`meter_id`) <span class="kw">REFERENCES</span> `water_meter` (`id`)</span>
<span id="cb20-37"><a href="#cb20-37" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;水表档案表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.7" id="系统管理相关表ddl-1"><span
class="header-section-number">1.7.7</span> 4. 系统管理相关表DDL</h3>
<h4 data-number="1.7.7.1" id="数据字典表"><span
class="header-section-number">1.7.7.1</span> 4.1 数据字典表</h4>
<div class="sourceCode" id="cb21"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> `water_dict_data` (</span>
<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a> `id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> AUTO_INCREMENT <span class="kw">COMMENT</span> <span class="st">&#39;主键ID&#39;</span>,</span>
<span id="cb21-3"><a href="#cb21-3" aria-hidden="true" tabindex="-1"></a> `dict_type` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典类型&#39;</span>,</span>
<span id="cb21-4"><a href="#cb21-4" aria-hidden="true" tabindex="-1"></a> `dict_label` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典标签&#39;</span>,</span>
<span id="cb21-5"><a href="#cb21-5" aria-hidden="true" tabindex="-1"></a> `dict_value` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典键值&#39;</span>,</span>
<span id="cb21-6"><a href="#cb21-6" aria-hidden="true" tabindex="-1"></a> `dict_sort` <span class="dt">int</span> <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;字典排序&#39;</span>,</span>
<span id="cb21-7"><a href="#cb21-7" aria-hidden="true" tabindex="-1"></a> `color_type` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;颜色类型&#39;</span>,</span>
<span id="cb21-8"><a href="#cb21-8" aria-hidden="true" tabindex="-1"></a> `css_class` <span class="dt">varchar</span>(<span class="dv">100</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;CSS类名&#39;</span>,</span>
<span id="cb21-9"><a href="#cb21-9" aria-hidden="true" tabindex="-1"></a> `remark` <span class="dt">varchar</span>(<span class="dv">500</span>) <span class="kw">DEFAULT</span> <span class="kw">NULL</span> <span class="kw">COMMENT</span> <span class="st">&#39;备注&#39;</span>,</span>
<span id="cb21-10"><a href="#cb21-10" aria-hidden="true" tabindex="-1"></a> `status` tinyint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;1&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;状态(0:停用,1:正常)&#39;</span>,</span>
<span id="cb21-11"><a href="#cb21-11" aria-hidden="true" tabindex="-1"></a> `tenant_id` bigint <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;租户ID&#39;</span>,</span>
<span id="cb21-12"><a href="#cb21-12" aria-hidden="true" tabindex="-1"></a> `creator` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建者&#39;</span>,</span>
<span id="cb21-13"><a href="#cb21-13" aria-hidden="true" tabindex="-1"></a> `create_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;创建时间&#39;</span>,</span>
<span id="cb21-14"><a href="#cb21-14" aria-hidden="true" tabindex="-1"></a> `updater` <span class="dt">varchar</span>(<span class="dv">64</span>) <span class="kw">DEFAULT</span> <span class="st">&#39;&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新者&#39;</span>,</span>
<span id="cb21-15"><a href="#cb21-15" aria-hidden="true" tabindex="-1"></a> `update_time` datetime <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">ON</span> <span class="kw">UPDATE</span> <span class="fu">CURRENT_TIMESTAMP</span> <span class="kw">COMMENT</span> <span class="st">&#39;更新时间&#39;</span>,</span>
<span id="cb21-16"><a href="#cb21-16" aria-hidden="true" tabindex="-1"></a> `deleted` bit(<span class="dv">1</span>) <span class="kw">NOT</span> <span class="kw">NULL</span> <span class="kw">DEFAULT</span> b<span class="st">&#39;0&#39;</span> <span class="kw">COMMENT</span> <span class="st">&#39;是否删除&#39;</span>,</span>
<span id="cb21-17"><a href="#cb21-17" aria-hidden="true" tabindex="-1"></a> <span class="kw">PRIMARY</span> <span class="kw">KEY</span> (`id`),</span>
<span id="cb21-18"><a href="#cb21-18" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_dict_type` (`dict_type`),</span>
<span id="cb21-19"><a href="#cb21-19" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_dict_value` (`dict_value`),</span>
<span id="cb21-20"><a href="#cb21-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">KEY</span> `idx_status` (`status`)</span>
<span id="cb21-21"><a href="#cb21-21" aria-hidden="true" tabindex="-1"></a>) ENGINE<span class="op">=</span>InnoDB <span class="kw">DEFAULT</span> CHARSET<span class="op">=</span>utf8mb4 <span class="kw">COMMENT</span><span class="op">=</span><span class="st">&#39;数据字典表&#39;</span>;</span></code></pre></div>
<h3 data-number="1.7.8" id="初始化数据脚本"><span
class="header-section-number">1.7.8</span> 5. 初始化数据脚本</h3>
<div class="sourceCode" id="cb22"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 插入基础字典数据</span></span>
<span id="cb22-2"><a href="#cb22-2" aria-hidden="true" tabindex="-1"></a><span class="kw">INSERT</span> <span class="kw">INTO</span> `water_dict_data` (`dict_type`, `dict_label`, `dict_value`, `dict_sort`, `status`, `remark`) <span class="kw">VALUES</span></span>
<span id="cb22-3"><a href="#cb22-3" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;customer_type&#39;</span>, <span class="st">&#39;居民用户&#39;</span>, <span class="st">&#39;RESIDENT&#39;</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="st">&#39;居民生活用水&#39;</span>),</span>
<span id="cb22-4"><a href="#cb22-4" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;customer_type&#39;</span>, <span class="st">&#39;非居民用户&#39;</span>, <span class="st">&#39;NON_RESIDENT&#39;</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="st">&#39;非居民用水&#39;</span>),</span>
<span id="cb22-5"><a href="#cb22-5" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;customer_type&#39;</span>, <span class="st">&#39;工业用户&#39;</span>, <span class="st">&#39;INDUSTRIAL&#39;</span>, <span class="dv">3</span>, <span class="dv">1</span>, <span class="st">&#39;工业生产用水&#39;</span>),</span>
<span id="cb22-6"><a href="#cb22-6" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;customer_type&#39;</span>, <span class="st">&#39;行政用户&#39;</span>, <span class="st">&#39;ADMINISTRATIVE&#39;</span>, <span class="dv">4</span>, <span class="dv">1</span>, <span class="st">&#39;行政事业单位用水&#39;</span>),</span>
<span id="cb22-7"><a href="#cb22-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-8"><a href="#cb22-8" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;meter_type&#39;</span>, <span class="st">&#39;机械水表&#39;</span>, <span class="st">&#39;MECHANICAL&#39;</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="st">&#39;传统机械式水表&#39;</span>),</span>
<span id="cb22-9"><a href="#cb22-9" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;meter_type&#39;</span>, <span class="st">&#39;智能水表&#39;</span>, <span class="st">&#39;SMART&#39;</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="st">&#39;智能电子水表&#39;</span>),</span>
<span id="cb22-10"><a href="#cb22-10" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;meter_type&#39;</span>, <span class="st">&#39;远传水表&#39;</span>, <span class="st">&#39;REMOTE&#39;</span>, <span class="dv">3</span>, <span class="dv">1</span>, <span class="st">&#39;远程传输水表&#39;</span>),</span>
<span id="cb22-11"><a href="#cb22-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-12"><a href="#cb22-12" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;reading_type&#39;</span>, <span class="st">&#39;人工抄表&#39;</span>, <span class="st">&#39;MANUAL&#39;</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="st">&#39;抄表员现场抄表&#39;</span>),</span>
<span id="cb22-13"><a href="#cb22-13" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;reading_type&#39;</span>, <span class="st">&#39;远程抄表&#39;</span>, <span class="st">&#39;REMOTE&#39;</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="st">&#39;远程自动抄表&#39;</span>),</span>
<span id="cb22-14"><a href="#cb22-14" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;reading_type&#39;</span>, <span class="st">&#39;客户自报&#39;</span>, <span class="st">&#39;SELF_REPORT&#39;</span>, <span class="dv">3</span>, <span class="dv">1</span>, <span class="st">&#39;客户自主上报&#39;</span>),</span>
<span id="cb22-15"><a href="#cb22-15" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;reading_type&#39;</span>, <span class="st">&#39;估算抄表&#39;</span>, <span class="st">&#39;ESTIMATE&#39;</span>, <span class="dv">4</span>, <span class="dv">1</span>, <span class="st">&#39;估算用水量&#39;</span>),</span>
<span id="cb22-16"><a href="#cb22-16" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-17"><a href="#cb22-17" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;payment_channel&#39;</span>, <span class="st">&#39;现金&#39;</span>, <span class="st">&#39;CASH&#39;</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="st">&#39;现金缴费&#39;</span>),</span>
<span id="cb22-18"><a href="#cb22-18" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;payment_channel&#39;</span>, <span class="st">&#39;银行卡&#39;</span>, <span class="st">&#39;BANK_CARD&#39;</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="st">&#39;银行卡刷卡&#39;</span>),</span>
<span id="cb22-19"><a href="#cb22-19" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;payment_channel&#39;</span>, <span class="st">&#39;微信支付&#39;</span>, <span class="st">&#39;WECHAT&#39;</span>, <span class="dv">3</span>, <span class="dv">1</span>, <span class="st">&#39;微信在线支付&#39;</span>),</span>
<span id="cb22-20"><a href="#cb22-20" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;payment_channel&#39;</span>, <span class="st">&#39;支付宝&#39;</span>, <span class="st">&#39;ALIPAY&#39;</span>, <span class="dv">4</span>, <span class="dv">1</span>, <span class="st">&#39;支付宝在线支付&#39;</span>),</span>
<span id="cb22-21"><a href="#cb22-21" aria-hidden="true" tabindex="-1"></a>(<span class="st">&#39;payment_channel&#39;</span>, <span class="st">&#39;银行代扣&#39;</span>, <span class="st">&#39;BANK_DEDUCT&#39;</span>, <span class="dv">5</span>, <span class="dv">1</span>, <span class="st">&#39;银行自动代扣&#39;</span>);</span></code></pre></div>
<h2 data-number="1.8" id="六opengauss数据库特性应用"><span
class="header-section-number">1.8</span>
六、OpenGauss数据库特性应用</h2>
<h3 data-number="1.8.1" id="opengauss高级特性"><span
class="header-section-number">1.8.1</span> 1. OpenGauss高级特性</h3>
<h4 data-number="1.8.1.1" id="分区表设计"><span
class="header-section-number">1.8.1.1</span> 1.1 分区表设计</h4>
<div class="sourceCode" id="cb23"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 按月份分区的账单表</span></span>
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> water_bill (</span>
<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 字段定义...</span></span>
<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a>) <span class="kw">PARTITION</span> <span class="kw">BY</span> <span class="kw">RANGE</span> (bill_month) (</span>
<span id="cb23-5"><a href="#cb23-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">PARTITION</span> p202401 <span class="kw">VALUES</span> <span class="kw">LESS</span> <span class="kw">THAN</span> (<span class="st">&#39;2024-02&#39;</span>),</span>
<span id="cb23-6"><a href="#cb23-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">PARTITION</span> p202402 <span class="kw">VALUES</span> <span class="kw">LESS</span> <span class="kw">THAN</span> (<span class="st">&#39;2024-03&#39;</span>),</span>
<span id="cb23-7"><a href="#cb23-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">PARTITION</span> p202403 <span class="kw">VALUES</span> <span class="kw">LESS</span> <span class="kw">THAN</span> (<span class="st">&#39;2024-04&#39;</span>)</span>
<span id="cb23-8"><a href="#cb23-8" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 继续按月创建分区...</span></span>
<span id="cb23-9"><a href="#cb23-9" aria-hidden="true" tabindex="-1"></a>);</span></code></pre></div>
<h4 data-number="1.8.1.2" id="列存储表"><span
class="header-section-number">1.8.1.2</span> 1.2 列存储表</h4>
<div class="sourceCode" id="cb24"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 统计分析用的列存储表</span></span>
<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> water_bill_stats (</span>
<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 字段定义...</span></span>
<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a>) <span class="kw">WITH</span> (ORIENTATION <span class="op">=</span> <span class="kw">COLUMN</span>);</span></code></pre></div>
<h4 data-number="1.8.1.3" id="内存表"><span
class="header-section-number">1.8.1.3</span> 1.3 内存表</h4>
<div class="sourceCode" id="cb25"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 配置参数缓存表</span></span>
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> water_config_cache (</span>
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 字段定义...</span></span>
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a>) <span class="kw">WITH</span> (ORIENTATION <span class="op">=</span> <span class="kw">ROW</span>, STORAGE_TYPE <span class="op">=</span> USTORE);</span></code></pre></div>
<h3 data-number="1.8.2" id="性能优化配置"><span
class="header-section-number">1.8.2</span> 2. 性能优化配置</h3>
<h4 data-number="1.8.2.1" id="连接池配置"><span
class="header-section-number">1.8.2.1</span> 2.1 连接池配置</h4>
<div class="sourceCode" id="cb26"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- OpenGauss连接池参数</span></span>
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> max_connections <span class="op">=</span> <span class="dv">200</span>;</span>
<span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> shared_buffers <span class="op">=</span> <span class="st">&#39;256MB&#39;</span>;</span>
<span id="cb26-4"><a href="#cb26-4" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> effective_cache_size <span class="op">=</span> <span class="st">&#39;1GB&#39;</span>;</span>
<span id="cb26-5"><a href="#cb26-5" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> work_mem <span class="op">=</span> <span class="st">&#39;4MB&#39;</span>;</span></code></pre></div>
<h4 data-number="1.8.2.2" id="并行查询"><span
class="header-section-number">1.8.2.2</span> 2.2 并行查询</h4>
<div class="sourceCode" id="cb27"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 启用并行查询</span></span>
<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> max_parallel_workers <span class="op">=</span> <span class="dv">8</span>;</span>
<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> max_parallel_workers_per_gather <span class="op">=</span> <span class="dv">4</span>;</span></code></pre></div>
<h2 data-number="1.9" id="七索引设计与优化"><span
class="header-section-number">1.9</span> 七、索引设计与优化</h2>
<h3 data-number="1.9.1" id="基础索引设计"><span
class="header-section-number">1.9.1</span> 1. 基础索引设计</h3>
<h4 data-number="1.9.1.1" id="主键索引"><span
class="header-section-number">1.9.1.1</span> 1.1 主键索引</h4>
<ul>
<li>所有表使用SERIAL主键自动创建B树索引</li>
<li>支持OpenGauss的快速主键查询优化</li>
</ul>
<h4 data-number="1.9.1.2" id="唯一索引"><span
class="header-section-number">1.9.1.2</span> 1.2 唯一索引</h4>
<div class="sourceCode" id="cb28"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 客户编号唯一索引</span></span>
<span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">UNIQUE</span> <span class="kw">INDEX</span> uk_customer_code <span class="kw">ON</span> water_customer (customer_code, tenant_id);</span>
<span id="cb28-3"><a href="#cb28-3" aria-hidden="true" tabindex="-1"></a><span class="co">-- 水表编号唯一索引 </span></span>
<span id="cb28-4"><a href="#cb28-4" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">UNIQUE</span> <span class="kw">INDEX</span> uk_meter_code <span class="kw">ON</span> water_meter (meter_code, tenant_id);</span></code></pre></div>
<h4 data-number="1.9.1.3" id="复合索引"><span
class="header-section-number">1.9.1.3</span> 1.3 复合索引</h4>
<div class="sourceCode" id="cb29"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 多租户查询优化</span></span>
<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_tenant_customer_type <span class="kw">ON</span> water_customer (tenant_id, customer_type);</span>
<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a><span class="co">-- 账单查询优化</span></span>
<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_tenant_customer_month <span class="kw">ON</span> water_bill (tenant_id, customer_id, bill_month);</span>
<span id="cb29-5"><a href="#cb29-5" aria-hidden="true" tabindex="-1"></a><span class="co">-- 抄表查询优化</span></span>
<span id="cb29-6"><a href="#cb29-6" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_tenant_meter_date <span class="kw">ON</span> water_meter_reading (tenant_id, meter_id, reading_date);</span></code></pre></div>
<h3 data-number="1.9.2" id="opengauss特殊索引"><span
class="header-section-number">1.9.2</span> 2. OpenGauss特殊索引</h3>
<h4 data-number="1.9.2.1" id="hash索引"><span
class="header-section-number">1.9.2.1</span> 2.1 HASH索引</h4>
<div class="sourceCode" id="cb30"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 等值查询优化</span></span>
<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> CONCURRENTLY idx_customer_phone_hash <span class="kw">ON</span> water_customer <span class="kw">USING</span> <span class="kw">HASH</span> (phone);</span></code></pre></div>
<h4 data-number="1.9.2.2" id="gin索引"><span
class="header-section-number">1.9.2.2</span> 2.2 GIN索引</h4>
<div class="sourceCode" id="cb31"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 全文检索索引</span></span>
<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_customer_name_gin <span class="kw">ON</span> water_customer <span class="kw">USING</span> GIN (to_tsvector(<span class="st">&#39;simple&#39;</span>, customer_name));</span></code></pre></div>
<h4 data-number="1.9.2.3" id="部分索引"><span
class="header-section-number">1.9.2.3</span> 2.3 部分索引</h4>
<div class="sourceCode" id="cb32"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 只对有效数据建索引</span></span>
<span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">INDEX</span> idx_active_customers <span class="kw">ON</span> water_customer (customer_code) <span class="kw">WHERE</span> deleted <span class="op">=</span> <span class="kw">FALSE</span> <span class="kw">AND</span> status <span class="op">=</span> <span class="dv">1</span>;</span></code></pre></div>
<h2 data-number="1.10" id="八opengauss数据安全设计"><span
class="header-section-number">1.10</span> 八、OpenGauss数据安全设计</h2>
<h3 data-number="1.10.1" id="内置安全特性"><span
class="header-section-number">1.10.1</span> 1. 内置安全特性</h3>
<h4 data-number="1.10.1.1" id="透明数据加密-tde"><span
class="header-section-number">1.10.1.1</span> 1.1 透明数据加密
(TDE)</h4>
<div class="sourceCode" id="cb33"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 启用表级加密</span></span>
<span id="cb33-2"><a href="#cb33-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TABLE</span> water_customer_encrypted (</span>
<span id="cb33-3"><a href="#cb33-3" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 字段定义...</span></span>
<span id="cb33-4"><a href="#cb33-4" aria-hidden="true" tabindex="-1"></a>) <span class="kw">WITH</span> (ENCRYPTION_TYPE <span class="op">=</span> <span class="st">&#39;AES_128_CTR&#39;</span>);</span>
<span id="cb33-5"><a href="#cb33-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb33-6"><a href="#cb33-6" aria-hidden="true" tabindex="-1"></a><span class="co">-- 敏感字段加密</span></span>
<span id="cb33-7"><a href="#cb33-7" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">TABLE</span> water_customer </span>
<span id="cb33-8"><a href="#cb33-8" aria-hidden="true" tabindex="-1"></a><span class="kw">ADD</span> <span class="kw">COLUMN</span> id_number_encrypted BYTEA </span>
<span id="cb33-9"><a href="#cb33-9" aria-hidden="true" tabindex="-1"></a><span class="kw">GENERATED</span> ALWAYS <span class="kw">AS</span> (gs_encrypt_aes128(id_number, <span class="st">&#39;密钥&#39;</span>)) STORED;</span></code></pre></div>
<h4 data-number="1.10.1.2" id="行级安全策略-rls"><span
class="header-section-number">1.10.1.2</span> 1.2 行级安全策略
(RLS)</h4>
<div class="sourceCode" id="cb34"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建多租户行级安全</span></span>
<span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">TABLE</span> water_customer <span class="kw">ENABLE</span> <span class="kw">ROW</span> <span class="kw">LEVEL</span> SECURITY;</span>
<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb34-4"><a href="#cb34-4" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建策略</span></span>
<span id="cb34-5"><a href="#cb34-5" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> POLICY tenant_isolation_policy <span class="kw">ON</span> water_customer</span>
<span id="cb34-6"><a href="#cb34-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">FOR</span> <span class="kw">ALL</span> <span class="kw">TO</span> <span class="kw">PUBLIC</span></span>
<span id="cb34-7"><a href="#cb34-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">USING</span> (tenant_id <span class="op">=</span> current_setting(<span class="st">&#39;app.current_tenant_id&#39;</span>):<span class="ch">:bigint</span>);</span></code></pre></div>
<h4 data-number="1.10.1.3" id="动态数据脱敏"><span
class="header-section-number">1.10.1.3</span> 1.3 动态数据脱敏</h4>
<div class="sourceCode" id="cb35"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建脱敏函数</span></span>
<span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">OR</span> <span class="kw">REPLACE</span> <span class="kw">FUNCTION</span> mask_phone(phone_no TEXT)</span>
<span id="cb35-3"><a href="#cb35-3" aria-hidden="true" tabindex="-1"></a>RETURNS TEXT <span class="kw">AS</span> $$</span>
<span id="cb35-4"><a href="#cb35-4" aria-hidden="true" tabindex="-1"></a><span class="cf">BEGIN</span></span>
<span id="cb35-5"><a href="#cb35-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">RETURN</span> SUBSTRING(phone_no, <span class="dv">1</span>, <span class="dv">3</span>) <span class="op">||</span> <span class="st">&#39;****&#39;</span> <span class="op">||</span> SUBSTRING(phone_no, <span class="dv">8</span>);</span>
<span id="cb35-6"><a href="#cb35-6" aria-hidden="true" tabindex="-1"></a><span class="cf">END</span>;</span>
<span id="cb35-7"><a href="#cb35-7" aria-hidden="true" tabindex="-1"></a>$$ LANGUAGE plpgsql;</span>
<span id="cb35-8"><a href="#cb35-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb35-9"><a href="#cb35-9" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建脱敏视图</span></span>
<span id="cb35-10"><a href="#cb35-10" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">VIEW</span> water_customer_masked <span class="kw">AS</span></span>
<span id="cb35-11"><a href="#cb35-11" aria-hidden="true" tabindex="-1"></a><span class="kw">SELECT</span> </span>
<span id="cb35-12"><a href="#cb35-12" aria-hidden="true" tabindex="-1"></a> <span class="kw">id</span>, customer_code, customer_name,</span>
<span id="cb35-13"><a href="#cb35-13" aria-hidden="true" tabindex="-1"></a> mask_phone(phone) <span class="kw">as</span> phone_masked,</span>
<span id="cb35-14"><a href="#cb35-14" aria-hidden="true" tabindex="-1"></a> <span class="co">-- 其他字段...</span></span>
<span id="cb35-15"><a href="#cb35-15" aria-hidden="true" tabindex="-1"></a><span class="kw">FROM</span> water_customer;</span></code></pre></div>
<h3 data-number="1.10.2" id="权限控制体系"><span
class="header-section-number">1.10.2</span> 2. 权限控制体系</h3>
<h4 data-number="1.10.2.1" id="角色权限设计"><span
class="header-section-number">1.10.2.1</span> 2.1 角色权限设计</h4>
<div class="sourceCode" id="cb36"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建业务角色</span></span>
<span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">ROLE</span> water_admin;</span>
<span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">ROLE</span> water_operator;</span>
<span id="cb36-4"><a href="#cb36-4" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">ROLE</span> water_viewer;</span>
<span id="cb36-5"><a href="#cb36-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb36-6"><a href="#cb36-6" aria-hidden="true" tabindex="-1"></a><span class="co">-- 分配权限</span></span>
<span id="cb36-7"><a href="#cb36-7" aria-hidden="true" tabindex="-1"></a><span class="kw">GRANT</span> <span class="kw">ALL</span> <span class="kw">ON</span> water_customer <span class="kw">TO</span> water_admin;</span>
<span id="cb36-8"><a href="#cb36-8" aria-hidden="true" tabindex="-1"></a><span class="kw">GRANT</span> <span class="kw">SELECT</span>, <span class="kw">INSERT</span>, <span class="kw">UPDATE</span> <span class="kw">ON</span> water_customer <span class="kw">TO</span> water_operator;</span>
<span id="cb36-9"><a href="#cb36-9" aria-hidden="true" tabindex="-1"></a><span class="kw">GRANT</span> <span class="kw">SELECT</span> <span class="kw">ON</span> water_customer_masked <span class="kw">TO</span> water_viewer;</span></code></pre></div>
<h4 data-number="1.10.2.2" id="列级权限控制"><span
class="header-section-number">1.10.2.2</span> 2.2 列级权限控制</h4>
<div class="sourceCode" id="cb37"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 敏感字段权限控制</span></span>
<span id="cb37-2"><a href="#cb37-2" aria-hidden="true" tabindex="-1"></a><span class="kw">REVOKE</span> <span class="kw">ALL</span> <span class="kw">ON</span> water_customer <span class="kw">FROM</span> <span class="kw">PUBLIC</span>;</span>
<span id="cb37-3"><a href="#cb37-3" aria-hidden="true" tabindex="-1"></a><span class="kw">GRANT</span> <span class="kw">SELECT</span> (<span class="kw">id</span>, customer_name, phone) <span class="kw">ON</span> water_customer <span class="kw">TO</span> water_viewer;</span>
<span id="cb37-4"><a href="#cb37-4" aria-hidden="true" tabindex="-1"></a><span class="kw">GRANT</span> <span class="kw">SELECT</span> <span class="kw">ON</span> water_customer <span class="kw">TO</span> water_admin;</span></code></pre></div>
<h3 data-number="1.10.3" id="审计与监控"><span
class="header-section-number">1.10.3</span> 3. 审计与监控</h3>
<h4 data-number="1.10.3.1" id="审计日志配置"><span
class="header-section-number">1.10.3.1</span> 3.1 审计日志配置</h4>
<div class="sourceCode" id="cb38"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 启用审计</span></span>
<span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> audit_enabled <span class="op">=</span> <span class="kw">on</span>;</span>
<span id="cb38-3"><a href="#cb38-3" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> audit_directory <span class="op">=</span> <span class="st">&#39;/data/audit&#39;</span>;</span>
<span id="cb38-4"><a href="#cb38-4" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> audit_file_remain_threshold <span class="op">=</span> <span class="dv">1024</span>;</span>
<span id="cb38-5"><a href="#cb38-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb38-6"><a href="#cb38-6" aria-hidden="true" tabindex="-1"></a><span class="co">-- 配置审计策略</span></span>
<span id="cb38-7"><a href="#cb38-7" aria-hidden="true" tabindex="-1"></a><span class="kw">SELECT</span> pg_audit_set_policy(<span class="st">&#39;DDL_LOGIN_LOGOUT&#39;</span>, <span class="st">&#39;DDL, LOGIN, LOGOUT&#39;</span>);</span>
<span id="cb38-8"><a href="#cb38-8" aria-hidden="true" tabindex="-1"></a><span class="kw">SELECT</span> pg_audit_set_policy(<span class="st">&#39;DML_DCL&#39;</span>, <span class="st">&#39;DML, DCL&#39;</span>);</span></code></pre></div>
<h4 data-number="1.10.3.2" id="敏感操作监控"><span
class="header-section-number">1.10.3.2</span> 3.2 敏感操作监控</h4>
<div class="sourceCode" id="cb39"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 创建敏感操作触发器</span></span>
<span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">OR</span> <span class="kw">REPLACE</span> <span class="kw">FUNCTION</span> audit_sensitive_data()</span>
<span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a>RETURNS <span class="kw">TRIGGER</span> <span class="kw">AS</span> $$</span>
<span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a><span class="cf">BEGIN</span></span>
<span id="cb39-5"><a href="#cb39-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">INSERT</span> <span class="kw">INTO</span> audit_log (</span>
<span id="cb39-6"><a href="#cb39-6" aria-hidden="true" tabindex="-1"></a> table_name, operation, old_values, new_values, </span>
<span id="cb39-7"><a href="#cb39-7" aria-hidden="true" tabindex="-1"></a> user_name, operation_time</span>
<span id="cb39-8"><a href="#cb39-8" aria-hidden="true" tabindex="-1"></a> ) <span class="kw">VALUES</span> (</span>
<span id="cb39-9"><a href="#cb39-9" aria-hidden="true" tabindex="-1"></a> TG_TABLE_NAME, TG_OP, </span>
<span id="cb39-10"><a href="#cb39-10" aria-hidden="true" tabindex="-1"></a> row_to_json(<span class="kw">OLD</span>), row_to_json(<span class="kw">NEW</span>),</span>
<span id="cb39-11"><a href="#cb39-11" aria-hidden="true" tabindex="-1"></a> current_user, <span class="fu">current_timestamp</span></span>
<span id="cb39-12"><a href="#cb39-12" aria-hidden="true" tabindex="-1"></a> );</span>
<span id="cb39-13"><a href="#cb39-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">RETURN</span> <span class="fu">COALESCE</span>(<span class="kw">NEW</span>, <span class="kw">OLD</span>);</span>
<span id="cb39-14"><a href="#cb39-14" aria-hidden="true" tabindex="-1"></a><span class="cf">END</span>;</span>
<span id="cb39-15"><a href="#cb39-15" aria-hidden="true" tabindex="-1"></a>$$ LANGUAGE plpgsql;</span>
<span id="cb39-16"><a href="#cb39-16" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb39-17"><a href="#cb39-17" aria-hidden="true" tabindex="-1"></a><span class="co">-- 应用到敏感表</span></span>
<span id="cb39-18"><a href="#cb39-18" aria-hidden="true" tabindex="-1"></a><span class="kw">CREATE</span> <span class="kw">TRIGGER</span> audit_customer_changes</span>
<span id="cb39-19"><a href="#cb39-19" aria-hidden="true" tabindex="-1"></a> <span class="kw">AFTER</span> <span class="kw">INSERT</span> <span class="kw">OR</span> <span class="kw">UPDATE</span> <span class="kw">OR</span> <span class="kw">DELETE</span> <span class="kw">ON</span> water_customer</span>
<span id="cb39-20"><a href="#cb39-20" aria-hidden="true" tabindex="-1"></a> <span class="cf">FOR</span> <span class="kw">EACH</span> <span class="kw">ROW</span> <span class="kw">EXECUTE</span> <span class="kw">FUNCTION</span> audit_sensitive_data();</span></code></pre></div>
<h3 data-number="1.10.4" id="数据备份与灾备"><span
class="header-section-number">1.10.4</span> 4. 数据备份与灾备</h3>
<h4 data-number="1.10.4.1" id="opengauss备份策略"><span
class="header-section-number">1.10.4.1</span> 4.1 OpenGauss备份策略</h4>
<div class="sourceCode" id="cb40"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 全量备份</span></span>
<span id="cb40-2"><a href="#cb40-2" aria-hidden="true" tabindex="-1"></a>gs_backup <span class="op">-</span>D <span class="op">/</span><span class="kw">data</span><span class="op">/</span><span class="kw">backup</span> <span class="op">-</span>h localhost <span class="op">-</span>p <span class="dv">5432</span> <span class="op">-</span>U backup_user</span>
<span id="cb40-3"><a href="#cb40-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb40-4"><a href="#cb40-4" aria-hidden="true" tabindex="-1"></a><span class="co">-- 增量备份 </span></span>
<span id="cb40-5"><a href="#cb40-5" aria-hidden="true" tabindex="-1"></a>gs_backup <span class="op">-</span>D <span class="op">/</span><span class="kw">data</span><span class="op">/</span><span class="kw">backup</span> <span class="op">-</span>h localhost <span class="op">-</span>p <span class="dv">5432</span> <span class="op">-</span>U backup_user <span class="co">--incremental</span></span>
<span id="cb40-6"><a href="#cb40-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb40-7"><a href="#cb40-7" aria-hidden="true" tabindex="-1"></a><span class="co">-- 归档日志备份</span></span>
<span id="cb40-8"><a href="#cb40-8" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> archive_mode <span class="op">=</span> <span class="kw">on</span>;</span>
<span id="cb40-9"><a href="#cb40-9" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> archive_command <span class="op">=</span> <span class="st">&#39;cp %p /data/archive/%f&#39;</span>;</span></code></pre></div>
<h4 data-number="1.10.4.2" id="主备同步配置"><span
class="header-section-number">1.10.4.2</span> 4.2 主备同步配置</h4>
<div class="sourceCode" id="cb41"><pre
class="sourceCode sql"><code class="sourceCode sql"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="co">-- 主库配置</span></span>
<span id="cb41-2"><a href="#cb41-2" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> synchronous_standby_names <span class="op">=</span> <span class="st">&#39;standby1&#39;</span>;</span>
<span id="cb41-3"><a href="#cb41-3" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> synchronous_commit <span class="op">=</span> <span class="kw">on</span>;</span>
<span id="cb41-4"><a href="#cb41-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb41-5"><a href="#cb41-5" aria-hidden="true" tabindex="-1"></a><span class="co">-- 备库配置</span></span>
<span id="cb41-6"><a href="#cb41-6" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> hot_standby <span class="op">=</span> <span class="kw">on</span>;</span>
<span id="cb41-7"><a href="#cb41-7" aria-hidden="true" tabindex="-1"></a><span class="kw">ALTER</span> <span class="kw">SYSTEM</span> <span class="kw">SET</span> max_standby_streaming_delay <span class="op">=</span> <span class="dv">30</span>s;</span></code></pre></div>
<h3 data-number="1.10.5" id="国产化安全合规"><span
class="header-section-number">1.10.5</span> 5. 国产化安全合规</h3>
<h4 data-number="1.10.5.1" id="等保三级要求"><span
class="header-section-number">1.10.5.1</span> 5.1 等保三级要求</h4>
<ul>
<li><strong>身份鉴别</strong>:支持多因子认证、密码复杂度策略</li>
<li><strong>访问控制</strong>:基于角色的强制访问控制</li>
<li><strong>安全审计</strong>:完整的操作审计和安全事件记录</li>
<li><strong>数据完整性</strong>:数据校验和完整性保护</li>
<li><strong>数据保密性</strong>:敏感数据加密存储和传输</li>
</ul>
<h4 data-number="1.10.5.2" id="国产化认证"><span
class="header-section-number">1.10.5.2</span> 5.2 国产化认证</h4>
<ul>
<li>华为OpenGauss已通过国家密码管理局商用密码产品认证</li>
<li>支持国产SM2/SM3/SM4密码算法</li>
<li>符合《网络安全法》、《数据安全法》等法规要求</li>
</ul>
<p>```sql 使用国产SM4算法加密 CREATE TABLE water_customer_sm4 (
字段定义… ) WITH (ENCRYPTION_TYPE = SM4_CTR);</p>
</body>
</html>