查看: 952|回复: 23

[原创] 分布式事务数据库 —-MySQL 数据库开发规范

[复制链接]
论坛徽章:
0
发表于 2019-4-30 09:42 | 显示全部楼层 |阅读模式
目录如下

(1)数据类型;
(2)表名称与字段名称设计规则;
(3)字符集;
(4)字符串函数—3.1-3.5 ;
(5)字母大小写转换函数 ;
(6)数学函数 ;
(7)日期操作函数 ;
(8)类型转换函数;
(9)类型转换函数;
(10) 特殊函数 ;
(11)聚合函数 ;
(12)简化查询语句;
(13)SELECT子句的使用规范;
(14)WHERE条件子句
论坛徽章:
0
 楼主| 发表于 2019-4-30 09:44 | 显示全部楼层
内容太长以后会不断更新,喜欢的可以持续关注我哦

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 09:44 | 显示全部楼层
(1)数据类型

1.1 数据类型分类

a) 数值类型 — TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、 DECIMAL
b) 时间类型 — DATE、DATETIME、TIMESTAMP
c) 字符串类型 — CHAR、VARCHAR、TEXT
d) 特有类型 — ENUM、SET

1.2 特别说明

Ø VARCHAR(N) 或 CHAR(N)中 N 的含义
MySQL 中两类字符串 VARCHAR(N) 或 CHAR(N)定义时候填写的长度 N,不是字节数的意思 ,而是字符数的含义。
Ø 浮点数
同财务有关的浮点数必须使用精确存储的 DECIMAL 数值类型。为减少浮点类型 FLOAT 和DOUBLE 的精度不够而可能造成数值计算存在偏差,故非财务相关的浮点数字段也采用DECIMAL 数值类型存储,禁止使用 FLOAL 和 DOUBLE 类型。例如:weight DECIMAL(10,4) NOT NULL DEFAULT 0。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 09:45 | 显示全部楼层
(1)数据类型

1.1 数据类型分类

a) 数值类型 — TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、 DECIMAL
b) 时间类型 — DATE、DATETIME、TIMESTAMP
c) 字符串类型 — CHAR、VARCHAR、TEXT
d) 特有类型 — ENUM、SET

1.2 特别说明

Ø VARCHAR(N) 或 CHAR(N)中 N 的含义
MySQL 中两类字符串 VARCHAR(N) 或 CHAR(N)定义时候填写的长度 N,不是字节数的意思 ,而是字符数的含义。
Ø 浮点数
同财务有关的浮点数必须使用精确存储的 DECIMAL 数值类型。为减少浮点类型 FLOAT 和DOUBLE 的精度不够而可能造成数值计算存在偏差,故非财务相关的浮点数字段也采用DECIMAL 数值类型存储,禁止使用 FLOAL 和 DOUBLE 类型。例如:weight DECIMAL(10,4) NOT NULL DEFAULT 0。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 14:32 | 显示全部楼层
本帖最后由 Amygo 于 2019-4-30 14:33 编辑

1.3 数据类型范围
20190429193904198.png




20190429193904198.png
20190429193904198.png

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 14:36 | 显示全部楼层
1.4 详细说明

1.类似于状态,且有限类别的字段,推荐使用可比较明显表示出实际意义的字符串,而不应该使用 INT 之类的数字来代替,故推荐使用枚举类型 ENUM 和集合类型 SET;
2.使用 UTF8 时,因其是变长的字符集,故固定和动态长度的字符串都应用 VARCHAR;
3.仅仅当字符数量可能超过 20000 个的时候,可以使用 TEXT/MEDIUMTEXT 类型来存放字符类数据。推荐所有使用 TEXT/MEDIUMTEXT 类型的字段和原表进行分拆,与原表主键单独组成另外一个表进行存放;
需要精确时间(年月日时分秒)的字段可以使用 DATETIME 或 TIMESTAMP,但请注意各自能表达的范围,以及是否需要用到 TIMESTAMP 的特性,尽量使用 TIMESTAMP类型替代 DATETIME 以减少数据存储空间的占用;需要毫秒、微妙时,使用TIMESTAMP (3)或 TIMESTAMP (6),以及 DATETIME(3)和 DATETIME(6)(注:社区版 5.6 开始 DATATIME 也支持 CURRENT_TIMESTAMP.,且支持任意数量与组合);
4.所有只需要精确到天的字段全部使用 DATE 类型,而不应该使用 TIMESTAMP 或者DATETIME 类型;
5.自增序列特性的字段只能使用 INT 或者 BIGINT,强烈推荐明确标识为无符号类型(关键词:UNSIGNED),除非确实会出现负数,仅当该字段的数值会超过 42 亿,才使用 BIGINT 类型,并且自增字段必须作为主键或主键的一部分;
6.INT(N)中 N 的含义
7.MySQL 中各类整形也可包含长度,该长度的含义和 Oracle 的 NUMBER 类型的长度含义不同,N 值的大小完全不影响数值的存储范围,只影响有 ZEROFILL 时显示的长度。
空字符串的含义
8.MySQL 中字符串存在三种容易混淆的值:空字符串’’、空值 NULL 和 NULL 字符串’NULL’,需要注意判断。和 Oracle 的最大区别为 Oracle 不区分空字符串’’和空值 NULL。



使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 14:38 | 显示全部楼层
1.1.5 分片字段数据类型选择
禁止选择大字段类型,以及非精确浮点型,空间类型的字段作为分片字段的数据类型。
禁止作为分片字段的类型见下列表格:

20190429193904198.png
20190429194046479.png

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-4-30 14:39 | 显示全部楼层
避免分片字段使用二进制类型 binary 和 varbinay。
避免分片字段使用二进制校对规则。可在 MySQL 数据库执行 SQL 语句,查找二进制的校对规则:select * from information_schema.collations where collation_name like ‘%bin’;


第一节数据类型更完了~目录中还有十三节待更~感兴趣的话可以持续关注我后面的更新内容。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-5 16:12 | 显示全部楼层
本帖最后由 Amygo 于 2019-5-10 19:42 编辑

第二节  
(2) 表名称与字段名称设计规则
表名称 hotdb_heartbeat 为某分布式事务数据库的心跳表,在业务系统中,请不要使用该表名称。
字段名称 dnid 为 某分布式事务数据库的一个 QUERY 功能点,因此,在业务系统表结构设计时,请不要在任何表中使用 dnid 字段名称。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2019-5-6 17:26 | 显示全部楼层
第三节 字符集

字符集 UTF-8 编码基本上表达我们日常所使用到的汉字、字母或字符,也能够兼容更
多语种;其次,项目所用编程语言为 JAVA,而 JAVA 开发工具的语言也是默认为 UTF-8。
若项目中的业务数据不需要区分字母的大小写,我们的建议:字符集统一为 utf8,字符
集校对规则为 utf8_general_ci;若研目中的业务数据需要区分字母的大小写,则字符集校对规则为:utf8_bin。
若项目中的业务数据存在特殊字符(emoji 表情),则字符集统一为 utf8mb4,若不区分
大小写,字符集校对规则为 utf8mb4_general_ci,若需要区分大小写,字符集校对规则为utf8mb4_bin。
采用 utf8 编码时,对于中文汉字及符号,实际存储时占三个字节,而数值、字母和符
号(注:英文输入法下),则只占一个字节。例如:
 CREATE TABEL gl_user(username VARCHAR(40));则 username 最多能存储 40 个字符;
 username 存储’U-Cloud’ 则占用存储空间为:7 个字节(注释:变长会额外增加 1 个字节或 2 个字节,此处实际占用存储空间为:8 个字节);
采用 utf8mb4 编码时,对于 emoji 特殊符号,实际存储时占四个字节,而中文字符占三
个字节,数值、字母和符号(注:英文输入法下),则只占一个字节。
特别说明
随着移动互联网业务发展,越来越多的移动终端支持输入一些特殊符号,字符编码空间
超过 3 个字节,则可使用 4 个字节编码的 utf8mb4。不区分字母大小的示例,如下:
 CREATE TABEL gl_user(username VARCHAR(40) CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci);则 username 最多能存储 40 个字符,字符自身占用最大
存储空间 160 个字节。
---------------------

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表