2015-02-09 40 views
1

tl/dr;REST API的数据库列命名

都应该在我的数据库和JSON-键的列名是camelCase

都应该在我的数据库和JSON-键的列名是uppercase SNAKE_CASE

龙版

我正在设计一个与sqlite数据库通信的REST API。我一直在关注一些谷歌造型指南,尤其是JSON。正如它提到的,camelCase是JSON的首选样式。我也看到了一条评论,其中snake_case增加了〜20%更容易阅读。

目前,我已经实现了执行SQL查询的函数,将结果作为表对象接收,然后使用json-smart将其转换为实际的JSON字符串。

我一直在数据库中使用的列名真的是upper SNAKE_CASE,因为只有几个参考a standardized format for database column names。此上部SNAKE_CASE列名称成为返回的JSON中键/值对的一部分。

因此,由于我处于设计的最初阶段,在我的数据库中使用camelCase列标签似乎是合理的,还是坚持使用upper CAMEL_CASE,从而违反了JSON标准?我不想在应用程序中的SQL查询之后转换名称,因为这会增加不必要的复杂性和潜在的性能障碍。

+0

就我个人而言,我总是使用PascalCase。 – 2015-02-10 13:04:23

回答

1

您可能会问错误的问题。

一些准备

谈到作为一个DBA,按照一个接口指导是远远最佳实践命名数据库对象。该矿已作为一个来源

  • HTML,
  • JSON,
  • XML,
  • 文本,
  • PDF,
  • SMS(短信),
  • 电子邮件,
  • 直邮和
  • 其他我无法想到顶端我的头。

用多种语言编写的程序访问数据库。

在SQL中,标识符可能会或可能不会被分隔(用引号括起来)。 SQL标准要求将非限定标识符折叠为大写。这意味着select camelCase被处理为CAMELCASE。要保存大小写,您必须使用分隔标识符,如select "camelCase"

PostgreSQL偏差折叠为小写。 (列FOO,和FOO是相同的。)

SQLite的偏离通过使用双引号仅识别的标识符,不保存的情况下。 (列“富”“富”“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时读取数据库元数据。