您的位置:首页 > 数据库

数据库设计(二)(引擎,命名规则,字段类型的选择比较)

2017-03-27 00:00 218 查看

MySQL 常用的存储引擎

存储引擎 事务 锁颗粒 主要应用 忌用
MyISAM 不支持 支持并发插入的表级锁 SELECT,INSERT 读写操作频繁
MEG_MyISAM 不支持 支持并发插入的表级锁 分段归档,数据仓库 全局查找过多的场景
Innodb 支持 支持MVCC的行级锁 事务处理 无
Archive 不支持 行级锁 日志记录,只支持 需要随即读取更新删除
Ndb cluster 支持 行级锁 高可用性 大部分应用

MyISAM 5.5默认引擎 读写高效,写的时候要锁表,量大容易阻塞
Innodb 阻塞更少
Ndb cluster MySQL集群


表及字段的命名规则

所有对象命名应该遵循的原则:
1.可读性
使用大写和小写来格式化的库对象名以获得良好的可读性。
例如:使用CustAddress而不是custaddress来提高可读性
(这里要注意有些DBMS系统对表名的大小写敏感设置)

2.表意性
对象的名字应该能描述它所标识的对象。
例如:对于表,表的名称应该能够体现表中存储的数据内容;
对于存储过程,存储过程名称应该能够体现存储过程的功能。

3.长明原则
尽可能少使用或者不使用缩写,
适用于数据库(DATABASE)名之外的任一对象


字段类型的选择

生日:1978-03-01
Char(10)三 / varchar(20)四 / Datetime 二 / Int 一

原则:列的数据类型一方面影响数据存储空间的开销,
另一方面也会影响数据查询性能。当一个列可以选择多种数据类型时,
应该优先考虑数据类型,其次是日期或者二进制类型,最后是字符类型。
对于相同级别的数据类型,应该优先选择占用空间小的数据类型。

列类型 | 存储空间
TINYINT 1字节
SMALLINT 2字节
MEDIUMINT 3字节
INT 4字节
BIGINT 8字节
DATE 3字节
DATETUNE 8字节
TIMESTANP 4字节
CHAR(M) M字节,1<= M <= 255
VARCHAR(M) L+1字节,在此L <= M 和 1 <= M <= 255

以上选择原则主要是从下面两个角度考虑:
1.在对数据进行比较(查询条件,JOIN条件及排序)操作时:
同样的数据,字符处理往往比数字处理慢。
2.在数据库中,数据处理以页为单位,列的长度越小,利于性能提升。

具体选择:
char/varchar 如何选择
原则:
1.如果列中要存储的数据长度差不多一致的,应该选择考虑用char;否则考虑用varchar
2.如果列中的最大数据长度小于50Byte,则一般考虑用char。
(当然,如果这个列很少用,则基于节省空间和减少I/O的考虑,还是可以选择用varchar)
3.一般不宜定义大于50Byte的char类型列。
utf8 = 1字符 = 3字节

decimal与float 如何选择
原则:
1.decimal用于存储精确数据,而float只能用于存储非精确数据
故精确数据只能选择用decimal类型。
2.由于float的存储空间开销一般比decimal小(精确到7位小数只需要4个字节,而精确到15位小数只需要8字节)
故非精确数据优先选择float类型。

时间类型如何存储
1.使用int来存储时间字段的优缺点
优点:字段长度比datetime小。
缺点:使用不方便,要进行函数转换。
限制:只能存储到2018-1-19 11:14:07即2^32为2147483648
2.需要存储的时间粒度
年月日小时分秒周
总结:如果不经常查询出来展示的,可以使用int即可,
如果是需要经常查询出来判断或者什么的还是存datetime方便,不需要转换。

=====未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息