一些背景信息:
(ANSI) SQL 标准要求非带引号的标识符以全部大写形式存储在系统目录中,并且非带引号的标识符不区分大小写。
根据标准,以下未加引号的标识符引用同一对象(例如表):FOOBAR
, foobar
, FooBar
(并且所有内容都将存储为FOOBAR
在系统目录中)。
下列quoted标识符引用 3 个不同的对象:"FOOBAR"
, "foobar"
, "FooBar"
.
几乎所有 DBMS 至少都遵守非引号标识符必须区分大小写的要求不敏感的。据我所知,除了 MySQL 和 SQL Server - 两者都可以配置为区分大小写,即使对于不带引号的标识符也是如此。我不确定 SQL Server 的默认行为是什么(正如 Damien 在他的评论中指出的那样,这取决于 SQL Server 使用的排序规则)。
MySQL 更令人困惑,因为它的行为取决于多个配置设置、存储引擎和文件系统的组合。我所知道的所有其他 DBMS 在所有平台和安装上的行为都是一致的。
PostgreSQL 遵守大小写,但将所有内容折叠为小写。
因此,鉴于这些规则,我think使用下划线的“传统”命名约定源于对象名称以大写形式存储的事实。获得“可读”名称的唯一方法是用下划线分隔名称的重要部分。
SQL Server 甚至更加非标准,因为它保留大小写(类似于 Windows 下 NTFS 的工作方式),因此它不会将名称折叠为任何内容。因此,当名称存储在系统目录中时,它不会更改名称的大小写(但默认情况下不区分大小写)。出于这个原因,您会发现在 Microsoft 环境中工作的人们使用 CamelCase 的频率比例如在 Microsoft 环境中工作的人更频繁。在 Oracle 环境中。