开发规范之Mysql数据库建表规约

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanxing1964/article/details/82192658

    总结了几条数据库表设计需要注意的问题。首先有两个问题需要了解一下,一是mysql和java类型之间的对应关系,二是宽度这个概念。

一:Mysql和Java数据类型对应关系

整数类型:

数据库类型 长度(数据大小) 逆向工程生成java实体类属性类型 描述
tinyint 1字节 Byte 2^8 带符号的范围是-128到127。无符号的范围是0到255
smallint 2字节 Short 2^16 带符号的范围是-32768到32767。无符号的范围是0到65535
mediumint 3字节 Integer 2^24
int 4字节 Integer 2^32
bigint 8字节 Long 很大

实数类型(整数和小数):

数据库类型 逆向工程生成java实体类属性类型
float Float
double Double
decimal BigDecimal

1,其中tinyint的宽度设为1时生成的java类型是Boolean,因为只有boolean的展示宽度是1,所以在用tinyint表示状态时,可以用unsigned tinyint(2)类型。

2,使用mybatis自定义查询方法时(即自己在xml文件写sql语句),如果mysql里的数据是tinyint的且没有定义返回的数据类型,那么返回的数据会是Integer类型的,尽量不要使用HashMap和HashTable作为返回类型,类型不可控。

二:宽度

概念:例如 `status` tinyint(2) DEFAULT '1'  这句建表语句中的2就是宽度。也就是属性后括号内的数字叫做数据的宽度,在navicit等一些工具的设计页面里的名字是 '长度',不同的数据类型对宽度处理不同。

数字类型:这里的宽度和数据的取值范围没有任何关系,数据的取值范围只与数据类型有关,只是指明mysql最大可能显示的数字个数。如果你不设置宽度,系统将添加默认的宽度 tinyint(4),smallint(6),mediumint(9),int(11),bigint(20)。这些默认的宽度是跟该类型的取值范围长度相关。另外,像float,double和decimal这三种实数类型,括号内还有第二个数字表示精确到多少位。

字符串类型:这个长度就与取值范围有关了,不管是char还是varchar都定义了字符串的最大长度,宽度设为几就只有几个汉字(5.0版本后)。

text,浮点和日期:对宽度没有要求,不设置,默认0

三:表设计规范

1,主键要用bigint unsigned类型。单表时自增,步长为1。

2,如果存储的字符串长度几乎相等,用char定长字符串类型。

    char(m)存储m个字节,是定长的,最大255;varchar(m)可以存储0到m-1个字节,是可变长字符串,不预先分配存储空间,最大65535,要节省空间,用最小的空间即可。在mysql 4.0版本里 char(m)中 m 是字节,按照utf8字符集,最大存储85个汉字,在 5.0版本 m 是字符,最大存储255个汉字。

3,任何的Boolean类型的POJO字段都不要用is做前缀,会导致orm框架识别错误;但数据库表示是否的字段都要用is前缀,所以要在resultMap中改一下映射。

4,表名不要用复数。

5,小数类型使用decimal类型,不要使用double或float类型。

6,如果含有文字表情,mysql字符集一律使用utf8mb4,不要使用uft8。

    utf8mb4一个字符用四个字节表示,uft8一个字符用三个字节表示,有些表情无法显示。

7,能用小的类型就用小类型,确定不会是负数加上unsigned。

猜你喜欢

转载自blog.csdn.net/fanxing1964/article/details/82192658