这已经困扰了我一段时间,我不能在那个感觉达成解决办法...
给出其中为对象属性通常的命名约定驼峰格式的面向对象的语言,并且像这样的一个例子对象:
{
id: 667,
firstName: "Vladimir",
lastName: "Horowitz",
canPlayPiano: true
}
我应该如何在PostgreSQL表这种结构的模型?
主要有三种选择:
- 不带引号的驼峰列名
- 引述驼峰列名
- 用下划线加引号(小写)名称
他们每个人都有自己的缺点:
未加引号的标识符自动折叠为小写。 这意味着,你可以创建一个表,一个
canPlayPiano
列,但混合的情况下从未达到的数据库。 当您检查表,列将始终显示为canplaypiano
-在psql里,pgAdmin的,解释的结果,错误信息,应有尽有。带引号的标识符保持他们的情况,但一旦你喜欢创建它们,你将永远有引用它们。 IOW,如果你创建了一个表
"canPlayPiano"
栏,SELECT canPlayPiano ...
将失败。 这增加了很多不必要的噪声对所有SQL语句。用下划线小写名称是明确的,但他们没有很好地映射到应用程序的语言使用的名称。 你必须记住存储(使用不同的名称
can_play_piano
)和代码(canPlayPiano
)。 它还可以防止某些类型的代码自动化的,其属性与DB列需要命名一样。
所以,我是一个岩石和硬地之间夹(和一块大石头,有三个选项)。 无论我做什么,有些部分是会感到尴尬。 在过去的10年中,我一直在使用选项3,但我一直希望会有更好的解决方案。
我对你可能有任何建议表示感谢。
PS:我不知道那里的情况折叠和需要报价是从哪里来的 - SQL标准,或者说标准的PostgreSQL的调整。 我知道它是如何工作的; 我更感兴趣的是关于比约PG如何处理标识符解释最佳实践的建议。