Supabase项目中的PostgreSQL代码风格指南
前言
在Supabase项目中,PostgreSQL作为核心数据库组件,其代码风格直接影响项目的可维护性和可读性。本文将详细介绍Supabase推荐的PostgreSQL代码风格规范,帮助开发者编写清晰、一致的SQL代码。
基础规范
大小写与格式
- 保留字小写:所有SQL保留字应使用小写,如
select
、from
、where
等 - 标识符命名:使用描述性名称命名表、列等数据库对象
- 空格与缩进:合理使用空格和缩进增强代码可读性
- 日期格式:统一使用ISO 8601格式(
yyyy-mm-ddThh:mm:ss.sssss
)
注释规范
- 复杂逻辑必须添加注释
- 块注释使用
/* ... */
- 行注释使用
--
命名约定
基本原则
- 避免使用SQL保留字
- 名称长度不超过63个字符
- 表名使用复数形式
- 列名使用单数形式
命名风格
- 蛇形命名法(snake_case):适用于表名和列名
- 外键命名:使用
表名单数_id
格式,如user_id
引用users
表
表设计规范
表结构
- ID字段:每个表应包含
id bigint generated always as identity primary key
字段 - 模式指定:默认使用
public
模式 - 表注释:必须添加表注释,说明表用途(不超过1024字符)
示例
create table books (
id bigint generated always as identity primary key,
title text not null,
author_id bigint references authors (id)
);
comment on table books is '图书馆中所有书籍的列表';
查询编写规范
基本查询
- 简短查询:可保持在一行或几行内
- 复杂查询:适当换行增强可读性
示例
-- 简短查询
select * from employees where end_date is null;
-- 复杂查询
select
first_name,
last_name
from
employees
where
start_date between '2021-01-01' and '2021-12-31'
and status = 'employed';
连接与子查询
- 格式化对齐:连接和子查询应与相关SQL子句对齐
- 完整表名:优先使用完整表名而非别名
示例
select
employees.employee_name,
departments.department_name
from
employees
join
departments on employees.department_id = departments.department_id
where
employees.start_date > '2022-01-01';
别名使用规范
- 有意义别名:别名应反映数据或转换操作
- 显式AS关键字:始终使用
AS
关键字声明别名
示例
select count(*) as total_employees
from employees
where end_date is null;
复杂查询与CTE
- 优先使用CTE:对于复杂查询,优先使用公共表表达式(CTE)
- 可读性优先:CTE应清晰线性,可读性优于性能
- 块注释:为每个CTE块添加注释
示例
with department_employees as (
-- 获取所有员工及其部门信息
select
employees.department_id,
employees.first_name,
employees.last_name,
departments.department_name
from
employees
join
departments on employees.department_id = departments.department_id
),
employee_counts as (
-- 统计每个部门的员工数量
select
department_name,
count(*) as num_employees
from
department_employees
group by
department_name
)
select
department_name,
num_employees
from
employee_counts
order by
department_name;
最佳实践总结
- 一致性:保持团队代码风格一致
- 可读性:代码应易于他人理解和维护
- 注释:为复杂逻辑添加充分注释
- 命名:使用描述性、一致的命名方式
遵循这些规范将帮助您在Supabase项目中编写出高质量的PostgreSQL代码,提高团队协作效率和代码可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考