小编典典

MySQL 有命名约定吗?

all

这是我的做法:

  1. 表名是小写的,使用下划线分隔单词,并且是单数的(例如foo,foo_bar等。
  2. 我通常(不总是)有一个自动增量PK。我使用以下约定:(tablename_id例如foo_idfoo_bar_id等)。
  3. 当一个表包含一个作为外键的列时,我只需从它来自的任何表中复制该键的列名。例如,说 tablefoo_bar有 FK foo_idfoo_id的 PK在哪里foo)。
  4. 在定义 FK 以强制引用完整性时,我使用以下内容:(tablename_fk_columnname例如,进一步示例 3,它将是foo_bar_foo_id)。由于这是一个表名/列名组合,因此保证在数据库中是唯一的。
  5. 我像这样对列进行排序:PK、FK,然后按字母顺序排列其余列

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


阅读 65

收藏
2022-07-17

共1个答案

小编典典

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

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

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

第 3 点 -
遗憾的是,这并不总是可能的。考虑一下您将如何处理foo_bar具有列foo_idanother_foo_id两者都引用foofoo_id列的单个表。您可能要考虑如何处理这个问题。不过,这有点极端!

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

第 5 点 - 我会避免这种情况。当您想在以后从表中添加或删除列时,它为您提供的很少,并且会变得令人头疼。

其他几点是:

索引命名约定

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

单数与复数列名

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

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

2022-07-17