Mysql 中间关联表如何优雅的命名

post //文章表
post_type //文章分类
picture_type //相册分类

已有数据库出现了很多奇葩的表名,如下:

post_post_type //文章和文章分类关联表
picture_picture_type //相册和相册分类关联表
user_user_group //用户和用户组关联表

这些中间关联表如何优雅的命名呢?

还是说我这个type分类表设计的有问题,

阅读 26.5k
3 个回答

我一般是以一个结尾单词merge来标识关联表的;
比如商品表:
goods

商品类型表名:
goods_type

那么商品和类型关联表名可以表示为:
goods_type_merge

设计的时候,规范起来,只要开发人员看到这个表是个什么表,目的就达到了。

同一个类型的表最好拥有统一的表前缀,不同的名字,关联的表名就是 前缀_主表_链接表 这样比较容易易读一点
比如文章表
post_list
文章分类表
post_category
那么他们的连接表名就是
post_list_category
这样可读性更高,命名的时候英文单词最好准确一些 到时候也可以避免不必要的麻烦

我个人的解决方案。


关联表会有如下类型:

  1. 一对多,例如某用户的帖子。这种时候我们一般直接在帖子表写入用户 Id。而不会单独建立一个表进行关联。
  2. 多对一,例如哔哩哔哩的共同创作,多个 UP 主关联到一个视频。使用中缀 _mto_,例如 uploader_mto_movie
  3. 多对多,例如用户表到权限表。使用中缀 _mtm_,例如 user_mtm_role

有的规范使用 类似 rel 的前缀或后缀,但是这样的缺点是:

  1. 不能自动化识别两个表。例如 rel_a_b_c,则不知道是 a_b -> c 还是 a -> bc(不使用中缀的都存在这个问题)
  2. 不好体现顺序。有时需要表达出关联顺序。
  3. 不好体现数量关系。

这对代码生成等自动化编程不利。

不过,使用 mto, mtm 中缀也有缺点:会让其他人在了解此约定前,不能一眼理解含义。

因此可以换成 _to_ 中缀,并且允许用复数命名。当然我个人还是不推荐用复数命名。

还有一种方式是通过大小写同下划线区分两个表,但是这与全部小写的要求冲突,不建议。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题