mysql规范

2023-11-07

数据库表设置规范

  • 字符集一般选择utf8mb4(MySQL5.5.3以后支持),因为utf8mb4utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符
  • 排序规则一般选择utf8mb4_general_ci,比较和排序的时候更快
  • 一个项目一个数据库,多个项目慎用同一个数据库
  • 表存储引擎使用InnoDB

数据库表命名规范

  • 所有库名称必须使用小写字母并用下划线分割,库名与应用名称尽量一致

  • 表名称必须使用小写字母或数字并用下划线分割,但是禁止出现数字开头,禁止两个下划线中间只出现数字,如:level_3_name

  • 所有库表名称禁止使用MySQL保留关键字

    • 关键字:这类字在MySQL中具有特殊含义,例如常见的alterstaticcache
    • 保留字:就是MySQL自身保留的标识符。一般情况下是不允许使用的,例如selectinsert
  • 库表的命名要能做到见名识意,并且最好不要超过32个字符,表的命名最好是加上“业务名称_表的作用”,如:alipay_task / force_project / trade_config

  • 临时表必须以tmp为前缀并以日期为后缀,备份表必须以bak为前缀并以日期为后缀

  • 用单数形式表示名称,例如,使用 employee,而不是 employees

字段设置规范

  • 字段必须填写描述信息,也就是备注,枚举字段需要说明每个枚举值的意义

  • 词语,数字存入字段中统一使用英文逗号作为分隔符,清洗好的句子或者段落统一使用\n作为分割符

  • 小数类型为 decimal,禁止使用 floatdouble

  • varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率

  • 在能满足取值范围的情况下,优先选择占用存储空间最小的数据类型,如布尔值使用tinyint

  • 主键索引名为 pk_字段名,唯一索引名为 uk_字段名,普通索引名则为idx_字段名

  • 如果存储的字符串长度几乎相等,使用 char 定长字符串类型

  • 字段初始尽量不设置为NULL,因为NULL字段的索引需要额外空间,但是不要把它当成优先的优化措施

    • 考虑字段类型的适当性,如timestamp类型
    • 具体的业务要求,如NULL代表未跑过的数据,''代表跑过但是没有符合业务要求的数据
  • 关于timestampdatetime的选择

    • timestamp 只占4个字节,而且是以utc的格式储存, 它会自动检索当前时区并进行转换,但是支持范围为1970-01-01 00:00:01~2038-01-19 03:14:07,一般使用场景如下:

      • 插入记录时未指定具体时间数据则将该时间戳字段值设置为当前时间(DEFAULT CURRENT_TIMESTAMP)
      • 更新记录时未指定具体时间数据则将该时间戳字段值设置为当前时间(ON UPDATE CURRENT_TIMESTAMP)
    • datetime 占8个字节,但是支持范围为1000-01-01 00:00:00~9999-12-31 23:59:59,而且在MySQL 5.6版本之后,也支持自动更新,用法与timestamp类似。

字段命名规范

  • **[必要]**表必备三字段,idinsert_timeupdate_time
    • id 必为主键,类型为 bigint,单表时自增、步长为 1
    • insert_time为记录插入时间,update_time为记录最新更新时间,统一使用datetime类型,设置见上图
  • 命名规则同表,ps:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写,因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝
  • 业务上具有唯一特性的字段,必须建成唯一索引,如果遇到多个字段的组合,建议先使用SimHash计算值,存储字段为sim_value
  • 若该表有上游表
    • 所有存储相同数据的字段名和字段类型必须一致(不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)
    • 需要保留上游表的溯源字段,如:上游表的id字段作为本表old_id字段或者引用上游表unique类型而且不变的字段如obs_path
    • 若该表需要根据上游表进行增量更新,保留上游表insert_time或者update_time(根据具体业务要求)中的值作为upstream_time字段
  • 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 tinyint (1 表示是,0 表示否),如表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除

参考资料

mysql官方文档关于datetime与timestamp的说明

阿里巴巴Java开发手册(详尽版)1.4.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql规范 的相关文章

随机推荐

  • moose安装过程中遇到问题及解决方案

    问题 curl 56 OpenSSL SSL read error 0A000126 SSL routines unexpected eof while reading errno 104 解决方案 未使用vpn 下载速度慢 可多次执行命令
  • [Unity3d]3D项目转换为VR项目(暴风魔镜SDK)

    使用暴风魔镜SDK来操作 将魔镜的摄像头拖放到项目中 将MoJingVrHead的Script剪切到CamRoot中 这个时候能看到显示2个物体了 不过使用的Canvas还是显示一个 调整Canvas的属性 使其显示2份 步骤一 将Rend
  • Linux下杀死指定命令进程

    ps grep cat awk F print 1 xargs kill 9 执行如下 在网上搜到其他不一样的方式 也在此贴一下 https www jianshu com p 80b141746fae
  • 深入理解JS闭包

    关于JS中闭包的理解 相信很多人都和笔者一样刚开始很是困惑 笔者也是在看了很多前辈的文章后 总结出一点自己的理解 记录与此 囿于笔者水平有限 若有错误之处 恳请不啬赐教 你可以在一个函数里面嵌套另外一个函数 嵌套 内部 函数对其容器 外部
  • Windows电脑怎么设置局域网内共享磁盘?

    前言 我有一台主机硬盘容量比较大 想做为一个共享硬盘 方便我其他笔记本能够往这台硬盘传输文件 想到的最好最快的方法就是通过局域网内部进行文件传输 通过局域网共享磁盘 这种方法也是非常便捷的 那如何设置操作呢 请详细看下文 局域网共享磁盘 共
  • 用QEMU虚拟国产飞腾+麒麟环境

    1 简述 由于调试 测试需要飞腾主机及麒麟的环境 但是飞腾主机资源有限 于是便尝试了下在Qemu下虚拟出来一个ARM主机用来作为测试环境 本文介绍如何在Qemu虚拟的ARM环境下安装麒麟操作系统 2 安装过程 2 1 准备 本次安装需要准备
  • 什么是分布式系统?

    分布式系统是由多个独立的计算机或计算节点组成的系统 这些节点通过消息传递或共享数据的方式进行协调和通信 以实现共同的目标 分布式系统的设计目标是提高系统的可靠性 可扩展性 性能和容错性 在一个分布式系统中 各个计算机节点之间相互合作 共同完
  • .NET Framework简介

    1 什么是 NET Framework NET Framework 是支持生成 运行下一代应用程序和XML Web Services的内部Windows组件 它简化了在高度分布式Internet环境中的应用程序开发 NET Framewor
  • python之数值类型数据及运算

    数据类型 数据类型分为 字符串 str 整型 int 浮点型 float 负数 complex 布尔型 bool 一 字符串 1双引号 单引号括起来的 2双引号开头 结尾 xxx 3单引号开通 结尾 xxx 4不能一边单一边双 5多行字符串
  • iOS 为app生成下载链接,并生成二维码

    1 打开这个网址 http aso100 com 在此处输入app名称 点搜索 2 看 第一个就是我们的app 下一步点击图标 3 点击app id 4 看连接出来了 5 最后到这个网站生成二维码 http 2bai com cn hao2
  • Vue2中使用高德地图(Loader )

    1 需求 根据输入的地址 地图显示地址的位置 2 准备工作 2 1 注册高德开放平台账户 并完成认证 根据具体实际情况 完成个人开发或者企业开发认证 高德开放平台https console amap com 2 2在应用管理 我的应用中添加
  • 斗地主老输?只能领低保?看我用Python写一个AI出牌器!现在一亿欢乐豆了!

    前言 最近在网上看到一个有意思的开源项目 快手团队开发的开源AI斗地主 DouZero 今天我们就一起来学习制作一个基于DouZero的欢乐斗地主出牌器 看看AI是如何来帮助我们斗地主 赢欢乐豆 实现财富自由的吧 首先一起来看看AI斗地主出
  • View那些事儿(1) -- View绘制的整体流程

    写在开头 Android的知识体系十分庞大 在Android的学习道路上难免会遇到学习了新东西就忘了旧东西的情况 本系列文章主要是对自己对View的学习过程进行一个深入的理解与总结 当然还结合自己在实际项目中的一些体会写了一些东西 当用户打
  • LINUX 下 用C语言编写 TCP/IP通信的 sqlite3数据库服务器

    一 功能需求 我们首先明确一下 我们要制作的这个小服务器 需要具备什么功能 1 1 用户的注册和登录 使用sqlite3数据库 插入新的用户和查询用户的名字和密码是否匹配 1 2 查询单词 单词及其解释中 保存在一个文本文件当中 需要打开文
  • Android 12(S) 图形显示系统 - 示例应用(二)

    1 前言 为了更深刻的理解Android图形系统抽象的概念和BufferQueue的工作机制 这篇文章我们将从Native Level入手 基于Android图形系统API写作一个简单的图形处理小程序 透过这个小程序我们将学习如何使用Nat
  • spring boot配置dubbo(properties)

    spring boot与dubbo配置 properties dubbo和zookeeper配合使用 具体的它们之间的配置这里不说了 一 spring boot与dubbo配置有两种方式 1 spring boot在自己的配置文件appli
  • ScratchJr-ScratchJr介绍

    ScratchJr是什么 ScratchJr 是一个入门级的编程语言 它可以让幼儿 5 7岁 创建互动的故事和游戏 孩子利用图形化的程序积木让角色移动 跳跃 舞蹈 唱歌 孩子也可以利用绘图编辑器绘制自己的角色 用麦克风录制自己声音 用照相机
  • QT中野指针问题。

    错误提示 Signal received The inferior stopped because it received a signal from the Operating System Signal name SIGSEGV Sig
  • 服务器共享文件更改名称报错,服务器文件修改

    服务器文件修改 内容精选 换一换 本节操作指导用户实现同一个子网的Windows弹性云服务器之间文件共享 共享文件的云服务器在同一个子网下 且网络互通 在云服务器右下方的网络图标处 右键单击 打开网络和共享中心 打开网络和共享中心单击 更改
  • mysql规范

    数据库表设置规范 字符集一般选择utf8mb4 MySQL5 5 3以后支持 因为utf8mb4是utf8的超集并完全兼容utf8 能够用四个字节存储更多的字符 排序规则一般选择utf8mb4 general ci 比较和排序的时候更快 一