13.2 数据库设计规范
13.2.7 字段设计规范
SMALLSERIAL,SERIAL,BIGSERIAL 禁止 整数类型 TINYINT, SMALLINT, INTEGER, BIGINT 推荐 任意精度类型 NUMERIC/DEMICAL 推荐 浮点类型 REAL/FLOAT4,DOUBLE PRECISION/
FLOAT8,FLOAT 推荐
数据类型 说明 是否推荐
布尔类型 BOOLEAN 推荐
定长字符 CHAR(n) 推荐
变长字符 VARCHAR(n),NVARCHAR2(n) VARCHAR/TEXT
推荐
时间类型 DATE, TIME, TIMESTAMP, SMALLDATETIME, INTERVAL, REALTIME
推荐
TIMETZ,TIMESTAMPTZ 不推荐
二进制类型 BYTEA(变长二进制类型) 推荐
CLOB(字符大对象),BLOB(二进制大 对象),RAW(变长十六进制) 禁止 位串类型 BIT(n), VARBIT(n) 推荐 特殊字符类型 NAME,"CHAR",通常供数据库系统内
部使用
禁止
JSON类型 JSON类型目前不支持操作符 禁止
自定义类型 可用于定义枚举EMU等类型 禁止
HLL数据类型 建议直接使用HLL相关函数,减少性能 影响
禁止
货币类型 MONEY 存储带有固定小数精度的货币 金额
禁止
几何类型 POINT, LSEG, BOX, PATH, POLYGON,
CIRCLE 禁止
网络地址类型 存储IPV4 IPV6 MAC地址数据类型 禁止
文本搜索类型 用于支持全文检索 禁止
● 合理选用字符串数据类型。优先使用变长字符类VARCHAR。只有该字段输入确定 为固定字符则使用定长字符类型,或需要自动补充空格,才使用CHAR(n)。
说明
典型的定长字段类型,例如“sex”字段,仅允许输入“f”或“m”一个字节长度的字 符。这类字段建议使用定长数据类型(如CHAR(n))。
如果不存在此特点,或者后续可能扩展需要输入更长的字符,请优先使用变长字符类型
(如VARCHAR, TEXT),且不建议指定变长类型的长度。
原因如下:
● 字符类型字段不应存储数字类型的数据。
● 对于明确不存在NULL值的字段加上NOT NULL约束。
对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性 能。
● 相关联字段的数据类型应保持一致。
在进行关联操作时,如果字段类型不一致,会带来数据类型转换开销。
● 大字段(例如varchar(1000)、varchar(4000))不建议超过8个。
● 字段定义时建议同时创建COMMENT注释信息,以便于未来维护。
不同类型字段说明、取值范围及使用方法请参考数据类型章节。
● 用于WHERE条件过滤和关联的字段都应设置NOT NULL约束。
对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性 能。
● 不建议对表预留字段。大部分场景下可支持快速新增、删除表字段,或者修改字 段的DEFAULT值。
说明
新增列必须符合以下要求,否则会带来全表更新开销,影响在线业务。
● 数据类型为以下类型中的一种:BOOL, BYTEA, SMALLINT, BIGINT, SMALLINT, INTEGER, NUMERIC, FLOAT, DOUBLE PRECISION, CHAR, VARCHAR, TEXT, TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ, INTERVAL;
● 新增列的DEFAULT值长度不超过128个字节;
● 新增列DEFAULT值不包含volatile函数;
● 新增列设置有DEFAULT值,且DEFAULT值不为NULL。
如果不确定是否满足条件,请联系数据库技术人员进行评估。
TINYINT 1 0 255
SMALLINT 2 -32768 32767
类型 存储 空间
最小值 最大值
INTEGER 4 -2,147,483,648 2,147,483,647 BIGINT 8 -9,223,372,036,854,7
75,808 9,223,372,036,854,775 ,807
REAL/FLOAT4 4 6位十进制数字精度 DOUBLE 型,建议联系GaussDB(for openGauss)数据库专家进行评估。
表
13-9 数据库索引实践推荐
例如已对(a,b,c)创建索引,则不应再单独对 (a)、(b)、(c)、(a,b)、(b,c)创 建索引。
GaussDB(for openGauss)支持HASH JOIN,但是当内表较小等RESCAN代价较低 的情况下,仍然可能选择NESTLOOP JOIN来完成关联。如果通过EXPLAIN可以查 看到NESTLOOP JOIN计划,则可以通过在关联列上创建索引,提高NESTLOOP JOIN效率。