我不应该在列名中使用驼峰命名法吗?

Lui*_*ipe 5 postgresql database-design naming-convention

我正在使用 Node.js 创建一个 GraphQL API,它迫使我返回camelCase.

在我的 PostgreSQL 数据库中,我目前的所有列都按照camelCase约定命名,但我在想:这是最好的主意吗?

我应该snake_case在数据库列中使用并在后端转换它们吗?

Mor*_*ryx 6

在 Postgres 中使用小写。Postgres 将标识符折叠成小写,除非你双引号你的标识符。为了使 Postgres 操作更容易,请使用 lower_snake。如果您需要绑定到 API 等,您可以创建一个带有“CamelCase”别名的视图。例如,我们使用 Domo 提取的存储在 Postgres 中的数据来执行此操作。


小智 6

快速说明一下这一点,因为您正在使用节点。我发现knex是一个在 Node 中强制构建查询的好工具。它不是 ORM(很多人说这是一种反模式,我倾向于同意)。

如果你使用 knex,你有这个选项:

步骤 1. 使用wrapIdentifier从骆驼转换为蛇

步骤 2. 使用postProcessResponse从蛇转换为骆驼

lodash具有的snakeCase功能camelCase应该会派上用场。

我推荐这些方法的原因是,如果你不这样做,你要么必须使用蛇形变量编写代码(这对于 JS 来说非常特殊),要么你必须以驼峰式命名你的数据库列(并且不断地将您的 SQL 查询列名称包装在 中"),否则您将不得不编写一堆代码,其唯一目的是在两者之间进行转换。


脚注:

我还发现Objection是一种 ORM,它违背了许多反对 ORM 的典型论据,并且非常有用。它位于 knex 之上,提供了一个巨大的 API,用于与数据库交互,但不会完全抽象出您正在与数据库交互的事实。这是一篇与异议相关的主题文章。