开发命名最佳实践

所属分类:Csbase | 浏览:10 | 发布于 2026-06-22

1、几种命名规范介绍

1.1、短横线分割(kebab-case)

格式:全部小写,多单词用 - 连接

示例:

/user-member/list
/activity-seckill/detail
/order-refund/apply
/api/user-address/save

使用场景:URL路由路径(前端 / 服务端接口地址)

适用:子域名、页面 URL、API 路径、静态资源地址

1.2、下划线分割(snake_case)

格式:全部小写,多单词用 _ 连接

使用场景:JSON 请求 / 返回字段、路径参数、数据库库表

所有大厂(微信、小红书、腾讯、抖音)入参、DB 字段全下划线:

user_id、order_no、access_token、refund_amount

1.3、小驼峰命名(camelCase / PascalCase)

 

1.4、大驼峰命名(PascalCase)

大驼峰命名,强调首字母大写特征(与 camelCase 小驼峰对应)

 

路由对应关系

名称 uri controller_method model_method  
列表 /posts index    
新建 /posts/add save    
更新 /posts/edit update    
         

 

 

 

 

 

1、子域名命名规范

  • 只能使用:小写英文字母 a-z、数字 0-9、短横线 -
  • 禁止:大写字母、下划线 _、空格、中文、特殊符号 !@#$%^&*、小数点 .
  • 首尾不能是 -,不能连续多个 -app--test 非法)
  • 长度:单个子域名段 1–63 字符,完整域名总长≤253 字符

多层级复合示例(业务 + 环境):api-dev.xxx.com、admin-test.xxx.com、h5-pre.xxx.com

标准层级格式:环境-业务.主域名.com

多业务线区分:电商业务:shop-api.xxx.com;教育业务:edu-api.xxx.com

 

2、MySQL数据库命名规范

2.1、数据库名命名

蛇形命名(下划线分割,全网标准,强烈推荐)

2.1.1、按业务模块拆分

-- 电商业务
shop_user          -- 商城用户库
shop_order         -- 商城订单库
shop_goods         -- 商城商品库
shop_pay           -- 商城支付库

-- 后台管理
admin_system       -- 管理后台系统库
admin_permission   -- 后台权限库

-- 营销活动
activity_coupon    -- 优惠券库
activity_seckill   -- 秒杀库

-- 数据统计
data_bi_sales      -- 销售BI数据仓库
data_log_operation -- 操作日志库

2.1.2、区分多环境(开发 / 测试 / 预发布 / 生产)

shop_user_dev      -- 用户库-开发环境
shop_order_test    -- 订单库-测试环境
shop_goods_pre     -- 商品库-预发环境
shop_pay_prod      -- 商品库-生产环境(prod=production)

2.1.3、多业务线区分

edu_student        -- 教育-学生库
edu_course         -- 教育-课程库
finance_bill       -- 财务-账单库
crm_customer       -- CRM客户库

2.2、字段名称命名

所有单词小写,单词之间用 _ 分割。

另外一条规则:字段名绝对不叫表名作为前缀(外键 xxx_id 除外)

一些示例:

  • tbl_category 表的 分类 名称字段 用 name 最简洁最合适,如果用 category_name 则会违背 字段名称绝对不用表名坐前缀的规则。cate_name 是自创缩写,这是数据库命名的大忌,千万别用。
  • username 是个 例外,由于历史原因,username 会被当成一个整体,不用下划线分割。
  • nickname是正确的写法,因为 `nickname`是因为中的一个单词,千万不用自作聪明使用 `nickName` 或者 `nick_name` 。类似的还有hostname、filename。
  • first_name(人的名字) 和 last_name(人的姓氏)则必须要加 _ 。
  • 年龄 直接叫 age,而不用叫 user_age。但是这里有一个问题,“年龄”是岁日期动态变化的,在严谨的设计里,永远不存 age,只 存 birth_date (出生日期)。每次查询时用 TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) 计算实时年龄。存 age 意味着你每天都要跑定时任务去更新它,这是自找麻烦。

判断一个字段该不该带前缀,只看一条:

如果这个属性在表里是“唯一且显而易见”的,不带前缀;如果表里有多个同类属性需要区分,则带上前缀并用下划线连接。

  • 用户表 (users)

    • 只有一个姓名 -> name(或 username / nickname 按整体词)

    • 只有一个邮箱 -> email

    • 只有一个年龄(但实际用生日)-> birth_date(这里 birth_ 是必要的,因为它要区分于 created_date 或 updated_date

 

 

海涛博客(https://haitaoblog.com)属于海涛个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com W26

备案号:粤ICP备18108585号 友情链接