MySQL数据库开发规范精编WORD版
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数据库规范文档[V1.3]拟制人:审核人:批准人:2017年11月3日文件变更记录*A - 增加M - 修订D - 删除目录1 总则 (3)1.1 目的 (3)1.2 适用范围 (3)1.3 管理职责 (3)1.3.1 开发项目组 (3)1.3.2 运维部 (3)2 具体规范 (4)2.1 字符集 (4)2.2 命名规则 (4)2.2.1 数据库名称命名规则 (4)2.2.2 表名称命名规则 (5)2.2.3 字段命名规则 (5)2.2.4 索引命名规则 (5)2.3 字段类型选择 (6)2.3.1 数字类型 (6)2.3.2 字符串类型 (7)2.3.3 text和blob类型 (8)2.3.4 datetime和timestamp (8)2.4 默认情况 (8)2.4.1 主键 (8)2.4.2 默认值 (9)2.5 存储引擎 (9)2.6 数据库版本 (9)1 总则1.1 目的为使XXXX公司(以下简称“XX”)内部MySQL项目数据库设计遵循标准化、统一化原则,便于每个开发工程师了解不同业务逻辑关系,同时降低bug产生量和问题排查时间。
最终使得XX内部所有MySQL项目数据库设计条理有序,关系明确,特制订本使用规范。
1.2 适用范围本规范适用于XX内部所有MySQL项目数据库设计。
1.3 管理职责1.3.1 开发项目组(1)开发工程师依据该规范设计数据库。
(2)各项目组技术负责人先内部审核数据库设计方案。
1.3.2 运维部(1)由运维部严格把关各个项目组初审提交的数据库设计方案。
对于违法该规范,数据库管理员须要求其重新设计或修改,对于符合该规范可在服务器执行。
2 具体规范2.1 字符集凡涉及数据库表结构须统一utf8字符集,包括客户端和服务端。
1. 客户端字符集character_set_client= utf8 ; //客户端字符集设置2. 连接层字符集character_set_connection= utf8 //连接层字符集设置3. 数据库默认字符集character_set_database= utf8 //数据库端字符集默认设置4. 默认内部操作字符集character_set_server= utf8 //服务端字符集设置5. 系统元数据(字段名等)字符集character_set_system= utf8 //系统元数据字符集设置6. 查询结果字符集character_set_results= utf8 //查询结果字符集设置2.2 命名规则2.2.1 数据库名称命名规则数据库命名规则必须遵循如下规则:(1)小写字母,数字和半角下划线组合。
MySQL有哪些开发规范
对于刚加入互联网的朋友们,肯定会接触到MySQL,MySQL作为互联网最流行的关系型数据库产品,它有它擅长的地方,也有它不足的短板,针对它的特性,结合互联网大多应用的特点,现总结出互联网MySQL的一些开发规范,仅供参考。
一基础规范(1) 使用INNODB存储引擎(2) 表字符集使用UTF8(3) 所有表都需要添加注释(4) 单表数据量建议控制在5000W以内(5) 不在数据库中存储图、文件等大数据(6) 禁止在线上做数据库压力测试(7) 禁从测试、开发环境直连数据库二命名规范(1) 库名表名字段名必须有固定的命名长度,12个字符以内(2) 库名、表名、字段名禁⽌止超过32个字符。
须见名之意(3) 库名、表名、字段名禁⽌止使⽤用MySQL保留字(4) 临时库、表名必须以tmp为前缀,并以日期为后缀(5) 备份库、表必须以bak为前缀,并以日期为后缀三、库、表、字段开发设计规范(1) 禁使用分区表(2) 拆分大字段和访问频率低的字段,分离冷热数据(3) 用HASH进⾏散表,表名后缀使⽤⼗进制数,下标从0开始(4) 按日期时间分表需符合YYYY[MM][DD][HH]格式(5) 采用合适的分库分表策略。
例如千库十表、十库百表等(6) 尽可能不使用TEXT、BLOB类型(7) 用DECIMAL代替FLOAT和DOUBLE存储精确浮点数(8) 越简单越好:将字符转化为数字、使用TINYINT来代替ENUM类型(9) 所有字段均定义为NOT NULL(10) 使用UNSIGNED存储非负整数(11) INT类型固定占用4字节存储(12) 使用timestamp存储时间(13) 使用INT UNSIGNED存储IPV4(14) 使用VARBINARY存储大小写敏感的变长字符串(15) 禁止在数据库中存储明文密码,把密码加密后存储(16) 用好数值类型字段Tinyint (1Byte)smallint (2Byte)mediumint (3Byte)int (4Byte)bigint (8Byte)如果数值字段没有那么大,就不要用bigint(17) 存储ip最好用int存储而非char(15)(18) 不允许使用ENUM(19) 避免使用NULL字段NULL字段很难查询优化,NULL字段的索引需要额外空间,NULL字段的复合索引无效(20) 少用text/blob,varchar的性能会比text高很多,实在避免不了blob,请拆表(21) 数据库中不允许存储大文件,或者照片,可以将大对象放到磁盘上,数据库中存储它的路径四、索引规范1、索引的数量要控制:(1) 单张表中索引数量不超过5个(2) 单个索引中的字段数不超过5个(3) 对字符串使用前缀索引,前缀索引长度不超过8个字符(4) 建议优先考虑前缀索引,必要时可添加伪列并建立索引2、主键准则(1) 表必须有主键(2) 不使用更新频繁的列作为主键(3) 尽量不选择字符串列作为主键(4) 不使用UUID MD5 HASH这些作为主键(数值太离散了)(5) 默认使非空的唯一键作为主键(6) 建议选择自增或发号器3、重要的SQL必须被索引,比如:(1) UPDATE、DELETE语句的WHERE条件列(2) ORDER BY、GROUP BY、DISTINCT的字段4、多表JOIN的字段注意以下:(1) 区分度最大的字段放在前面(2) 核⼼SQL优先考虑覆盖索引(3) 避免冗余和重复索引(4) 索引要综合评估数据密度和分布以及考虑查询和更新比例5、索引禁忌(1) 不在低基数列上建立索引,例如“性别”(2) 不在索引列进行数学运算和函数运算6、尽量不使用外键(1) 外键用来保护参照完整性,可在业务端实现(2) 对父表和子表的操作会相互影响,降低可用性7、索引命名:非唯一索引必须以idx_字段1_字段2命名,唯一所以必须以uniq_字段1_字段2命名,索引名称必须全部小写8、新建的唯一索引必须不能和主键重复9、索引字段的默认值不能为NULL,要改为其他的default或者空。
MySQL数据库开发规范
MySQL数据库开发规范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开始递增,比如wenan_01,以时间进行分库的名称格式是库名_时间。
4.【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8。
创建数据库SQL举例:create database db1 default character set utf8;2.1.2 表结构1.【强制】表和列的名称必须控制在32个字符以内,表名只能使用字母、数字和下划线,一律小写。
2.【建议】表名要求模块名强相关,如师资系统采用”sz”作为前缀,渠道系统采用”qd”作为前缀等。
3.【强制】创建表时必须显式指定字符集为utf8。
4.【强制】创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为InnoDB。
当需要使用除InnoDB/MyISAM/Memory以外的存储引擎时,必须通过DBA审核才能在生产环境中使用。
因为Innodb表支持事务、行锁、宕机恢复、MVCC等关系型数据库重要特性,为业界使用最多的MySQL存储引擎。
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数据库规范一、建库规范(1)、库名必须使用小写字母,“_”分割。
(2)、库名必须不超过12个字符。
(3)、字符集选择UTF8。
如果需要存储表情,那么选择utf8mb4来进行存储,注意它与utf-8编码的区别。
二、.建表规范(1)、表名必须使用小写字母,“”分割,表的命名最好是加上“业务名称表的作用。
(2)、新表必有字段参见—>公共字段规约。
(3)、新表必有comment中文注释,方便其它开发人员查看。
(4)、表名总长度不超过26个字符。
(5)、建议使用InnoDB存储引擎。
三、字段规范(1)、字段名必须使用小写字母,“_”分割。
一般采用简写,关键字要准确,避免歧义。
(2)、字段名原则上不超过20个字符,且必有comment注释。
(3)、表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 tinyint ( 1表示是,0表示否)。
(4)存储精确浮点数统一使用【decimal】(长度10,小数点2)替代【float】和【double】。
如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
(5)存储时间统一使用【datetime】(长度0)。
(6)、若是表关联字段,必须注明所关联表的表名及字段名。
(7)、字段名禁用保留字,如 desc、range、match、delayed 等等,请参考 MySQL 官方保留字。
四、.索引(1)、业务上具有唯一特性的字段,必须建成唯一索引(2)、索引中的字段数建议不超过5个。
(3)、单张表的索引数量控制在5个以内。
(4)、多表关联查询时,保证被关联的字段需要有索引。
五、SQL规约(1)、超过三个表的 join尽量避免。
需要 join的字段,数据类型要保持绝对一致。
(2)、SELECT语句只获取前端需要的字段(禁止使用万能SQL:select *进行查询)。
(3)、禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
MySql数据库设计规范
2. 命名
(1) 命名应使用富有意义的英文词汇,多个单词组成的,中间以下划线分割。
(2) 命名只能使用英文字母,数字和下划线。
(3) 命名避免使用 MySql 的保留字(详见附录 )和系统关键字。
(4) 命名长度以不超过 15 个字符为宜(避免超过 20)。
BIGINT
8 个字节, -9223372036854775808 to 922337203685477580
0 to 18446744073709551615
DECIMAL(P,S)
定点数(以字符串形式存放)
默认:P 为 10,S 为 0,最大 65 位
DATE
Time
DATETIME
TIMESTAMP
● 所有的 MySQL数据库除历史原因外,都采用CHARSET=utf8mb4 COLLATE=utf8mb4_bin 编
码。 ● MySql对 DDL 支持很差,表结构推荐设计为 Key-Value 结构。如果是关系型结构的数据库,
请尽量预留一些字段,如 value1,value2,value3。
范围 '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07'
格式'YYYY-MM-DD HH:MM:SS' 宽度固定 为 19 个字符(4 字节) 不建议532>n>4, 注意,n 是字符 数,而不是字节数
CHAR(n)
(4) 请不要使用外键约束,如果数据存在外键关系,请在程序层面实现。
(5) 如果应用使用的是长连接,应用必须具有自动重连的机制。但请避免每执行一个 SQL去检查 一次 DB 可用性。
mysql数据库开发标准
mysql数据库开发标准MySQL是一种流行的开源关系型数据库管理系统,被广泛用于Web应用开发。
在进行MySQL数据库开发时,遵循一套标准的开发规范可以使开发过程更加高效、可维护和可扩展。
下面是一些MySQL数据库开发的标准参考内容:1. 数据库命名规范:- 数据库名:使用小写字母,使用下划线(_)分隔单词,例如:my_database。
- 表名:使用小写字母,使用下划线(_)分隔单词,例如:user_info。
- 列名:使用小写字母,使用下划线(_)分隔单词,例如:first_name。
2. 数据类型选择:- 使用合适的数据类型来存储数据,例如使用INT来存储整数,VARCHAR来存储可变长度字符串。
- 避免使用过长的VARCHAR类型,浪费存储空间。
- 只存储必要的信息,避免在数据库中重复存储相同的数据。
3. 索引的使用:- 为频繁用于查找、排序和过滤的列创建索引,以提高查询性能。
- 避免在频繁插入、删除或更新的列上创建过多的索引,因为索引的维护会影响性能。
4. SQL语句编写规范:- 使用缩进和换行使SQL语句易读。
- 使用全部大写或全部小写的关键字,提高可读性。
- 使用注释来解释复杂的SQL语句的用途。
5. 数据库表的设计:- 使用主键来唯一标识每一行,以提高数据访问效率。
- 使用外键来建立表与表之间的关系,保持数据一致性。
- 避免使用过多的表连接操作,以提高查询性能。
6. 安全性考虑:- 使用合适的权限管理机制,限制用户的访问权限。
- 避免在SQL语句中直接拼接用户输入的数据,以防止SQL 注入攻击。
- 定期备份数据库,以防止数据丢失。
7. 性能优化:- 使用恰当的查询语句,使用索引来提高查询性能。
- 避免频繁的查询和更新操作,使用批量操作来提高性能。
- 使用数据库缓存来加快数据访问速度。
8. 数据库文档:- 编写数据库设计文档,包括数据库结构、表结构和索引等信息。
- 在存储过程、函数和触发器等对象中添加注释,方便其他开发人员理解和维护。
(Word修改版)MySql数据库入门教程
∙MySql入门教程∙一、连接MYSQL格式:mysql -h 主机地址-u 用户名-p用户密码1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql-uroot-p,回车后提示你输密码,如果刚安装好MYSQL,终极用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>2、例2:连接到远程主机上的MYSQL。
假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。
则键入以下命令:mysql -h110.110.110.110 -uroot-pabcd123(注:u和root能不用加空格,其他也相同)3、退出MYSQL 命令:exit(回车)二、修改密码格式:mysqladmin -u 用户名-p 旧密码password新密码1、例1:给root加个密码ab12。
首先在DOS下进入目录mysqlbin,然后键入以下命令mysqladmin -uroot -passwordab12注:因为开始时root没有密码,所以-p旧密码一项就能省略了。
2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 passworddjg345三、增加新用户(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)格式:grant select on 数据库.* to 用户名@登录主机identified by"密码"例1、增加一个用户test1密码为abc,让他能在所有主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
首先用以root用户连入MYSQL,然后键入以下命令:grant select,insert,update,delete on *.* to test1@"%" Identified by"abc";但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就能在internet上的所有一台计算机上登录你的mysql数据库并对你的数据能为所欲为了,解决办法见例2。
MySQL数据库开发的三十六条军规
MySQL数据库开发的三⼗六条军规⼀.核⼼军规尽量不在数据库做运算,cpu计算的事务必移⾄业务层;控制表、⾏、列数量(【控制单张表的数据量 1年/500W条,超出可做分表】,【单库表数据量不超过300张】、【单张表的字段个数不超过50个,多了拆表】)三⼤范式没有绝对的要使⽤,效率优先时可适当牺牲范式 https:///wdw31210/p/8574853.html拒绝3B(拒绝⼤sql语句:big sql、拒绝⼤事物:big transaction、拒绝⼤批量:big batch);⼆.字段类军规⽤好数值类型(⽤合适的字段类型节约空间); 如:⼀个字段注定就只有1跟2 要设计成 int(1) ⽽不是 int(11)字符转化为数字(能转化的最好转化,同样节约空间、提⾼查询性能); 如,⼀个字段注定就只有1跟2,要设计成int(1) ⽽不是char(1) 查询优化如:字段类型是 char(1) 查询应当where xx='1' ⽽不是 xx=1 会导致效率慢避免使⽤NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引⽆效); ,如:要设计成 `c` int(10) NOT NULL DEFAULT 0 ⽽不是 `c` int(10) NOT NULL;少⽤text/blob类型(尽量使⽤varchar代替text字段); 需要请拆表不在数据库存图⽚,请存图⽚路径,然后图⽚⽂件存在项⽬⽂件夹下。
三.索引类军规合理使⽤索引(改善查询,减慢更新,索引⼀定不是越多越好); 如:不要给性别创建索引字符字段必须建前缀索引; `pinyin` varchar(100) DEFAULT NULL COMMENT '⼩区拼⾳', KEY `idx_pinyin` (`pinyin`(8)),不在索引做列运算;如: WHERE to_days(current_date) – to_days(date_col) <= 10 改为 WHERE date_col >= DATE_SUB('2011-10- 22',INTERVAL 10 DAY);innodb主键推荐使⽤⾃增列(主键建⽴聚簇索引,主键不应该被修改,字符串不应该做主键)(理解Innodb的索引保存结构就知道了); 如:⽤独⽴亍业务的AUTO_INCREMENT不⽤外键(由程序保证约束);四.SQL类军规sql语句尽可能简单(⼀条sql只能在⼀个cpu运算,⼤语句拆⼩语句,减少锁时间,⼀条⼤sql可以堵死整个库);简单的事务;避免使⽤trig/func(触发器、函数不⽤,由客户端程序取⽽代之);不⽤select *(消耗cpu,io,内存,带宽,这种程序不具有扩展性); 如:select a ,b,c 会⽐ select * 好只取需要列OR改写为IN 如: where a=1 or a=2 改 a in(1,2)OR改写为UNION 针对不同字段 where a=1 or b=1 改 select 1 from a where a=1 union select 1 from a where b=1避免负向%; 如 where a like %北京% 改为 where a like '北京%'limit⾼效分页(limit越⼤,效率越低); 如 Limit 10000,10 改为 where id >xxxx limit 11使⽤union all替代union(union有去重开销);⾼并发db少⽤2个表以上的join;使⽤group by 去除排序加快效率; 如: group by name 默认是asc排序改 group by name order by null 提⾼查询效率请使⽤同类型⽐较; 如: where 双精度=双精度数字=数字字符=字符避免转换导致索引丢失打散⼤批量更新; 如:在凌晨空闲时期更新执⾏五.约定类军规隔离线上线下,如:开发⽤dev库测试⽤qa库模拟⽤sim库线上⽤线上库,开发⽆线上库操作权限不在程序端加锁,即外部锁,外部锁不可控,会导致⾼并发会炸,极难调试和排查统⼀字符 UTF-8 校对规则 utf8_general_ci 出现乱码 SET NAMES UTF8统⼀命名规范,库表名⼀律⼩写,索引前缀⽤idx_ 库名⽤缩写(2-7字符),不使⽤系统关键字保留字命名。
MYSQL开发规范
MYSQL上线以及研发开发规范注:现阶段上线内容手动审核,后期会上一套审核系统,提供给研发相关页面,所有的schema,表,sql语句等系统自动审核后自动上线,如不符合规范,审核系统会不通过。
一schema表结构及数据类型规范:(1)库名、表名、字段名必须使用小写字母,并采用下划线分割。
(不得使用大写字母,lower_case_table_names=1,默认区分大小写)(2)表设计参考3范式,也可以考虑反范式,增加冗余,有利于查询。
(根据架构设计)(3)所有表和字段需要添加注释。
(4)每张表必须有primarykey,不能使用业务用途的字段当primarykey,可以单独用一组自增字段作为primarykey。
(5)存储引擎使用INNODB(特殊情况下可以选择MERGE,TOKUDB)。
不能选择(MYISAM以及MEMORY)。
(6)字符集统一使用UTF8MB4。
(7)字段值不能为null,如果需要用户可以不填写内容,请使用default。
(8)数据类型选择上尽量优化,多使用INIT,注意VARCHAR()括号内的长度,尽量精简。
(数据量小体现不出,数据量大每个节省几十k内存)例如:ip 存储可以使用INT等。
(INIT默认占用4个字节)(9)区分使用DATETIME和TIMESTAMP。
(10)不要在mysql数据库中存放业务逻辑。
二命名规范:(1)库名和表名必须有固定的长度,一般不超过12个字符。
(2)库名和表名需要有意义。
库名(一般是英文,或者英文的简写),表名一般是业务_功能。
(3)库名和表名不能超过32个字符。
(4)库名和表名禁止使用mysql的保留关键字。
三SQL规范:(1) sql语句尽量简洁,多表关联查询不应该超过2张。
超出上述范围在业务层面解耦以及合并数据。
查询结果尽量唯一,避免查询结果出现大批量数据。
多用关联查询,少用子查询。
(排除子查询为primarykey的可以使用)(2) 事务要简单,避免大事物的出现(大事物拆分为小事物去处理),所有事物的执行时间不得超过1秒。
MySQL数据库开发设计规范1.0
MySQL数据库开发设计规范文档资料信息版本历史版本号:修订者:注意事项目录第1章范围和简介 (4)1.1简介 (4)1.2范围 (4)1.3术语和定义 (4)第2章命名规范 (5)2.1总则 (5)2.2库命名 (6)2.3表命名 (6)2.4字段命名 (7)2.5索引命名 (7)2.6视图 (8)2.7用户 (8)第3章设计规范 (9)3.1总则 (9)3.2库设计规范 (9)3.3表设计规范 (9)3.4字段设计规范 (10)3.5索引设计规范 (11)第4章应用设计规则 (12)第5章SQL设计规范 (13)第1章范围和简介1.1 简介针对关系型数据库MySQL的相关特性,拟定的相关开发过程的规范,其旨在通过该规范的约束和建议,使开发人员可以在他们所编写的代码中保持统一正确的风格,提供代码的可读性以及减少出现错误的几率。
1.2 范围本规范仅适用于关系型数据库系统MySQL以及其对应的SQL脚本语言。
1.3 术语和定义本规范采用以下的术语描述:★规则:编程时强制必须遵守的原则。
★建议:编程时必须加以考虑的原则。
★说明:对此规则或建议进行必要的解释。
★示例:对此规则或建议给出样例。
第2章命名规范2.1 总则【规则】库、表、字段命名的字符范围为:a-z, 0-9 和_(下划线)。
【规则】长度控制在30个字符以内【规则】采用英文单词、英文短语(包括缩写)作为名称【规则】特殊约定或缩写,要有注释说明【规则】禁用保留字命名【说明】mysql保留字2.2 库命名【规则】使用项目名称作为库名【规则】单库仅使用a-z,分库名称为“库名_编号”2.3 表命名【规则】单表仅使用a-z、_,分表名称为“表名_编号【建议】表名代表用途、内容,格式:名称_后缀【建议】不使用tab或tbl作为后缀【说明】常用后缀关联表命名为re_表a_表b,临时表必须使用后缀”_tmp”备份表必须使用后缀“_bak”字典表统一使用后缀以”_dic”历史归档表必须使用后缀” _his”,例:task_his日志表必须使用后缀“_log”,例:task_log类型表必须使用后缀”_type”.例:task_type含有大字段blob或text列必须使用后缀”_lob”2.4 字段命名【规则】不使用任何前缀【建议】字段名表达精确,避免歧义,【建议】遵循“见名知意”的原则, 格式:名称_后缀【建议】布尔型的字段,以助动词(has/is)开头【说明】常用后缀流水号,命名以id结尾.例:task_id类别,命名以type结尾.例:station_type名称,命名以name结尾.例:enduser_name描述,命名以desc结尾.例:station_desc代码,命名以code结尾.例:error_code标志,命名以flag结尾.例:debug_flag时间,命名以time结尾.例:insert_time2.5 索引命名【规则】命名格式:前缀_表名(或缩写)_字段名(或缩写)【建议】复合索引,取每字段前三个字符加下划线组合【说明】常用前缀主键必须使用前缀“pk_”外键必须使用前缀“fk_”UNIQUE约束必须使用前缀“uk_”普通索引必须使用前缀“idx_”2.6 视图【规则】命名格式:单表:v_表名(缩写),多表:v_用途(缩写)2.7 用户【规则】与数据库名字保持一致第3章设计规范3.1 总则【规则】表使用innodb存储引擎【规则】表、重要字段必须有注释【建议】拒绝大事务、大SQL、大批量、大字段【建议】数据库层不做运算,运算放到程序端3.2 库设计规范【规则】库表字符集和前端程序、中间件必须保持一致UTF8【说明】对恶魔字符集emoji用utf8mb4(ios常用)【规则】创建DB和表时显示指定字符集【示例】【规则】禁止使用外键、routine、trigger3.3 表设计规范【规则】innodb表必须有主键列,使用int unsigned/bigint unsigned,缺省auto_increment,并禁止更新。
mysql数据库开发标准
MySQL数据库开发的标准通常包括以下方面:
1. 规范化设计:使用规范化设计原则来优化数据库结构,减少冗余和数据不一致性。
2. 表设计:合理选择表的字段和数据类型,设置主键和外键约束,考虑索引的添加以优化查询性能。
3. 数据完整性:使用约束(如NOT NULL、UNIQUE、FOREIGN KEY等)来保证数据的完整性和一致性。
4. 数据安全:使用适当的访问控制和权限设置,限制用户对数据库的访问和操作,防止数据泄露和非法操作。
5. 命名规范:使用一致的命名规范来命名表、字段、索引、存储过程等,以提高代码可读性和维护性。
6. SQL语句编写:编写高效、可读性强的SQL语句,避免使用不必要的子查询、循环和大量的JOIN操作。
7. 错误处理:对于数据库操作中可能出现的错误,进行合理的异常处理和错误日志记录,确保系统的可靠性和稳定性。
8. 安全备份策略:定期备份数据库,确保数据库的安全性和可恢复性,同时测试备份的可用性。
9. 性能优化:使用合适的索引、查询优化和缓存机制来提高数据库的性能,确保系统的响应速度和稳定性。
10. 文档记录:编写清晰、准确的文档,记录数据库的设计、架构和维护信息,便于后续维护和团队协作。
MySQL开发规范
MySQL开发规范本⽂档是为帮助研发与运维⼈员按照规范使⽤MySQL数据库,提升研发写SQL的⽔平。
致⼒于提供⼀个安全,稳定,⾼性能的数据库环境。
命名规范1) 库名、表名、字段名必须使⽤⼩写字母,"_"分割。
2) 库名、表名、字段名不超过12个字符。
3) 库名、表名、字段名禁⽌使⽤MySQL保留字,见附件。
4) 库名、表名、字段名见名知意,建议使⽤名词⽽不是动词。
5) 数据对象、变量的命名都采⽤英⽂字符,禁⽌使⽤中⽂命名。
6) 临时库、表名必须以tmp为前缀,并以⽇期为后缀。
7) 备份库、表必须以bak为前缀,并以⽇期为后缀。
基础规范1) 所有表统⼀使⽤InnoDB存储引擎。
2) 表字符集选择UTF8mb4。
3) 所有表和列都需要添加注释。
4) 禁⽌在数据库中存储图⽚、⽂件。
5) 禁⽌在线上做数据库压⼒测试,如有特殊需要,需提前报备。
6) 禁⽌客户端直接操作测试,⽣产数据库。
7) 研发保证应⽤与数据库表结构版本的统⼀,并提供相应的数据库回滚策略。
8) 表结构变更DBA审核未通过的,不允许上线。
字段设计规范1) 每张表必须有整型主键。
如:id bigint(20) UNSIGNED , NOT NULL,不要⾃增。
2) 禁⽌DEFAULT NULL,建议NOT NULL 设置默认值。
3) 存储精确浮点数必须使⽤DECIMAL替代FLOAT和DOUBLE,或者使⽤bigint(需要做转换)。
4) 建议使⽤UNSIGNED存储⾮负数值。
5) 不建议使⽤ENUM类型,使⽤TINYINT来代替。
6) 建议使⽤INT UNSIGNED存储IPV4。
7) 禁⽌在数据库中存储明⽂密码。
8) 整形定义中建议采⽤INT(10),⽽不是INT(1),INT(11)或其他。
9) 存储状态,性别等,⽤TINYINT。
10) 将过⼤字段拆分到其他表中。
尽可能不使⽤TEXT、BLOB类型。
如果必须使⽤,业务表中的TEXT,BLOB中字段,必须要拆分到单独的表中存储。
MySQL数据库开发规范
精心整理平安金融科技数据库(MySQL )开发规范作者:简朝阳LastUpdated:25/02/1419:30:18历史修订记录:版本修订人 修订时间 修订内容 1.01.11.2 1.3 说明⇧⇧概述⇧⇧⇧⇧⇧⇧⇧1.命名规范总则⇧数据库对象名仅可包含小写英文字母、数字、下划线(_)三类字符,并以英文字母开头。
⇧数据库对象命名禁止使用MySQL 保留字。
⇧多个单词之间用下划线(_)分隔。
⇧对象名称长度若超过限制,则使用简写/缩写命名。
1.1.数据库命名⇧数据库以"db_"前缀+"站点名_"前缀及其所服务的应用名称命名。
1.2.表命名⇧所属同一模块的表必须以模块名作为前缀命名。
⇧历史数据表在原表基础上增加"_his"后缀命名。
1.3.⇧。
⇧1.4.⇧⇧⇧示例⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧字段order.order_id被order_item引用;⇧order_item表中与之对应的字段命名必须为:order_id2.对象设计规范总则⇧所有表、字段必须添加能够清楚表示其含义的注释。
状态类字段的注释中必须明确列出各状态值的说明。
⇧MySQL数据库中仅可以使用下文提及的数据类型。
2.1.数据类型⇧DECIMAL(M,D)当表示定点小数的情况下使用该类型,禁止使用浮点类型,会带来不精确。
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。
⇧INT系列所有整数类型字段使用INT(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),根据所存放的数据大小选择合适的子类型,且所有INT类型都不使用长度限制。
⇧VARCHAR⇧)。
⇧⇧-2.2.⇧idINT:主键使用MySQL的自增类型raw_add_timeDATETIME:创建日期(大字段拆分表除外),必须使用数据库时间(用now()生成)raw_update_timeTIMESTAMP:修改日期(大字段拆分表除外,但内容变化必须修改主表的update_time 字段),由数据库自动变更,应用不操作此字段以上3个字段都必须是没有任何商业意义的与业务无关的字段,不允许赋予任何商业意义⇧作为表间连接关系的字段,数据类型必须保持严格一致,避免索引无法正常使用。
mysql数据库开发管理规范
mysql数据库开发管理规范规范1:Mysql数据库的名字最好跟应⽤的名字⼀致规范2:表命名总长度不能超过26位规范3:表名由英⽂单词与下划线组成,表名中禁⽌使⽤中横线‘-’ ,单词之间⽤下划线隔开,严禁使⽤中⽂拼⾳。
对于单词超长的,可使⽤单词缩写,但是单词缩写必须能够完整表达原单词的含义。
禁⽌新建表名和原有系统中已有表名重名规范4:表名必须使⽤⼩写,如果⼤⼩写混合⽤,可能存在abc,Abc,ABC等多个表共存,容易导致混乱;规范5:⽆特殊⽤途,线上使⽤InnoDB存储引擎,innodb主键推荐使⽤⾃增列;规范6:表字符集选择UTF8规范7:每个表都需要添加表注释,⽅便其他开发⼈员查看规范8:合理分表,控制单表数据量,int型建议不超过1000w,含char则不超过500w规范9:临时表命名⽅式:TMP_表缩写规范10:字段名必须⾮Mysql关键字,具体的可以查看MySQL关键字⽂档规范11:控制单表列数量,字段少⽽精,字段数建议在20以内;规范12:字段名长度不得超过15位;规范13:存储精确浮点数必须使⽤DECIMAL替代FLOAT和DOUBLE,浮点数存在误差;规范14:整形定义中不显⽰规定显⽰长度,⽐如使⽤INT,⽽不是INT(4);规范15:尽可能不使⽤TEXT、BLOB类型,varchar的性能会⽐text⾼很多;实在避免不了blob,请拆表,单独存放blob字段数据;规范16:只存储年使⽤YEAR类型;规范17:如果是索引字段,强烈建议定义为not null;规范18:禁⽌在数据库中使⽤VARBINARY、BLOB存储图⽚、⽂件等;规范19:Mysql字段上禁⽌单独指定字符集;规范20:表的每个字段都需要添加相应注释,⽅便其他开发⼈员查看;规范21:字段的命名需要有含义,字段命名要能真实表达字段的意义。
对于外键引⽤的字段,需要与主表的字段名保持⼀致。
规范22:主键约束:表名_字段名_PK,约束名的最⼤长度为30位规范23:尽量少的使⽤外键,请由程序保证约束;规范24:唯⼀性约束:表名_UNIQ,对于存在多个唯⼀性约束的表,唯⼀性约束的命名为:表名缩写_字段名_UNIQ 2.1.5索引的命名,索引名的最⼤长度为30位规范25:索引:表名_字段名_IDX规范26:索引中的字段数建议不超过5个,唯⼀键由3个以下字段组成,唯⼀键不和主键重复规范27:索引字段的顺序需要考虑字段值去重之后的个数,个数多的放在前⾯规范28:索引名称必须使⽤⼩写规范29:UPDATE、DELETE语句也需要根据WHERE条件添加索引规范30:不建议使⽤%前缀模糊查询,例如LIKE “%koo”,这样会导致⽆法使⽤列上的索引⽽做全表扫描规范31:合理创建联合索引(避免冗余),(a,b,c) 相当于(a) 、(a,b) 、(a,b,c)规范32:单张表的索引数量控制在5个以内,禁⽌在每⼀个where条件列上创建索引,索引⼀定不是越多越好(能不加就不加,要加的⼀定得加),去重后记录条数过少不适合建索引,例如“性别”,“状态status”;规范33:创建表脚本命名为:_DDL.SQL规范34:修改线上表脚本命名为:_OTHER.SQL因为修改线上表的动作风险较⼤,所以对线上已存在的表修改脚本,需要单独列出,命名为DATABASE_OTHER.SQL规范35:create table语句参数需要显⽰指定ENGINE,CHARSET选项,表中有AUTO_INCREMENT⾃增列的,需要指定AUTO_INCREMENT的初始值规范36:每个表的字段数⽬不要超过100个规范37:字段必须定义合适的数据类型规范38:⽇期字段推荐使⽤TIMESTAMP和DATETIME数据类型,尽量不使⽤CHAR 和VARCHAR2,DATETIME记录年⽉⽇时分秒,并且记录的年份⽐较久远,那么最好⽤datetime,⽽不是timestamp,它的时间范围⽐较短,TIMESTAMP表⽰的时间为1970-01-01 08:00:01到2038-01-19 11:14:07规范39:所有表都默认加两列:1:created_time datetime not null2:update_time timestamp default current_timestamp on update current_timestamp规范40:关联表之间相同字段的数据类型和类型长度必须完全⼀致,如果关联表之间相同字段的数据类型不⼀致,那么在通过关联字段进⾏关联表之间的联合查询的时候,会导致执⾏计划出现问题,影响SQL语句效率。
《MysQl开源数据库》课程标准(可编辑修改word版)
《MYSQL 开源数据库》课程标准教研室主任:专业带头人:系(部)主任:教务处处长:教学副院长:审核批准日期:二○一七年五月《MYSQL 开源数据库》课程标准(基本信息)课程编码:课程类别:专业方向课程适应专业:移动应用开发开设时间:学时数:56 学时一、课程概述(一)课程性质《MySql 数据库》课程是高职移动应用开发专业的一门专业课程。
《MySql 数据库》是网络程序设计的基础,是进行网站设计、开发必须掌握的重要课程,是高职移动应用开发专业学生必须掌握的专业知识之一。
(二)课程基本理念为学生的长远发展着想,培养其软件开发岗位基本工作技能、职业素养、社会适应能力、交流沟通能力、团队协作能力、创新能力和自主学习能力。
(三)课程的设置与设计思路本课程设计了大量的趣味案例,引导学生思考问题、分析问题,不局限于用 MySql 来表达解决问题的方法,而更多地采用文字、图形或伪代码来描述,重在让学生掌握程序设计的一般方法,意识到“方法强于代码”,对学生的自学与将来发展非常有利。
二、课程目标本课程的主要目标是培养学生的数据库使用的基本技能;培养学生综合运用 PHP+MySql 进行网站开发的能力;使用 PHP+MySql 解决实际建站问题,学生学习了《MySql 数据库》可以从事网站开发、软件测试等工作,可以承担软件编码或者测试的工作,可以按照用户需求使用相关主流开发平台,完成相关的功能模块设计、编码、调试和单元测试工作。
三、内容标准(一)学习目标:通过《MySql 开源数据库》课程的教学,使学生具有基本的数据库设计能力、一定的 Sql 语句编写能力、良好的沟通能力、良好的分析问题、解决问题的能力、一定的创新能力。
(二)活动安排:1、基于工作过程的课程开发理念,先进行综合职业行动领域和情境分析,然后深入企业调研和行业专业研讨,最终分解和确定学习任务。
2、根据情景任务,开发相应的课程教案,组织课程资源。
3、推行一体化教学模式,强化教与学的及时互动,进行动态的教学评价和反馈机制。
mysql数据库规范
mysql数据库规范MySQL数据库规范MySQL是一款常用的关系型数据库管理系统,为了提高数据的一致性、可靠性和易维护性,我们需要制定一些数据库规范。
本文列举了一些MySQL数据库规范的建议,以帮助你更好地管理和维护MySQL数据库。
1. 表名和字段名规范- 表名和字段名应该使用小写字母,并使用下划线作为单词之间的分隔符。
例如,user_info是一个好的表名。
- 避免使用MySQL的关键字作为表名和字段名。
- 表名和字段名的命名应该具有描述性,能够清楚地表达其意义。
2. 主键规范- 每个表应该有一个主键来唯一标识每一行数据。
主键可以是单个字段,也可以是多个字段组合而成的复合主键。
- 主键字段应该是整型或者字符串类型,尽量避免使用大文本字段作为主键。
- 主键字段应该具有自增特性,以提高插入和查询的性能。
- 主键字段命名为id,表名是以表名加 id,如 user_info 表的主键应为 user_info_id。
3. 索引规范- 对于经常用于查询、排序和连接的字段,应该创建索引来提高查询性能。
例如,对于经常根据用户ID进行查询的表,应该为用户ID字段创建索引。
- 避免创建过多的索引,因为索引会增加数据的存储空间和维护负担。
只在必要的字段上创建索引。
- 避免创建过长的索引,因为较长的索引会占用更多的磁盘空间和内存。
- 定期对索引进行优化和维护,例如删除不再使用的索引,重新构建索引等。
4. 数据类型规范- 选择合适的数据类型来存储不同类型的数据,以提高存储效率和查询性能。
- 尽量避免使用大的文本类型,尤其是在索引字段上,因为文本类型的字段会占用更多的存储空间和CPU资源。
- 对于日期和时间类型的数据,应该使用合适的日期和时间类型,以方便日期和时间的计算和比较。
- 对于数值类型的数据,应该根据数据的精度和范围来选择合适的数值类型。
5. 数据库设计规范- 采用规范化的数据库设计,以减少数据冗余和提高数据一致性。
mysql数据库开发标准
mysql数据库开发标准
MySQL数据库开发标准主要包括以下几个方面:
1. 命名规范:表名、列名、索引名、存储过程名等应使用有意义的名字,避免使用过于简单或者无意义的名称。
命名应使用小写字母和下划线,避免使用特殊字符或空格。
2. 数据类型选择:选择合适的数据类型存储数据,避免数据类型的浪费和使用不当。
例如,对于只包含0和1的字段,可以使用bit类型。
3. 主键和索引:每个表都应该有一个主键,并为经常需要查询的字段创建索引,以提高查询性能。
需要注意的是,索引不宜过多,过多的索引会增加数据插入、更新和删除的开销。
4. SQL语句书写规范:SQL语句应该简洁清晰,易于维护,
并遵循编程规范。
例如,应该使用缩进和换行来提高代码的可读性。
5. 防止SQL注入:在编写SQL语句时,需要注意防止SQL
注入攻击,避免使用拼接字符串的方式,而应该使用参数化查询或者ORM框架。
6. 数据库备份和恢复:定期备份数据库,确保数据的安全性。
备份应该包括数据和结构,以便在需要时能够快速恢复数据库。
7. 数据库设计规范:在设计数据库时,应该注意避免冗余和重
复数据,遵循数据库设计的原则,如范式化等。
8. 事务处理:对于需要保证数据一致性和完整性的操作,应该使用事务处理,确保操作的原子性。
9. 数据库用户和权限管理:合理设置数据库用户和权限,确保只有授权的用户才能访问和操作数据库。
10. 日志和监控:开启数据库的日志功能,及时监控数据库的运行情况,发现问题及时处理。
这些是MySQL数据库开发的一些常见标准,根据具体项目的要求和实际情况,可能还有其他的标准需要遵循。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M y S Q L数据库开发规范精编W O R D版IBM system office room 【A0816H-A0912AAAHH-GX8Q8-GNTHHJ8】平安金融科技数据库(MySQL)开发规范作者: 简朝阳Last Updated: 25/02/14 19:30:18历史修订记录:修订时间修订内容版本修订人1.01.1李海军2013-03-11增加部分说明及修改1.2李海军2013-07-29增加连接池使用说明和memory引擎的控制增加了char类型,修改了timestamp的使用1.3李海军2014-02-25场合。
说明本规范包含平安金融科技使用 MySQL 数据库时所需要遵循的所有对象设计(数据库,表,字段),所需要遵循的命名,对象设计,SQL 编写等的规范约定。
所有内容都为必须严格执行的项目,执行过程中有任何疑问,请联系 DBA Team 取得帮助。
概述禁止明文传播数据库帐号和密码。
禁止开发工程师通过应用帐号登录生产数据库。
禁止应用在服务器安装MySQL客户端(可以安装开发包)。
禁止开发人员在SQL中添加 Hint,Hint只能由DBA审核后添加。
禁止使用悲观锁定,即读锁select … for update。
禁止在开发代码中使用DDL语句,比如 truncate,alter table … 等。
禁止DML语句的where条件中包含恒真条件(如:1=1)。
1. 命名规范总则数据库对象名仅可包含小写英文字母、数字、下划线(_)三类字符,并以英文字母开头。
数据库对象命名禁止使用MySQL保留字。
多个单词之间用下划线(_)分隔。
对象名称长度若超过限制,则使用简写/缩写命名。
1.1. 数据库命名数据库以"db_"前缀 + "站点名_"前缀及其所服务的应用名称命名。
1.2. 表命名所属同一模块的表必须以模块名作为前缀命名。
历史数据表在原表基础上增加"_his"后缀命名。
1.3. 字段命名布尔意义的字段以"_flag"作为后缀,前接动词。
如:表示逻辑删除意义的字段可命名为 delete_flag。
各表间相同意义的字段(如:作为连接关系的引用字段)使用相同的字段名。
1.4. 索引命名唯一索引以 uk_tablename_columnnames 方式命名普通索引以 idx_tablename_columnnames 方式命名组合索引以 idx_tablename_column1_column2... 方式命名示例站点名:maymay模块名:order ;数据表:item;字段组成:order_item_id,add_time,raw_update_time,c1,c2,c3,c4,c5标准数据库名:db_maymay_order;标准数据表名:order_item;历史数据表名:order_item_his;索引需求:c1唯一,c2和c3 组合索引:uk_order_item_c1, idx_order_item_c2_c3字段实际意义:是否已删除;标准字段名:delete_flag;字段 order.order_id被order_item引用;order_item 表中与之对应的字段命名必须为:order_id2. 对象设计规范总则所有表、字段必须添加能够清楚表示其含义的注释。
状态类字段的注释中必须明确列出各状态值的说明。
MySQL数据库中仅可以使用下文提及的数据类型。
2.1. 数据类型2.1.1. 数值类型DECIMAL(M,D)当表示定点小数的情况下使用该类型,禁止使用浮点类型,会带来不精确。
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。
INT系列所有整数类型字段使用INT(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),根据所存放的数据大小选择合适的子类型,且所有INT类型都不使用长度限制。
2.1.2. 字符串类型VARCHAR所有可变长度的字段均使用VARCHAR类型,对于有限类别的字段(如性别、状态等),均建议使用VARCHAR类型存储能明显表现其意义的字符串。
TEXT系列仅当需存储的字节数可能超过20000时,使用TEXT系列类型(TEXT、MEDIUMTEXT、LONGTEXT)。
并和原表进行分拆,与原表主键组成新表存储,且每个表只允许有一个TEXT系列类型字段。
CHAR仅当字段确定为定长,且将来不会修改长度时,使用CHAR类型。
上线以后不允许修改字段类型。
谨慎使用2.1.3. 时间类型DATE只需要精确到天的字段使用DATE类型。
精确到"天"的取当前时期的操作使用CURDATE()函数实现。
-DATETIME需要精确到时间(时、分、秒)的字段使用DATETIME类型。
精确到"秒"的取当前时间的操作使用NOW()函数实现。
取值范围:'1000-01-01'到'9999-12-31'TIMESTAMP该类型仅允许raw_update_time字段使用,其它字段不允许使用该类型。
取值范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'2.2. 表设计必含字段id INT:主键使用MySQL的自增类型raw_add_time DATETIME:创建日期(大字段拆分表除外),必须使用数据库时间(用now()生成)raw_update_time TIMESTAMP:修改日期(大字段拆分表除外, 但内容变化必须修改主表的update_time字段),由数据库自动变更,应用不操作此字段以上3个字段都必须是没有任何商业意义的与业务无关的字段,不允许赋予任何商业意义作为表间连接关系的字段,数据类型必须保持严格一致,避免索引无法正常使用。
附属表拆分后,附属表关联字段使用主表主键字段,且附属表须有独立主键(大字段拆分的表不需要单独的主键)存在过期概念的表,在其设计之初就必须有过期机制,且有明确的过期时间。
过期数据必须迁移至历史表中。
不再使用的表,必须通知DBA予以更名归档。
线上表中若有不再使用的字段,为保证数据完整,禁止删除,而是进行更名归档,名称统一增加"droped_"前缀2.3. 约束使用2.3.1. 主键主键不能包含业务含义。
主键在任何情况下不允许被更新。
2.3.2. 唯一约束除主键外,需存在唯一性约束的,可通过创建以"uk_"为前缀的唯一索引实现。
2.3.3. 外键任何情况不在数据库创建外键约束,外键规则由应用控制。
2.3.4. 非空列所有非空列须在建表之初明确标识"NOT NULL",上线之后,不允许再变更。
2.3.5. 存储过程、触发器、视图、计划任务禁止任何业务逻辑通过封装在数据库中的procedure/function/trigger实现。
禁止应用程序使用view。
禁止业务逻辑使用数据库的计划任务。
3. SQL编写规范3.1. 绑定变量与替代变量原则所有 Query 的 Where 条件中的变量,都需要使用绑定变量来实现,此要求并不完全是基于性能的考虑,更多是基于安全方面的考虑。
3.2. 数据类型转换原则避免因数据类型转换导致执行计划有误。
说明where条件中的过滤字段如需转换类型,只可转换过滤值,不可转换被过滤字段。
表连接操作中,作为连接条件的字段的数据类型严格一致。
如果表连接字段数据类型不一致,在SQL中用显示用类型转换,具体情况咨询DBA。
示例正确用法1:select col1, col2 from tbl1, tbl2where tbl1.col3 = tbl2.col4;其中"tbl1.col3"与"tbl2.col4"数据类型严格一致。
正确用法2:select col1,col2 from tblwhere gmt_create = str_to_date('20100526 00:00:00','%Y%m%d %H:%i:%s');"count(…)"使用除非是明确目的是统计某个字段上值不为空的记录的数目,否者只允许之用 count(*),而不允许使用count(column_name) 或者 count(1)。
3.3. "select * from …"使用原则为避免查询中无用字段参与排序操作而导致的性能降低及潜在的安全隐患。
禁止使用"select * from …"。
说明任何情况都要明确列出查询需要返回的字段,禁止使用select * 返回所有字段。
3.4. "insert into tablename values()"使用原则为避免增加或删除字段带来的SQL报错。
禁止使用省略字段名的insert into语句。
说明任何情况都要明确列出需要写入的字段名称。
3.5. 表连接原则规范连接语法以方便SQL脚本的阅读及提升连接操作性能。
说明非外连接查询中,连接表在"from"子句中列出,并以逗号分隔;连接条件在"where"子句中列出,而不允许使用join … on 方式实现join。
外连接查询中,可使用"left join … on"语法;外连接一律使用"left join"表示。
可以改写为连接的子查询禁止使用子查询方式,而应改写为连接方式。
示例规范select col1, col2 from tbl1, tbl2 where tbl1.col4 = tbl2.col3;select col1, col2 from tbl1 left outer join tbl2 on tbl1.col4 = tbl2.col3;select col1, col2 from tbl1 left outer join tbl2 on tbl1.col4 = tbl2.col3;select col1 from tbl1,tbl2 where tbl1.col2 = tbl2.col3;select col1 from tbl1 left join tbl2 on tbl1.col2 = tbl2.col3 where tbl2.col3 is null;非规范:select col1, col2 from tbl1 join tbl2 on tbl1.col4 = tbl2.col3;select col1 from tbl1 where col2 in (select col3 from tbl2);select col1 from tbl1 where col2 not in (select col3 from tbl2);3.6. 分页查询说明分页查询必须带有唯一的排序条件,除非业务逻辑明确要求随机展现数据。