注意:数据库
一、事务多时选Oracle。并发
二、SQLserver只支持在Windows下运行。数据库设计
三、开发用的语言用的.net时,使用SQL server。函数
MySQL是开源数据库,只要知足存储协议,高并发
让开发团队明确数据库的定义。全部对象命名应该遵循下述原则:性能
一、可读性原则大数据
使用大小写来格式化的库对象名字以得到良好的可读性。优化
例如:使用CustAddress而不是custaddress来提升可读性。网站
二、表意性原则spa
对象的名字应该可以描述它所标识的对象。
例如,对于表,表的名称应该能狗体现表中存储的数据内容;对于存储过程,存储过程的名称应该可以体现存储过程的功能。
三、长名原则
尽量少用或者不使用缩写,适用于数据库(DATABASE)名以外的任一对象。
根据所选的DBMS系统选择合适的字段类型。须要存储字符串,须要用什么作存储。
列的数据类型影响:
一、数据存储空间的开销。
二、数据查询性能。
选择原则:当一个列能够选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。
以上选择原则主要是从下面两个角度考虑:
一、在对数据进行比较(查询条件、JOIN条件及排序)操做时:一样的数据,字符处理每每比数字处理慢。
二、在数据库中,数据处理以页为单位,列的长度越小,利于性能提高。
MySQL:16K/页
MySQL时间戳timestamp有限制:只能存储到2037年。
1、char与varchar选择
原则:
一、若是列中要存储的数据长度差很少是一致的,则应该考虑用char;不然应该考虑用varchar。
二、若是列中的最大数据长度小于50byte,则通常也考虑用char。若是这个列不多用 ,则基于节省空间和减小I/O的考虑,仍是能够选择用varchar。
三、通常不宜定义大于50byte的char类型列。
MySQL:utf-8:1字符=3字节。
2、decimal与float选择
原则:
一、decimal用于存储精确数据,而float只能用于存储非精确数据。故精确数据只能选择用decimal类型。
二、因float的存储空间开销通常比decimal小,非精确数据优先选择float类型。
(精确到7位小数只须要4个字节,而精确到15位小数只须要8字节)
3、时间类型如何选择
一、使用INT来存储时间字段的优缺点:
优势:字段长度比datetime小。Datetime:8个字节,int:4个字节。
缺点:使用不方便,要进行函数转换。
限制:只能存储到2038-1-19 11:14:07即:2147483648
举例:1)生日:使用地方不多时,能够考虑用int来存储。
2)下单时间:因为常常要查询到,要用时间判断,用datetime存储。
二、须要存储的时间粒度
年:year:1字节
月:
日 时分秒 周
1、如何选择主键
一、区分业务主键和数据库主键
业务主键用于标识业务数据,进行表与表之间的关联;
数据库主键为了优化数据存储(Innodb会生成6个字节的隐含主键)
二、根据数据库的类型,考虑主键是否要顺序增加
有些数据库是按主键的顺序逻辑存储的。不会进行逻辑迁移,对I/0有好处。
三、主键的字段类型所占空间要尽量的小
数据库按页来存储数据的,主键越小,页中查询的主键就越多,能够装载更多的数据,对I/O性能有好处。对于使用汇集索引方式存储的表,每一个索引后都会附加主键信息。
2、避免使用外键约束
外键:保持数据完整性的一种方式,在高并发的互联网站中,有必定影响。
一、下降数据导入的效率:对于数据的导入或写入操做时,当使用了外键时,每写入一条数据都会查询是否符合外键约束,若是符合才能插入数据,不符合被拒绝掉,耗时间。在高并发时影响大。
二、增长维护成本
三、虽然不建议使用外键约束,可是相关联的列上必定要创建索引。
3、避免使用触发器
使用触发器减小程序上的逻辑处理。
一、下降数据导入的效率
二、可能会出现意想不到的数据异常
三、使业务逻辑变的复杂。当程序变动,别人不知道这块有触发器的时候,改逻辑时会出现业务异常。
4、关于预留字段
一、没法准确的知道预留字段的类型。
二、没法准确的知道预留字段中的所存储的内容。
三、后期维护预留字段所要的成本,同增长一个字段所须要的成本是相同的。
四、严禁使用预留字段。
在一些表中,增长一些冗余。
反范式化是针对范式化而言的,在前面介绍了数据库设计的第三范式,所谓的反范式化就是为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而容许存在少许的数据冗余,换句话来讲反范式化就是使用空间来换取时间。
好处:一、减小表关联数量。二、增长数据读取效率。三、要适度。
举例: