---
name: kd-enterprise-db
description: 企业版数据库规范。DDL 表结构设计/DML 查询更新/事务约束。
alwaysApply: false
---

# 企业版数据库规范

## DDL 表结构
- 【强制】表名/视图名：`{ISV标识符}_T_{名称}`（如 `ABC_T_USER`）
- 【强制】字段名：`F_{ISV标识符}_{名称}`（如 `F_ABC_USERNAME`）
- 【强制】表必须有物理主键，建立聚集索引
- 【推荐】主键原则使用整型（不允许用自增长主键）
- 【强制】业务对象表名 ≤ 26 字符，字段名 ≤ 30 字符
- 【强制】禁止修改标准产品视图
- 【强制】禁止删除物理表（临时表除外）
- 【强制】禁止使用触发器
- 【推荐】不建议使用存储过程
- 【推荐】大字段单独放一个表
- 【强制】主键和索引字段的值不允许为 null
- 【强制】GUID 字段不允许建立为聚集索引
- 【强制】主从关系表，从表需要引用主表中的字段，字段名一致，外键建非聚集索引
- 【强制】数量/金额类型：必须用 `Decimal`，禁止为空，默认值为 0，禁止 `Double`/`Float`/`Money`，固定 `Decimal(23,10)`
- 【强制】Not null 属性的字段必须设置缺省值
- 【强制】多语言字段单独放一张表，外键字段必须建非聚集索引
- 【强制】临时表必须显式创建，使用完毕必须显式删除

## DML 查询更新
- 【强制】任何查询/更新/删除语句都要带过滤条件
- 【强制】查询条件必须使用参数化查询
- 【推荐】保持事务简短并处于一个批处理中
- 【推荐】查询报表等使用较低的隔离级别，提高并发能力
- 【强制】必须使用 `JOIN` 语句进行表间连接，禁止 `WHERE` 条件做表连接
- 【推荐】`JOIN` 表数量控制在 10 个以内
- 【强制】预插数据 `INSERT` 前必须按主键匹配删除再插入
- 【强制】一次批量提交 SQL 不超过 500 条
- 【推荐】可以关联物理表实现的 SQL 语句不要关联视图
- 【强制】禁止使用 `*=` / `=*` 外部联接运算符
- 【强制】`ORDER BY` 子句字段别名禁止使用表别名作为前缀
- 【推荐】不要在 `WHERE` 条件的 `=` 左边做函数/算术运算
- 【推荐】不要在 `WHERE` 条件中使用函数（不能利用索引）
- 【推荐】`WHERE` 中使用明确的字段类型值，避免隐式转换
- 【推荐】`WHERE` 中不要使用 `CASE` 条件
- 【推荐】连续数值用 `BETWEEN` 替代 `IN`
- 【推荐】`IN` 子句查询值 > 30 个时使用表函数实现
- 【强制】严禁直接删库

## 事务
- 【强制】禁止在事务内上传文件（文件上传耗时，造成资源长期锁定）
- 【强制】禁止在事务内跨库写（单个事务中不允许对两个及以上物理库写操作）
- 【强制】禁止跨微服务节点事务
- 【强制】二开插件禁止关闭操作的事务
- 【强制】禁止在操作事务中主动释放网控