MYSQL开发规范
MySQL数据库设计规范(仅供参考)
MySQL数据库设计规范(仅供参考)MySQL数据库设计规范(仅供参考)⽬录1. 规范背景与⽬的2. 设计规范2.1 数据库设计2.1.1 库名2.1.2 表结构2.1.3 列数据类型优化2.1.4 索引设计2.1.5 分库分表、分区表2.1.6 字符集2.1.7 程序DAO层设计建议2.1.8 ⼀个规范的建表语句⽰例2.2 SQL编写2.2.1 DML语句2.2.2 多表连接2.2.3 事务2.2.4 排序和分组2.2.5 线上禁⽌使⽤的SQL语句1. 规范背景与⽬的MySQL数据库与 Oracle、 SQL Server 等数据库相⽐,有其内核上的优势与劣势。
我们在使⽤MySQL数据库的时候需要遵循⼀定规范,扬长避短。
本规范旨在帮助或指导RD、QA、OP等技术⼈员做出适合线上业务的数据库设计。
在数据库变更和处理流程、数据库表设计、SQL编写等⽅⾯予以规范,从⽽为公司业务系统稳定、健康地运⾏提供保障。
2. 设计规范2.1 数据库设计以下所有规范会按照【⾼危】、【强制】、【建议】三个级别进⾏标注,遵守优先级从⾼到低。
对于不满⾜【⾼危】和【强制】两个级别的设计,DBA会强制打回要求修改。
2.1.1 库名1. 【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。
2. 【强制】库的名称格式:业务系统名称_⼦系统名,同⼀模块使⽤的表名尽量使⽤统⼀前缀。
3. 【强制】⼀般分库名称命名格式是库通配名_编号,编号从0开始递增,⽐如wenda_001以时间进⾏分库的名称格式是“库通配名_时间”4. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。
创建数据库SQL举例:create database db1 defaultcharacter set utf8;。
2.1.2 表结构1. 【强制】表和列的名称必须控制在32个字符以内,表名只能使⽤字母、数字和下划线,⼀律⼩写。
MySQL的数据库设计原则和规范
MySQL的数据库设计原则和规范随着互联网的快速发展,大量的数据被生成并储存在数据库中。
作为一种开源关系型数据库管理系统,MySQL因其高性能、可靠性和易用性而受到广泛的使用和认可。
在进行MySQL数据库设计时,遵循一些设计原则和规范可以帮助提高数据库的效率和可维护性。
本文将介绍一些MySQL数据库设计的原则和规范,以帮助开发人员更好地进行数据库设计。
一、表的设计1. 表的字段命名字段命名应该具有明确的含义,并遵循一定的命名规则。
通常,字段名应以小写字母开头,并使用下划线(_)或驼峰命名法(如camelCase)作为单词间的分隔符。
避免使用保留字作为字段名。
例如,一个表示用户姓名的字段可以被命名为“user_name”。
2. 主键的设计每个表都应该有一个主键用于唯一标识表中的每一行数据。
通常情况下,自增长的整数类型(如INT)被用作主键。
主键的命名应该使用表名加上“_id”的后缀,如“user_id”。
3. 字段的数据类型选择在选择字段的数据类型时,应该根据实际需求选择最适合的数据类型。
例如,使用INT代替VARCHAR来存储一个数字字段,可以提高查询效率和节省存储空间。
4. 字段的约束在创建表时,通过添加合适的约束来保证数据的完整性和一致性。
例如,可以使用NOT NULL约束来确保字段的值不能为空,使用UNIQUE约束来确保某个字段的值在表中是唯一的。
二、索引的设计索引对于提高查询性能和加快数据检索速度至关重要。
以下是一些关于索引设计的原则和规范:1. 表的主键字段应该被索引主键字段被用作唯一标识表中的每一行数据,因此应该被索引以提高查询效率和数据检索速度。
2. 经常用于WHERE子句的字段应该被索引字段在WHERE子句中的使用频率高,应该被索引以加快数据检索速度。
例如,一个经常用于查询的用户ID字段应该被索引。
3. 不要过度索引虽然索引可以提高查询性能,但过多的索引会增加数据库的维护成本和写操作的负担。
mysql数据库规范
MySQL建表的规范总结
Mysql建表与索引使用规范整理一,设计表规范:1. MySQL建表,字段需设置为非空,需设置字段默认值。
2. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL。
3. MySQL建表,如果字段等价于外键,应在该字段加索引。
4. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比。
5. MySQL使用时,一条SQL语句只能使用一个表的一个索引。
所有的字段类型都可以索引,多列索引的属性最多15个。
6. 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。
7. 建立索引index(part1,part2,part3),相当于建立了index(part1),index(part1,part2)和index(part1,part2,part3)三个索引。
8. MySQL针对like语法必须如下格式才使用索引:SELECT * FROM t1 WHERE key_col LIKE ‘ab%’ ;9. SELECT COUNT(*) 语法在没有where条件的语句中执行效率没有SELECTCOUNT(col_name)快,但是在有where条件的语句中执行效率要快。
10. 在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。
各自单一索引的话,只使用遍历最少行的那个索引。
11. 在where条件中多个or的条件中,每一个条件,都必须是一个有效索引。
12. ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序)。
13. 所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的。
14.、JOIN 索引,所有匹配ON和where的字段应建立合适的索引。
15. 对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。
mysql 数据库设计规约 概述及解释说明
mysql 数据库设计规约概述及解释说明1. 引言1.1 概述在现代信息化的社会背景下,数据库成为了各个行业中不可或缺的重要组成部分。
而数据库的设计规范则是确保数据库系统高效、可靠运行的基础。
MySQL作为目前最流行的关系型数据库管理系统之一,其设计规约对于保证数据的完整性和一致性至关重要。
本文将对MySQL数据库设计规约进行深入解释和说明,旨在提供给读者一个全面了解MySQL数据库设计规范及其重要性的视角。
1.2 文章结构本文将从以下几个方面进行详细阐述:引言、数据库设计规约解释说明、MySQL 数据库基础知识回顾、创建数据库和表格时应遵循的规范以及设计数据库关系时应遵循的规范。
通过这些内容,读者可以全面了解到MySQL数据库设计规约相关的核心概念和实践经验。
1.3 目的本文的目标可以总结为以下几点:首先,介绍和解释什么是MySQL数据库设计规约以及它们对于构建高度可管理和可扩展的数据库系统所起到的作用。
其次,回顾MySQL数据库的基础知识,包括它的特点、优势以及基本组成与架构。
这样可以为读者提供一个全面的背景,以便更好地理解如何使用数据库设计规范。
接着,讨论在创建数据库和表格时应遵循的规范。
这包括数据库、表格和字段命名规范以及注意事项。
通过明确这些规范,可以保证数据库在整个开发过程中的一致性和稳定性。
最后,探讨设计数据库关系时应遵循的规范。
主要包括主键、外键和索引设计原则、建立表格之间的关系以及范式理论在数据库设计中的应用。
这些规范将帮助读者优化数据库结构和关系,提高数据处理效率。
通过本文内容的解释与说明,读者将能够深入了解MySQL数据库设计规约,并能够在实际项目中灵活应用。
同时,也将对构建高效可靠的MySQL数据库系统具备更加全面和深入的认识。
2. 数据库设计规约解释说明2.1 数据库设计规约的定义和作用数据库设计规约是指在设计和开发数据库时需要遵循的一系列规范和准则。
它们旨在确保数据库的结构合理、高效,并且能够满足系统需求。
mysql建表原则
mysql建表原则MySQL建表原则MySQL是一种常用的关系型数据库管理系统,它的建表原则对于数据库设计和优化非常重要。
下面我们将详细介绍MySQL建表的原则,以便开发人员能够更好地利用MySQL数据库。
一、命名规范1.1 表名表名应该简洁明了,不要使用过长或者过于复杂的名称。
可以使用下划线(_)或者驼峰式命名法来命名表名。
1.2 列名列名也应该简洁明了,不要使用过长或者过于复杂的名称。
可以使用下划线(_)或者驼峰式命名法来命名列名。
二、数据类型选择2.1 数值类型在选择数值类型时,应该根据实际需要选择合适的数据类型。
比如:tinyint、smallint、mediumint、int和bigint等整数类型;float和double等浮点数类型。
2.2 字符串类型在选择字符串类型时,应该根据实际需要选择合适的数据类型。
比如:char、varchar和text等字符类型;binary、varbinary和blob等二进制类型。
三、主键与索引设计3.1 主键设计每个表都应该有一个主键,并且主键应该是唯一的。
通常情况下,主键使用自增长整数作为标识符。
3.2 索引设计在设计索引时,应该根据实际需要选择合适的索引类型。
比如:普通索引、唯一索引、全文索引和空间索引等。
四、表的结构设计4.1 表的字段设计在设计表的字段时,应该遵循以下原则:(1)尽量避免使用NULL值,因为它会占用额外的存储空间。
(2)尽量避免使用TEXT和BLOB类型,因为它们会占用大量的存储空间。
(3)尽量避免使用ENUM类型,因为它会增加查询的复杂度。
4.2 表的关系设计在设计表之间的关系时,应该遵循以下原则:(1)使用外键来建立表之间的关系。
(2)避免使用多对多关系,因为它会增加查询和维护的复杂度。
(3)尽量将数据拆分成多个表,以便更好地管理和维护数据。
五、性能优化原则5.1 数据库范式化将数据分解成多个独立的表,并通过外键建立关联。
mysql数据库设计原则
mysql数据库设计原则MySQL数据库设计原则MySQL是一个开源的关系型数据库管理系统,被广泛用于各种应用程序中。
在设计MySQL数据库时,需要遵循一些原则,以确保数据库的正常运行和高效性能。
本文将介绍一些重要的MySQL数据库设计原则。
一、数据类型选择1.1 整数类型在MySQL中,整数类型有多种选择,如TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。
在选择整数类型时,需要根据实际情况来确定所需的最小和最大值范围,并选择最小的数据类型来存储数据。
这样可以节省存储空间,并提高查询速度。
1.2 字符串类型在MySQL中,字符串类型有多种选择,如CHAR、VARCHAR、TEXT和BLOB等。
在选择字符串类型时,需要考虑到所需存储的字符集、字符长度和是否需要进行全文搜索等因素,并根据实际情况来确定所需的最小和最大长度,并选择最小的数据类型来存储数据。
二、表设计2.1 表命名规范为了方便管理和维护数据库,在设计表时应该遵循一定的命名规范。
表名应该具有描述性,并且使用下划线来分隔单词。
2.2 数据库范式为了保证数据完整性和减少冗余数据,在设计表时应该遵循一定的数据库范式。
通常情况下,应该尽可能地将数据分解成更小的表,并使用外键来关联这些表。
2.3 索引设计在MySQL中,索引是提高查询速度的重要手段。
在设计表时,应该根据实际情况来选择需要创建索引的列,并使用合适的索引类型来提高查询速度。
三、安全性设计3.1 用户权限管理在MySQL中,用户权限管理是非常重要的。
应该根据实际情况为每个用户分配不同的权限,并且定期更新密码和修改访问权限。
3.2 数据库备份和恢复为了保证数据安全性,在设计数据库时应该考虑到数据备份和恢复问题。
可以使用MySQL自带的备份工具或第三方工具进行备份,以便在出现故障时能够快速恢复数据。
四、性能优化4.1 查询优化在MySQL中,查询是最常用的操作之一。
MySQL数据库开发的三十六条军规-石展
避免负向查询和% 前缀模糊查询
• 避免负向查询
NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、 NOT LIKE等
• 避免 % 前缀模糊查询
B+ Tree 使用不了索引 导致全表扫描
• 举例
MySQL> select * from post WHERE title like ‘北京%' ; 298 rows in set (0.01 sec) MySQL> select * from post WHERE title like '%北京%' ; 572 rows in set (3.27 sec)
• 注意控制IN的个数,建议n小于200 • 举例
Select * from opp WHERE phone=‘12347856' or phone=‘42242233' \G Select * from opp WHERE phone in ('12347856' , '42242233')
改写OR为UNION
• 单表多少字段合适? • 单表1G体积 500W行评估
顺序读1G文件需N秒 单行不超过200Byte 单表不超50个纯INT字段 单表不超20个CHAR(10)字段
• 单表字段数上限控制在20~50个
平衡范式与冗余
• 平衡是门艺术
严格遵循三大范式?
效率优先、提升性能
没有绝对的对与错 适当时牺牲范式、加入冗余 但会增加代码复杂度
• 不同字段,将or改为union
• 减少对不同字段进行 "or" 查询 • Merge index往往很弱智 • 如果有足够信心:set global optimizer_switch='index_merge=off';
MySQL数据库开发规范
MySQL数据库开发规范表结构设计1. INT 类型不使⽤ unsigned ⽆符号属性,容易引⼊额外的计算问题。
2. ⾃增⽤ 8 字节 BIG INT,不要使⽤ 4 字节 INT,且⾃增在 MySQL 8.0 版本前有回溯问题,请考虑是否业务有影响。
3. 字符集使⽤ UTF8MB4 字符编码,不推荐 GBK、UTF-8 等其他字符集。
4. ⽇期类型⽤ DATETIME 类型,需要精确到毫秒⽤ DATETIME(6),不要使⽤ INT、TIMESTAMP。
5. 类型 JSON 可⽤于存储⾮结构化数据,典型场景为⽤户标签,不要将 JSON ⽤于频繁更新的字段场景。
6. 每张表⼀定要有⼀个主键,这样⾄少满⾜⼀范式的要求,核⼼业务表⽤全局唯⼀字段(雪花算法、有序UUID)做主键,不要使⽤⾃增做主键。
7. 对于⽇志类的流⽔表、报警表、⽇志表,可以使⽤压缩设计,提升存储效率。
MySQL 5.7 版本开始推荐使⽤透明页压缩,不要使⽤传统的 KEY_BLOCK_SIZE 的页压缩。
8. 类别设计,⽤ ENUM+CHECK 约束,不要使⽤ INT 类型的设计。
9. 敏感字段需加密,如账户密码、信⽤卡号等存储使⽤:动态盐 + ⾮固定加密算法(MD5/AES256等) + 多轮加密,不要简单使⽤ MD5算法加密,容易被暴⼒破解。
10. MySQL 可以通过 KV 的⽅式访问表中的数据,若业务只是简单的 SET、GET 请求,可考虑将其转化为 Memcached 的 KV 访问⽅式,减少 SQL 解析的开销,性能可以有⾄少 50% 的提升。
索引设计1. 不要陷⼊设置单表⾏数、列数限制的固有印象,其他关系型数据库没有⾏数、列数限制,MySQL 也没有,⼤表的缺点不是性能,⽽是后续的 DDL 管理问题,随着 MySQL 8.0 快速加列功能的上线,⼤表 DDL 问题基本已解决。
2. MySQL 是索引组织表,表中的数据以 B+ 树索引结构,根据主键逻辑排序,由于 B+ 树索引的特点是树的⾼度为 3~4 层,所以从数⼗亿的记录中,通过主键查询⼀条记录只需要 3、4 次 I/O,当前到 SSD 存储设备设置每秒⾄少能完成 10000 次的 I/O 查询,不要担⼼通过索引查询⼀条或⼏条记录的性能,每秒百万次查询并不难。
mysql数据表设计原则
mysql数据表设计原则Mysql是一种开源的关系型数据库管理系统,它广泛应用于各种网站和应用程序中。
在使用Mysql时,数据表设计是非常重要的一部分。
本文将介绍mysql数据表设计的原则。
一、概述1.1 数据库设计的重要性数据库设计是任何软件开发项目的关键步骤之一。
一个良好的数据库设计可以提高数据存储和检索效率,降低维护成本和风险,并使系统更加灵活和可扩展。
1.2 数据表设计原则在mysql中,数据表设计需要遵循一些基本原则。
这些原则包括:规范化、简洁性、可读性、可扩展性、可维护性等。
二、规范化2.1 什么是规范化?规范化是指将一个复杂的数据结构分解成多个简单的结构,并通过关系连接来实现对这些结构的访问。
规范化可以消除冗余信息,并确保每个数据项只在一个地方存储,从而提高了数据存储和检索效率。
2.2 规范化级别mysql支持三个规范化级别:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
通常情况下,我们应该尽可能地满足第三范式。
2.3 规范化的优点规范化可以提高数据存储和检索效率,降低维护成本和风险,并使系统更加灵活和可扩展。
同时,规范化还可以减少数据冗余,提高数据的一致性和完整性。
三、简洁性3.1 什么是简洁性?简洁性是指数据表设计应该尽可能地简单明了,避免不必要的复杂性。
在mysql中,一个简单的数据表通常比一个复杂的数据表更易于维护和管理。
3.2 如何实现简洁性?实现简洁性需要注意以下几点:(1)避免过度设计。
只需创建必要的字段和索引即可。
(2)避免使用过多的触发器、存储过程等数据库对象。
(3)避免使用过多的外键关系。
外键关系可以增加数据一致性,但也会增加查询时间和写入时间。
四、可读性4.1 什么是可读性?可读性是指数据表设计应该易于理解和阅读。
在mysql中,一个易于理解和阅读的数据表可以提高开发效率,并降低出错率。
4.2 如何实现可读性?实现可读性需要注意以下几点:(1)使用有意义的字段名。
MySQL数据库设计规范
MySQL数据库设计规范1、数据库命名规范采⽤26个英⽂字母(区分⼤⼩写)和0-9的⾃然数(经常不需要)加上下划线'_'组成;命名简洁明确(长度不能超过30个字符);例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀;除⾮是备份数据库可以加0-9的⾃然数:user_db_20151210;2、数据库表名命名规范采⽤26个英⽂字母(区分⼤⼩写)和0-9的⾃然数(经常不需要)加上下划线'_'组成;命名简洁明确,多个单词⽤下划线'_'分隔;例如:user_login, user_profile, user_detail, user_role, user_role_relation,user_role_right, user_role_right_relation表前缀'user_'可以有效的把相同关系的表显⽰在⼀起;3、数据库表字段名命名规范采⽤26个英⽂字母(区分⼤⼩写)和0-9的⾃然数(经常不需要)加上下划线'_'组成;命名简洁明确,多个单词⽤下划线'_'分隔;例如:user_login表字段 user_id, user_name, pass_word, eamil, tickit, status, mobile, add_time;每个表中必须有⾃增主键,add_time(默认系统时间)表与表之间的相关联字段名称要求尽可能的相同;4、数据库表字段类型规范⽤尽量少的存储空间来存数⼀个字段的数据;例如:能使⽤int就不要使⽤varchar、char,能⽤varchar(16)就不要使⽤varchar(256);IP地址最好使⽤int类型;固定长度的类型最好使⽤char,例如:邮编;能使⽤tinyint就不要使⽤smallint,int;最好给每个字段⼀个默认值,最好不能为null;5、数据库表索引规范命名简洁明确,例如:user_login表user_name字段的索引应为user_name_index唯⼀索引;为每个表创建⼀个主键索引;为每个表创建合理的索引;建⽴复合索引请慎重;6、简单熟悉数据库范式第⼀范式(1NF):字段值具有原⼦性,不能再分(所有关系型数据库系统都满⾜第⼀范式);例如:姓名字段,其中姓和名是⼀个整体,如果区分姓和名那么必须设⽴两个独⽴字段;第⼆范式(2NF):⼀个表必须有主键,即每⾏数据都能被唯⼀的区分;备注:必须先满⾜第⼀范式;第三范式(3NF):⼀个表中不能包涵其他相关表中⾮关键字段的信息,即数据表不能有沉余字段;备注:必须先满⾜第⼆范式;备注:往往我们在设计表中不能遵守第三范式,因为合理的沉余字段将会给我们减少join的查询;例如:相册表中会添加图⽚的点击数字段,在相册图⽚表中也会添加图⽚的点击数字段;MYSQL数据库设计原则1、核⼼原则不在数据库做运算;cpu计算务必移⾄业务层;控制列数量(字段少⽽精,字段数建议在20以内);平衡范式与冗余(效率优先;往往牺牲范式)拒绝3B(拒绝⼤sql语句:big sql、拒绝⼤事物:big transaction、拒绝⼤批量:big batch);2、字段类原则⽤好数值类型(⽤合适的字段类型节约空间);字符转化为数字(能转化的最好转化,同样节约空间、提⾼查询性能);避免使⽤NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引⽆效);少⽤text类型(尽量使⽤varchar代替text字段);3、索引类原则合理使⽤索引(改善查询,减慢更新,索引⼀定不是越多越好);字符字段必须建前缀索引;不在索引做列运算;innodb主键推荐使⽤⾃增列(主键建⽴聚簇索引,主键不应该被修改,字符串不应该做主键)(理解Innodb的索引保存结构就知道了);不⽤外键(由程序保证约束);4、sql类原则sql语句尽可能简单(⼀条sql只能在⼀个cpu运算,⼤语句拆⼩语句,减少锁时间,⼀条⼤sql可以堵死整个库);简单的事务;避免使⽤trig/func(触发器、函数不⽤客户端程序取⽽代之);不⽤select *(消耗cpu,io,内存,带宽,这种程序不具有扩展性);OR改写为IN(or的效率是n级别);OR改写为UNION(mysql的索引合并很弱智);select id from t where phone = ’159′ or name = ‘john’;=>select id from t where phone=’159′unionselect id from t where name=’jonh’避免负向%;慎⽤count(*);limit⾼效分页(limit越⼤,效率越低);使⽤union all替代union(union有去重开销);少⽤连接join;使⽤group by;请使⽤同类型⽐较;打散批量更新;5、性能分析⼯具show profile;mysqlsla;mysqldumpslow;explain;show slow log;show processlist;复制代码数据库的设计原则复制代码1. 原始单据与实体之间的关系 可以是⼀对⼀、⼀对多、多对多的关系。
数据库开发规范标准
数据库开发规范标准1. 概述本文档旨在制定数据库开发的规范标准,以确保数据库的一致性、可维护性和安全性。
准确遵循本文档中的规定可以提高开发效率并减少潜在问题。
2. 命名规范2.1 数据库对象命名规范- 表名应使用英文单词,采用下划线分隔,避免使用特殊字符和空格。
- 字段名应使用英文单词,采用下划线分隔,避免使用特殊字符和空格。
- 索引名应简明扼要地描述其作用和字段,避免使用含糊不清的命名。
2.2 命名约定- 主键字段应命名为`id`。
- 外键字段应命名为`关联表名_id`的形式,例如`user_id`。
- 创建时间字段应命名为`created_at`,更新时间字段应命名为`updated_at`。
- 布尔类型字段应使用形容词或动词开头,例如`is_deleted`。
3. 数据类型和长度3.1 数据类型选择根据不同的业务需求和数据特性选择合适的数据类型,包括整型、浮点型、字符型、日期时间型等。
3.2 字段长度根据数据内容和业务需求确定字段的长度,避免过长或过短的情况。
4. 约束和索引4.1 主键约束每个表应有一个主键,并设置为自增类型。
主键字段应该是唯一且非空的。
4.2 唯一约束针对需要保证唯一性的字段,添加唯一约束。
4.3 外键约束在关联表的字段上添加外键约束,确保数据的一致性和完整性。
4.4 索引根据查询需求和性能考虑,添加合适的索引。
索引应针对经常进行查询或连接操作的字段。
5. 数据库安全5.1 权限控制分配合适的权限给不同的用户和角色,限制其对数据库的操作。
5.2 定期备份定期备份数据库,以防意外数据丢失或损坏。
5.3 数据加密对需要保密的数据进行加密存储,确保敏感数据的安全性。
6. 数据库设计6.1 范式规范根据数据库设计原则,将数据表设计为满足第三范式的结构,避免数据冗余和不一致。
6.2 数据表关系合理设计数据表之间的关系,确保符合业务逻辑和查询需求。
7. SQL语句规范7.1 缩进和格式化对SQL语句进行适当的缩进和格式化,提高可读性。
mysql建表规范
mysql建表规范在MySQL中建表时,遵循一定的规范是非常重要的,可以提高数据库的性能和可维护性。
以下是一些常见的MySQL建表规范建议。
1. 使用有意义的表名:表名应反映表的内容和含义,避免使用无意义的缩写或简写。
2. 使用小写字母和下划线:表名、列名和其他对象名都应该使用小写字母和下划线的组合,这样有助于代码的可读性和可维护性。
3. 使用具有复数意义的表名:如果表存储的是多个实体对象,应该使用复数形式的表名来表示。
4. 使用主键:每个表都应该有一个主键来唯一标识每一行数据。
主键可以是单列或多列的组合。
5. 主键选择:选择适合的主键类型,可以是整数类型(如INT、BIGINT)或字符串类型(如VARCHAR)。
对于自增主键,可以使用AUTO_INCREMENT。
6. 不要使用保留字:避免使用MySQL的保留字作为表名、列名等对象名,以免引起语法错误。
7. 使用适当的数据类型:选择合适的数据类型来存储数据,避免浪费存储空间和降低性能。
例如,存储整数使用整数类型,存储日期和时间使用日期和时间类型。
8. 使用约束保证数据的完整性:使用约束(如NOT NULL、UNIQUE、FOREIGN KEY等)来确保数据的完整性,避免无效或重复的数据。
9. 添加索引:根据查询的需求和频率,添加索引以加快数据的检索速度。
但是,也要注意不要过度索引,以免降低插入和更新操作的性能。
10. 使用适当的引擎:根据需求选择适当的存储引擎,如InnoDB、MyISAM等。
每种引擎都有其特点和适用场景。
11. 正规化数据:对于大型数据库,使用正规化的数据结构可以避免数据冗余和更新异常,提高数据的一致性和维护性。
12. 给表和列命名:使用具有描述性的命名来提高代码的可读性和可维护性。
避免使用无意义的缩写和不规范的命名。
13. 使用备注:为表、列和其他对象添加注释,这样可以方便他人理解和维护代码。
14. 考虑数据的增长:在设计表结构时,要考虑到数据的增长,以免出现性能瓶颈或扩展困难。
mysql表设计原则和三大范式
mysql表设计原则和三大范式
一、MySQL表设计原则
1、数据表应该有一个主键,主键必须是唯一可标识每行数据的。
2、应尽可能使用自然标识而不是系统生成的标识,如id、seria_no等。
3、字段提供前后文命名服务。
4、应不使用null,尤其是关系表的主键字段不推荐使用null。
5、不要过度设计数据表,一个数据表尽可能包含相关信息。
6、有选择地使用索引,以便提高查询的效率。
7、应避免删除表,如有必要可以加入删除字段instead of DROP TABLE
8、应使用自动增长的字段
二、三大范式
第一范式(1NF):字段是原子性的,没有任何子字段,也不能有任何一个字段有多值,例如A表中有个字段叫GoodsItems,这个字段是用来存放商品信息的,但是会有多个商品的情况,这样就说明GoodsItems字段不满足1NF了,它要被拆分成多个字段,例如GoodsItems_1、GoodsItems_2
第二范式(2NF):字段无重复,也称去冗余范式,即一个表中不能存在相同的字段,例如一张表中有两个字段叫num,同时也不能存在冗余字段
第三范式(3NF):字段独立,字段不能存在耦合,即不能如:A表中有两个字段叫age,name,其中age存放的是name字段对应的年龄信息,这样就说明字段name和age不满足3NF了,要把这两个字段分别放在不同的表中。
阿里MYSQL开发规范(嵩山版)
阿⾥MYSQL开发规范(嵩⼭版)MySQL 数据库嵩⼭版2020.08.03(⼀) 建表规约1. 【强制】表达是与否概念的字段,必须使⽤ is_xxx 的⽅式命名,数据类型是 unsigned tinyint(1 表⽰是,0 表⽰否)。
说明:任何字段如果为⾮负数,必须是 unsigned。
注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在<resultMap>设置从 is_xxx 到Xxx 的映射关系。
数据库表⽰是与否的值,使⽤ tinyint 类型,坚持 is_xxx 的命名⽅式是为了明确其取值含义与取值范围。
正例:表达逻辑删除的字段名 is_deleted,1 表⽰删除,0 表⽰未删除。
2. 【强制】表名、字段名必须使⽤⼩写字母或数字,禁⽌出现数字开头,禁⽌两个下划线中间只出现数字。
数据库字段名的修改代价很⼤,因为⽆法进⾏预发布,所以字段名称需要慎重考虑。
说明:MySQL 在 Windows 下不区分⼤⼩写,但在 Linux 下默认是区分⼤⼩写。
因此,数据库名、表名、字段名,都不允许出现任何⼤写字母,避免节外⽣枝。
正例:aliyun_admin,rdc_config,level3_name反例:AliyunAdmin,rdcConfig,level_3_name3. 【强制】表名不使⽤复数名词。
说明:表名应该仅仅表⽰表⾥⾯的实体内容,不应该表⽰实体数量,对应于 DO 类名也是单数形式,符合表达习惯。
4. 【强制】禁⽤保留字,如 desc、range、match、delayed 等,请参考 MySQL 官⽅保留字。
5. 【强制】主键索引名为 pk_ 字段名;唯⼀索引名为 uk _字段名;普通索引名则为 idx _字段名。
说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。
6. 【强制】⼩数类型为 decimal,禁⽌使⽤ float 和 double。
MYSQL数据库管理规范
MySQL数据库规范(设计规范+开发规范+操作规范)目录MySQL数据库规范(设计规范+开发规范+操作规范) (1)I 文档定义 (2)1.1 编写目的 (2)1.2 适用范围 (2)II . 命名设计规范 (2)2.1 总则 (2)2.2 库名 (3)2.3 表名 (3)2.4 字段名 (3)2.5 索引名 (4)2.6 视图命名 (4)2.7 存储过程命名 (4)2.8 函数命名 (4)III 数据库设计规范 (5)3.1 表设计原则 (5)3.2 字段设计原则 (6)3.3 主键设计原则 (7)3.4 索引设计原则 (8)3.5 数据库里不建议存放业务日志 (8)IV SQL设计规范 (9)4.1 避免数据类型的隐式转换 (9)4.2 避免复杂SQL (9)4.3 批量插入 (9)4.4 数据更新 (9)4.5 避免使用TRUNCATE TABLE (9)4.6 避免使用SELECT * (10)4.7 使用索引做条件查询count(*) (10)4.8 避免IN子句 (10)4.9 避免不必要的排序 (10)4.10 合理利用最左索引 (10)4.11 多表连接 (11)4.12 避免在where后的索引字段上使用函数 (11)4.13 尽量不要做’%’前缀模糊查询 (11)4.14 使用UNION ALL代替UNION (12)4.15 尽量避免OR操作 (12)4.16 MySQL 在否定条件中不能使用索引 (12)4.17 MySQL 在JOIN中连接字段类型如果不一致,则不能使用索引 (13)4.18 如果两个字段列的字符集不同,不推荐JOIN (13)V 完整性设计规范 (13)5.1 主键约束 (13)5.2 NULL值 (13)5.3 视图使用原则 (14)VI 安全性设计规范 (14)6.1 数据库账号使用规范 (14)6.2 用户与权限 (15)6.3 用户密码管理 (15)VII 开发行为规范 (15)7.1 总则 (15)7.2 避免使用触发器 (16)7.3 避免使用存储过程和函数 (16)7.4 避免使用视图 (16)VIII 其他规范 (17)8.1 编制文档 (17)8.2 维护计划规范 (17)(2)数据归档删除 (17)I 文档定义1.1 编写目的此规范依照《中国科协数据管理总纲》(暂行)、《中国科协数据标准管理办法》(暂行)、《中国科协数据质量管理办法》(暂行)制定。
mysql数据库设计规范
mysql,数据库设计规范篇一:MySQL设计规范MySQL设计规范MYSQL设计规范................................................. ................................................... ................................................... .. (1)1. 数据库设计 ................................................ ................................................... ................................................... (1)字段 ................................................ ................................................... ................................................... . (1)表和字段命名 ....................................................................................................1 字段结构 ................................................ ................................................... ................................................... .......... 2 SQL语句 ................................................ ................................................... ................................................... ................... 2 性能与效率 ................................................ ................................................... ................................................... (3)定长与变长表 ................................................ ................................................... ....................................................3 运算与检索................................................. ........................................................ 3 结构优化与索引优化 ................................................ ................................................... ....................................... 4 查询优化 ................................................ ................................................... ................................................... .......... 4 兼容性问题和效率查询语句................................................. ................................................... ......................... 6 分享一些SQL语句 ................................................ ................................................... (7)1. 数据库设计字段表和字段命名MySQL常见的表类型介绍:A:MyISAM数据表又分为MyISAM Satic (静态MyISAM)、MyISAM Dynamic (动态MyISAM)、MyISAM Compressed (压缩MyISAM)。
数据库设计与开发规范
数据库设计与开发规范1.数据库命名规范:-数据库名、表名、字段名应使用小写字母,并用下划线分隔单词,避免使用特殊字符或关键字。
-数据库、表、字段名应具有描述性,能够清晰地表达其含义。
2.表设计规范:-表应具有主键,用于唯一标识每一条记录。
-表应遵循第三范式,避免数据冗余。
-避免使用过多的表关联,以提高查询效率。
3.字段设计规范:-字段应具有合适的数据类型,确保数据完整性和查询效率。
-字段应具有明确的含义,避免使用模糊或缩写的名称。
-字段应尽量避免为空,除非确实需要。
4.索引设计规范:-针对经常被查询的字段,可以创建索引以加快查询速度。
-索引应选择适当的数据结构和算法,以提高查询效率。
-避免创建过多的索引,以降低写操作的开销。
5.SQL语句规范:-SQL语句应使用缩进、换行等格式化方式,提高可读性。
-避免直接使用字符串拼接的方式构建SQL语句,以防止SQL注入攻击。
-避免使用SELECT*,尽量指定需要查询的字段。
6.数据库安全规范:-设置合适的账号和密码,确保只有授权的用户可以访问数据库。
-定期备份数据库,以防止数据丢失。
-对于敏感数据,应加密存储,确保数据安全性。
7.性能优化规范:-避免每次查询都进行全表扫描,通过合适的索引和优化SQL语句提高查询效率。
-合理分析查询日志和慢查询日志,找出性能瓶颈并进行优化。
-定期进行数据库表的优化和碎片整理,提高数据库性能。
8.数据库文档规范:-对于重要的数据库、表和字段,应编写相应的文档,包括设计意图、用途和使用方法等。
-更新数据库结构时,应及时更新数据库文档以保持一致性和可维护性。
以上是一些常用的数据库设计与开发规范,通过遵守这些规范可以提高数据库系统的可靠性、可维护性和性能。
此外,规范的制定也依据具体的应用场景和业务需求,不同项目可能会有不同的规范要求。
mysql数据库设计原则
MySQL数据库设计原则一、概述MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种规模的应用程序中。
在设计MySQL数据库时,遵循一些重要的原则可以提高数据库的性能、可靠性和可维护性。
本文将介绍一些常用的MySQL数据库设计原则,以帮助开发人员设计出高效、稳定的数据库。
二、数据规范化数据规范化是数据库设计的基本原则之一,它通过将数据分解为更小的、更具体的表来消除冗余数据,并通过外键建立表之间的关系。
以下是一些常用的数据规范化原则:2.1 第一范式(1NF)第一范式要求每个数据库表的每个列都是原子的,即不可再分解的最小数据单元。
例如,一个顾客表应该有独立的列存储姓名、地址、邮编等信息,而不是将这些信息存储在一个列中。
2.2 第二范式(2NF)第二范式要求每个非主键列都完全依赖于主键。
如果一个表中存在复合主键,那么非主键列必须依赖于所有的主键列。
如果非主键列只依赖于部分主键列,那么就应该将这些非主键列分离出来形成一个新的表。
2.3 第三范式(3NF)第三范式要求每个非主键列都不传递依赖于主键。
如果一个非主键列依赖于另一个非主键列,那么就应该将这个非主键列分离出来形成一个新的表。
三、索引设计索引是提高数据库查询性能的关键。
合理的索引设计可以加快查询速度,减少数据库的IO负载。
以下是一些索引设计原则:3.1 选择合适的索引列选择合适的索引列是索引设计的关键。
通常情况下,主键列和经常用于查询的列都是好的索引选择。
另外,对于经常用于排序和分组的列,也可以考虑创建索引。
3.2 避免创建过多的索引虽然索引可以提高查询性能,但是创建过多的索引会增加数据库的维护成本,并且会降低写入性能。
因此,在设计索引时,需要权衡查询性能和写入性能。
3.3 使用复合索引复合索引是由多个列组成的索引,可以提高查询的效率。
在创建复合索引时,需要考虑查询的频率和列的顺序,以及列的选择性。
四、表关系设计表关系设计是数据库设计的重要组成部分。
Mysql数据库设计规范
Mysql数据库设计规范Mysql数据库规范Version 1.0创建时间2016-08-011.命名规范(1)库名、表名、字段名必须使用小写字母,并采用下划线分割。
(2)库名、表名、字段名尽量不要超过32个字符。
(3)库名、表名、字段名必须见名知意。
命名与业务、产品线等相关联。
(4)库名、表名、字段名禁止使用MySQL保留字。
(保留字列表见2.基础规范(1)使用INNODB存储引擎。
(2)表字符集使用UTF8字符集,校验字符集使用utf8_general_ci(3)所有表都需要添加注释;除主键外的其他字段都需要增加注释。
(4)禁止在数据库中存储图片、文件等大数据。
(5)每张表数据量建议控制在5000W以内。
(6)禁止在线上做数据库压力测试。
(7)禁止从测试、开发环境直连线上数据库。
3.库表设计(1)制止利用分区表。
(2)将大字段、访问频率低的字段拆分到单独的表中存储,星散冷热数据。
(3)采用合适的分库分表战略。
例如千库十表、十库百表等。
4.字段设计(1)建议利用UNSIGNED存储非负数值。
(2)建议利用INT UNSIGNED存储IPV4。
(3)用DECIMAL代替FLOAT和DOUBLE存储精确浮点数。
例如与泉币、金融相关的数据。
(4)INT类型固定占用4字节存储,(5)区分使用TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT数据类型。
例如取值范围为0-80时,使用TINYINT UNSIGNED。
(6)强烈建议利用XXX来代替ENUM类型。
(7)尽可能不利用TEXT、BLOB类型。
(8)禁止在数据库中存储明文密码。
(9)使用尽可能小的VARCHAR字段。
VARCHAR(N)中的N表示字符数而非字节数。
(10)区分使用DATETIME和TIMESTAMP。
存储年使用YEAR类型。
存储日期使用DATE 类型。
存储时间(精确到秒)建议使用TIMESTAMP类型。
(11)所有字段均定义为NOT NULL。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL DB规范目录简介 (3)目的 (3)适用范围 (3)数据库设计 (3)引擎及版本选择 (3)基础规范 (3)命名规范 (5)库表设计规范 (5)字段设计 (6)常用数据类型: (6)数据类型使用建议: (6)索引规范 (8)索引准则 (8)索引禁忌 (8)不使用外键 (9)SQL设计 (10)简介介绍在使用mysql中各种注意事项和优化细节目的供开发人员参考,合理利用MySQL特性,开发出更高效的代码减少后端数据库压力,让整个系统高效稳定运行适用范围业务数据库使用的是MySQL的数据库。
数据库设计实现目标:业务功能实现、数据的扩展性、普遍性适用性业务中80%+的性能优化是来自架构设计的优化引擎及版本选择根据业务特性选择合适的存储引擎,默认选择InnoDB存储引擎,原因如下(MyISAM与InnoDB比较):基础规范所有库表默认使用INNODB存储引擎,MyISAM适用场景非常少●库表字符集使用UTF8,原因如下:使用utf8字符集,如果是汉字,占3个字节,但ASCII码字符还是1个字节;统一不会有转换产生乱码风险;其他地区的用户(美国、印度、台湾)无需安装简体中文支持,就能正常看您的文字,并且不会出现乱码。
UTF-8最大的一个特点,就是它是一种变长的编码方式。
它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。
因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
剩下的没有提及的二进制位,全部为这个符号的unicode码。
●所有表和字段都需要添加注释,以方便其它开发及dba了解●单表数据量纯int型建议控制在1000w以内,含char型的建议500w以内,行平均长度控制在16KB以内,单表20GB以内●不在数据库中存储图片、文件等大数据.原因如下:1、对数据库的读写速度永远赶不上文件系统的处理速度2、数据库备份会变的很臃肿,备份很耗时间3、对文件的访问需要通过你的应用和数据库●临时短命数据尽量不要存到数据库中,建议存放于前端的memcache、redis等nosql中,减少后端数据库压力●禁止在线上做压力测试●禁止从测试、开发环境直接连接线上数据库●用数据库来持久化存储以及保证事务一致性,不是运算器,在应用层实现计算●读写分离,主库只写和少量实时读取请求,使用从库来查询。
●采用队列方式合并多次写请求,持续写入避免瞬间压力●超长text/blob进行垂直拆分,并先行压缩●冷热数据进行水平拆分(如6个月前后数据),LRU原则●快速更新频繁和大数据表禁止直接运行count(*)统计●压力分散,在线表和归档表(日志表)分开存储;不重要的非实时查询日志不要存数据库,以文件方式在应用端统计分析。
●禁止明文存储机密数据,需至少两次加密(部分数据可逆运算)命名规范●库名、表名、字段名必须使用小写字母,不同含义采用下划线分割●库名、表名、字段名禁止超过32个字符,名称必须是易于理解,见名知意,能表达表的功能的英文单词或缩写英文单词,多个用_来连接●库名、表名、字段名禁止使用MySQL保留字如:create、alter、add、desc、delete,union,sleep等mysql>create database create;ERROR1064(42000):You have an error in your SQL syntax;check the manual that corresponds toyour MySQL server version for the right syntax to use near'create'at line1#使用了MySQL保留字mysql>●临时库、临时表须以tmp为前缀或后缀,以日期结尾。
如:tmp_sub_order●备份库须以bak_日期结尾(如:test_order_bak_20140430)对象命名汇总表对象名前后缀范例描述表(table)tbl_系统功能简写_tbl_order_main临时表用tmp_前缀视图(view)vw_系统功能简写_vw_commodity_age_prop一般索引(normalindex)idx_idx_order_sub_create_time表名或字段名过长,采用简写唯一索引(uniqueindex)udx_udx_login_name主键(primary key)pk_pk_login_id Mysql不支持可以注释实现库表设计规范●禁止使用分区表●用HASH进行散表,表名后缀使用十进制数,下标从0开始●按日期时间分表需符合YYYY[MM][DD][HH]对于无法按日期时间分表的建议按id最后一位或最后两位分库分表存储●采用合适的分库分表策略。
如:十库百表、百库百表等字段设计拆分大字段和访问频率低的字段,按访问频率把字段拆分开,如:大字段和访问频率低的字段放一起。
订单类的可按按日期存放,数据分离冷热数据。
常用数据类型:类型长度(字节)范围tinyint1有符号-128~127无符号0~255smallint2有符号-32768~32767无符号0~65535mediumint3有符号-8388608~8388607无符号0~1677215int\integer4有符号-2147483648~2147483647无符号0~4294967295bigint8有符号-9223372036854775808~9223372036854775807无符号0~18446744073709551615float4最小值+-1.175494351Estate-38最大值+-3.42823466E+38double8最小值+-2.225073855072014E-308最大值+-1.7976931348623157E+308decimal(m,d)m+2字节m+2最大取值与double相同,给定decimal的有效取值由m和d决定char(m)m M为0~255之间的整数,在存储数据时会删除尾部空格varchar(m)m M为0~65535之间的整数,值的长度+1个字节。
tinyblob值+1允许长度0~255字节blob值+1允许长度0~65535字节(可存二进制文件)拒绝使用mediumblob值+3允许长度0~167772150字节longblog值+4允许长度0~4294967295字节tinytext值+2允许长度0~255字节Text值+2允许长度0~65535字节mendiumtext值+4允许长度0~167772150字节varbinary(m)值+1允许长度0~M个字节的变长字节字符串binary(m)m允许长度0~M个字节的定长字节字符串enum值枚举型数据类型使用建议:●尽可能不使用TEXT、BLOB类型,Text类型在MySQL中处理性能远低于varchar类型,如果必须使用建议按拆分原则(冷热数据、大字段)拆到单独的表中,原因如下:1.强制生成硬盘临时表2.浪费更多的空间3.Varchar(65535)==>64K(在utf8下)●用DECIMAL代替FLOAT和DOUBLE存储精确浮点数●将字符转化为数字●存储字符型数据时,尽可能先压缩或者序列化●优先使用ENUM类型数据(mysql会字段转换为数字储存)mysql>show create table user_info;+----------------+--------------------------+|Table|Create Table|+----------------+--------------------------+|user_info|CREATE TABLE`user_info_temp`(`id`int(5)NOT NULL AUTO_INCREMENT COMMENT'分类ID',`sex`enum('M','F')NOT NULL COMMENT'性别',PRIMARY KEY(`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8|+----------------+--------------------------+1row in set(0.00sec)mysql>●可使用TINYINT来代替ENUM类型●显式约束:NOT NULL●所有避免使用null值(索引列禁止使用null),null值缺点如下:Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂。
可空列需要更多的存储空间),还需要mysql内部进行特殊处理。
可空列被索引后,每条记录都需要一个额外的字节,还能导致MYisam中固定大小的索引变成可变大小的索引;查询时使用is null或is not null数字类型不会使用索引,字符只有is not null才会使用到索引●使用UNSIGNED存储非负整数,整数类型有可选unsigned属性,表示不允许负数,大概可以提高正数上限一倍如:tinyint unsigned可以存放范围是0~255,而tinyint范围是-128~127●INT类型固定占用4字节存储●使用timestamp(4字节int unsigned,且效率非常高)存储时间,而非使用date/datetime/char/varcharTIMESTAMP的变体TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录和修改现有记录的时候都对这个数据列刷新TIMESTAMP DEFAULT CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为0,以后修改时刷新它TIMESTAMP DEFAULT‘yyyy-mm-dd hh:mm:ss’N UPDATE CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它●使用int unsigned存储IPV4才4字节(mysql内置INET_ATON/INET_NTOA函数快速转换),采用char至少15字节索引规范●索引的用途:去重、加速定位、避免排序、覆盖索引(在索引里直接取到要用的数据,非常快速)●索引数量:单张表中索引数量尽量不要超过5个,单个索引中的字段数不超过5个●对字符串使用前缀索引,前缀索引长度不超过8个(建议优先考虑前缀索引)●根据业务查询需要多列查询时尽量选择建立组合索引:对于组合索引列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。