1、 数据库开发规范

article/2025/9/30 2:17:48

第1章 数据库开发规范的制定
数据库设计步骤:
1、数据结构设计:逻辑设计-》物理设计
2、实际工作中:逻辑设计+物理设计
3、物理设计:表名+字段名+字段类型
数据库设计几个规范:
数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发规范、数据库操作行为规范
数据库命名规范
1、所有数据库对象名称必须使用小写字母并用下划线分割
不同的数据库名 DbName dbname
不同的表名 Table table tabLe
2、所有数据库对象名称禁止使用MySQL保留关键字
select id,username,from,age from tb_user from是关键字 ,但是可以用单引号括起来
3、数据库对象的命名要见名识义,并且最好不要超过32个字符
例如 用户数据库mc_userdb 用户账号表 user_account
4、临时库表必须以tmp为前缀并以日期为后缀
5、备份库、备份表必须以bak为前缀并以日期为前缀
6、所有存储相同数据的列名和列类型必须一致
比如两张表中有相同的数据,那么他们列名和列类型必须是一致的
这里写图片描述
数据库基本设计规范
1、所有表必须使用Innodb存储引擎,mysql 5.6后默认存储引擎,支持事务,行级锁,更好的恢复性,高并发下性能更好
2、数据库和表的字符集统一使用UTF8,避免由于字符集转换产生的乱码
mysql中utf8字符集汉字占3个字节,ASCII码占用1个字节
3、所有表和字段都需要添加注释,使用comment从句添加表和列的备注
4、尽量控制单表数据量的大小,建议控制在500万以内,500万并不是mysql数据库的限制,
mysql最多可以存储多少万数据?目前没有做限制,这种限制取决于存储设置和文件系统
可以用历史数据归档,分库分表等手段来控制数据量大小
5、谨慎使用mysql分区表
分区表在物理上表现为多个文件没在逻辑上表现为一个表
谨慎选择分区键,跨分区查询效率可能更低
建议采用物理分表的方式管理大数据
6、尽量做到冷热数据分离,减小表的宽度
mysql限制最多存储4096列,为了是减少磁盘IO,保证热数据的内存缓存命中率,利用更有效的利用缓存,避免读入无用的冷数据
经常使用的列放在一个表中
7、禁止在表中建立预留字段
预留字段的命名很难做到见名识义
预留字段无法确认存储的数据类型,所以无法选择合适的类型
对预留字段类型的修改,会对表进行锁定,修改字段类型的成本往往大于增加
8、禁止在数据库中存储图片、文件等二进制数据
9、禁止在线上做数据库压力测试
10、禁止从开发环境测试环境直连生产环境数据库
索引设计规范
索引对数据库的查询性能来说非常重要,查询、更新,禁止滥用索引
1、限制每张表上的索引数量,建议单张表索引不超过5个
索引并不是越多越好的,索引可以提高效率同样可以降低效率
索引可以增加查询效率,但同样也会降低插入和更新的效率
2、禁止给表中的每一列都建立单独的索引
3、Innodb是按照主键索引的顺序来组织表的
4、每个Innodb表必须有一个主键
不使用更新频繁的列作为主键,不使用多列主键
不使用uuid、MD5、hash,字符串列作为主键
主键建议使用主键自增
常见的索引列建议:
select、update、delete语句的where从句中的列
包含在order by、group by 、destinct中的字段
多表join的关联列
如何选择索引列的顺序:
联合索引是从做到右的顺序来实现的
1、区分度最高的列放在联合索引的最左侧
2、尽量把字段长度小的列放在联合索引的最左侧
3、使用最频繁的列放到联合索引的左侧
5、避免建立冗余索引和重复索引
重复索引:如 primary key(id)、index(id)、unique index(id)
冗余索引:如 index(a,b,c) index(a,b) index(a)
6、对于频繁的查询优先使用覆盖索引
覆盖索引:就是包括了所有查询字段的索引
优点:避免Innodb表进行索引的二次查找,可以把随机IO变为顺序IO加快查询效率
7、尽量避免使用外键
不建议使用外键约束,但一定在表与表之间的关联键上建立索引
外键可用于保证数据的参照完整性,但建议在业务端实现
外键会影响父表和子表的写操作从而降低性能
数据库字段设计规范
1、优先选择符合存储需要的最小的数据类型
将字符串转化为数字类型存储
对于非负数据采用无符号整形进行存储
signed int -2147483648-2147483648
unsigned int 0-2147483648
有符号比无符号多出一倍的存储空间
varchar(n) n代表字符数,不是字节数,varchar(255)=765个字节
过大的长度会消耗更多的内存
2、避免使用text\BLOB数据类型
建议text\BLOB列分离到单独的扩展表中
text\BLOB类型只能使用前缀索引
3、避免使用enum数据类型
修改enum需要使用alter语句
enum类型的order by操作效率低,需要额外操作
禁止使用数值作为enum的枚举值
4、尽可能把所有列定义为not null
索引null列需要额外的空间来保存,所以要占用更多的空间
进行比较和计算时要对null值做特别的处理
5、禁止字符串存储日期型的数据
缺点1:无法用日期函数进行计算和比较
缺点2:用字符串存储日期要占用更多的空间
使用timestamp或datetime类型存储时间,timestamp存储空间更小
4、财务的相关金额使用decimal类型
decimal类型为精准浮点数,在计算时不会丢失精度
float、double非精准浮点数
数据库SQL开发规范
1、建议使用预编译语句进行数据库操作
好处:只传参数,比传递SQL语句更高效
相同语句可以一次解析,多次使用,提高处理效率
2、避免数据类型的隐式转换
隐式转换会导致索引失效
3、利用表上已经存在的索引
这里写图片描述
4、禁止连接不同的数据库使用不同的账号,禁止垮库查询
为数据库迁移和分库分表留出余地
减低业务耦合度
避免权限过大而产生的安全风险
5、禁止使用select * 必须用select 字段列表 查询
消耗更多的CPU和io以及网络带宽资源
无法使用覆盖索引
可减少表结构变更带来的影响
6、禁止使用不含字段列表的insert语句
如,insert into t values(‘a’,’b’,’c’)
7、避免使用子查询,可以把子查询优化为join操作
子查询的结果集无法使用索引
子查询会产生临时表,如果子查询数据量大则严重影响效率
消耗过多的CPU和io资源
8、避免使用join关联太多的表
每join一个表会多占用一部分内存join_buffer_size
会产生临时表操作,影响查询效率
mysql最多关联61个表,建议不超过5个
9、减少同数据库的交互次数
10、禁止使用order by rand()进行随机排序
11、where从句中禁止对列进行函数转换和计算
对列进行函数转换和计算会导致无法使用索引
如: where date(createtime)=’20160901’
优化后:where createtime>=’20160901’
这里写图片描述
这里写图片描述

数据库操作行为规范
这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述


http://chatgpt.dhexx.cn/article/QdS7vgYe.shtml

相关文章

数据库开发-2-开发数据库的要点

Lec2-开发数据库的要点 1. 开发成功数据库应用的特点 需要理解数据库体系结构需要理解锁和并发控制特性:每个数据库都以不同的方式实现最重要的是不要把数据库当"黑盒" 要了解每一个数据库的体系结构和特征最常见的问题就是因为我们对数据库本身了解不足…

数据库开发(Sqlite)

1、数据库开发 1.1 数据与数据管理 什么是信息?   信息是指对现实世界存在方式或运动状态的反应。 什么是数据?   数据是指存储在某一媒体上,能够被识别的物理符号;   数据的概念在数据处理领域已经被大为拓宽&#xff0c…

《软件测试的艺术》第4章:测试用例的设计-白盒测试

写在前面:原书中包含白盒测试、黑盒测试、错误猜测、测试策略四个小节,涵盖内容较多,因此按章节拆分叙述。 《软件测试的艺术》: 白盒测试--语句覆盖 语句覆盖的用例设计原则:将程序中的每条语句至少执行一次。 白盒…

《软件测试的艺术》读后感 Or 读书笔记

《软件测试的艺术》读后感 Or 读书笔记 第一章 一次自评价测试第二章 软件测试的心理学和经济学第三章 代码检查、走查与评审第四章 测试用例的设计第五章 模块(单元)测试第六章 更高级别的测试第七章 可用性(或用户体验)测试第八…

软件测试的艺术 学习笔记

文章目录 4.2黑盒测试4.2.1 等价划分4.2.2 边界值分析4.2.3 因果图 4.3 错误猜测4.4 测试策略 5. 模块(单元)测试5.1 测试用例设计5.2 增量测试5.3 自顶向下测试与自底向上测试5.3.1 自顶向下的测试5.3.2 自底向上的测试5.3.3 比较 5.4 执行测试 6 更高级别的测试6.…

《软件测试的艺术》第六章 更高级别的测试

《软件测试的艺术》第六章 更高级别的测试 6.0 前言软件开发过程模型 6.1 功能测试6.2 系统测试6.2.1 能力测试6.2.2 容量测试6.2.3 强度测试6.2.4 可用性测试6.2.5 安全性测试6.2.6 性能测试6.2.7 存储测试6.2.8 配置设置6.2.9 兼容性/转换测试6.2.10 安装测试6.2.11 可靠性测…

模块测试(单元测试)——软件测试的艺术

是大型程序测试的第一个步骤【大型程序即超过500条语句的程序】 了解 模块测试是对程序中的单个程序、子程序/过程进行测试的过程【并非对整个程序】: 关注点在较小单元,是一种管理组合的测试元素的手段减轻调试的难度,把错误定位到一个小…

《软件测试的艺术》第1章:一次自评价测试

写在前面: 相比于芯片验证,软件测试有着悠久的历史沉淀和更为完整的生态,和芯片验证在某些方面上几乎有着相同的思路和方法。因此从软件测试的视角出发,重新思考芯片验证的方方面面。第一个系列为《软件测试的艺术》学习。 第一…

9年测试老鸟:Glenford J编写《软件测试的艺术》PDF,高清中文版

内容简介 本书以一次自评价测试开篇,从软件测试的心理学和经济学人手,探讨了代码检查、走查与评审、测试用例的设计、模块(单元)测试、系统测试、调试等主题,以及极限测试、因特网应用系统测试等高级主题,全面展现了作者的软件测…

系统测试——软件测试的艺术

系统测试有着特定的目的:将系统或程序与其初始目标进行比较,给定目标后有两含义: 系统测试不局限于系统,若产品是一个程序:系统测试就是试图说明程序作为一个整体是如何不满足其目标的过程根据定义,若产品…

《软件测试的艺术》重点记录

----定义---- 测试是为发现错误而执行程序的过程。 测试提高了程序的可靠性或质量。 ----测试方法---- 黑盒测试:又称之为数据驱动的测试或输入/输出驱动的测试。 白盒测试:对程序的逻辑结构进行检查,从中获取测试数据。 ----测试的原则…

软件测试的艺术(测试工程师必备基本知识与概念)

目录: 一、黑盒测试与白盒测试: 等价类划分: 一、确定等价类 确定等价类是选取每一个输入条件(通常是规格说明中的一个句子或短语)并 将其划分为两个或更多的组。可以使用图 4-3 中的表格来进行划分。注意&#xff0…

《软件测试的艺术》第五章 模块(单元)测试

目录 5.0 前言 5.1 测试用例设计 5.2 增量测试 5.3 自顶向下测试和自底向上测试 5.4 执行测试 5.5 小结 5.0 前言 大型的软件程序需要特别的测试对策。在本章中我们会探讨构建大型程序测试的第一个步骤:模块测试(单元测试)&#xff0c…

软件测试的艺术_读书笔记(一)

软件测试的艺术是测试人员必看书,两年前看这本书给我很多理论和指导,现在重新看,按照个人的理解,整理一些学习笔记。 第一章 软件测试的心理学和经济学 最重要的一句话 : 测试人员的态度比实际测试过程本身更重要 1.…

【读书笔记】-《软件测试的艺术》

2018年10月13日23:24:26 自诩: 因为上一东家工作的原因而接触测试。原本本职是嵌入式软件,因为公司正在风口浪尖的阶段,就是一种小公司要发展成为大公司而经历的那种痛,全公司上下都忙得焦头烂额的这样的背景下,我从软…

《软件测试的艺术》第2章:软件测试的心理学和经济学

软件测试的心理学 书中此部分首先辨析了两个概念:软件测试的定义、成功的测试和不成功的测试。 软件测试的定义: 测试是为发现错误而执行程序的过程,我们应当假设程序是存在bug的;由于证明程序不存在错误的过程是一项看起来不…

《软件测试的艺术》读书笔记

1 一次自评价测试 所谓软件测试,就是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该执行的功能。 2 软件测试的心理学和经济学 2.1 软件测试的心理学 软件测试是为发现错误而执行程序的过程。 2.2 软…

精读-软件测试的艺术之模块测试及更高级别的测试

本文是关于精读书籍《软件测试的艺术》的一些学习笔记和分享 本书共有九章包括测试思想(心理,经济),代码检查,测试用例设计,模块测试,更高级别的测试,调试,极限测试和因…

软件测试,浅析这项黑色艺术的难与易

今天给各位同行们带来一本技术好书《软件测试的艺术》(原书第3版),让我们一起来赏析这本经典著作吧! 本书是国内很多软件测试书籍的首要参考书目,短小精悍的篇幅、深入浅出的内容很适合初学者作为入门首选。同时&…

软件测试执行的艺术

测试执行 测试执行过程 主要任务 确定测试用例的优先级开发测试规程并确定优先级,创建测试数据,同时也可以准备测试用例和设计自动化测试脚本根据测试规程创建测试套件,以提高测试执行的效率确认已经正确搭建的测试环境根据计划的执行顺序&…