数据库设计(二)之物理设计
物理设计要做什么一.选择合适的数据库管理系统Oracle、SqlServer、MySql及PgSQL版权、成本考虑:功能上的考虑:Oracle:业界内比较好的一种DBMS,性能很高,是适合大的事务操作。操作系统上的考虑:SqlServerL只支持Windows系统下Oracle、MySql及PgSQL:可支持linux系统、windows系统开发语言上的考虑:...
物理设计要做什么
一.选择合适的数据库管理系统
Oracle、SqlServer、MySql及PgSQL
- 版权、成本考虑:
- 功能上的考虑:
Oracle:业界内比较好的一种DBMS,性能很高,是适合大的事务操作。
- 操作系统上的考虑:
SqlServerL只支持Windows系统下
Oracle、MySql及PgSQL:可支持linux系统、windows系统
- 开发语言上的考虑:
如果使用.net开发语言,使用SQLServer比较好
- 应用场景上的考虑:
mysql及PgSQL适用于互联网项目
Oracle、SqlServer适用于企业级项目(Oracle,如电信级、金融类,因为扩展性好,安全性高,SqlServer:中小型企业的erp)
介绍Mysql常用的存储引擎
二、定义数据库、表及字段的命名规范
所有对象命名原则:
1.可读性原则
注意:大小写命名(驼峰),有的DBMS对大小写比较敏感,比如Mysql
2.表意性原则
对象的名字应该能够描述它所标识的对象。
例如:表名,可以体现存储的数据内容
对于存储过程,存储过程名称应该体现存储过程的功能
3.长名原则
尽可能少使用或者不使用缩写。
适用于数据库DB名之外的任一对象
这样的命名,当只看表名、字段名,完全不知道该表是干什么的。在开发和后期运维时,可读性很差,需要完全依赖手册。
三.根据所选的DBMS系统选择合适的字段类型
列的数据类型的选择:1.会影响数据存储空间的开销,2.影响数据查询的性能
字段类型选择的原则:
当某列可以选择多种数据类型时,应优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。
对于相同级别的数据类型,应优先选择占用空间小的数据类型。
Mysql在MySQL内部使用4个字节INT类型来存放时间戳数据,时间戳类型,只能存储到2038年,因为现在已经2020年了,还是慎用哈。同理,int类型来存储时间也要慎用!
以上原则主要从下面两个角度考虑:
1.在对数据进行比较时(查询条件、join条件及排序)等操作时:同样的数据,字符处理往往比数字处理慢
2.在数据库中,数据处理以页为单位,列的长度越小,利于性能提升。
数据库如何具体选字段类型:
- char与varchar如何选择?
1.如果列中要存储的数据长度差不多一致的,应考虑用char;否则应该考虑用varchar 。如:身份证号,手机号
2.如果列中最大数据长度小于50Byte,则一般也考虑char(如果该列很少用,则基于节省空间和减少I/O的考虑,还是选择用varchar)
3.一般不宜定义大于50Byte的char类型列。(差不多15个字符)
- decimal与float如何选择
1.decimal用于存储精确数据,二float只能用于存储非精确数据。
2.由于float的存储空间开销一般比decimal小,故非精确数据优先选择float类型
- 时间类型如何存储
1.使用int来存储时间字段的优缺点
优点:字段长度比detetime小
缺点:使用不方便,要进行函数转换
限制:只能存储到2038-01-19 11:14:07,因为2^32为2147483648
2.需要存储的时间粒度
年、月、日、小时、分、秒、周
四、数据库设计其他注意事项:
1.如何选择主键
2.避免使用外键约束
- 降低数据导入的效率,高并发环境影响很严重
- 增加维护成本
- 隋然不建议使用外键约束,但是相关联的列上一定要建立索引
3.避免使用触发器
1.降低数据导入的效率
2.可能会出现意想不到的数据异常,尤其遇到业务需求变更
3.使业务逻辑变得复杂
4.关于预留字段
1.无法准确知道预留字段的类型。
2.无法准确的知道预留字段中所存储的内容
3.后期维护预留字段所要的成本,通增加一个字段所需要的成本是相同的
4.严禁使用预留字段
五.反范式化设计
为了性能和读取效率的考虑,适当对第三范式的要求进行违反,而允许存在少量的数据冗余。以空间换时间。
为什么反范式化
1.减少表的关联数量
2.增加数据的读取效率
3、反范式化设计一定要适度
更多推荐
所有评论(0)