# 数据库规范
### 数据库对象命名规范
| 数据对象类型         | 命名规则                                 | 最大长度 | 备注                                                   | 示例                                                         |
| -------------------- | ---------------------------------------- | -------- | ------------------------------------------------------ | ------------------------------------------------------------ |
| 表                   | t\_+【系统标识+\_+名称】                 | 24       | 若为表体则再加上entry标识。                            | T_BAS_USER                                                   |
| 字段                 | F+名称                                   | 30       |                                                        | FUSERNAME                                                    |
| 视图                 | V_+【系统标识+_+名称】1                  | 24       |                                                        | V_BAS_USER                                                   |
| 存储过程             | P_+【系统标识+_+名称】                   | 30       |                                                        | P_BAS_GETUSERLIST                                            |
| 主键                 | PK_+【系统标识+_+名称】1                 | 25       |                                                        | PK_BAS_USER                                                  |
| 外键                 |                                          |          | 禁止使用                                               |                                                              |
| 索引（包括唯一性索引 | IDX_+系统标识+_表\\表缩写+字段\\字段缩写 | 30       | 对于超长的表和字段可使用缩写，缩写建议为单词首字母组合 | IDX_T_BAS_USER_FID<br>IDX_BAS_FNAME<br>IDX_BAS_BCRE_FRULEID(单据代码规则分录表规则ID索引)<br>IDX_BAS_BCRL_FRULEID（单据代码规则多语言表规则ID索引） |

### 常用字段命名规范
| 字段描述       | 字段名称     |
| -------------- | ------------ |
| 创建人         | FCREATORID   |
| 创建日期       | FCREATEDATE  |
| 创建时间       | FCREATETIME  |
| 物料内码       | FMATERIALID  |
| 修改人         | FMODIFIERID  |
| 修改日期       | FMODIFYDATE  |
| 修改时间       | FMODIFYTIME  |
| 审核人         | FAUDITORID   |
| 审核日期       | FAUDITDATE   |
| 禁用人         | FDISABLERID  |
| 禁用日期       | FDISABLEDATE |
| 启用           | FDISABLE     |
| 禁用           | FENABLE      |
| 状态           | FxxxSTATUS   |
| 主键           | FID          |
| 从表主键       | FENTRYID     |
| 子从表主键     | FDETAILID    |
| 业务对象       | FFORMID      |
| 编码           | FNUMBER      |
| 名称           | FNAME        |
| 全名           | FFULLNAME    |
| 助记码         | FSHORTNUMBER |
| 顺序号（序号） | FSEQ         |
| 描述           | FDESCRIPTION |
| 备注           | FCOMMENT     |
| 组织类型       | FORGTYPE     |
| 组织           | FORGID       |
| 金额           | FxxxAMOUNT   |
| 数量           | FxxxQTY      |

### 字段类型规范
| 数据类型    | 长度               | Sql server     | Oracle        | MySQL                           | Postgresql                                   |
| ----------- | ------------------ | -------------- | ------------- | ------------------------------- | -------------------------------------------- |
| CHAR        | [1,254]            | CHAR[(n)]      | CHAR[(n)]     | CHAR[(n)]                       | CHAR[(n)]                                    |
| VARCHAR     | [1,4000]           | VARCHAR[(n)]   | VARCHAR2(n)   | VARCHAR(n)                      | character varying(n),<br>varchar(n) (最大1G) |
| NCHAR       | [1,2000]           | NCHAR[(n)]     | NCHAR[(n)]    | VARCHAR(n)                      | CHAR[(n)]                                    |
| NVARCHAR    | [1,4000]           | NVARCHAR[(n)]  | NVARCHAR2(n)  | VARCHAR(n)                      | VARCHAR TEXT                                 |
| NCLOB       | [1,1G]             | NTEXT          | NCLOB         | TEXT                            | Text                                         |
| SMALLINT    | [-2^15,2~15-1]     | SMALLINT       | NUMBER(5)     | SMALLINT                        | Smallint                                     |
| INT,INTEGER | [-2^31,2~31-1]     | INT            | NUMBER(10)    | INT                             | Integer                                      |
| DECIMAL     | [-10^31+1,10^31-1] | DECIMAL(23,10) | NUMBER(23,10) | DECIMAL(23,10)<br>Decimal(19,6) | Decimal(23,10)<br>Decimal(19,6)              |
| DATETIME    |                    | DATETIME       | DATE          | DATETIME                        | DATE TIME TIMESTAMP                          |

#### 使用KSQL框架的系统，允许使用的类型有：
- SMALLINT
- INT
- CHAR
- NCHAR
- VARCHAR
- NVARCHAR
- NCLOB
- DECIMAL
- DATETIME

<tips></tips>注意：KSQL不支持布尔类型，布尔类型使用CHAR(1)

### 表结构设计规范

1. 一个表的所有字段的总字节长度之和不能大于8k（对于LOB、Image以及nText类型的长度不计算在内）。
2. 新建数据表时，必须定义主键（可以为非聚集的）。
3. 新建数据库时，必须拥有聚集索引。
4. 新表结构字段个数不能超过50，如果超过必须进行表拆分。根据标准，行业，自定义类字段进行分表存储
5. 如果预计表存储的数据量将会很大，需要增加分区依据字段，以保证将来能够对表进行物理分区。（指南）
6. 数据表字段值不允许为null
7. 基础或公共数据表的内部ID进行统一分配。（分配）
8. 多语言字段单独放在一张表中


### 字段设计规范

1. 主从关系中，从表需要引用主表中某个字段，对应字段名称要求一致。
2. 一般数量、金额类型：必须使用精确数值类型，如：Decimal，禁止为空，指定默认值为0；禁止使用Double、Float、Money等非精确类型，对这种类型固定为Dicemal(23,10)、Dicemal(19,6)。
3. 在使用Dicemal数值类型时必须明确指定小数精度。
4. 对于nchar字段的使用要非常慎重，存入的内容长度必须严格等于字段定义长度。
5. 字符类型的长度要根据实际情况确定，不能毫无根据的使用默认255位。
6. Not null属性的字段，必须设置缺省值。
7. 整型数据类型，根据表中实际可能存储的值来确定，不能一律使用int类型。
8. 同样业务意义的字段定义必须一致