表名和列名:PostgreSQL 中的命名约定
在 PostgreSQL 中,表名和列名遵循特定的命名约定。其中一种约定是这些名称不能以数字字符开头。此限制由 SQL-92 标准定义(可在 http://en.wikipedia.org/wiki/SQL-92 访问),该标准指定标识符开头应为简单的拉丁字母。
虽然此命名约定可能与编程中的常见做法不同,这种设计选择有多种原因。
标识符开始特征
在 SQL 中,标识符(包括表名和列名)被定义为最多 63 个字符的字符串。这些字符串必须以拉丁字母或下划线开头,后续字符为字母、数字或下划线。
语法歧义
如果允许以表名和列名开头对于数字字符,解析过程中可能会出现歧义。考虑以下示例:
SELECT 2e2 3.4 FROM ...
在此查询中,解析器将不确定 2e2 和 3.4 是否表示列名或数字表达式。当标识符以字母开头时,歧义性就会消除,解析器可以快速正确地识别表达式。
设计一致性
通过强制标识符以字母开头的约定,SQL标准保证了解析和执行的一致性。如果允许数字前导字符,则需要额外的规则来区分标识符和数字表达式,这可能会导致复杂的解析算法并降低可读性。
双引号名称
虽然默认情况下不允许使用数字前导字符,但可以通过将名称括在双引号中来使用它们。这将创建一个覆盖标准命名约定的带引号的标识符。例如,表名 15909434_user 可以使用双引号创建:
CREATE TABLE "15909434_user" ( ... )
使用双引号提供了灵活性,并允许创建以下名称:不遵守标准约定。但是,需要注意的是,带引号的标识符不太清晰,并且可能更容易出错。
以上是PostgreSQL 表和列命名约定如何避免解析歧义?的详细内容。更多信息请关注PHP中文网其他相关文章!