软考 - 08 数据库设计

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 数据库设计

@[toc]
在这里插入图片描述


题目

阅读以下关于数据库设计的叙述,在答题纸上回答问题1至问题3。

[说明]

某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。

通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis) 的混合架构实现。

经过规范化设计之后,该系统的部分数据库表结构如下所示。

  • 供应商(供应商ID,供应商名称,联系方式,供应商地址) ;
  • 药品(药品ID,药品名称,药品型号,药品价格,供应商ID) ;
  • 药品库存(药品ID,当前库存数量) ;
  • 订单(订单号码,药品ID,供应商ID,药品数量,订单金额) ;

[问题1]

在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系表过于细分,造成了大量的多表关联查询,影响了性能。例如当用户查询商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查询性能。修改后的药品关系结构为:

药品(药品ID,药品名称,药品型号,药品价格,供应商ID,供应商名称,当前库存数量) ;

请用200字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信息应该采用哪种反规范化设计方法。 

【答案1】

常用的反规范技术有增加冗余列、增加派生列、重新组表和分割表

  • (1)增加冗余列。是指在多个表中具有相同的列,它常用来在查询时避免连接操作
  • (2)增加派生列。指增加的列来自其它表中的数据,由它们计算生成。它的作用是在查询时减少连接操作,避免使用聚集函数
  • (3)重新组表。指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能
  • (4)对表做分割可以提高性能。表分割有两种方式∶水平分割和垂直分割

用户查询商品信息应该采用增加冗余列的方式。


[问题2]

王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。

【答案2】

解决数据不一致性问题常用的方法是批处理维护、应用逻辑和触发器

● 批处理维护是指对复制列或派生列的修改积累一定的时间后,运行一批处理作业或存储过程对复制或派生列进行修改,只能在对实时性要求不高的情况下使用。

● 应用逻辑实现数据一致性就要求必须在同一事务中对所有涉及的表进行同步增、删、改操作。同一逻辑必须在所有的应用中使用和维护,容易遗漏,不易于维护。

● 触发器∶对数据的任何修改立即触发对复制列或派生列的相应修改。触发器是实时的,易于维护,是解决这类问题的最好的办法。该系统应该采用触发器。


[问题3]

该系统采用了Redis来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成Redis和MySQL的数据实时同步问题。

(1) Redis的数据类型包括String、 Hash、 List、 Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。

(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。

【答案3】

(1)

热销药品排名适合用∶ZSet (解析∶zset 和 set 类似,都是存储无序不重复的数据。但是 zset 会带有一个分数 score,可以根据score 去排序。)

(2)

1.对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从数据库中查询,然后保存到缓存;更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。

2.对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。

3.使用阿里的同步工具canal,canal实现方式是模拟myslave和master的同步机制,监控DB bitlog的日志更新来触发缓存的更新。

4.采用UDF自定义函数的方式,面对mysql的API进行编程,利用触发器进行缓存同步。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5月前
|
编解码 算法 vr&ar
软考中级之数据库系统工程师笔记总结(六)多媒体基础
软考中级之数据库系统工程师笔记总结(六)多媒体基础
36 0
|
5月前
|
网络协议 安全 网络安全
软考中级之数据库系统工程师笔记总结(五)网络基础
软考中级之数据库系统工程师笔记总结(五)网络基础
48 0
|
5月前
|
人工智能 数据管理 Java
软考中级之数据库系统工程师笔记总结(四)程序设计基础
软考中级之数据库系统工程师笔记总结(四)程序设计基础
35 0
|
5月前
|
存储 算法 Unix
软考中级之数据库系统工程师笔记总结(三)操作系统
软考中级之数据库系统工程师笔记总结(三)操作系统
46 0
|
5月前
|
存储 算法 C语言
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
42 0
|
SQL 数据库
【软考】-数据库
【软考】-数据库
94 0
|
安全 数据库
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(下)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(下)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(下)
|
存储 SQL 算法
软考中级软件设计师自我总结知识分享--数据库技术基础(下)
该系列文章全篇文字在10w+,全文都是自己备考中的干货,软考涉及很多计算机基础,数据结构,算法分析,编程思想,开发流程等等,不仅适合参加软考的人学习,也适合扩宽自己知识视野的人去学习,每一篇都将会把重点加粗处理,特别是易错点,考试常考平时也容易记错,请一定仔细看
243 0
|
存储 算法 安全
软考中级软件设计师自我总结知识分享--数据库技术基础(上)
该系列文章全篇文字在10w+,全文都是自己备考中的干货,软考涉及很多计算机基础,数据结构,算法分析,编程思想,开发流程等等,不仅适合参加软考的人学习,也适合扩宽自己知识视野的人去学习,每一篇都将会把重点加粗处理,特别是易错点,考试常考平时也容易记错,请一定仔细看
139 0
|
存储 SQL 开发框架
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)