数据库设计之物理结构设计

数据库的物理设计涉及选择最佳的物理结构,包括存取方法如B+树和哈希索引,以及聚簇策略。设计过程包括分析事务、了解DBMS特性,以及评价时间与空间效率。优化目标是提高查询速度、存储利用率和事务处理能力。评价结果不满意时,可能需要重新设计或调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为一个给定的逻辑数据模型选定一个最合适应用要求的物理结构的过程,就是数据库的物理设计。

1. 物理设计步骤

数据库的物理设计通常分为两步:

(1) 确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。

(2) 对物理结构进行评价,评价的重点是时间和空间效率。

如果评价结果满足原设计要求,则可进入到物理实施阶段,否则,就需要重新设计或修改物理结构,有时甚至还要返回逻辑设计阶段修改数据模型。

2. 数据库物理设计的内容和方法

希望设计优化的物理数据库结构,使得在数据库上运行的各种事务相应时间小,存储空间利用率高,事务吞吐率大,因此需要:

(1) 首先要对运行的事务进行详细分析,获得选择物理数据库设计所需要的参数。

(2)要充分了解所用关系数据库管理系统的内部特征,特别是系统提供的存取方法和存储结构。

3. 关系模式存取方法选择

  • B+树索引存取方法的选择

选择索引存取方法就是根据应用要求确定对关系的那些属性列建立索引,哪些属性列建立组合索引,哪些索引要设计唯一索引等。

  1. 如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)。
  2. 如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。
  3. 如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。

关系上定义的索引数并不是越多越好,系统为维护索引要付出代价,查找索引也要付出代价。

  • hash索引存取方法的选择

选择hash存取方法的规则:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一,则此关系可以选择hash存取方法。

  1. 一个关系的大小可预知,而且不变。
  2. 关系的大小动态改变,但数据库管理系统提供了动态hash存取方法。
  • 聚簇存取方法的选择

为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块中称为聚簇。

聚簇功能可以大大提高按聚簇码进行查询的效率,聚簇功能不单适用于单个关系,也适用于经常进行连接操作的多个关系。一个数据库可以连接多个聚簇,一个关系只能加入一个聚簇。

(1) 设计候选聚簇的条件

  1. 对经常在一起进行连接操作的关系可以建立聚簇。
  2. 如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇。
  3. 如果一个关系的一个(或一组)属性上的值重复率很高,则此单个关系可建立聚簇。即对应每个聚簇码值的平均元组数不能太少。

(2) 检查候选聚簇

  1. 从聚簇中删除经常进行全表扫描的关系。
  2. 从聚簇中删除更新操作远多于连接操作的关系。
  3. 不同的聚簇中可能包含相同的关系,一个关系可以在某一个聚簇中,但不能同时加入多个聚簇。要从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。

4. 确定数据库的存储结构

确定数据库物理结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。
确定数据的存放位置和存储结构要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的,因此需要进行权衡选择一个折中方案。

  • 确定数据的存放位置

为了提高系统性能,应根据应用情况将数据的易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。

  • 确定系统配置

关系数据库管理系统产品一般都提供了一些系统配置变量和存储分配参数,供设计人员和数据库管理员对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的默认值。但是这些值不一定适合每一种应用环境,在进行物理设计时需要重新对些变量赋值,以修改系统的性能。

5. 评价物理结构

评价物理数据库的方法完全依赖于所选用的关系数据库管理系统,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的、合理的物理结构。如果该结构不符合用户需求,则需要修改设计。

数据库物理设计 数据库物理设计要做什么: 1、选择合适的数据库管理系统。 2、定义数据库,表及字段的命名规范。 3、根据所选择的DBMS系统选择合适的字段类型。 4、反范式化设计。 ⼀、选择哪种数据库: Oracle和SqlServer是商业数据库。(适合企业级项⽬) mysql和pgsql是开源数据库。(适合互联⽹项⽬) ⼆、表及字段的命名规范: 1、可读性原则。通过⼤⼩写格式化名字。如CustAddress⽽不是custaddress。 2、表意性原则。见名知意。如表的过程应该能体现存储的数据内容。 3、长名性原则。尽量少或不使⽤缩写。 三、字段类型的选择 数据类型⼀⽅⾯影响数据存储空间的开销,另⼀⽅⾯也会影响数据查询性能。 当⼀个列可以选择多种数据类型时,应该优先选择数据类型,其次是⽇期或⼆进制类型,最后是字符类型。 对于相同级别的数据类型,应该优先选择占⽤空间⼩的数据类型。 以上选择原则主要是从以下两个⾓度考虑: 1、在对数据进⾏⽐较(查询条件,JOIN条件及排序)操作时,同样的数据,字符处理往往⽐数字处理慢。 2、在数据库中,数据处理以页为单位,列的长度越⼩,利于性能提升。 具体如何选择呢? char与varchar如何选择: 1、如果列中要存储的长度差不多是⼀致的额,则应该考虑选择char;否则应该考虑⽤varchar。(如⼿机号码,⾝份证号 码) 2、如果列中的最⼤数据长度⼩于50byte,则⼀般也考虑char。如果这个列很少⽤,也可以选择varchar 3、⼀般不宜定义⼤于50byte的char类型列。 decimal与float如何选择: 1、精确选decimal。 2、⾮精确选float,因为占⽤空间⼩。 时间类型如何存储: 对于只是查询显⽰或变动不频繁的⽇期,⽤int。 经常要使⽤的话,⽤datetime。 1、⽤int来存储时间字段的优缺点: 优点;字段长度⽐datetime⼩。 缺点:使⽤不⽅⾯,要进⾏函数转换才能看懂。 限制:只能存储到2038-1-19 11:14:07。即2的32次⽅ 2、需要存储的时间粒度。 年 ⽉ ⽇ ⼩时 分 秒 周 其他: 如何选择主键: 1、区分业务主键和数据库主键: 业务主键:标⽰业务数据,进⾏表与表之间的关联。 数据库主键:优化数据存储。(Innodb会⽣成6个字节的隐含主键) 2、根据数据库的类型,考虑主键是否需要顺序增长。 3、主键的字段类型所占空间要尽可能⼩。 避免使⽤外键约束: 1、降低数据导⼊的效率 2、增加维护成本 3、虽然不建议使⽤外键约束,但是相关联的列上⼀定要建⽴索引。 避免使⽤触发器: 1、降低数据导⼊的效率 2、可能会出现意想不到的数据异常 3、是业务逻辑变的复杂。 严禁使⽤预留字段: 1、⽆法准确的知道预留字段的类型 2、⽆法准确的知道预留字段中所存储的内容 3、后期维护预留字段所要的成本,同增加⼀个字段所需要的成本是相同的。 四、反范式化设计 为了性能和读取效率的考虑⽽适当的对第三范式的要求进⾏违反,⽽允许存在少量的数据冗余。 也就是⽤空间来换时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xclincer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值