软考高级-系统架构师-案例分析-数据库

1.数据库设计过程与规范化

数据库设计过程分为以下四个阶段,阶段1需求分析(产出物:数据流图,数据字典,需求说明书),阶段2概念结构设计(产出物:ER模型)
,阶段3逻辑结构设计(产出物:关系模式),阶段4物理设计。

在这里插入图片描述

数据库范式是为了对表逐步优化,以解决插入异常,删除异常,数据冗余问题。1NF指属性值具有原子性,比如进货这个字段,就是一个非原子性的属性,因为进货可以分为进货数量和进货单价。2NF是在1NF的基础上进行的优化,指消除非主属性对候选键的部分依赖,例如(学号,课程号) 为某张表的候选键,课程名和成绩为非主属性,当课程号能够推出课程名(课程号->课程名),说明该表存在候选键课程号对非主属性课程名存在部分依赖,不属于2NF。3NF范式是在2NF的基础上进行优化,指消除非主属性对候选键的传递依赖,例如:(学号,班级号) 为某张表的候选键,班级名为非主属性,当学号->班级号->班级名,说明非主属性班级名对候选键学号存在传递依赖。BCNF是在3NF的基础上进行的优化,指消除主属性对候选键的部分和传递依赖。主属性是候选键的并集,候选键可以唯一确定实体对象,如某表(学生,教师,课程),其中(学生,教师)->课程;(学生,课程)->教师;教师->课程;(学生,教师)和(学生,课程)为候选键,学生,教师,课程为主属性,该关系属于3NF但是由于教师->课程,(学生,教师)->课程存在部分函数依赖,不属于BCNF。

在这里插入图片描述

为了提高某些查询或应用的性能而破坏规范化规则,即为反规范化。实现的方法如下:

在这里插入图片描述

增加派生性冗余列破坏了原子性;增加冗余列破坏了部分依赖;为了达到范式的要求一般会把表进行拆分,重新组表就是在破坏范式;分割表是一种非规范化的割表操作,比如用户表中根据地方的不同,分割数据到不同的区域中去,把长沙的用户存在长沙,上海的用户存在上海。

反规范化的优点:连接操作少,检索快,统计快,需要查的表少,检索容易。

在这里插入图片描述

2.案例分析1

在这里插入图片描述

在这里插入图片描述

  • 问题1

问题1:不规范的关系模式存在那些问题,可以从规范化的关系模式解决了什么问题进行回答,规范化数据库避免数据增删改异常的问题,解决了数据冗余问题。根据案例实例结合这四个角度(插入异常,修改异常,删除异常,数据冗余)进行回答,supplier(name,address,product,price)供应商关系表,分析这个供应商关系表,name->address;(name,product)->price;存在部分依赖属于1NF;数据冗余问题,记录1(供应商1,供应商1地址,产品1,20);记录2(供应商1,供应商1地址,产品2,30);记录2(供应商1,供应商1地址,产品3,40);…记录n(供应商1,供应商1地址,产品n,price);我们可以明显的看出关系模式中存在多次重复记录了同一个供应商的地址。插入异常,如果还未确定供应商的货物时,只是想添加一个供应商的地址信息,则会产生产品与价格均为空的记录。修改异常,当修改供应商地址时,需要对supplier中的多条地址记录同时更新,如果未做更新会造成数据不一致问题。删除异常:当删除供应商货物时,地址信息也一并删除了。

  • 问题2

规范化是通过不断的拆分表格,已达到更高的规范程度。这样处理带来的问题就是在查询的时候需要通过多表连接的方式进行查询导致查询效率降低。

  • 问题3

为了提高某些查询或应用的性能而破坏规范化的规则即为反规范化方法。优点:较少了查询表的数量,连接操作数量,检索快,统计快,检索容易,大大的提高查询效率。缺点:增加了数据冗余,容易照常插入异常,修改异常和删除异常,会导致数据不一致等问题。

  • 问题4

通过水平分割表的方式实现反规范化,将各省的数据存放在各省。存在的问题,总公司获取数据需要从各省获取数据,获取数据效率低,应用程序获取数据时需要动态的选择分公司的数据库,增加了应用程序的复杂度。

参考答案,如下:

在这里插入图片描述

3.数据库索引

索引的建立提高了查询效率,降低了添加,修改,删除的效率。大多数数据库中索引底层采用B树或B+树。

在这里插入图片描述

4.视图

视图是一个虚拟的表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。多张表查询出来的数据是一种视图,这种视图并不是实际存在数据库中的物理表,而是相应查询的SQL语句,视图的数据会随物理表的变化而变化,通过视图的方式并没有提高数据的查询效率,因为本质还是SQL语句,可以通过物化视图的方式提高查询效率,将视图的逻辑表生成为数据库中真实存在的物理表,并且该物理表也会随视图中相关表数据的变化而变化。视图的优点如下:

在这里插入图片描述

5.案例分析2

在这里插入图片描述

在这里插入图片描述

  • 问题1

视图是一个虚拟的表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图的优点:简化用户的操作,使用户能够以不同的方式查询同一数据,视图为数据库重构提供了一定程度的逻辑独立性,视图可以对一些机密的数据提供保护。

  • 问题2

张工的方案能够对视图查询性能有所提升,通过建立商品当天的货物销售和存货情况的关系表可以不直接从订单表(不仅仅包含当天的数据)中进行查询,而是直接查询关系表中当天的货物情况,效率提高了。
因为当天的货物销售和存货情况的关系表的数据来源于订单表,当这订单表中今天销售的数据发生改变时,如果关系表不做数据同步的话会导致数据的不一致。

  • 问题3

物化实现:建立当天货物销售,存放情况的物化视图,物化视图会把相应的数据物理存储起来,而且当订单表中的数据发生变化时,物化视图的物理表也会随着变化,实现数据同步。
应用程序方式:应用程序中,当订单表中当天货物销售,存放情况的数据发生改变时,同时改变"当天的货物销售和存货情况"关系表中的数据。
触发器的方式:对订单表创建触发器当订单表发生变化时,把当日的订单内容同步到"当天的货物销售和存货情况"关系表中。

在这里插入图片描述

6.数据库的分区分表分库

分区是将同一张表的不同数据存放在不同的磁盘上(存储物理文件)。分表由于单张表的容量实在太大了,将一张表划分为多张表,如用户表,该用户表存储国内和国外的用户信息,我们可以通过分表的方式将表分为国内用户表和国外用户表。分库就是将一个数据库划分为多个数据库,单服务器数据库的IO效率有效,存在性能瓶颈,我们可以将单服务器的完整数据库划分为多个单服务器数据库,部署在不同的服务器上,这样就可以突破单服务器的性能瓶颈。

在这里插入图片描述

分区与分表的比较:

在这里插入图片描述
分区的常见方式:

在这里插入图片描述
在这里插入图片描述

分区的优点:

在这里插入图片描述

7.分布式数据库系统

分布式数据库系统分为局部DBMS和全局DBMS,整体框架如下图所示:

在这里插入图片描述

下面的分布式透明性在选择题中出现过,需要了解什么是分片透明性,什么是位置透明性,什么是局部数据模型透明性。首先需要了解什么是透明性,例子:A能看见B,说明B对A是透明的,但是A看见B这个过程并不重要,这就是透明性。分片透明性,用户使用数据库的时候,进行了分片操作,但是用户并不知道进行分片,也不需要知道数据库是怎么进行分片的。位置透明性,用户使用数据库的时候,数据存放在什么位置,这对于用户来说并不需要知道,只关心是否能够存储。局部数据模型透明性(逻辑透明性),用户不需要关心局部数据库中到底使用了什么样的数据模型,但是用户能够知道自己对局部数据库进行了操作。

在这里插入图片描述

8.NoSQL数据库(非关系型数据库)

下表列出的是NoSQL和关系数据库从各个维度的区别,需要重点记忆!

在这里插入图片描述
在这里插入图片描述

9.联邦数据库系统

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嘟嘟的程序员铲屎官

你的鼓励将是我最大的动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值