TL / DR;
我的db和JSON-Keys中的列名都应该是camelCase
或
我的db和JSON-Keys中的列名都应该是uppercase SNAKE_CASE
长版
我正在设计一个与sqlite数据库通信的REST API。我一直在关注一些谷歌样式指南,特别是JSON的指南。正如它所提到的, camelCase 是JSON的首选样式。我还看到了 snake_case 更容易阅读的评论。
目前,我已经实现了执行SQL查询的函数,将结果作为表对象接收,然后使用json-smart将其转换为实际的JSON字符串。
我在数据库中使用的列名实际上是upper SNAKE_CASE
,因为只有少数引用a standardized format for database column names。这个较高的SNAKE_CASE
列名称将成为返回的JSON中键值对的一部分。
所以,既然我在设计的最初阶段,在我的数据库中使用camelCase列标签或坚持upper CAMEL_CASE
似乎是合理的,从而打破了JSON标准?我不想在应用程序中的sql查询之后转换名称,因为这会增加不必要的复杂性和潜在的性能阻碍。
答案 0 :(得分:1)
你可能会问错误的问题。
一些预赛
作为DBA,通过遵循一个接口指南来命名数据库对象远非最佳实践。我必须作为
的来源用多种语言编写的程序访问数据库。
在SQL中,标识符可能会也可能不会被分隔(用引号括起来)。 SQL标准要求将无限制的标识符折叠为大写。这意味着select camelCase
被处理为CAMELCASE
。要保留大小写,您必须使用分隔标识符select "camelCase"
。
PostgreSQL通过折叠小写而偏离。 (列 foo , Foo 和 FOO 是相同的。)
SQLite通过仅使用双引号来识别标识符,而不是保留大小写。 (列" foo" ," Foo" 和" FOO" 是相同的,但是作为列标题返回的名称会保留CREATE TABLE语句中的大小写,无论您是否使用分隔标识符。)
列名作为键
如果您打算将列名用作json键,那么您的问题才有意义。
PostgreSQL原生支持json 9.3+;默认情况下,它不使用列名作为json键。例如,这里PostgreSQL使用f1,f2,f3和f4作为json键而不是列名" cust_id"," addr_type"等。
select row_to_json(row(cust_id, addr_type, street_addr, city_name))
from test;
row_to_json -- {"f1":1,"f2":"bill","f3":"123 Main St","f4":"Anytown"}
您可以使用公用表表达式获取任意键名。还有其他方法;没有一个特别愉快。
WITH data("custId", "addrType", "streetAddr", "cityName") AS (
select cust_id, addr_type, street_addr, city_name
from test
)
SELECT row_to_json(data) FROM data;
row_to_json -- {"custId":1,"addrType":"bill","streetAddr":"123 Main St","cityName":"Anytown"}
SQLite对json没有任何原生支持。所有json功能都必须来自应用程序代码。
所以你需要问一下,"我用的第一个应用程序语言是什么来从数据库查询创建json密钥?"它可能赢得成为您使用的最后一种语言。而下一个可能会以同样的方式工作。记住这一点。
我不认为我见过一种编程语言,默认情况下会在生成json时读取数据库元数据。