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)
-