是否有MySQL的命名约定?

Is there a naming convention for MySQL?

我是这样做的:

  • 表名是小写,使用下划线分隔单词,并且是单数(例如"foo"、"foo_bar"等)。
  • 我通常(不总是)有一个自动递增的pk。我使用以下约定:tablename_id(例如"foo_id"、"foo_bar_id"等)。
  • 当一个表包含一个作为外键的列时,我只是从它来自的任何表中复制该键的列名。例如,假设表"foo_bar"具有fk"foo_id"(其中"foo_id"是"foo"的pk)。
  • 在定义FK以实现引用完整性时,我使用以下内容:tablename_fk_columnname(例如,进一步的示例3,它将是"foo_bar_foo_id")。由于这是表名/列名的组合,因此保证在数据库中是唯一的。
  • 我按如下顺序排列列:pks、fks,然后按字母顺序排列其余列
  • 有没有更好、更标准的方法来做到这一点?


    我首先要说的是:始终如一。

    我认为你已经接近你在问题中概述的惯例了。不过,有几条评论:

    我想1点和2点不错。

    第3点——遗憾的是,这并不总是可能的。考虑如何处理一个单表foo_bar,该表有列foo_id和列another_foo_id,这两个列都引用foofoo_id列。你可能想考虑如何处理这个问题。不过,这有点不切实际!

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

    第5点-我会避免的。它为您提供了很少的信息,当您以后想要在表中添加或删除列时,它将成为一个头痛的问题。

    其他一些要点包括:

    索引命名约定

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

    单数与复数列名

    在列名和表名中处理复数与单数的棘手问题可能是一个好主意。这个主题经常在数据库社区引起大的争论。对于表名和列,我将坚持使用单数形式。在那里。我已经说过了。

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


    一致性是任何命名标准的关键。只要它是合乎逻辑和一致的,你就有99%在那里。

    标准本身是非常个人的偏好-所以如果你喜欢你的标准,那么就用它来运行。

    要直接回答您的问题-不,MySQL没有首选的命名约定/标准,所以滚动您自己的命名是可以的(而且您的命名似乎是合乎逻辑的)。


    MySQL对其或多或少严格的规则有一个简短的描述:

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

    Simon Holywell为MySQL编写的最常见编码样式:

    http://www.sqlstyle.guide/

    另请参见此问题:是否有任何已发布的SQL编码风格指南?


    值得庆幸的是,PHP开发人员并不像我认识的一些开发社区那样"驼峰案例偏执者"。

    你的习俗听起来不错。

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

    PS:就我个人而言,我认为这太过分了…