【MySQL数据库开发设计规范】之字段设计规范

欢迎点开这篇文章,自我介绍一下哈,本人姑苏老陈 ,是一名JAVA开发老兵。

本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关注,谢谢 :-)

文章目录

    • 一、前言
    • 二、字段设计规范
    • 三、总结

一、前言

在我们对数据库技术方案设计的时候,我们是否有自己的设计理念或者原则,还是更多的依据自己的直觉去设计,是否曾经懊悔线上发生过的一次低级故障,可能稍微注意点就可以避免,是否想过怎么才能很好的避免,规范的价值正是我们工作的检查清单,需要我们不断从错误中积累有效经验来指导未来的工作。

本文介绍一下MySQL数据库开发设计规范之字段设计规范。

PS:以下规范在大型互联网公司经过了充分的验证,尤其适用于并发量大、数据量大的业务场景。

在这里插入图片描述

二、字段设计规范

1.【强制】必须把字段定义为NOT NULL并且提供默认值;

说明:NULL字段很难查询优化,NULL字段的索引需要额外空间,NULL字段的复合索引无效;

2.【强制】禁止使用ENUM,可使用TINYINT代替;

说明:枚举ENUM类型,在数据库迁移、数据库索引使用等等方面,会带来一下麻烦问题,不建议使用。

3.【强制】禁止使用TEXT、BLOB类型(如果表的记录数在万级以下可以考虑)

说明:BLOB与TEXT是为了存储极大的字符串而设计的数据类型,通常以外部存储方式保存,而不是像固定长度或可变长度字段那样以行内存储的方式,从而,会出现性能方面的问题,所以,不建议使用;

4.【强制】必须使用varchar(20)存储手机号;

说明:存储手机号必须使用varchar(20)数据类型,以确保能够容纳各种格式的手机号码。

5.【推荐】禁止使用小数存储国币、使用“分”作为单位,这样数据库里就是整数了。

说明:阿里云推荐使用“分”作为单位,在查看金额相关的数据时,不够直观,需要换算成单位元。所以,这里仅推荐,不做强制使用。

6.【强制】用DECIMAL代替FLOAT和DOUBLE存储精确浮点数;

说明:decimal类型在存储小数时可以提供更高的精度,并避免了由于浮点数运算而引起的精度损失;

7.【推荐】使用UNSIGNED存储非负整数;

说明:同样的字节数,使用UNSIGNED存储的数值范围更大;

8.【推荐】建议使用INT UNSIGNED存储IPV4;

说明:用UNSINGED INT存储IP地址占用4字节,CHAR(15)则占用15字节。另外,计算机处理整数类型比字符串类型快一些。

另外,使用INT UNSIGNED存储IPV4地址时,可以通过MySQL函数inet_ntoa和inet_aton来进行转化。

例如:
SELECT INET_ATON('192.168.172.3'); 3232279555 SELECT INET_NTOA(3232279555); 192.168.172.3

9.【推荐】字段长度尽量按实际需要进行分配,不要随意分配一个很大的容量;

说明:这么做不仅仅是为了节约空间,也是为了提高数据库性能;

10.【推荐】核心表字段数量尽可能地少,有大字段要考虑拆分;

说明:核心表访问频率较高,所以字段数量越少,性能越好;

11.【推荐】适当考虑一些反范式的表设计,增加冗余字段,减少JOIN;

说明:比如电商项目中的商品名称字段,查询频率较高,可以考虑冗余;

12.【推荐】资金字段考虑统一*100处理成整型,避免使用decimal浮点类型存储;

13.【推荐】使用VARBINARY存储大小写敏感的变长字符串或二进制内容

说明:VARBINARY默认区分大小写,没有字符集概念,速度快;

14.【参考】INT类型固定占用4字节存储;

说明:INT(4)仅代表显示字符宽度为4位,不代表存储长度。数值类型括号后面的数字只是表示宽度而跟存储范围没有关系,比如INT(3)默认显示3位,空格补齐,超出时正常显示,Python、Java客户端等不具备这个功能;

15.【参考】区分使用DATETIME和TIMESTAMP

说明:TIMESTAMP占用的存储空间小一些,同时具有自动赋值以及自动更新的特性。但TIMESTAMP的取值范围截止到2038年,所以,这里不推荐使用TIMESTAMP;

16.【推荐】将大字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据

说明:有利于有效利用缓存,防⽌读入无用的冷数据,较少磁盘IO,同时保证热数据常驻内存提⾼高缓存命中率;比如订单表,当表字段数量超过50,考虑分离冷热数据;

17.【参考】VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N;

18.【参考】VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存;

19.【推荐】VARCHAR(N),当N>5000时,考虑使用BLOB类型;

20.【推荐】使用短数据类型,比如取值范围为0~80时,使用TINYINT UNSIGNED;

说明:TINYINT数据类型是一个8位整数类型,用于存储从-128到127(有符号)或从0到255(无符号)的整数。

21.【强制】存储状态,性别等,用TINYINT类型;

说明:比如性别字段,stu_sex  tinyint(1)  DEFAULT '3'  COMMENT '1男,0女,3未知'

22.【强制】所有存储相同数据的列名和列类型必须一致;

说明:比如在多个表中的字段如user_id,它们的字段名称和字段类型必须一致,否则进行join关联查询时,会进行类型转换,查询效率低;

23.【推荐】优先选择符合存储需要的最小数据类型;

24.【推荐】如果存储的字符串长度几乎相等,使用char定长字符串类型;

三、总结

以上介绍了在进行MySQL数据库表字段设计时,可以遵循的一些技术规范。希望对大家有帮助,谢谢 :-)

附本文参考资料:

  • 阿里云官方知乎:https://www.zhihu.com/org/a-li-yun-97-77
  • 阿里云开发者官方社区:https://developer.aliyun.com/
  • 阿里开发者官方CSDN社区:https://blog.csdn.net/alitech2017?type=blog
  • 阿里云云栖号CSDN:https://blog.csdn.net/yunqiinsight/category_10231626.html
  • 阿里巴巴技术团队发布的《JAVA开发手册》泰山版
  • 阿里云开发者官方微信公众号

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/622249.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化训练:day7(字符串中找出连续最长的数字串、岛屿数量、拼三角)

文章目录 前言1. 字符串中找出连续最长的数字串1.1 题目描述1.2 解题思路1.3 代码实现 2. 岛屿数量2.1 题目描述2.2 题目描述2.3 代码实现 3. 拼三角3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 字符串中找出连续最长的数字串   2. 岛屿数量   3. 拼三角 1. 字符串…

嵌入式和单片机的区别在哪?

嵌入式和单片机是两个不同的概念,它们在很多方面都存在着差异。嵌入式系统是一种专用的计算机系统,通常用于控制和监测其他设备。它通常由微处理器、存储器、输入/输出接口和其他外围设备组成。嵌入式系统可以运行各种操作系统,如 Linux、Win…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接:https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码:i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明:事务只能单库…

小程序常用组件

小程序常用组件 1.组件的定义2.常用组件3.引入外部字体图标库4.组件样式5.示例代码 1.组件的定义 组件就是指微信定义的具有特殊功能的标签&#xff0c;在wxml中只能使用微信定义的标签。 2.常用组件 <view>&#xff1a;用于页面布局的块级组件&#xff0c;类似于html中的…

【3dmax笔记】021:对齐工具(快速对齐、法线对齐、对齐摄影机)

文章目录 一、对齐二、快速对齐三、法线对齐四、对齐摄影机五、注意事项3dmax提供了对齐、快速对齐、法线对齐和对齐摄像机等对齐工具: 对齐工具选项: 下面进行一一讲解。 一、对齐 快捷键为Alt+A,将当前选择对象与目标对象进行对齐。 最大对最大:

基于SpringBoot+Vue的法律咨询系统

课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度极慢&#xff0c;信息处理的速…

7B2 PRO主题5.4.2 免授权开心版源码 | WordPress主题

简介&#xff1a; B2 PRO 5.4.2 最新免授权版不再需要改hosts&#xff0c;和正版一样上传安装就可以激活。 直接在WordPress上传安装即可 点击下载

3.整数运算

系列文章目录 信息的表示和处理 : Information Storage&#xff08;信息存储&#xff09;Integer Representation&#xff08;整数表示&#xff09;Integer Arithmetic&#xff08;整数运算&#xff09;Floating Point&#xff08;浮点数&#xff09; 文章目录 系列文章目录前…

基于SpringBoot + MySQL的宠物医院管理系统设计与实现+毕业论文+指导搭建视频

系统介绍 项目的使用者可以避免排队挂号&#xff0c;比较方便&#xff0c;也方便于宠物医院的管理。现在的宠物本系统根据华阳社区宠物医院管理工作流程将系统使用者划分为三类&#xff0c;分别为、宠物医生、宠物主人以及系统管理人员&#xff0c;以下是对该三类类用户的具体…

几个简单操作,让3dmax渲染速度起飞‼️

3dmax渲染慢原因&#xff1a; 场景复杂度&#xff1a;场景中模型、材质、纹理和贴图的复杂性增加渲染时间。优化场景&#xff0c;使用简化模型和材质可提高速度。 高质量设置&#xff1a;高级渲染效果如光线追踪、全局照明等增加计算量。适当降低设置&#xff0c;如减少分辨率…

类文件具有错误的版本 61.0, 应为 52.0

报错如下&#xff1a; Spring Boot 3以上版本至少得依赖JDK17版本&#xff0c;如果项目中要求使用JDK8版本&#xff0c;那么只能使用Spring Boot 2版本了。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…

ssm+vue的公务用车管理智慧云服务监管平台查询统计(有报告)。Javaee项目,ssm vue前后端分离项目

演示视频&#xff1a; ssmvue的公务用车管理智慧云服务监管平台查询统计&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&…

pytest(二)

1.pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。下⾯是使⽤ pytest-html ⽣成报告的步骤&#xff1a; 1. 安装 pytest-html 插件&#xff1a; pip install pytest-html 2. 运⾏测试并⽣成报告 pytest --htmlr…

python内置类bytearray()详解

bytearray 是 Python 的一个内置类&#xff0c;它提供了一个可变序列的字节数组。 bytearray 数组的元素必须是0-255之间的整数&#xff0c;这些整数对应于ASCII字符集中的数字。下面着张图是部分ASCII字符&#xff1a; bytearray 是可变的&#xff0c;可修改其内容&#xff0c…

Linux下网络命令

目录 需求1-查看本机是否存在22端口解法1解法2解法3 需求2-查看其他主机是否存在22端口解法1解法2解法3 需求3-查看TCP连接解法1/2 需求4-统计80端口tcp连接次数解法 需求5-查看总体网络速度解法 需求6-查看进程流量解法 需求7-dns解法 需求8-traceroute到baidu解法 需求9-查看…

上传到 PyPI

将软件包上传到 PyPI&#xff08;Python Package Index&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 准备软件包&#xff1a;确保您的软件包满足以下要求&#xff1a; 包含一个 setup.py 文件&#xff0c;用于描述软件包的元数据和依赖项。包含软件包的源代码和必要…

浅析扩散模型与图像生成【应用篇】(二十四)——Text2Live

24. Text2LIVE : Text-Driven Layered Image and Video Editing 本文提出一种文本驱动的图像和视频编辑方法。与其他方法直接对图像进行编辑的方式不同&#xff0c;本文提出的方法并不是基于扩散模型的&#xff0c;更像是一个自编码器&#xff0c;通过对原图编码解码输出一个新…

[ACTF新生赛2020]SoulLike

没见过的错误&#xff1a; ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE64 改为 MAX_FUNCSIZE1024 然后就是一堆数据 反正就是12个字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

FFmpeg常用API与示例(三)—— 音视频解码与编码

编解码层 1.解码 (1) 注册所有容器格式和 CODEC:av_register_all() (2) 打开文件:av_open_input_file() (3) 从文件中提取流信息:av_find_stream_info() (4) 穷举所有的流&#xff0c;查找其中种类为 CODEC_TYPE_VIDEO (5) 查找对应的解码器:avcodec_find_decoder() (6) …

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小…