软考高级-系统分析师-案例分析-数据库设计

数据库基础

数据库设计过程

在这里插入图片描述

  • 需求分析:通过调查研究,了解用户的数据和处理要求,并按一定格式整理形成需求说明书。
  • 概念设计:在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何数据库管理系统的数据模型,即概念模型。
  • 逻辑设计:将概念模型转化为某个特定的数据库管理系统上的逻辑模型。设计逻辑结构时,首先为概念模型选定一个合适的逻辑模型(通常是关系模型),然后将其转化为由特定 DBMS 支持的逻辑模型,最后对逻辑模型进行优化。
  • 物理设计:对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的物理结构,主要是指数据库在物理设备上的存储结构和存取方法。

规范化理论-范式

逐步优化以解决:插入异常、更新异常、删除异常、数据冗余

  • 1NF 属性值都是不可分的原子值
    第一范式(1NF):在关系模式R中,当且仅当所有域中只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。

  • 2NF 消除非主属性对候选键的部分依赖,满足1NF,如果候选码只有单个属性,必然满足2NF
    第二范式(2NF):当且仅当实体E是第一范式(1NF),且每一个非主属性完全依赖候选键(不存在部分依赖)时,则称实体E是第二范式。
    在这里插入图片描述
    学分对课程号候选键有部分依赖,所以不满足2NF。

  • 3NF 消除非主属性对候选键的传递依赖,满足1NF,如果没有非主属性,必然满足3NF
    第三范式(3NF):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于候选码时,则称实体E是第三范式。
    在这里插入图片描述
    学生关系S(学号,姓名,系号,系名,系位置)。从各属性之间的联系可以判断出S的函数依赖有学号→(姓名,系号,系名,系位置),系号→(系名,系位置)。显然,学号为候选键。在函数依赖中有学号→系号→系名与学号→系号→系位置,这便是传递函数依赖。由于系名与系位置为非键属性,同时传递依赖于候选键,因此,关系模式S不满足3NF。若要使S满足3NF,需要将其拆分为S1(学号,姓名,系号)和S2(系号,系名,系位置)。

  • BCNF 消除主属性对候选键的部分和传递依赖
    所有的函数依赖左边部分都必须是候选键中的一个。

部分函数依赖和传递函数依赖

在这里插入图片描述

范式级别提升带来了什么负面影响?

  • 表太细,关联不方便(反规范化)

数据库事务

事务的4个属性(4个特性):

  • 原子性
    事务是数据库的逻辑工作单位,事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说,这些操作是一个整体,不能部分的完成。

  • 一致性
    一致性是指使数据库从一个一致性状态变到另一个一致性状态。
    例如,在转账的操作中,各账户金额必须平衡。一致性与原子性是密切相关的,一致性在逻辑上不是独立的,它由事务的隔离性来表示。

  • 隔离性
    隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。它要求即使有多个事务并发执行,但看上去每个事务按串行调度执行一样。这一性质也称为可串行性,也就是说,系统允许的任何交错操作调度等价于一个串行调度。

  • 持久性
    持久性也称为永久性,是指事务一旦提交,改变就是永久性的,无论发生何种故障,都不应该对其有任何影响。

并发控制 - 数据不一致问题

  • 丢失修改
    事务A与事务B从数据库中读入同一数据并修改,事务B的提交结果破坏了事务A提交的结果,导致事务A的修改被丢失。
    解决方法:对A加X锁(写锁),那么B只能在A解锁后读。

  • 不可重复读
    不可重复读是指事务A读取数据后,事务B执行了更新操作,事务A使用的仍是更新前的值,造成了数据不一致性。
    解决方法:A加X锁(写锁)后,B对同一数据加X锁(写锁),这样A的锁解开后,才可以调用B

  • 读“脏”数据
    事务A修改某一数据,并将其写回磁盘,事务B读取同一数据后,事务A由于某种原因被撤消,这时事务A已修改过的数据恢复原值,事务B读到的数据就与数据库中的数据不一致,是不正确的数据,称为“脏数据”。
    解决方法:修改时加排他锁,直到事务提交后才释放,读取时加共享锁,读取完释放。A读取数据时加上共享锁后,不允许任务事务操作该数据,只能读取。

在这里插入图片描述

并发控制 - 封锁协议

  • 处理并发控制的主要方法是采用封锁技术,主要有X封锁(写锁)和S封锁(读锁)。

  • 排他型封锁(X封锁)又叫写锁、独占锁:对于T1如果对A加了写锁,其他事务不能对A加任何锁。只允许事务T读取和修改数据A,其他事务要等事务T解除X封锁以后,才能对数据A实现任何类型的封锁。可见,X封锁只允许一个事务独锁某个数据,具有排他性。

  • 共享型封锁(S封锁)又叫读锁:对于T1如果对A加了读锁,其他事务只能在A上加读锁,不能加写锁,事务T1自己可以升级S锁至X锁。允许事务T读取数据A,但不能修改数据A,在所有S封锁解除之前,决不允许任何事务对数据A实现X封锁。

  • 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。可防止丢失修改,并保证事务T是可恢复的,但不能保证可重复读和不读“脏数据”。

  • 二级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。可防止丢失修改、读“脏数据”,但不能保证可重复读。

  • 三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改、读“脏数据”、防止数据重复读。

  • 两段锁协议:对这些事务的任何并发调度策略都是可串行化可能发生死锁

案例题

某航空公司要开发一个订票信息处理系统,以方便各个代理商销售机票。开发小组经过设计,给出该系统的部分关系模式如下:航班(航班编号,航空公司,起飞地,起飞时间,目的地,到达时间,剩余票数,票价)代理商(代理商编号,代理商名称,客服电话,地址,负责人)机票代理(代理商编号,航班编号,票价)旅客(身份证号,姓名,性别,出生日期,电话)购票(购票单号,身份证号,航班编号,搭乘日期,购票金额)在提供给用户的界面上,其核心功能是当用户查询某航班时,将该航班所有的代理商信息及其优惠票价信息,返回给用户,方便用户购买价格优惠的机票。在实现过程中发现,要实现此功能,需要在代理商和机票代理两个关系模式上进行连接操作,性能很差。为此开发小组将机票代理关系模式进行了扩充,结果为:机票代理(代理商编号,航班编号,代理商名称,客服电话,票价)这样,用户在查找信息时只需对机票代理关系模式进行查询即可,提高了查询效率。

【问题 1】
机票代理关系模式的修改,满足了用户对代理商机票价格查询的需求,提高了查询效率。但这种修改导致机票代理关系模式不满足 3NF,会带来存储异常的问题。
1)请具体说明其问题,并举例说明。
2)这种存储异常会造成数据不一致,请给出解决该存储异常的方案。

1)不满足 3NF 会产生函数的传递依赖,造成数据冗余和修改异常等问题。
① 数据冗余,一个代理商会代理多家航班的机票销售业务,在机票代理模式中,该代
理商的代理商名称,客服电话就会被存储多次,造成数据的冗余。
② 修改异常,当需要修改该代理商的名称或客服电话时,就要修改所有相应元组中的
名称或客服电话,否则就会出现客服电话值不一致的现象,产生

### 高级系统架构师论文方法 高级系统架构师的论文部分主要生的实际应用能力以及对复杂问题的理解和解决能力。根据以往的经验,论文题目通常围绕当前热门技术和传统领域展开[^3]。例如,在近几年的试中,可能会涉及到云原生、无服务架构、区块链等新兴技术的应用场景分析。除此之外,传统的主题如软件系统架构设计(包括架构评估、微服务架构)、信息系统规划与集成、软件性能优化等方面也占据重要比例。 #### 论文答题技巧 1. **审题清晰**:在作答前仔细阅读题目要求,明确所要讨论的核心内容及其背景意义。对于涉及具体技术实现的问题,则需结合实际案例阐述解决方案的设计思路和技术选型依据。 2. **逻辑严谨**:文章结构应条理分明,建议采用总分总的布局方式——先概述整体观点或方案概览;接着分别论述各个子模块的功能定位及相互关系;最后总结全文并强调该设计方案的优势所在。 3. **理论联系实践**:除了展示扎实的专业功底外,还应该体现出较强的实战经验积累。可以通过列举真实项目的成功经验和失败教训来增强说服力。 4. **注重细节描述**:针对某些关键技术点给予充分解释说明,比如当提到分布式事务处理机制时,不仅要指出其实现原理,还要进一步探讨可能遇到的风险挑战以及相应的规避措施[^2]。 --- ### 备策略 为了有效应对高级系统架构师中的论文环节,可以从以下几个方面着手准备: #### 基础知识巩固 - 掌握计算机硬件、软件及网络方面的基础知识; - 熟悉信息系统开发生命周期各阶段的任务目标及相关活动流程; - 学习常见信息技术标准规范,特别是那些被广泛应用于企业系统的标准协议; - 对主流中间件产品有所了解,并能够根据不同业务需求推荐合适的选择。 #### 技术深度挖掘 深入研究现代软件工程领域的热点话题,例如但不限于: - 微服务体系架构下的服务拆分原则和服务治理框架; - 容器编排工具Kubernetes的工作机理及其生态组件构成; - 数据库高可用集群部署模式对比分析; - AI算法模型训练平台搭建指南等等[^3]。 以下是关于Python脚本的一个简单例子用于自动化测试环境配置: ```python import os def setup_test_env(): """设置测试环境""" try: # 创建必要的目录结构 os.makedirs('logs', exist_ok=True) # 初始化数据库连接池参数文件 with open('db_config.ini', 'w') as f: f.write('[DEFAULT]\nhost=localhost\nport=3306') print("Test environment set up successfully.") except Exception as e: print(f"Error occurred during test env setup: {e}") if __name__ == "__main__": setup_test_env() ``` 此代码片段展示了如何利用Python快速构建一个基础版的测试环境初始化程序,这可以作为面试或者笔试过程中展现个人编程技能的一部分实例之一。 #### 实战演练提升 定期参与模拟试练习,选取历年真题进行针对性复习。注意收集整理优秀范文样本加以模仿学习,逐步形成自己独特的写作风格。同时也要善于归纳总结各类典型错误以便日后避免重复犯错[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值