数据库架构--物理设计

物理设计
1、定义数据库、表及字段的命名规范
1.1、数据库、表及字段的命名要遵守:可读性原则
1.2、数据库、表及字段的命名要遵守:表意性原则  
1.3、数据库、表及字段的命名要遵守:长名原则(适度)

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

3、为表中的字段选择合适的数据类型
原则:当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别类型,应该优先选择占4用空间小的数据类型

3.1、如何选择正确的整数类型
2的n次幂   2的n-1次幂~2的n-1次幂-1
列类型     存储空间       取值范围signed     unsigned
tinyint     1字节           -128-127            0-255
smallint    2字节           -32768-32767        0-65535
mediumint   3字节          -8388608-838607      0-16777215
int    4字节      -2147483648-21474483647  0-4294967295
bigint      8字节      -9223372036854775808-9223372036854775807  0-18446744073709551615

3.2、如何选择正确的实数类型
列类型            存储空间                                            是否精确类型
FLOAT            4个字节                                                   否
DOUBLE          8个字节                                                   否
DECIAML         每4个字节存9个数字,小数点站一个字节        是

3.3、如何选择varchar和char
注意:存储是以字符为单位,不是以字节为单位
utf-8一个字符占用3个字节

VARCHAR类型的存储特点
varchar用于存储长字符串,只占用必要的存储空间
列最大长度小于255则只占用一个额外字节用于记录字符串长度
列最大长度大于255则需要用2个额外字节用于记录字符串长度

VARCHAR长度的选择问题
使用最小的符合需求的长度
注意:MySQL5.7之前的版本,varchar的长度修改时需要锁表

适用场景
字符串列的最大长度比平均长度大很多
字符串列很少被更新(为了生成碎片)
使用了多字节字符集存储字符串

char类型的存储特点
char类型是定长的
字符串存储在char中的列中会被删除末尾的空格,varchar不会
char 最大的宽度为255,如果超过需要选择varchar
适合的场景
char类型适合存储所长度近似值(如md5值,手机号)
char类型适合短字符串
char类型适合存储经常更新的字符串列

如何存储日期数据
DATATIME类型
以YYYY-MM-DD HH:MM:SS格式存储日期时间
与时区无关,占用8个字节的存储空间
时间范围10000-01-01 00:00:00到9999-12-31 23:59:59
TIMESTAMP类型
存储时间戳占用4个字节
时间范围:1970-01-01到2038-01-19
依赖于所指定的时区
在行的数据修改时可以自动修改timestamp 
date类型和time类型
1、把日期部分存储为字符串(至少要8个字节)
2、使用int类型来存储(4个字节)
3、使用datetime类型(8个字节)
date类型的优点:
1、占用的字节数比使用字符串、datetime、int存储要少,使用date类型只需要3个字节
2、使用Date类型还可以利用日期时间函数进行日期之间的计算
3、保存时间:1000-01-01到9999-12-31之间的日期
time类型用于存储时间数据,格式为HH:MM:SS
注意事项
1、不要使用字符串类型来存储日期时间数据
1.1、日期时间类型通常比字符串占用的存储空间小
1.2、日期时间类型在进行查找过滤时可以利用日期来进对比
1.3、日期时间类型还有着丰富的处理函数,可以方便的对日期类型进行日期计算
2、使用int存储日期不如使用timestamp类型

4、建立数据库结构
Innodb主键
1、主键应该尽可能的小
2、主键应该是顺序增长的(插入数据的插入效率)
3、 Innodb的主键和业务主键可以不同
数据库物理设计(1)全文共2页,当前为第1页。数据库物理设计(1)全文共2页,当前为第1页。物理结构设计 数据库物理设计(1)全文共2页,当前为第1页。 数据库物理设计(1)全文共2页,当前为第1页。 数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。所谓的"合理"主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。 为了设计数据库物理结构,设计人员必须充分了解所用DBMS的内部特征;充分了解数据系统的实际应用环境,特别是数据应用处理的频率和响应时间的要求;充分了解外存储设备的特性。数据库物理结构设计大致包括:确定数据的存取方法、确定数据的存储结构。 物理结构设计阶段实现的是数据库系统的内模式,它的质量直接决定了整个系统的性能。因此在确定数据库的存储结构和存取方法之前,对数据库系统所支持的事务要进行仔细分析,获得优化数据库物理设计的参数。 对于数据库查询事务,需要得到如下信息: l 要查询的关系。 l 查询条件(即选择条件)所涉及的属性。 l 连接条件所涉及的属性。 l 查询的投影属性。 对于数据更新事务,需要得到如下信息: l 要更新的关系。 l 每个关系上的更新操作的类型。 l 删除和修改操作所涉及的属性。 l 修改操作要更改的属性值。 上述这些信息是确定关系存取方法的依据。除此之外,还需要知道每个事务在各关系上运行的频率,某些事务可能具有严格的性能要求。例如,某个事务必须在20秒内结束。这种时间约束对于存取方法的选择有重大的影响。需要了解每个事务的时间约束。 值得注意的是,在进行数据库物理结构设计时,通常并不知道所有的事务,上述信息可能不完全。所以,以后可能需要修改根据上述信息设计物理结构,以适应新事务的要求。 1. 确定关系模型的存取方法 确定数据库的存取方法,就是确定建立哪些存储路径以实现快速存取数据库中的数据。现行的DBMS一般都提供了多种存取方法,如索引法、HASH法等。其中,最常用的是索引法。 数据库物理设计(1)全文共2页,当前为第2页。数据库物理设计(1)全文共2页,当前为第2页。数据库的索引类似书的目录。在书中,目录允许用户不必浏览全书就能迅速地找到所需要的位置。在数据库中,索引也允许应用程序迅速找到表中的数据,而不必扫描整个数据库。在书中,目录就是内容和相应页号的清单。在数据库中,索引就是表中数据和相应存储位置的列表。使用索引可以大大减少数据的查询时间。 数据库物理设计(1)全文共2页,当前为第2页。 数据库物理设计(1)全文共2页,当前为第2页。 但需要注意的是索引虽然能加速查询的速度,但是为数据库中的每张表都设置大量的索引并不是一个明智的做法。这是因为增加索引也有其不利的一面:首先,每个索引都将占用一定的存储空间,如果建立聚簇索引(会改变数据物理存储位置的一种索引),占用需要的空间就会更大;其次,当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的更新速度。 在创建索引的时候,一般遵循以下的一些经验性原则: l 在经常需要搜索的列上建立索引。 l 在主关键字上建立索引。 l 在经常用于连接的列上建立索引,即在外键上建立索引。 l 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。 l 在经常需要排序的列上建立索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的时间。 l 在经常成为查询条件的列上建立索引。也就是说,在经常使用在WHERE子句中的列上面建立索引。 同样,对于某些列不应该创建索引。这时候应该考虑下面的指导原则: l 对于那些在查询中很少使用和参考的列不应该创建索引。因为既然这些列很少使用到,有索引并不能提高查询的速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 l 对于那些只有很少值的列不应该建立索引。例如,人事表中的"性别"列,取值范围只有两项:"男"或"女"。若在其上建立索引,则平均起来,每个属性值对应一半的元组,用索引检索,并不能明显加快检索的速度。 时刻怀有一颗虔诚之心,乐于分享。知识才更有意义。 数据库物理设计(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值