是否有一个MySQL的命名约定?

以下是我如何做到这一点:

  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,然后按字母顺序排列其余的列

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

我首先要说的是:一致。

我估计你几乎和你在问题中提到的约定一样。 一些评论虽然:

点1和2是好的,我估计。

第3点 – 遗憾的是这并不总是可能的。 考虑一下你将如何处理一个具有列foo_idanother_foo_idfoo_bar ,它们都引用了foofoo_id列。 你可能要考虑如何处理这个问题。 虽然这是一个angular落的情况!

第4点 – 类似于第3点。您可能需要在外键名称的末尾引入一个数字,以便有多个引用列。

点5 – 我会避免这一点。 它提供了很less的内容,并且在以后想要添加或删除表中的列时会变得头痛。

其他一些要点是:

索引命名约定

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

单数与多列名称

解决列名中的复数与单数的棘手问题以及您的表名称可能是一个好主意。 这个问题经常引起DB社区的大讨论 。 我会坚持单表格和列的单数forms。 那里。 我说过了

这里最主要的是一致性!

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

标准本身是非常个人的偏好 – 所以如果你喜欢你的标准,然后运行它。

为了直接回答你的问题 – 不,MySQL没有一个首选的命名约定/标准,所以你自己的翻译是好的(你的看起来是合乎逻辑的)。

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

你的约定听起来不错。

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

PS:我个人认为5)是过度的…

MySQL对他们的或多或less严格的规则有一个简短的描述:

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

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

http://www.sqlstyle.guide/

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