Skip to content

前端程序员——你可能不知道的表命名知识

Hello, 我是吉米,一名前端程序员。大家可能比较难以置信,一个数据库的表命名的基本知识,我竟然不知道,还是通过一个线上项目,才意识到这个问题。

先叠个甲,我是一名前端程序员,不是正经的后端程序员,对数据库的了解仅限于会使用,知道有表和字段的概念,至于表名和字段名怎么命名,我真的是一窍不通。

起因

事情是这样的,有个项目的数据库本来连的是服务器本地数据库,因遇到性能瓶颈需要转移至阿里云的线上云数据库,于是我便承担起了这个任务。

因为我知道这个项目的数据量并不大,理论上我只需四步即可完成这个任务

  • 导出本地数据库的 表结构&表内容(一个个的.sql 文件)
  • 在线上云数据库创建相同的库
  • 导入前面导出的.sql 文件
  • 将后端服务所引用的数据库由本地指向线上

在完成了这四步后,我便以为大功告成,于是便将后端服务所引用的数据库指向了线上云数据库,结果就出现了问题。

问题

在启动服务时,后端服务报错了,一直提示我xxx表已存在,我便意识到是表名命名的问题。我仔细本地的表与线上的表,发现本地表名与线上表名竟然不一样,举个例子:本地表名是gainRecord,线上表名是gainrecord

image-20250224120253298

这块我们可以很明显的看到,本地驼峰命名的表名,在线上 8.0 版本的数据库中全部失效,全部变成了小写。

为什么使用驼峰

每个开发者都有自己喜欢的变量命名的规范,我个人一直非常的习惯使用驼峰命名,我以为编程语言都是大同小异的,所以我也就自然非常习惯性的给我的表名也是按照驼峰的方式去进行命名。

image-20250224120803963

解决方案

修改数据库侧表名

我的第一想法就是改数据库的表名,将表名改成驼峰的表名就好了,可是谁知又报错了......

image-20250224121002116

从报错中可知,因为线上的数据库的一个配置:lower_case_table_names这个配置是 1,说明开启了小写字母表名被强制开启了,所以只要去线上服务器把这个改成 0 即可。

于是我找到了线上数据库的配置。

image-20250224121242814

但是发现这个数据库居然是不可修改的,于是这个方向的解决思路就算是断了。查看一些文档发现,果然是阿里云为了安全和稳定着想,果然是禁用了这个配置!

image-20250224121531580

修改代码侧表面

将代码侧的表面由原来的驼峰命名全部改成小写即可,正常启动后端服务。至此这个任务虽是一波三折,但是最终还是完成。

总结

经过这个事件,算是非常彻底的明白了数据库命名这块的一些知识点,虽然是命名看起来是一个非常小的点,但是如果不规范,那么真正遇到问题时,还是没有想象中的那么好解决的。

好了,今天的分享就先到这里,后面我会陆续更新我所学到的一些知识,谢谢大家~

最后求助一波 AI,帮我们总结出数据库表名在命名时我们应该遵循的规范应该如下:

1. 表名格式

  • 小写字母:推荐使用小写字母,避免大小写敏感问题。
  • 下划线分隔:使用下划线 _ 分隔单词,例如 user_profile
  • 简洁且有意义:表名应简洁且能清晰描述其内容,例如 ordersproducts

2. 表名长度

  • 合理长度:表名不宜过长,通常不超过 30 个字符。
  • 避免缩写:除非缩写是广泛认可的(如 idnum),否则尽量避免使用缩写。

3. 表名前缀

  • 模块前缀:可以为表名添加模块前缀,便于区分不同模块的表,例如:
    • auth_users(认证模块的用户表)
    • cms_pages(内容管理系统的页面表)
  • 避免冗余前缀:不要使用数据库名或项目名作为前缀,例如避免 project_users

4. 表名单复数

  • 单数形式:推荐使用单数形式,例如 user 而不是 users,因为表通常表示一个实体。

  • 复数形式:如果团队习惯使用复数形式,也可以接受,但需保持一致。

  • 表名使用小写字母

  • 表名使用下划线分隔

  • 表名使用复数形式