我是这样做的:

  1. 表名是小写,用下划线分隔单词,并且是单数(例如foofoo_bar等).
  2. 我通常(并非总是)有一个自动递增的PK.我使用以下约定:tablename_id(例如foo_idfoo_bar_id等).
  3. 当一个表包含一个外键列时,我只需从它来自的任何表中复制该键的列名.例如,假设表foo_bar有FK foo_id(其中foo_idfoo的PK).
  4. 在定义FK以强制引用完整性时,我使用以下公式:tablename_fk_columnname(例如,进一步扩展示例3,它将是foo_bar_foo_id).因为这是一个表名/列名组合,所以保证它在数据库中是唯一的.
  5. 我按如下顺序排列列:PKs、FKs,然后按字母顺序排列其他列

有更好、更标准的方法吗?

推荐答案

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

我想你在你的问题中概述的惯例基本上已经达到了.不过有几点 comments :

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

第3点——遗憾的是,这并不总是可能的.考虑一下如何处理一个表foo_bar,它有foo_id列和another_foo_id列,这两个列都引用foo table foo_id列.你可能想考虑如何处理这个问题.不过,这是一个有点拐弯抹角的案子!

第4点——与第3点类似.您可能希望在外键名称的末尾引入一个数字,以满足多个引用列的需要.

第5点——我会避免这种情况.它为您提供的信息很少,而且当您以后想要在表中添加或删除列时,它会让您头疼.

其他几点是:

Index Naming Conventions

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

Singular vs Plural Column Names

解决列名和表名中复数和单数的棘手问题可能是个好主意.这个话题经常在DB社区引起big debates人的关注.我会坚持使用单数形式来表示表名和列.那里我说过了.

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

Mysql相关问答推荐

在Join的ON分句中使用SUM()

是否有一种方法可以 Select 表中具有特定列值的行,该行还显示phpmyadmin中原始表中的行号?

MySQL查询基于上次访问时间戳更新用户的问题

如何使用GROUP BY调优简单SQL查询

在 mySQL 中计算每日数组的每周指标

将 JSON 类型的列与特定字符串值进行比较

在带有 D.I 的 .NET AWS Lambda 中使用 MySql.Data

MYSQL:范围匹配与周年纪念日

Mysql insert with loop out of select 语句

Over() 函数不覆盖表中的所有行

MySQL 查询组按日期(12 小时间隔)

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

索引和多列主键

MySQL SELECT 增量计数器

为什么数据库行元组中的整数具有L后缀?

如何将时刻 JS 时间插入 MySQL

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

比较 MySQL 中的日期忽略 DateTime 字段的时间部分

为什么在 MySQL 中使用外键约束?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'