我是这样做的:
- 表名小写,使用下划线分隔单词,并且是单数(例如
foo
、foo_bar
等 - 我通常(并非总是)有一个自动增量 PK。我使用以下约定:
tablename_id
(例如foo_id
、foo_bar_id
等)。 - 当一个表包含一个作为外键的列时,我只需从它来自的任何表中复制该键的列名。例如,假设表
foo_bar
具有 FKfoo_id
(其中foo_id
是foo
的 PK)。< - 在定义 FK 以强制引用完整性时,我使用以下内容:
tablename_fk_columnname
(例如,在示例 3 中,它将是foo_bar_foo_id
)。由于这是一个表名/列名组合,因此保证在数据库中是唯一的。 - 我对列进行排序:PK、FK,然后按字母顺序排列其余列
有没有更好、更标准的方法来做到这一点?
最佳答案
我首先要说的是:保持一致。
我认为您在问题中概述的约定几乎就在那里。不过有几点评论:
我认为第 1 点和第 2 点很好。
第 3 点 - 遗憾的是,这并不总是可行的。想一想您将如何处理具有列 foo_id
和 another_foo_id
的单个表 foo_bar
,这两个列都引用了 foo
表 foo_id
列。您可能要考虑如何处理这个问题。不过,这有点极端!
第 4 点 - 类似于第 3 点。您可能希望在外键名称的末尾引入一个数字,以适应多个引用列。
第 5 点 - 我会避免这种情况。当您想在以后从表中添加或删除列时,它几乎不会为您提供任何帮助。
其他几点是:
索引命名约定
您可能希望为索引引入一个命名约定 - 这对于您可能想要执行的任何数据库元数据工作都有很大帮助。例如,您可能只想调用索引 foo_bar_idx1
或 foo_idx1
- 完全取决于您,但值得考虑。
单数与复数列名
在列名和表名中解决复数与单数的棘手问题可能是一个好主意。这个主题经常导致big debates在数据库社区。我会坚持表名和列的单数形式。那里。我已经说过了。
这里最重要的当然是一致性!
关于mysql - MySQL 有命名约定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899200/