系统分析师案例必备知识点汇总---2023系列文章四

数据库基础知识

数据库设计

规划

进行建立数据库的必要性及可行性分析,确定数据库系统在企业和信息 系统中的地位,以及各个数据库之间的联系。

需求分析

通过调查研究,了解用户的数据和处理要求,并按一定格式整理形成需 求说明书。

概念设计

在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽 象为一个不依赖于任何数据库管理系统的数据模型,即概念模型。

逻辑设计

将概念模型转化为某个特定的数据库管理系统上的逻辑模型。设计逻辑 结构时,首先为概念模型选定一个合适的逻辑模型 (通常是关系模型) , 然后将其转化为由特定 DBMS 支持的逻辑模型,最后对逻辑模型进行优 化。

物理设计

对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的 物理结构,主要是指数据库在物理设备上的存储结构和存取方法。

规范化

数据库安全性技术

措 施

说明

用户标识和鉴别

最外层的安全保护措施,可以使用用户账户、 口令和随机数检验等 方式

存取控制 (数据授权)

对用户进行授权,包括操作类型 (例如,査找、更新或删除等) 和 数据对象的权限

密码存储和传输

对远程终端信息用密码传输

视图的保护

通过视图的方式进行授权

审计

用一个专用文件或数据库, 自动将用户对数据库的所有操作记录下 来

视图是保存在数据库中的 SELECT 查询,其内容由查询定义,因此,视图不是真实存在 的基础表,而是从一个或者多个表中导出的虚拟的表。同真实的表一样,视图包含一系列带 有名称的列和行数据,但视图中的行和列数据来自由定义视图的查询所引用的表,并且在引

用视图时动态生成。

视图优点有:视点集中、简化操作、定制数据、合并分割数据、保证安全性

数据库完整性技术

(1) 存储过程

存储过程 (Stored Procedure) 是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参 数 (如果该存储过程带有参数) 来执行它。

存储过程是数据库所提供的一种数据库对象,通过存储过程定 义一段代码,提供给应 用程序调用来执行。 从安全性的角度考虑,更新数据时,通过提供存储过程让第三方调用, 将需要更新的数据传入存储过程,而在存储过程内部用代码分别对需要的多个表进行更新, 从而避免了向第三方提供系统的表结构,保证了系统的数据安全。

(2) 触发器

一种特殊的存储过程,当数据发生变化时,触发器会产生某种动作。使用触发器有助于 保持数据库的数据完整性。

2 、数据库性能优化

集中式数据库性能优化

(1) 硬件升级:处理器、 内存、磁盘子系统和网络。

(2) 数据库设计:反规范化技术 (逻辑) 、数据库分区 (物理) 。

(3) 索引优化策略:选择经常查询不常更新的属性、数据量小的不设置索引等。

(4) 查询优化:建立物化视图或尽可能减少多表查询等。

反规范化技术

数据库分区技术

(1) 主从复制、读写分离

(2) 数据库分片 (分表) 、分库

(3) 分布式缓存技术

主从复制,读写分离

读写分离设置物理上不同的主/从服务器,让主服务器负责数据的写操作,从服务器负责数 据的读操作,从而有效减少数据并发操作的延迟。 引入主从复制机制所带来的好处有: (1) 避免数据库单点故障:主服务器实时、异步复制数据到从服务器,当主数据库宕机时, 可在从数据库中选择一个升级为主服务器,从而防止数据库单点故障。

(2) 提高查询效率:根据系统数据库访问特点,可以使用主数据库进行数据的插入、删除 及更新等写操作,而从数据库则专门用来进行数据查询操作,从而将查询操作分担到不同的 从服务器以提高数据库访问效率。

Mysql 的主从复制方式:

分布式缓存技术

为了减轻数据库服务器的压力,可以采用分布式缓存系统,将应用系统经常使用的数据放置 在内存,降低对数据库服务器的查询请求,提高系统性能。

使用缓存后读写数据的基本步骤:

(1) 读数据

根据 key 读缓存;

读取成功则直接返回;

若 key 不在缓存中时,根据 key 读数据库 ;

读取成功后,写缓存 ;

成功返回。

(2) 写数据

根据 key 值写数据库;

成功后更新缓存 key 值 ;

成功返回。

3 、分布式数据库

分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的 每个节点具有独立处理的能力 (称为场地自治) ,它可以执行局部应用,同时,每个节点也

能通过网络通信子系统执行全局应用。

为了提高分布式数据库的性能采用的常见技术有:数据分片、读写分离技术、负载均衡技术、 分布式缓存技术等。

4、nosql 数据库

5、数据库备份

备份方式

优点

缺点

冷备份

非常快速的备份方法(只需复 制文件);容易归档 (简单复 制即可);容易恢复到某个时 间点上(只需将文件再复制回 去) :能与归档方法相结合, 做数据库“最佳状态” 的恢 复;低度维护,高度安全

单独使用时,只能提供到某一 时间点上的恢复;在实施备份 的全过程中, 数据库必须要 作备份而不能做其他工作;若 磁盘空间有限,只能复制到 磁带等其他外部存储设备上, 速度会很慢;不能按表或按用 户恢复

热备份

可在表空间或数据库文件级 备份,备份的时间短;备份时 数据库仍可使用;可达到秒级 恢复 (恢复到某一时间点上) ; 可对几乎所有数据库实体做 恢复;恢复是快速的

不能出错,否则后果严重;若 热备份不成功,所得结果不可 用于时间点的恢复;因难于维 护,所以要特别小心不能以失 败告终

本文转载于网络 如有侵权请联系删除

相关文章

  • Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点

    引子本文将主要演示怎么将多个Asp.NetMVC项目部署到一个IIS站点中的例子,主要使用的是Asp.NetMVC提供的区域的功能。Asp.NetMVC提供了区域的功能,可以很方便的为大型的网站划分区域。可以让我们的项目不至于太复杂而导致管理混乱,有了区域后,每个模块的页面都放入相应的区域内进行管理很方便。而随着项目的复杂,每个开发人员开发的模块呢也可能是一个完整的解决方案,而他要开发的UI项目呢只是主站点项目的一个区域,而如果把所有的UI项目放到一个UI项目,在团队开发时就不很方便了,而我们想达到的效果是:每个模块都对应一个UI项目【这里指Asp.NetMVC项目】,最后部署的时候将子项目都配置成区域,而总的项目就是一个站点。一、项目创建首先创建一个主Asp.NetMVC项目,然后创建一个子Asp。NetMVC项目。项目的结构如下:注:1、AreasDemo【子项目,作为主项目的一个Area】、MvcAppMain【主Web项目】都是普通的Asp.NetMVC3项目2、MVCControllers是一个类库项目3、补充:Asp.NetMVC的控制器:Controller是可以放到站点

  • PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解

    本文实例讲述了PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作。分享给大家供大家参考,具体如下:2019-07-04更新更新修改原因:前台界面ui显示不好看后台处理逻辑混乱,涉及到多张图片处理起来很麻烦,所以修改成通过ajax上传/删除图片。效果:上传前:上传后:撤销后:以下是更新的代码:HTML代码:<div><labelfor="username">缩略图</label><div><inputtype="hidden"id="pic"value=""name="pic"><!--要将父布局的position设置为relative,父布局将无法包裹input--><ahref="javascript:void(0);"rel="externalnofollow"rel="externalnofollow"rel="extern

  • How to resolve SAP CRM error message Pricing - Document currency missing in sales

    WhenIinsertedoneproducttoaquotation,Imeetwiththefollowingerrormessage:Performwhereusedlisttofindthesourcecodewherethiserrormessageisraised:Theerrorisraisedbecausethefieldwaerkisinitial:FromdescriptionofthefieldWAERKinstructurePRCT_HEAD_COMwecanknowthatitrepresentsthedocumentCURRENCYwhichisainputparameterforpricingcalculation:Fromdebuggingweknowitisfilledbyls_pricing_wrk-currency,whichisthedocumentcurrencymaintainedinheaderlevel.AfterImaintainaproperdocumentcurrencyhere(whichmustmatchtothecurrenc

  • SAP Spartacus My Company list focus事件触发后,控件border的默认效果

    在下面的状态下敲回车键:在下列的状态下敲回车键:

  • 编辑器中的神器:Vim编辑器下载及写第一个C程序

    今天为大家推荐一款编辑器,大家如果想要提高自己代码的容错率,就得选一款对你代码“挑剔”的编辑器啦,Vim作为编辑器,它是不会给你自动给你报错的,所以写代码得十分注意哦。vim也号称编辑器之神。 除了小编说的以上优势,还有什么优势是值得让小编推荐的呢?让我们一起来看还有哪些优势呢:Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,VIM也是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了SlashdotBeanie的最佳开放源代码文本编辑器大奖。还有好多好多的优点这里就不多说了,大家可以百度搜的,这里我们直接上车。首先我们得打开虚拟机中的Linux系统,我选择的是Ubuntu的版本。windows也有Vim的下载,相对于Linux下载要简单些,小编还是建议大家用Linux,为什么呢?这个下次再说。 windows用户得下Git配置环境,这个网上也有,下好Git后可直接越过下载Vim,右键打开GitBashHere命令窗口即可开始下载g++,方法和Linux

  • Flat风格的Qml滚动选择条

    基于Qml的Tumbler控件修改而成。滚动选择条代码importQtQuick2.0 importQtQuick.Controls2.0 importQtGraphicalEffects1.0 Tumbler{ id:root propertycolorcurrentItemColor:"#3498DB" visibleItemCount:5 delegate:Text{ text:modelData color:root.currentItemColor font.family:"Arial" font.weight:Font.Thin font.pixelSize:50 horizontalAlignment:Text.AlignHCenter verticalAlignment:Text.AlignVCenter opacity:1.0-Math.abs(Tumbler.displacement)/root.visibleItemCount scale:opacity } background:Rectangle{ widt

  • PHP实现跨域解决办法

    这两天,项目上遇到了如何解决跨域问题.对于跨域.百度了一下也是很快解决.出于对跨域的不了解,也是通过查资料了解了一下.现在做个总结.首先,需要明白什么是跨域?跨域跨域是因为浏览器的同源策略引起的,说白了就是指从一个域的网页去请求另一个域的资源.比方说从你家去我家拿个东西.你肯定不让啊.那么什么是同源策略?同源URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域。同源策略同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。(来自百度百科)浏览器采用同源策略,禁止页面加载或执行与自身来源不同的域的任何脚本。因为跨域.我们更加安全的上网.?但往往凡事有利有弊.所以,才有了本文.本文通过设置Access-Control-Allow-Origin来实现跨域。允许单个域名访问指定某域名(http://shiniaan1997.cn)跨域

  • springboot 打包成war 部署到tomcat容器

    第一步:修改pom.xml增加<packaging>war</packaging>第二步:移除tomcat组件<!--springbootweb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--移除嵌入式tomcat插件--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>复制第三步:引入servletj

  • 微服务综合案例-04-业务逻辑处理

      现在我们已经创建好了所需的各个项目,我们的需求是完成用户购买书籍,完成订单操作:  而具体的流程是:下订单需要经过:登录,查看产品,下订单等操作。测试登录账号adminadmin查看所有产品列表选第一款产品,下订单实现订单交易支付查看所有的订单信息业务逻辑处理  业务逻辑处理我们是在consumer项目中操作的1.创建服务service1.1UserService1.2ProductService1.3OrderService1.4TradeService2.创建consumer的service2.1ConsumerOrderService2.2ConsumerUserService2.3ConsumerProductService2.4ConsumerTradeService3.创建controllerpackagecom.bobo.controller; importjava.util.List; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.w

  • Windows下安装MongoDB 原

    一、下载    以下是MongoDB的官方下载网站:    https://www.mongodb.com/download-center?jmp=nav#production    根据页面提示选择需要的版本进行下载,我在这里下载了两个版本的,一个是3.6.5,另一个是4.0.0的。这里先介绍3.6.5版本的MongoDB。    下载之后程序的全名如下:    mongodb-win32-x86_64-2008plus-ssl-3.6.5-signed.msi二、安装及问题1、安装    Windows的安装,如果你知道怎么安装,那么会很简单,如果你不知道怎么安装,那么就是你的噩梦,本人踩过坑,开始安装的时候竟然安装了两天,进度条都没动弹过,下面就介绍避免采坑的地方。    双击安装,也可右键程序安装,如下图,为右键出现的界面,这里发现了新大陆,原来可以直接用这个程序卸载的,我也试过了。    出现如下图界面,点击next。如下图,选项选中我同意,next。如下图,我选择的是Custom安装模式。这里配置MongoDB的安装路径,根据自己习惯选择即可。next。这里很重要,一定要把

  • docker化你的java应用(下)

    前言在《docker化你的java应用(上)》中,我们已经初步接触了docker的核心概念与思想,本篇博客将对docker进行实践,会介绍一些docker常用的命令,并通过docker化一个java项目来进一步认识docker。安装docker我们可以通过docker的官网(https://www.docker.com/community-edition#/download)来选择在linux/mac/windows上进行安装,不过在国内下载比较慢。给大家提供一个高速下载地址:http://get.daocloud.io/,具体的安装方法,网上有比较多的教程,这里就不介绍了。docker安装成功运行docker版本的helloworld要运行docker版本的helloworld,那么自然需要先获取镜像,注意到docker官方给我们提供了一个镜像中心:https://hub.docker.com/,一般公司内部也会给我们提供一个公司专用的镜像中心。hello-world镜像dockerpulldockerpull:从镜像仓库中拉取或者更新指定镜像,镜像除了名称之外,还有一个tag的概念

  • 开发 | 类似淘宝的搜索及购物车功能,如何在小程序中实现?

    作者:郑嘉伟在上一篇文章中,我们复盘了一个服装行业订单收集小程序的产品逻辑和数据库的设计思路。今天,我们依然将以「北江纺织牛仔新时尚」为例,复盘订单收集类小程序的主要功能点是如何通过知晓云(cloud.minapp.com)实现的,主要涉及搜索和购物车这2个功能。搜索功能在「北江纺织牛仔新时尚」中,搜索是比较基础的功能,其实它就是一个查询数据的过程。我们从一个搜索的实例去讲一下这个问题,假如我们是一个消费者,想要搜索一个裤型修身的、水洗颜色浅色的、成分全棉的童装牛仔长裤,那么我们应该怎么做这个查询呢?看上去有点复杂,那么我们先简化一下,如何搜索童装牛仔长裤的信息?首先,我们需要有这样一张数据表,存储了商品的信息,也就是上一篇中我们讲过的product表。由于我们要搜索童装牛仔长裤,那么除了一个商品的其他基本信息外,我们肯定要为童装牛仔长裤设定一个字段用于我们的查询,我们把这个字段定义为category_id。根据实际的业务场景,一个产品可能会属于很多不同的分类,所以我们把category_id设定为数组类型。现在我们的数据表定义已经初步完成了,那么假设product的table_id是

  • 对于tnsping的连接超时的功能补充(二)(r9笔记第22天)

    对于tnsping的一些小问题,自己也想了些办法来补充,最后发现使用nc是一个不错的选择。可以参考对于tnsping的连接超时的功能补充 主要思想如下: 如果网络是通的,那么会显示succeeded,否则会有一些错误信息 #nc-w2-v10.11.65.11122|grepsucc Connectionto10.11.65.11122port[tcp/ssh]succeeded! #nc-w2-v10.11.65.19122|grepsucc nc:connectto10.11.65.191port22(tcp)timedout:Operationnowinprogress 所以我们需要改进tnsping就会很自然的想到解析tnsnames.ora这个文件,当然解析起来会有一些问题,比如你碰到下面的两种格式的配置,就会有些迷茫了。 test1= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=10.11.2.129)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=peak)

  • java-生成任意格式的json数据

    最近研究java的东西。之前靠着自己的摸索,实现了把java对象转成json格式的数据的功能,返回给前端。当时使用的是JSONObject.fromObject(object)方法把java对象换成json格式。也就是先有一个java实体类,例如叫User。然后从数据库查出列表数据,也就是一个List,里面的每一条数据都是一个User的实体对象。而如果前端需求变化,需要在当前这个接口中多返回一个字段时,就需要修改这个User实体类,新增字段。这样一来,所有用到这个User实体类的接口的地方,接口返回的json数据里都会有新增的这个字段。后来发现可以用一下方法根据需要动态拼接需要的字段。1、demopackagecom.lin.domain; importnet.sf.json.JSONArray; importnet.sf.json.JSONObject; publicclassTest{ publicstaticvoidmain(String[]args)throwsException{ JSONObjectcreateJSONObject=createJSONObject()

  • Cloud computing Developers Conference

    2021.06.07 北京新世纪日航饭店         CloudcomputingDevelopersConference

  • 防止mysql注入

    functioncheck($sql_str){ $checks=eregi('select|insert|update|delete|\'|\/|\\\|\*|\.|union|into|load_file|outfile',$sql_str);//进行过滤 if($checks){ returnFALSE; exit(); }else{ returnTRUE; } }复制 在需要检查的页面调用check方法即可  

  • 【原】小写了一个cnode的小程序

       小程序刚出来的第一天,朋友圈被刷屏了,所以趁周末也小玩了一下小程序。其实发觉搭建一个小程序不难,只要给你一个demo,然后自己不断的查看文档,基本就可以入门了,不过对于这种刚出来的东西,还是挺多坑的,也就是文档说的bug&tips   本文只是搭建了cnode的首页和详情页,其他的什么个人中心啊,搜索啊,都是一样的道理,照葫芦画瓢,首页和详情页会了,其他的页面也就会了,所以其他页面我就偷懒没写了。   为什么会想到模仿cnode呢,因为这个网站有公开的API文档,调用起来方便。文档地址在这里:https://cnodejs.org/api 接下来,正式开始我们的微信小程序之旅 构建准备工作 构建过程我这里直接列举一些链接的方式,因为想把主要的篇幅用来写程序的过程。 1、首先你需要注册一个微信小程序的开发平台: 点这里 2、其次你需要完善你的信息,来获取AppID,如果没有AppID的话,微信小程序的有些功能是用不了的,个人的话是无法申请到的,要有企业的验证信息,不过可以看看这篇文章破解:点这里 3、需要下载一个微信开发者工具:点这里

  • Shell编程 函数的简单使用

    代码: #!/bin/bash #filename:welcome first(){ echo"---------------------------" echo"Hello!Welcometomyblog" echo"---------------------------" } second(){ echo"***************************" } first second second first复制 效果  

  • 前端通信:ajax设计方案(九)--- 完善文档

    ajax-js1.9.1文档目录*common(options,isCreatePoll)*config(options)*get(url,data,successEvent,errorEvent,timeoutEvent)*post(url,data,successEvent,errorEvent,timeoutEvent)*postJSON(url,data,successEvent,errorEvent,timeoutEvent)*postFormData(url,formData,successEvent,errorEvent,timeoutEvent)*obtainBlob(type,url,data,successEvent,errorEvent,timeoutEvent)*promiseAjax(url,data,type)*longPolling(type,url,data,successEvent,timeFrequency,errorEvent,timeoutEvent)*upload(url,file,size,fileType,successEvent,erro

  • Golang之正则表达式的使用

    说起正则表达式,那叫一个好用,比字符串查找切割,好用多了。主要就是写正则表达式的规则,只要会写正则表达式的规则,那后边的道路简直就是平路,能飞起来。 推荐的正则表达式的规则网址如下: https://tool.oschina.net/uploads/apidocs/jquery/regexp.html复制 推荐一下正则表达式的验证工具超级好用,可以减少运行的和调试的时间: https://qqe2.com/tools/regex复制  

  • forEach循环

    <script>/**一般我们都是使用for循环遍历数组,*JS中还为我们提供了一种方法*forEach*-这个方法只支持IE8浏览器*IE8浏览器均不支持该方法,所以如果需要兼容IE8则不要使用forEach*还是使用for循环来遍历*///创建一个数组vararr=["孙悟空","猪八戒","沙和尚","唐僧","白骨精"];/**forEach()方法需要一个函数作为参数*-像这种函数(浏览器创建的),由我们我们创建但是不由我们调用的,我们称为回调函数*-数组中有几个元素,函数就会执行几次,每次执行时,浏览器会将遍历到的元素*以实参的形式传递进来,我们可以定义形参,来读取这些内容*-浏览器会在回调函数中传递三个参数:*第一个参数,就是当前正在遍历的元素*第二个参数,就是当前正在遍历的元素的索引*第三个参数,就是正在遍历的数组*/arr.forEach(function(value,index,obj){//console.log(typeofc);//显示object。c==arr//显示trueconsole.log(value);});</script>

相关推荐

推荐阅读