数据库命名规范

345 阅读6分钟

✅ 数据库命名规则

类别命名规则示例说明
命名风格小写字母 + 下划线分隔smart_library使用项目或业务模块名称
长度限制最长 64 个字符-超出会报错
禁用内容避免特殊字符和 SQL 保留字order, test-db使用需加反引号,建议避免
建议结构项目名 + 模块名library_user避免过度简写,保持可读性

✅ 表名命名规则

类别命名规则示例说明
命名风格小写字母 + 下划线,使用单数形式user, book_info一致性好,避免大小写敏感问题
命名建议业务实体或模块名称order_detail尽量描述清楚该表是干什么的
关联表命名多对多关系,两个表名按字母顺组合book_author避免歧义,提升可读性
临时表tmp_ 开头tmp_user_stats用于临时操作
历史归档表history__archive 后缀user_history, order_archive清晰反映用途

✅ 列名(字段名)命名规则

类别命名规则示例说明
命名风格小写字母 + 下划线分隔create_time统一风格,避免大小写敏感问题
主键一般命名为 idid单表唯一主键,推荐 auto_increment
外键表名(单数) + _iduser_id表示当前字段来自哪个表的主键
时间字段统一使用 _time 后缀create_timeupdate_timelogin_time清晰表达语义
布尔字段is_ 前缀命名is_active表示真假状态
枚举/状态字段_type / _status 后缀user_typeorder_status类型或状态表示
禁用内容避免 SQL 保留字select, order, group如必须使用需加反引号 ``` 包裹

✅ 主键命名规则

类型命名说明
单主键id所有表主键建议统一使用 id
联合主键(id1, id2)少用联合主键,建议改为唯一索引

✅ 外键命名规则

类型命名方式说明
外键字段<referenced_table>_id例如 user_id 表示引用 user 表
外键约束fk_<from>_<to>例如 fk_order_user

✅ 多对多关联表命名规则

表1表2关联表名说明
userroleuser_role按照字母顺序组合,表示关联关系
bookauthorbook_author可根据项目复杂度添加额外字段

✅ 示例:完整命名实践

数据库名:

sql
复制编辑
smart_library

表名:

sql
复制编辑
user、book、book_category、book_author、order、order_detail

表结构示例:

book 表

列名类型说明
idINT主键,自增
titleVARCHAR(255)书名
author_idINT外键,关联 author
category_idINT外键,关联 category
publish_timeDATETIME出版时间
is_deletedTINYINT(1)软删除标记
create_timeDATETIME创建时间
update_timeDATETIME更新时间

✅ 命名规范中的禁用项说明(适用于数据库名 / 表名 / 列名)

类别禁用内容原因说明
❌ 保留关键字selectordergroupdescindex这些是 MySQL/SQL 标准语法的一部分,使用时易导致语法冲突
❌ 特殊字符-、空格、.#@$%&非法字符或在 SQL 中具有特殊意义,易出错
❌ 大写字母UserBookInfoLinux 系统大小写敏感,跨平台易出错,建议全小写
❌ 非英文命名中文或其他语言(如 用户名, 图书跨语言或工具支持差,难以编码管理和协作
❌ 模糊名称nametimedata语义不清,建议明确表述(如 user_name, create_time
❌ 冗余命名user_user, book_table多余重复词汇,降低可读性(user, book 即可)
❌ 驼峰命名userName, bookInfoSQL 通常不支持驼峰,且影响脚本自动化处理(如生成器)
❌ 多语言混用user_时间, book状态列名中中英文混用,严重影响团队协作及工具兼容性

✅ 数据库设计命名的注意事项(强烈建议采纳)

注意点编号注意事项说明与建议
🔹 1保持命名一致性整个系统统一采用小写 + 下划线命名风格,避免混用不同风格(如 userName vs user_name
🔹 2避免使用缩写(除非团队共识)比如不要用 usr 替代 user,缩写可能造成歧义或阅读障碍
🔹 3表名不要带冗余后缀 table / tbluser 就够了,不要写成 user_table
🔹 4字段名应带上下文如:nameuser_namestatusorder_status
🔹 5布尔字段以 is_has_ 开头例如 is_deleted, has_paid,提升代码表达性
🔹 6时间字段统一加 _time 后缀如:create_time, update_time, login_time,避免用 date, timestamp 作为字段名
🔹 7主键字段统一命名为 id每个表主键统一用 id 命名,便于通用处理工具识别(如 ORM 框架)
🔹 8外键字段以 <表名>_id 命名user_id, book_id,提高字段含义清晰度
🔹 9尽量避免联合主键,使用唯一索引替代联合主键在外键关联、ORM 映射、性能调优等方面都有弊端
🔹10不要将列名设计成数据含义 + 单位拼接(如 priceYuan单位应在 UI 层处理,字段名应语义通用如 price
🔹11避免字段类型与含义不符例如状态字段不应用字符串类型,而应使用枚举或整数(如 TINYINT)
🔹12使用枚举/状态字段时要定义清晰的值含义order_status = 1(待付款),2(已付款),应文档中明确标注含义
🔹13不要在字段名中包含业务逻辑或版本信息比如 user_v2_email, user_locked_forever,容易失效或耦合
🔹14表结构设计应避免过度冗余不要重复存储可通过关联表计算出的信息,优先考虑范式规范(如 3NF)
🔹15可读性和语义优先于精简比如:create_timectime 更可读也更自解释
🔹16避免过度嵌套字段(尤其 JSON/文本字段)除非必要,否则字段结构应尽量扁平化,方便查询与索引
🔹17提前规划软删除字段(如 is_deleted比物理删除更安全,建议所有表统一设计
🔹18保留统一的审计字段:创建时间、更新时间、创建人、更新人create_time, update_time, created_by, updated_by,便于后期追踪与日志系统对接

✅ 建议额外配套文档或工具

类型用途与说明
✅ 字段字典描述每个表的字段、类型、含义
✅ 命名规范手册团队统一参考的命名规则
✅ ER 图表与表之间的关系图(实体关系图)
✅ 状态枚举表定义所有状态字段及对应含义
✅ 自动检查脚本用于 CI 检测是否存在不规范命名的脚本