表设计规范

1.库名,表名,字段名必须使用小写字母,-”分割 ,长度不得超过12字符 , 要见名识意 ;

2.建议使用Innodb存储引擎

(1)什么是存储引擎

  不同的技术及配套的相关功能就是存储引擎

(2)mysql存储引擎

i).MylSAM:Mysql的默认数据库,最为常用。有较高的插入,查询速度,不支持事务

1》、什么是事务

事务是访问并且可能更新数据库中各种数据项的一个程序执行单元(例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。事务是恢复和并发控制的基本单位。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰

持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

 

Ii).InnoDB:支持事务,行级锁定

Iii).Memory:所有数据置于内存的存储引擎,有极高的插入,更新和查询效率。但会占用和数据量成正比的存储空间。并且其内容在重启MySQL时会丢失

3.存储精确浮点数必须使用decimal代替floatdouble。(floatdouble,数字溢出不会报错,会有精度损失,decimal数值会因溢出而报错)

1float :浮点型,含字节数为432bit7个有效位

double:双精度实型,含字节数为815个有效位

decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

4.建议使用unsigned存储非负数值

无符号类型,非负限定。例如,tinyint的存储大小是1字节,取值范围-127128。如果限定了unsigned取值范围0-255。即不能取负值。

 

5.建议使用INT UNSIGNED存储IPV4。(ipv4是互联网协议(Internet ProtocolIP)的第四版;

6.整形定义中不添加长度,比如使用INT,而不是INT(4)

7.不建议使用ENUM类型,使用TINYINT来代替(要插入enum的值,字段必须加引号,不加引号当然是数字,数字就是key,不是value)

8.尽可能不使用TEXTBLOB类型。

a) 索引排序问题,只能使用max_sort_length的长度或者手工指定ORDER BY SUBSTRING(column,length)的长度来排序

b) Memory引擘不支持text,blog类型,会在磁盘上生成临时表

c) 可能浪费更多的空间

d) 可能无法使用adaptive hash index

e) 导致使用where没有索引的语句变慢

9.字段定义为not null;

a)如果null字段被索引,需要额外的1字节

b)可以用0,‘’代替

c)如果是索引字段一定要定义为not null

10.VARCHAR(N)N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N

11.使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED

12.表字符集选择UTF8

a) 使用utf8字符集,如果是汉字,占3个字节,但ASCII码字符还是1个字节。
b) 统一,不会有转换产生乱码风险
c) 其他地区的用户(美国、印度、台湾)无需安装简体中文支持,就能正常看您的文字,并且不会出现乱码
d)ISO-8859-1编码(latin1)使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。即把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题,保存的是原封不动的字节流。

13.使用VARBINARY存储变长字符串。

14.存储年用YEAR;存储日期用DATE类型

15.存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。