Help us learn about your current experience with the documentation. Take the survey.

约束命名规范

最常见的选择是让 Rails 为数据库约束和索引选择名称,或者让 PostgreSQL 使用默认名称(如果适用)。然而,在 Rails 中定义自定义名称,或在没有使用 ORM 的 Go 应用程序中工作时,遵循严格的命名约定对于提高一致性和可发现性非常重要。

下表描述了自定义 PostgreSQL 约束的命名约定。 目的不是要追溯更改现有数据库中的名称,而是确保未来变更的一致性。

类型 语法 说明 示例
主键 pk_<表名> pk_projects
外键 fk_<表名>_<列名>[_and_<列名>]*_<外键表名> fk_projects_group_id_groups
索引 index_<表名>_on_<列名>[_and_<列名>]*[_and_<部分子句中的列名>]* 索引名称必须全部为小写。 index_repositories_on_group_id
唯一约束 unique_<表名>_<列名>[_and_<列名>]* unique_projects_group_id_and_name
检查约束 check_<表名>_<列名>[_and_<列名>]*[_<后缀>]? 可选后缀应表示验证类型,如 lengthenum。也可用于区分同一列上的多个 CHECK 约束。 check_projects_name_length
check_projects_type_enum
check_projects_admin1_id_and_admin2_id_differ
排他约束 excl_<表名>_<列名>[_and_<列名>]*_[_<后缀>]? 可选后缀应表示执行的排他类型。 excl_reservations_start_at_end_at_no_overlap

注意事项

  • 检查 db/structure.sql 中是否存在冲突。
  • 优先使用前缀而非后缀,因为这样能更快地识别给定约束的类型,并按字母顺序对它们进行分组;
  • 连接列名的 _and_ 可以省略,以使标识符保持在 PostgreSQL 定义的 63 个字符长度限制内。此外,如果难以保持在此限制内,可以尽可能缩写该表示法。
  • 对于为解决特定问题而添加的索引,其名称反映其用途可能是合理的。