一尘不染

MySQL是否有命名约定?

mysql

这是我的方法:

  1. 表名是小写,下划线的用途来分隔词语,并且是单数(例如foofoo_bar
  2. 我通常(并非总是)具有自动增量PK。我用下面的约定:tablename_id(例如foo_idfoo_bar_id等)。
  3. 当表包含作为外键的列时,我只需从它来自的任何表中复制该键的列名。例如,假设表格foo_bar具有FK foo_idfoo_id的PK foo)。
  4. 在定义FK来强制引用完整性时,我使用以下代码:(tablename_fk_columnname例如,扩展示例3,它将是foo_bar_foo_id)。由于这是表名/列名的组合,因此可以保证它在数据库中是唯一的。
  5. 我按如下顺序排列列:PK,FK,然后按字母顺序排列其余列

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


阅读 188

收藏
2020-05-17

共1个答案

一尘不染

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

我认为您在问题中概述的约定几乎都在那里。不过有几点评论:

我认为第1点和第2点很好。

第3点-不幸的是,这并不总是可能的。考虑一下您将如何处理一个foo_bar包含列foo_id并且another_foo_id都引用foofoo_id列的表。您可能要考虑如何处理此问题。虽然这是一个极端的情况!

第4点-与第3点类似。您可能希望在外键名称的末尾引入一个数字,以适应具有多个引用列的情况。

第5点-我会避免这种情况。它给您带来的好处很少,以后要在表中添加或删除列时,将变得很头疼。

其他一些要点是:

索引命名约定

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

单列名称与复数列名称

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

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

2020-05-17