Navicat 博客

SQL 中命名约定的快速指南 - 第 2 部分 2023 年 3 月 31 日 ,由 Robert Gravelle 撰写

列名

欢迎来到 SQL 命名约定系列的第 2 部分。正如 第 1 部分中提到的,命名约定是一组规则(成文的或未成文的),用来提高数据模型的可读性。这些规则几乎可以应用于数据库中的所有内容,包括表、列、主键和外键、存储过程、函数、视图等。在第 1 部分中介绍了命名表的规则后,我们会在本文讲述有关列名的规则。而第 3 部分将介绍其他数据库对象,例如过程、函数和视图。

主键列

主键是表中的一个字段或一组字段,用于唯一标识表中每一条记录。一个表只能有一个主键。因此,许多 DBA 会简单直接地将此列命名为“id”。或者有人会将“_id”后缀加到表名,例如 Sakila 示例数据库中的表:

actor_id_column (50K)

同样,你也应该为主键约束取一个有意义的名称。主键约束的命名约定是名称应该有一个“pk_”前缀,后面就是表名,即“pk_<table_name>”。

外键列

外键是表中引用其他表中主键的字段。一个好的规则是使用被引用的表名和“_id”,例如 customer_id、employee_id。这将有助于我们将该字段识别为外键列,同时也让我们知道被引用的是哪个表。

以下是 city 表,它有一个外键,引用 country 表的 country_id 字段:

country_id_foreign_key (50K)

外键约束的命名约定是名称有一个“fk_”前缀,后面是目标表名,然后是源表名。因此,语法应为“fk_<target_table>_<source_table>”。

遵循外键约束命名约定,city 表的外键约束名称会是“fk_city_country”:

fk_city_country_foreign_key (36K)

数据列

第 1 部分的“描述现实世界的实体”一节中提及:

任何时候命名代表现实世界事物的实体时,都应该使用它们的专有名词。这适用于 employee、customer、city、country 等表。通常,一个词应该就能准确描述该表中的内容。

相同的规则可以而且应该应用于数据列。同样,你应该尽量使用最少的词语来描述存储在该列中的内容,例如 country_name、country_code、customer_name。如果有两个表具有相同名称的列,你可以添加一些词语以保持名称是唯一,但这并不是绝对必要的,因为表前缀将区分查询中的列。尽管如此,为每一列使用唯一的名称是有好处的,因为它减少了以后在编写查询时把这两列混淆的机会。像 customer_name、city_name 这样的名称很可能出现在多个表中。如果你有此顾虑,可以使用更具描述性的名称,例如 order_customer_name 或 city_of_residence_name。

日期

在日期方面,名称最好是能描述该日期代表什么。像 start_date 和 end_date 这样的名称是非常常见且普通。所以使用 call_start_date 和 call_end_date 之类的名称可以更准确地描述它们。

关于 SQL 中列命名约定的结语

从所有提供的示例中,你应该察觉到表名和列名都是小写的,而且单词之间用下划线(“_”)分隔。例如,customer_name 和 invoice_date,而不是 customerName 和 invoiceDate。这与将语句名称、子句和其他关键字大写的 SQL 样式约定配合得很好,令高代码更容易阅读,例如 SELECT customer_name, invoice_date FROM orders;

Navicat 文章
频道条目
分享
文章归档