系统架构设计师 - 案例特训专题 - 数据库设计篇

news2024/9/27 14:40:05

案例特训专题 - 数据库设计篇

  • 数据库设计篇
    • 规范化与反规范化 ★★★
      • 规范化 - 范式
      • 反规范化
    • 数据库索引
    • 数据库视图
    • 数据库分区分表分库
      • 分区
        • 分区的常见方式
      • 分表
      • 分库
    • 分布式数据库 ★★★
    • NoSQL ★★★
    • 其他数据库扩展知识 ★★★
    • 数据库性能优化
      • 集中式数据库优化
      • 分布式数据库优化


大家好呀!我是小笙,本章我主要分享系统架构设计师 - 案例特训专题 - 数据库设计篇知识,希望内容对你有所帮助!!

数据库设计篇

数据库设计关注的问题:性能、数据一致性、安全

数据库设计过程

image-20240911124253423

规范化与反规范化 ★★★

规范化 - 范式

image-20240911124618182

反规范化

image-20240911125152200

优点:连接操作少、检索快、统计快、需要查的表减少、检索容易

缺点:数据冗余,需要更大的存储空间;插入、更新、删除操作开销更大;数据不一致(可能产生添加、修改、删除异常);更新和插入代码更难写

例题

1、某集团公司在各省均设有分公司,现欲建立全国统一的销售管理信息系统,以便总公司及时掌握各分公司的销售情况。公司成立专门的项目组进行该系统的研发工作,其中张工负责其中的数据库设计工作

  • 张工和需求分析小组紧密合作,在设计出数据流图和数据字典的基础上,给出了数据库关系模式和相应的索引设计。同时考虑到未规范化关系模式可能引起的各类数据错误,对关系模式进行了全面的规范化处理,使所有关系模式均达到了3NF或BCNF
  • 在项目实施过程中,应用开发小组认为该设计方案未考虑应用功能的实际需求。如果严格按照设计方案实施,会对应用系统中整体性能产生较大影响。主要的原因在于进行数据查询时,会产生大量的多表连接操作,影响性能。而设计方案中的索引设计,并不能完全满足数据查询的性能要求
  • 应用开发小组还认为,该设计方案未考虑到信息系统中核心销售数据处理的特点:各分公司在使用该信息系统时只能操作自己分公司的销售数据,无权操作其它分公司的销售数据;只有总公司有权利操作所有销售数据,以便进行统计分析
  • 应用开发小组要求,在数据库设计方案中,必须针对实际应用功能的实现来考虑关系模式的规范化,必要时需要采用逆规范化或解除规范化的方法来保证性能要求

问题1 系统需要管理供应商和货物等信息,具体包括供应商姓名、地址以及货物名称、价格等,供应商可以提供 0 ~ n 种货物,其公司地址也可能发生变化。请以供应商关系模式 supplier(name,address,product,price) 为例,解释不规范的关系模式存在哪些问题

  • 数据冗余:关系模式中多次重复记录了同一供应商的地址
  • 插入异常:如果还未确定一个供应商有哪些货物,只是想添加一个供应商的地址信息,则会产生产品与价格均为空的记录
  • 修改异常:当修改一个供应商的地址时,需要将多条记录同时更新,若未同时更新,则数据产生不一致
  • 删除异常:当删除一个供应商的货物时,其地址信息被一并删除

问题2 应用开发小组认为张工的规范化设计虽然解决了未规范化关系模式带来的问题,但实际实现功能时会造成系统性能的下降,请解释其原因

数据库规范化的过程,实际是对数据表的不断拆分,以达到更高的规范程度。这样处理,带来的问题是:系统中大量查询不能通过单表完成,而需要将多表进行连接查询,所以表拆分得越多,查询性能也就越差

问题3 请解释逆规范化方法,说明其优缺点

规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术
逆规范化方法优点:提高统计、查询效率
逆规范化方法缺点:增加了数据冗余,浪费存储空间,增、删、改操作的效率降低,可能导致数据不一致,可能产生添加、修改、删除异常

问题4 针对该信息系统中核心销售数据处理的特点,如采用关系表水平分割的逆规范化方法,请给出具体的解决方案,并说明该方案存在的问题

解决方案:将各省的数据存放于各省分公司,该方案主要问题:

  • 在于总公司进行全国数据统计时,需要从各省服务器调取数据,效率较低
  • 执行应用功能时需要动态选择分公司的数据库表,增加了应用程序的复杂度

数据库索引

数据库索引:提升查询效率,降低添加、修改、删除效率。采用B树,B+树等


数据库视图

视图并不在数据库中实际存在,而是一种虚拟表

视图的优点

  • 视图能简化用户的操作
  • 视图机制可以使用户以不同的方式查询同一数据
  • 视图对数据库重构提供了一定程度的逻辑独立性
  • 视图可以对机密的数据提供安全保护

物化视图:将视图的内容物理存储起来,其数据随原始表变化,同步更新

例题

1、某软件企业开发一套类似于淘宝网上商城业务的电子商务网站。该系统涉及多种用户角色,包括购物用户、商铺管理员,系统管理员等。在数据库设计中,该系统数据库的核心关系包括:

  • 产品(产品编码,产品名称,产品价格,库存数量,商铺编码)
  • 商铺(商铺编码,商铺名称,商铺地址,商铺邮箱,服务电话)
  • 用户(用户编码,用户名称,用户地址,联系电话)
  • 订单(订单编码,订单日期,用户编码,商铺编码,产品编码,产品数量,订单总价)

不同用户角色有不同的数据需求,为此该软件企业在基本数据库关系模式的基础上,定制了许多视图。其中,有很多视图涉及到多表关联和聚集函数运算

问题1 商铺用户需要实时统计本商铺的货物数量和销售情况,以便及时补货,或者为商铺调整销售策略。为此专门设计了可实时查看当天商铺中货物销售情况和存货情况的视图,商铺产品销售情况日报表(商铺编码,产品编码,日销售产品数量,库存数量,日期)。数据库运行测试过程中,发现针对该视图查询性能比差,不满足用户需求。请说明数据库视图的基本概念及其优点,并说明本视图设计导致查询性能较差的原因

视图的基本概念以及优点上述已经提到
查询性能较差的原因是视图中“日销售产品数量”需要针对订单表做统计分析,订单表中有数量庞大的历史销售记录,所以这种操作极为耗时

问题2 为解决该视图查询性能比较差的问题,张工建议为该数据建立单独的商品当天货物销售、存货情况的关系表。但李工认为张工的方案造成了数据不一致的问题,必须采用一定的手段来解决

  1. 说明张工方案是否能够对该视图查询性能有所提升,并解释原因

    张工方案能够对该视图查询性能有所提升,因为这样做能极大的减少统计分析的数据量,对小数据量进行统计,性能是能得以保障的

  2. 解释说明李工指出的数据不一致问题产生的原因

    由于当日订单数据既存储在订单表中,又存储在单独的当天货物销售、存货情况表中。同一数据存储了两份,一旦出现修改,未同步修改,则会造成数据不一致

问题3 针对李工提出的问题,常见的解决手段有应用程序实现,触发器实现和物化视图实现等,请用300字以内的文字解释说明这三种方案

  • 应用程序实现:在进行订单的添加、修改、删除操作时,从应用程序中,控制对两个数据表都进行相关操作,以保障数据的一致性
  • 触发器实现:在应用程序中,只对订单表进行操作。但写触发器,当订单表发生变化时,把当日订单内容同步更新到当天货物销售、存货情况表中
  • 物化视图实现:建立“当天货物销售、存货情况”的物化视图,物化视图会把相应的数据物理存储起来,而且在订单表发生变化时,会自动更新

数据库分区分表分库

分区分表的区别是在逻辑层面是不是还是同一张表,分库则是在逻辑层面不是同一张库

image-20240913130022077

分区

image-20240913125540767
分区的常见方式
  • 范围分区(按数据范围值来做分区)

    image-20240918124320980
  • 哈希分区(通过对 key 进行 hash 运算分区)

    image-20240918124103165
  • 列表分区(根据某字段的某个具体值进行分区)

    image-20240918124154019

分区的优点

  1. 相对于单个文件系统或是硬盘,分区可以存储更多的数据
  2. 数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可
  3. 精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率
  4. 可跨多个分区磁盘查询,来提高查询的吞吐量
  5. 在涉及聚合函数查询时,可以很容易进行数据的合并

分表

image-20240913125553213

分库

image-20240913125605340

分布式数据库 ★★★

  • 分布透明性

    • 分片透明性:分不分片,用户感受不到
    • 位置透明性:数据存放在哪里,用户不用管
    • 局部数据模型透明性(逻辑透明):用户不用关系局部数据模型
    image-20240918125123738
  • 分布式数据库管理系统-组成

    • LDBMS
    • GDBMS
    • 全局数据字典
    • 通信管理(CM)
  • 分布式数据库管理系统 - 结构

    • 全局控制集中的 DDBMS
    • 全局控制分散的 DDBMS
    • 全局控制部分分散的 DDBMS
image-20240918124604534

NoSQL ★★★

NoSQL(Not-only SQL:不仅仅只是SQL,泛指非关系型的数据库

对比维度关系数据库NoSQL
应用领域面向通用领域特定应用领域
数据容量有限数据海量数据
数据类型结构化数据(二维表)非结构化数据
并发支持支持并发、单性能低高并发
事务支持高事务性弱事务性
扩展方式向上扩展向外扩展

image-20240918125610761


其他数据库扩展知识 ★★★

**联邦数据库系统(FDBS)**是一个彼此协作却又相互独立的成员数据库(CDBS)的集合,它将成员数据库系统按不同程度进行集成,对该系统整体提供控制和协同操作的软件

image-20240918125940164

联邦数据库特征

  • 分布性
  • 异构性
  • 自治性
  • 透明性

联邦数据库分类

  • 紧耦合
  • 松耦合

数据库性能优化

集中式数据库优化

  • 硬件系统:CPU,内存,I/O(硬盘,阵列),网络
  • 系统软件:参数,如进程优先级,CPU使用权,内存使用
  • 数据库设计
    • 表与视图:表的规划,建立物化视图
    • 索引:常查询 - 建索引,常修改 - 避免索引
    • SQL优化:以不相干子查询替代相干子查询,只检索需要的列,用带 IN 的条件子句等价替换 OR 子句,经常提交COMMIT,以尽早释放锁,尽可能减少多表查询
  • 应用软件:数据库连接池

分布式数据库优化

通信代价:全局查询树的变换、多副本策略、查询树的分解、半连接与直接连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Thingsboard规则链:Related Device Attributes节点详解

引言 在物联网(IoT)领域,Thingsboard作为一款强大的物联网平台,其规则链功能为企业提供了高度定制化的数据处理和自动化控制方案。其中,Related Device Attributes节点是一个特别实用的组件,它能够访问和操…

sql server每天定时执行sql语句

sql server每天定时执行sql语句 1、打开SQL Server Management Studio 2、鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤; 3、右键,新建-》作业,在作业上-》新建作业&#xff…

超全攻略|手把手带你0经验转行产品经理

▌想入行,你需要先知道怎么才能走得更顺利 现在,如果有人问我,说重新回答大学毕业,刚要入行产品经理的时候,知道哪些事情,能让自己在后面的产品经理生涯中走的更顺利。 ❓是知道面试的套路,能…

PatrOwl:一款开源可扩展的安全协调运营平台

关于PatrOwl PatrOwl是一款开源可扩展的安全协调运营平台,广大研究人员可以使用该工具完成组织内部的安全协调运营。 该工具是一种可扩展、免费且开源的解决方案,用于协调安全操作。其中的PatrowlManager是前端应用程序,用于管理资产、实时审…

一文读懂常见的几种 LangChain 替代品,看到就是赚到!!

前言 在 LLM (大规模语言模型)应用开发领域,开源框架扮演着至关重要的角色,为广大开发者提供了强大的工具支持。作为这一领域的领军者,LangChain 凭借其创新设计和全面功能赢得了广泛赞誉。但与此同时,一些…

小程序开发平台源码系统 各行各业适用的小程序开的平台 带完整的安装代码包以及搭建部署教程

系统概述 本系统采用模块化设计,包含前端展示层、后端逻辑处理层、数据库存储层以及管理后台等多个核心组件。前端展示层负责小程序的界面设计与交互体验;后端逻辑处理层则负责数据处理、业务逻辑实现及与第三方服务的对接;数据库存储层用于…

如火似茶的AI Bots到底有什么现实意义呢?

你好,我是三桥君 自AIGC潮流兴起以来,基于自注意力机制的大模型成为资本市场疯狂炒作的对象。然而,经过一年多的狂热之后,市场逐渐回归理性。这时候会有人担心,大模型是否会像元宇宙、Web 3.0,甚至比特币那…

低空经济腾飞,无人机飞手人才培养先行

低空经济的腾飞为无人机飞手人才的培养提出了迫切需求,并且这一领域的发展已经引起了广泛的关注。以下是对“低空经济腾飞,无人机飞手人才培养先行”的详细分析: 一、低空经济的腾飞背景 低空经济作为新兴的经济形态,正以前所未…

如何搭建适合自己的数据中台?六步法

数据中台是企业数据价值实现的能力框架,包括数据集成、数据开发、数据管理、数据服务、数据资产运营等能力,是企业业务数据化的承载体,是企业业务通过数据视角的一种呈现,担负了企业数字化所需的核心综合数据能力。但由于数据中台…

fastzdp_redis第一次开发, 2024年9月26日, Python操作Redis零基础快速入门

提供完整录播课 安装 pip install fastzdp_redisPython连接Redis import redis# 建立链接 r redis.Redis(hostlocalhost, port6379, db0)# 设置key r.set(foo, bar)# 获取key的值 print(r.get(foo))RESP3 支持 简单的理解: 支持更丰富的数据类型 参考文档: https://blog.c…

Sublime Text4的下载安装以及汉化

sublime官网:https://www.sublimetext.com/ 按照指示一步步操作即可 汉化操作: 等一会就会弹出搜索框, 帮助菜单这里可以切换语言,

OpenAi以及Dify结合生成Ai模型

文章目录 1、Dify介绍2、使用 Dify3、部署Docker1.系统要求2.系统虚拟化3.下载docker 4、安装WSL1.检查是否已经安装 五、访问系统六、添加模型 1、Dify介绍 Dify官方地址。 Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、…

HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南

https://console.cloud.tencent.com/ 腾讯云用户 登录控制台 右上角搜SSL 点击 SSL证书 进入链接 点申请 免费证书 有效期3个月 (以后每三个月申请一次证书 上传) 如果是腾讯云申请的域名 选 自动DNS验证 自动添加验证记录 如果是其他平台申请域…

利士策分享,快钱诱惑与稳健之道:探索财富积累的两种路径

利士策分享,快钱诱惑与稳健之道:探索财富积累的两种路径 在这个瞬息万变的时代,面对“赚快钱”的即时诱惑与“稳健的长远赚钱方式”的持久魅力,我们不禁要深思:在追求财富的道路上,哪一种方式更为明智&…

图神经学习笔记

图神经网络基础 图神经网络用于挖掘事物的“普遍联系”,理解原理、应用技术。本文汇总图神经网络相关介绍和基础模型。 图及特性 图是由顶点和边组成的,如下图左所示。一般图中的顶点表示实体对象(比如一个用户、一件商品、一辆车、一张银行…

Spring RestTemplate 升级 WebClient 导致 OutOfMemoryError

Spring Boot是 Java 企业应用程序的一个非常流行的框架。与内部或外部应用程序集成的一种常见方法是通过 HTTP REST 连接。我们正在从RestTemplate升级到基于 Java NIO 的WebClient,它可以通过允许在调用 REST 服务端点时进行并发来显著提高应用程序性能。WebClient…

Windows环境部署Oracle 11g

Windows环境部署Oracle 11g 1.安装包下载2. 解压安装包3. 数据库安装3.1 执行安装脚本3.2 电子邮件设置3.3 配置安装选项3.4 配置系统类3.5 选择数据库安装类型3.6 选择安装类型3.7 数据库配置3.8 确认安装信息3.9 设置口令 Oracle常用命令 2023年10月中旬就弄出大致的文章&…

【Linux学习】【Ubuntu入门】2-1-1 vim编辑器设置

设置TAB键为4字节及显示行号 VIM编辑器默认TAB键为8空格,改为4空格 输入命令sudo vi /etc/vim/vimrc回车后输入密码按键盘下键到最后,按下“a”进入编辑模式,输入set ts4设置为4空格下一行输入set nu显示行号

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 7 推送卡片刷新消息

场景介绍 如今衣食住行娱乐影音应用占据了大多数人的手机,一部手机可以满足日常大多需求,但对需要经常查看或进行简单操作的应用来说,总需要用户点开应用体验较繁琐。针对此种场景,HarmonyOS提供了Form Kit(卡片开发服…

Harbor安装笔记

下载离线安装包 wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz 解压 tar -zxvf harbor-offline-installer-v2.11.1.tgz 复制一份配置文件出来,修改配置 cp harbor.yml.tmpl harbor.yml vim harbor…