官方PostgreSQL大写约定[关闭]


14

是否有关于DB,表和字段名中大写字母的正式PostreSQL约定?

在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。

CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);

1
另外,还要检查文档的一部分,大约标识符
ypercubeᵀᴹ

Answers:


20

我将基本上反映Verace的评论并将其声明为半官方的:

没有一种最佳实践可以涵盖所有情况。接下来的假设如下(如果您还没有这样做,该怎么办):

  • 您已经与您的团队讨论了这一点(独自工作的人常常必须下定决心)
  • 您的团队中尚无SQL的正式样式定义(否则,您不会问我们)
  • 没有任何代码的形式化样式定义(遵循已经为其他语言建立的相同基本约定并形式化样式)

因此,其余部分有些自以为是,但基于经验

  1. 关于表名
    1. 您应该使用单个实体名称(这使文档更容易)
    2. 您应该在这里使用Pascal Case
  2. 涉及字段名称
    1. 在字段名称上使用camelCase
    2. 使用简短的单数名称,除非该定义绝对适合复数形式(几乎从不这样做)
  3. 关于您自己的函数或存储过程的名称
    1. 使用underscore_separation
    2. 使用字段命名进行参数化
  4. 关于内置数据库功能或语言名称(例如SELECT)
    1. 除非有要求以某种特定的方式将其大写,否则请使用ALL CAPS
    2. 知道您所用语言的API,以了解合理或必要的条件
  5. 关于间距
    1. 很多人对关键字使用列对齐,对不是关键字的事物使用缩进
    2. 当每一行的字段分开时,很多人在行的开头使用逗号(这使得从选择列表中注释掉特定字段变得更容易)
    3. 切勿使用空格作为事物名称的一部分,甚至不要将其用作返回值标题。
  6. 关于标点符号
    1. 括号-使用它们。他们是免费的。我承诺。
    2. 分号-使用它们。他们不会伤害你的。他们迫使您考虑代码。而且他们卫生很好。
    3. 回车-再次免费;-)并使您的代码可读。

您还应该认识到,尽管我在尝试帮助您应用通用的样式指南,但Postgres社区通常不使用camelCase或PascalCase,而是使用underscore_separation。在真正重要的一点是要确保你建立并使用特定的风格,到处是一致的


3
+1表示“真​​正重要的一点是确保在所有地方都建立并使用特定的样式以保持一致。” 一致性是关键。没有它,您必须考虑一些您永远不必考虑的东西。
Max Vernon 2014年

4
嗯,PostgreSQL中的camelCase和PascalCase有点痛苦。如果您确实想拥有这样的名称,则必须引用这些名称,否则系统会默默地将它们小写(我几乎写成大写字母,无论它会引起什么关联)。
dezso 2014年

那数据库名称呢?我应该使用database_namedatabase-nameDatabaseNamedatabaseName,等?
ma11hew28

1
这实际上是PostgreSQL的答案吗?如果您建议在PG特定的答案中使用PascalCase作为表名,我想您应该提到(a)如何处理大多数示例使用小写关键字的事实,以及(b)是引用表名还是让表PG将它们折叠成小写。
AndreKR

@AndreKR就是这样:我希望软件开发人员可以成年,知道如何阅读文档,并与他们的团队讨论如何一致地编写代码。该答案是社区Wiki,这意味着任何人都可以对其进行编辑和改进。我不能确切地说“这是唯一的方法”,仅仅因为有人以小写形式给出示例,并不意味着那是生活中的唯一方法。您必须找到自己的道路,这就是此答案的精神。请随时编辑此社区答案以进行改进。谢谢!
jcolebrand

4

快速的Google会显示许多指示最佳做法的网站。我只想说两件事- 永远不要使用空格“ My Table Name”(由于不同的转义机制,移植变得不可能;对于任何非字母数字字符也是如此)。有了这些机制,您通常也必须尊重大小写。英语(或您自己的)语言中的字母和单词足够多,标识符长度也足够长(我不知道标识符_length <32,PostgreSQL是64的任何系统)。而且永远不要使用SQL关键字(随RDBMS的不同而不同),它们会做同样的事情。

像这样的陈述

SELECT "Field" FROM "Table";

可以有效!绝对关键的是要有一个清晰且相对简单的约定,然后遵守它。人们会发现您有不同的意见-阅读主题并选择适合您的“感觉”。看到这些网站12345,......(还有更多)。


谢谢,我在自己的搜索中偶然发现了许多。我想知道是否有任何官方的样式指南。
亚当·马坦

(singular_table_name / plural_table_name)辩论的两侧都有很多从业人员,他们对我尊重的其他领域的意见。我本人是一个“单身”男人-如果您正在运行一个核电站,则可能会有一个名为catastrophic_meltdown的表,您根本根本不想看到任何记录!给您的主键一个后缀_id,并在子表中将它们称为Parent_Table_Name_FK-这就是我要做的。之后,轻松自如!至于caps / no-caps,我的SQL脚本有驼峰式(无引号),我的语句可能会也可能不会。
Vérace
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.