distinct返回null报错_探探PostgreSQL开发规约__PostgreSQL的功能非常强大,但是要把PostgreSQL用好,需要后端、运维、DBA的协力配合。 本文针对Postg...

本文详细介绍了PostgreSQL的开发规约,涵盖了表、索引、函数、字段和变量的命名规则,以及设计规范,如容量规划、存储过程使用、主键与外键策略等。此外,还强调了查询规范,如避免全表扫描、使用索引、处理空值和事务管理的重要性。
摘要由CSDN通过智能技术生成

_。

#### 无特殊理由不应在其他模式中创建对象。

#### **【推荐】 关系命名规则**

#### 关系命名以表意清晰为第一要义,不要使用含混的缩写,也不应过分冗长,遵循通用命名规则。

#### 表名应当使用复数名词,与历史惯例保持一致,但应尽量避免带有不规则复数形式的单词。

#### 视图以v_作为命名前缀,物化视图使用mv_作为命名前缀,临时表以tmp_作为命名前缀。

#### 继承或分区表应当以父表表名作为前缀,并以子表特性(规则,分片范围等)作为后缀。

#### **【推荐】 索引命名规则**

#### 创建索引时如有条件应当指定索引名称,并与PostgreSQL默认命名规则保持一致,避免重复执行时建立重复索引。

#### 用于主键的索引以_pkey结尾,唯一索引以_key结尾,用于EXCLUDED约束的索引以_excl结尾,普通索引以_idx结尾。

#### **【推荐】 函数命名规则***

#### 以select,insert,delete,update,upsert打头,表示动作类型。

#### 重要参数可以通过_by_ids, _by_user_ids的后缀在函数名中体现。

#### 避免函数重载,同名函数尽量只保留一个。

#### 禁止通过BIGINT/INTEGER/SMALLINT等整型进行重载,调用时可能产生歧义。

#### **【推荐】 字段命名规则**

#### 不得使用系统列保留字段名:oid, xmin, xmax,cmin, cmax, ctid等。

#### 主键列通常命名为id,或以id作为后缀。

#### 创建时间通常命名为created_time,修改时间通常命名为updated_time

#### 布尔型字段建议使用is_,has_等作为前缀。

#### 其余各字段名需与已有表命名惯例保持一致。

#### **【推荐】 变量命名规则**

#### 存储过程与函数中的变量使用命名参数,而非位置参数。

#### 如果参数名与对象名出现冲突,在参数后添加_,例如user_id_。

#### **【推荐】 注释规范**

#### 尽量为对象提供注释(COMMENT),注释使用英文,言简意赅,一行为宜。

#### 对象的模式或内容语义发生变更时,务必一并更新注释,与实际情况保持同步。

### **0x02 设计规范**

#### Suum cuique

#### **【强制】 字符编码必须为UTF8**

#### 禁止使用其他任何字符编码。

#### **【强制】 容量规划**

#### 单表记录过亿,或超过10GB的量级,可以考虑开始进行分表。

#### 单表容量超过1T,单库容量超过2T。需要考虑分片。

#### **【强制】 不要滥用存储过程**

#### 存储过程适用于封装事务,减少并发冲突,减少网络往返,减少返回数据量,执行少量自定义逻辑。

#### 存储过程不适合进行复杂计算,不适合进行平凡/频繁的类型转换与包装。

#### **【强制】 存储计算分离**

#### 移除数据库中不必要的计算密集型逻辑,例如在数据库中使用SQL进行WGS84到其他坐标系的换算。

#### 例外:与数据获取、筛选密切关联的计算逻辑允许在数据库中进行,如PostGIS中的几何关系判断。

#### **【强制】 主键与身份列**

#### 每个表都必须有身份列,原则上必须有主键,最低要求为拥有非空唯一约束。

#### 身份列用于唯一标识表中的任一元组,逻辑复制与诸多三方工具有赖于此。

#### **【强制】 外键**

#### 不建议使用外键,建议在应用层解决。使用外键时,引用必须设置相应的动作:SET NULL, SET DEFAULT, CASCADE,慎用级联操作。

#### **【强制】 慎用宽表*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值