是否有MySQL的命名约定?

Sta*_*bie 145 mysql naming-conventions mysql-workbench

我是这样做的:

  1. 表名是小写的,使用下划线来分隔单词,并且是单数的(例如'foo','foo_bar'等.
  2. 我一般(并不总是)有一个自动增量PK.我使用以下约定:tablename_id(例如'foo_id','foo_bar_id'等).
  3. 当一个表包含一个外键列时,我只是从它来自的任何表中复制该键的列名.例如,假设表'foo_bar'具有FK'foo_id'(其中'foo_id'是'foo'的PK).
  4. 在定义FK以强制执行参照完整性时,我使用以下命令:tablename_fk_columnname(例如,进一步示例3,它将是'foo_bar_foo_id').由于这是表名/列名组合,因此保证在数据库中是唯一的.
  5. 我订购这样的列:PKs,FKs,然后按字母顺序排列其余列

有没有更好,更标准的方法来做到这一点?

Tom*_*Mac 98

我首先要说的是:保持一致.

我估计你几乎已经有了你在问题中概述的约定.但有几条评论:

我认为第1点和第2点都很好.

第3点 - 遗憾的是,这并不总是可行的.考虑如何处理foo_bar具有列的两个表,foo_id并且another_foo_id两个foo表都引用表foo_id列.您可能想要考虑如何处理这个问题.这虽然是一个角落的情况!

第4点 - 与第3点类似.您可能希望在外键名称的末尾引入一个数字,以满足具有多个引用列的要求.

第5点 - 我会避免这种情况.当您想要在以后添加或删除表中的列时,它为您提供的功能很少,并且会变得很麻烦.

其他一些要点是:

索引命名约定

您可能希望为索引引入命名约定 - 这对您可能要执行的任何数据库元数据工作都有很大帮助.例如,您可能只想调用索引foo_bar_idx1foo_idx1- 完全取决于您,但值得考虑.

奇异与多列名称

在列名和表名中解决复数与单一的棘手问题可能是个好主意.这个主题经常引起数据库社区的激烈争论.我会坚持使用表名和列的单数形式.那里.我说过了.

这里的主要内容当然是一致性!

  • 为了跟进,我发现这对以后来这里的人有帮助:https://launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/#naming-conventions (5认同)

mal*_*wan 20

一致性是任何命名标准的关键.只要它合乎逻辑且一致,那么你就是99%.

标准本身就是个人偏好 - 所以如果你喜欢你的标准,那就用它吧.

要彻底回答你的问题 - 不,MySQL没有首选的命名约定/标准,所以滚动你自己很好(你的看似合乎逻辑).


Dan*_* W. 7

MySQL简要描述了它们或多或少的严格规则:

https://dev.mysql.com/doc/internals/en/coding-style.html

Simon Holywell最常用的MySQL编码方式:

http://www.sqlstyle.guide/

另请参阅此问题: SQL是否有任何已发布的编码样式指南?

  • 这是一个很好的参考。sqlstyle.guide 有一套非常全面的指导方针,几乎涵盖了任何情况。 (2认同)

pau*_*sm4 5

值得庆幸的是,PHP 开发人员并不像我所知道的一些开发社区那样“偏执驼峰式”。

你的惯例听起来不错。

只要它们 a) 简单,b) 一致 - 我没有看到任何问题:)

PS:就我个人而言,我认为5)太过分了......

  • 我喜欢 MySQL 用户不喜欢 CamelCase 的讽刺,以及我们使用的产品名称:MySQL,用 CamelCase 编写 (9认同)
  • @DBX12 迂腐地说,这是 PascalCase,而不是 CamelCase,但你的观点仍然成立。 (3认同)
  • 驼峰式大小写远非偏执,实际上受到许多数据库社区的反对,因为一些 RDBMS 对大小写不敏感,以至于它们会删除大小写(或将所有内容更改为大写),因此事情很快就会变得非常丑陋。 (2认同)

Fab*_*cia 5

简单回答:

\n

嗯,至少是 Oracle 或社区鼓励的命名约定,但是,基本上您必须注意遵循标识符的规则和限制,例如 MySQL 文档中所示:https: //dev.mysql.com /doc/refman/8.0/en/identifiers.html

\n

关于您遵循的命名约定,我认为还可以,只是数字 5 有点不必要,我认为大多数用于管理数据库的可视化工具都提供了对列名称进行排序的选项(我使用 DBeaver,它有它),所以如果目的是让您的桌子有一个漂亮的视觉呈现,您可以使用我提到的这个选项。

\n

根据个人经验,我推荐这个:

\n
    \n
  • 使用小写。当您将数据库从一台服务器迁移到另一台服务器时,这几乎可以确保互操作性。有时,lower_case_table_names配置不正确,您的服务器仅仅因为无法识别您的驼峰命名法或帕斯卡命名法标准(区分大小写问题)而开始抛出错误。
  • \n
  • 简称。简单明了。最简单、最快速的是识别您的表或列,效果越好。相信我,当您在短时间内进行大量不同的查询时,最好让所有查询都易于编写(和读取)。
  • \n
  • 避免使用前缀。除非您对不同应用程序的表使用相同的数据库,否则不要使用前缀。这只会让你的查询变得更加冗长。在某些情况下,这可能很有用,例如,当您想要标识主键和外键时,通常使用表名作为 id 列的前缀。
  • \n
  • 使用下划线分隔单词。如果您仍然想使用多个单词来命名表、列等,那么请使用下划线分隔_the_words,这有助于提高可读性(您的眼睛和紧张的大脑会感谢您的)。
  • \n
  • 始终如一。一旦你有了自己的标准,就遵循它。不要成为制定规则的人,而第一个打破规则的人,这是可耻的。
  • \n
\n

那么“复数与单数”命名又如何呢?嗯,这主要是个人喜好的情况。就我而言,我尝试对表使用复数名称,因为我认为表是元素的集合或包含元素的包,因此复数名称对我来说是有意义的;列的名称为单数,因为我将列视为对这些表元素进行单数描述的属性。

\n