下划线或驼峰在PostgreSQL的标识符,当编程语言使用驼峰?(Underscores or ca

2019-07-30 04:26发布

这已经困扰了我一段时间,我不能在那个感觉达成解决办法...

给出其中为对象属性通常的命名约定驼峰格式的面向对象的语言,并且像这样的一个例子对象:

{
    id: 667,
    firstName: "Vladimir",
    lastName: "Horowitz",
    canPlayPiano: true
}

我应该如何在PostgreSQL表这种结构的模型?

主要有三种选择:

  1. 不带引号的驼峰列名
  2. 引述驼峰列名
  3. 用下划线加引号(小写)名称

他们每个人都有自己的缺点:

  1. 未加引号的标识符自动折叠为小写。 这意味着,你可以创建一个表,一个canPlayPiano列,但混合的情况下从未达到的数据库。 当您检查表,列将始终显示为canplaypiano -在psql里,pgAdmin的,解释的结果,错误信息,应有尽有。

  2. 带引号的标识符保持他们的情况,但一旦你喜欢创建它们,你将永远有引用它们。 IOW,如果你创建了一个表"canPlayPiano"栏, SELECT canPlayPiano ...将失败。 这增加了很多不必要的噪声对所有SQL语句。

  3. 用下划线小写名称是明确的,但他们没有很好地映射到应用程序的语言使用的名称。 你必须记住存储(使用不同的名称can_play_piano )和代码( canPlayPiano )。 它还可以防止某些类型的代码自动化的,其属性与DB列需要命名一样。

所以,我是一个岩石和硬地之间夹(和一块大石头,有三个选项)。 无论我做什么,有些部分是会感到尴尬。 在过去的10年中,我一直在使用选项3,但我一直希望会有更好的解决方案。

我对你可能有任何建议表示感谢。

PS:我不知道那里的情况折叠和需要报价是从哪里来的 - SQL标准,或者说标准的PostgreSQL的调整。 我知道它是如何工作的; 我更感兴趣的是关于比约PG如何处理标识符解释最佳实践的建议。

Answer 1:

鉴于PostgreSQL使用区分大小写的标识符用下划线,你应该改变所有的标识符在应用程序中做? 显然不是。 那么,为什么你认为相反是一个合理的选择?

在PostgreSQL的公约已经通过标准符合性和用户的长期经验的混合来约。 坚持下去。

如果列名和标识符之间的转换变得单调乏味,让电脑做 - 他们擅长之类的东西。 我猜几乎所有的900万的数据库抽象库在那里可以做到这一点。 如果你有一个动态语言,它会带你所有的两行代码交换列名标识符首字母大写。



Answer 2:

如果你列PostgreSQLunderscores ,你可以把别名但逗乐引号

例如:

SELECT my_column as "myColumn" from table;


文章来源: Underscores or camelCase in PostgreSQL identifiers, when the programming language uses camelCase?