关系数据库PostgreSQL版

数据库使用规范

2024-05-16 06:15:57

命名规范

  • 对象名(如库、表、索引等)字符总长度小于等于63。

  • 禁止对象名(表名、列名、函数名、视图名、序列名等对象名称)使用数据库保留字,不要以pg、数字或下划线开头,具体可参考PostgreSQL官网数据库保留字相关内容。

  • query语句中的别名不要使用 “小写字母,下划线,数字” 以外的字符,例如中文。

  • 建议主键索引应以 pk_ 开头, 唯一索引要以 uk_ 开头,普通索引要以 idx_ 打头。

  • 建议临时表以 tmp_ 开头,子表以规则结尾,例如按年分区的主表如果为tbl,则子表为tbl_2016,tbl_2017。

设计规范

  • 多表中的相同列以及有JOIN需求的列,必须保证列名一致,数据类型一致。

  • btree索引字段不建议超过2000字节,如果有超过2000字节的字段需要建索引,建议使用函数索引(例如哈希值索引),或者使用分词索引。

  • 使用外键时,如果你使用的RDS-PostgreSQL版本没有自动建立fk的索引,则必须要对foreign key手工建立索引,否则可能影响references列的更新或删除性能。

  • 出于全球化的考略,建议所有的字符存储与表示均以UTF-8编码。

  • 表结构设计应该预先规划,避免经常修改表结构,建议单表字段数不超过64个。

  • 建议有定期历史数据删除需求的业务表建议分区,例如以时间分区,清理数据时建议通过DROP或者TRUNCATE操作对应的表,不要使用DELETE。

SQL规范

  • 查询时指定返回需要的字段,不要返回用不到的字段。

  • 查询条件中,建议使用NOT EXISTS替代NOT IN。

  • 查询或比较字段是否为NULL时,只能使用IS NULL或IS NOT NULL条件。

稳定性与性能规范

  • 在代码中写分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句。

  • 两阶段提交的事务,要及时提交或回滚,否则可能导致数据库膨胀。

  • 建议使用truncate代替delete操作全表。

  • 建议客户应用程序开启autocommit,同时避免应用程序自动begin事务,并且不进行任何操作的情况发生,某些框架可能会有这样的问题。

  • 高并发业务场景下,务必使用绑定变量(prepared statement),防止数据库硬解析消耗过多的CPU资源。

管理规范

  • 在执行DDL操作数据尤其是删除和修改数据记录场景下,要先select,避免出现误删除,确认无误才能提交执行。

  • 用户可以使用explain analyze查看实际的执行计划,但是如果需要查看的执行计划设计数据的变更,必须在事务中执行explain analyze,然后回滚。

  • 建议为数据库访问账号设置复杂密码。

  • 建议用户做账户权限控制,避免大量使用高权限用户操作。


z5TPJfRpO8Jc