DBMS-基本概念

文件处理系统(file-processing system)的主要弊端:

数据冗余和不一致(data redundancy and inconsistency)、数据访问困难(difficulty in accessing data)、数据孤立(data isolation)、完整性问题(integrity problem)、原子性问题(atomicity problem)、并发访问异常(concurrent-access anomaly)、安全性问题(security problem)。

 

 

数据抽象的三个层次

 

1)物理层(physical level):详细描述复杂的底层数据结构

2)逻辑层(logical level):描述数据库中存储什么数据及这些数据间存在的关系。

物理数据独立性(physical data independence):应用程序不依赖于物理模式,即使物理模式改变也无须重写应用程序,逻辑层用户不必知道逻辑层结构实现可能涉及的复杂物理层结构。

3)视图层(view level):只描述数据库的某个部分,系统可以为同一数据库提供多个视图,使用户与系统交互更简单。

 

 

数据库模式

实例(instance):特定时刻存储在数据库中的信息的集合称作数据的一个实例。

数据库模式(schema):数据库的总体设计,即使发生变化,也不频繁。

数据库系统可分为几种不同的模式:e.g.物理模式、逻辑模式、子模式(subschema,描述数据库的不同视图)。

 

 

数据模型(data model):描述数据、数据联系、数据语义及一致性约束的概念工具的集合,提供一种描述物理层、逻辑层及视图层数据库设计的方式。

数据模型可被划分为四类:

关系模型(relational model):一种基于记录的模型,用表的集合来表示数据和数据间的联系,每个表有多个列,每列有唯一的列名。

实体-联系模型(entity-relationship model,a.k.a. E-R):基于对现实世界的一种认识——现实世界由一组基本对象(实体)及这些对象间的联系构成。实体是现实世界中可区别于其他对象的一件事情或一个物体。

E-R提供一种方便的图形化方式来观察数据、联系和约束。

数据库中实体通过属性(attribute)集合来描述;

联系(relationship)是几个实体之间的关联;

同一类型的所有实体的集合称为实体集(entity set),同一类型的所有联系的集合称作联系集(relationship set);

基于对象的数据模型(object-based data model):可看作E-R模型增加了封装、方法和对象标志等概念后的扩展。对象-关系数据模型结合了面向对象的数据模型和关系数据模型的特征。

半结构化数据模型(semistructured data model):允许相同类型的数据项含有不同的属性集的数据定义。

网状数据模型(network data model)、层次数据模型(hierarchical data model)如今已经很少使用。

 

 

数据库语言

数据库系统提供数据定义语言(data-definition language)和数据操纵语言(data-manipulation language),构成了单一数据库语言的不同部分。

1. 数据操纵语言(DML):使用户可以访问或操纵那些按某种适当的数据模型组织起来的数据。

DML的访问类型包括:增、删、查、改。

查询(query):要求对信息进行检索的语句,DML中涉及信息检索的部分称作查询语言(query language)。

通常有两类基本的DML:

1)过程化DML(procedural DML):要求用户指定需要什么数据以及如何获得这些数据。

2)声明式DML(declarative DML):也称非过程化DML,还要求用户指定需要什么数据,而不指明如何获得这些数据。

2. 数据库定义语言(DDL):用于表达说明数据库模式的一系列定义(定义数据库模式),也可用于定义数据的其他特征。

数据存储和定义(data storage and definition)语言:一系列特殊的DDL语句,用于说明数据库系统所使用的存储结构和访问方式,定义了数据库模式的实现细节。

存储在数据库中的数据值必须满足某些一致性约束(consistency constraint),DDL语言提供指定这种约束的工具,每当数据库更新时数据库系统都会检查这些约束。

·域约束(domain constraint):每个属性都对应于一个所有可能的取值构成的域。

·参照完整性(referential integrity):一个关系中给定属性集上的取值也在另一关系的某一属性集的取值中出现。

·断言(assertion):数据库需要时刻满足某一条件。断言创建后系统会监测其有效性,如果断言有效,则以后只有不破坏断言的数据库更新才被允许。

·授权(authorization):对于不同用户在数据库中的不同数据值上允许不同的访问类型,这些区别以授权来表达。如:a. 读权限(read authorization)允许读取数据但不能修改数据;b. 插入权限(insert authorization)允许插入新数据但不允许修改已有数据;更新权限(update authorization)允许修改但不能删除数据;删除权限(delete authorization)允许删除数据。

数据字典:DDL以指令(语句)作为输入,生成输出放在数据字典(data dictionary)中。数据字典包含元数据(metadata)。数据字典可以看做一种特殊的表,只能由数据库系统本身来访问和修改,在读取和修改实际数据前数据系统要先参考数据字典。

 

 

关系数据库:基于关系模型,使用一系列表来表达数据以及这些数据之间的关系。一种基于记录的模型,数据库的结构时几种固定格式的记录。

表:每个表包含一种特定类型的记录,每种记录类型定义固定数目的字段或属性(每个表有多个列),表的列对应记录类型的属性(每个列有唯一的名字)。

 

来自应用程序的数据库访问

大多数计算和动作必须用一种宿主语言(如C/C++/Java)来完成,再在其中使用嵌入式的SQL查询来完成对数据库的访问。由宿主语言执行DML访问数据库的两种途径包括:

1. 通过提供应用程序接口(过程集),将DML和DDL语句发送给数据库再取回结果。e.g. C语言+ODBC、Java+JDBC

2. 通过扩展宿主语言的语法,在宿主语言的程序中嵌入DML调用。

 

规范化

设计关数据库所用到的一种方法,通过设计一种符合适当范式(normal form)的模式,生成一个关系模式集合,使存储信息时没有不必要的冗余,同时又能轻易检索数据。

 

数据存储和查询

数据库系统的功能部件大致可分为存储管理器和查询处理部件。

1) 存储管理器: 数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供接口的部件,负责数据库中数据的存储、检索和更新。

存储管理部件包括:

·权限及完整性管理器(authorization and integrity manager):检测是否满足完整性约束,检查视图访问数据的用户的权限。

·事务管理器(transaction manager):保证即使发生故障,数据库也保持在一致(正确)的状态,并保证并发事务的执行不发生冲突。

·文件管理器(file manager):管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。

·缓冲管理器(buffer manager):负责将数据从磁盘取到内存中来,并决定哪些数据应被缓冲存储在内存中。

存储管理器实现了几种数据结构,作为系统物理实现的一部分:

·数据文件(data files):存储数据库自身。

·数据字典(data dictionary):存储关于数据库结构的元数据,尤其是数据库模式。

·索引(index):提供对数据项的快速访问(e.g. 指针、散列)

2)查询处理器

查询处理器负责编译和执行DDL和DML语句,组件包括:

·DDL解释器(DDL interpreter):解释DDL语句并将这些定义记录在数据字典中。

·DML编译器(DML compiler):将查询语言中的DML语句翻译为执行方案,包括一系列查询执行引擎能理解的低级指令。

DML编译器还进行查询优化(query optimization),从几种等价的具有相同结果的执行方案中选出代价最小的一种。

·查询执行引擎(query evaluation engine):执行由DML编译器产生的低级指令。

 

事务管理

事务(transaction):数据库应用中完成单一逻辑功能的操作集合。每一个事务是一个既具有原子性又具有一致性的单元,。

事务的定义应使之不违反数据库的一致性约束。一个事务可以被定义为由多个单独程序组成,程序依次执行可以保持一致性,但单个程序自身都不是把数据库从一个一致状态转入一个新的抑制状态,因此这些程序不是事务。

事务管理器(transaction manager)包括并发控制管理器(concurrency-control manager,控制并发事物间的相互影响,保证一致性)和恢复管理器(recovery manager,事务失败时进行故障恢复,保证原子性和持久性)。

 

数据库体系结构

 

1. 两层体系结构(two-tier architecture):应用程序驻留在客户机上(前端),通过查询语言表达式来调用服务器上的数据库系统功能(后端)。(应用程序接口标准e.g.ODBC/JDBC用于进行客户端和服务器的交互)

2. 三层体系结构(three-tier architecture):后端分为应用服务器和数据库服务器;客户机只作为前端,不包含任何直接的数据库调用,通过一个表单界面与应用服务器(application server)通信;应用服务器与数据库系统通信以访问数据,应用程序的业务逻辑(business logic)被嵌入到应用服务器中而不是分布在多个客户机上。

 

 

数据库用户和管理员

使用数据库的人员可分为数据库用户和数据库管理员

1. 数据库用户

数据库用户可分为四种类型,系统为不同类型用户设计不同类型的用户界面

·无经验的用户(naïve user):通过激活事先写好的应用程序同系统交互,典型用户界面是表格界面。

·应用程序员(application programmer):开发用户界面

·老练的用户(sophisticated user):不通过编写程序同系统交互,而是用数据库查询语言或数据分析软件等工具表达要求。

·专门的用户(specialized user):编写专门的、不适合于传统数据处理框架的数据库应用的富有经验的用户。

2. 数据库管理员

对系统进行集中控制的人称作数据库管理员(DataBase Administrator,DBA),DBA的作用包括:

·模式定义(schema definition)。通过用DDL书写一系列定义来创建最初数据库模式。

·存储结构及存取方法定义(storage structure and access-method definition)。

·模式及物理组织的修改(schema and physical-organization modification)。由DBA对模式和物理组织进行修改以反映机构的需求变化,或为提高性能选择不同的物理组织。

·数据访问授权(granting of authorization for data access)。DBA通过授予不同类型的权限来规定不同的用户各自可以访问数据库的部分。

·日常维护(routine maintenance),包括:

a. 定期备份数据

b. 确保正常运转所需的空余磁盘空间,并在需要时升级磁盘空间

c. 监视数据库的运行,并确保数据库性能不因一些用户提交了花费时间较多的任务就下降很多。

 

转载于:https://www.cnblogs.com/RDaneelOlivaw/p/7803410.html

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

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

相关文章

python多大孩子可以学_孩子学编程最佳年龄是多大

儿童编程教育已经悄悄地掀起了编程低龄化的热浪。但是很多人会疑惑,到底孩子学编程最佳年龄是多少呢?下面小编就为大家解答一下。孩子学编程最佳年龄 首先,孩子的学习黄金时期是非常重要的。从6岁开始,大多数孩子都可以掌握对基本…

上传文件到华为云云服务器,上传文件到云服务器

上传文件到云服务器 内容精选换一换登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator帐户或Cloudbase-init设…

JUnit规则

第一次偶然发现JUnit Rule批注时,我对此概念有些恼火。 在测试用例中拥有一个公共领域似乎有些奇怪,因此我不愿意定期使用它。 但是一段时间后,我习惯了这一点,事实证明,规则可以通过多种方式简化编写测试的过程。 这篇…

微pe工具箱是微软的吗_微PE工具箱V2.0更新10内核

本帖最后由 韦小宝2 于 2017-3-22 21:26 编辑微PE工具箱V2.0发布更新了,链接:http://pan.baidu.com/s/1c9whpO 转载自无忧论坛 07年,第一个XP内核通用PE工具箱发布。17年,第一个WIN10内核的微PE工具箱就此诞生。64位纯内核&#x…

jq实现轮播图

之前设计了一个校团委网站,里面有一个轮播图效果,上网后查看了许多方法,觉得下面这个方法最为适用,记录下来 js代码: $(document).ready(function () {//无缝切换轮播var i 0;//索引var clone $(".banner .imgL…

关于图片预加载的思考

引子&#xff1a; 很多时候&#xff0c;我们在写html页面的时候&#xff0c;当需要在页面中加入图片时&#xff0c;我们很自然地把图片直接用<img>标签放在了<body>里面&#xff0c;这本来是没有多大问题的。 但是当图片数量很多的时候&#xff0c;问题就来了。H…

oracle安装中桌面模式与服务器模式的去别

桌面模式只能本机使用。 服务器模式可以在网络中使用&#xff0c;也就是网络中的其他服务器可以使用。 所以安装时&#xff0c;如果是生产环境肯定是服务器模式。一般也都是服务器模式。 转载于:https://www.cnblogs.com/zhjx0521/p/7803691.html

python不能创建字典的是_用Python创建带有重复键的字典

用Python创建带有重复键的字典 我有以下列表&#xff0c;其中包含重复的具有不同值的汽车注册号。 我想将其转换为字典&#xff0c;该字典接受汽车登记号的多个键。 到目前为止&#xff0c;当我尝试将列表转换为字典时&#xff0c;它消除了键之一。 如何制作具有重复键的字典&a…

python中int是什么的缩写_python中int是什么类型

python中的基本数据类型1:虽然python中的变量不需要声明&#xff0c;但使用时必须赋值整形变量浮点型变量字符型2:可以一个给多个变量赋值&#xff0c;也可以多个给多个变量赋值3:python3中有6个标准数据类型Number(数字)*True1*False0*数值的除法(/)总是返回一个浮点数&#x…

redis cli命令

redis安装后&#xff0c;在src和/usr/local/bin下有几个以redis开头的可执行文件&#xff0c;称为redis shell&#xff0c;这些可执行文件可做很多事情。 可执行文件作用redis-server 启动redisredis-cliredis命令行工具redis-benchmark基准测试工具redis-check-aofAOF持久化文…

高级ZK:异步UI更新和后台处理–第2部分

介绍 在第1部分中&#xff0c;我展示了如何在ZK应用程序中使用服务器推送和线程来执行后台任务。 但是&#xff0c;这个简单的示例具有一个重大缺陷&#xff0c;这使其对于实际应用程序而言是一种不好的方法&#xff1a;它为每个后台任务启动了一个新线程。 JDK5引入了Execut…

css清除浮动的原理

最近学习css发现了高度塌陷时候要清除浮动,为了理解清楚浮动原理,网上找了不少资料,发现都写的不是很清楚,而且都是一模一样的内容,我在里分享一下我对清楚浮动原理的理解, 如果你已经很了解什么是浮动和浮动的效果你可以直接跳转到三.如何清除浮动(重点)阅读 一.什么是浮动首…

SpringBoot03 项目热部署

1 问题 在编写springBoot项目时&#xff0c;经常需要修改代码&#xff1b;但是每次修改代码后都需重新启动&#xff0c;修改的代码才会生效 2 这么实现IDEA能够像Eclipse那样保存过后就可以自动进行刷新呢 将springBoot项目进行热部署即可 3 如何实现SpringBoot项目的热部署01 …

STM32实现流水灯

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_…

jacob 报错 Can't co-create object

问题&#xff1a;开始时一切正常&#xff0c;后来什么都没该&#xff0c;出现Cant co-create object报错&#xff0c;即是创建不了ActiveXComponent wdnew ActiveXComponent("Word.Application"); 偶尔发现任务管理器中word进程居然达到10个&#xff0c;而我没有打开…

map分组后取前10个_map根据属性排序、取出map前n个

/*** map根据value排序* flag 1 正序* flag 0 倒序** param map* param flag* return*/public static > LinkedHashMap sortByValue(Map map, int flag) {LinkedHashMap sortMap new LinkedHashMap<>();if (flag 1) {map.entrySet().stream().sorted(Comparator.c…

wxpython可视化_使用wxPython的绘图模块wxPyPlot进行数据可视化

[Python进阶(四十)-数据可视化の使用matplotlib进行绘图前言  matplotlib是基于Python语言的开源项目&#xff0c;旨在为Python提供一个数据绘图包。我将在这篇文章中介绍matplotlib A #-*- coding: utf-8 -*- ############################################################…

在Java EE 6中将Bean验证与JAX-RS集成

JavaBeans验证&#xff08;Bean验证&#xff09;是一种新的验证模型&#xff0c;可作为Java EE 6平台的一部分使用。 约束条件支持Bean验证模型&#xff0c;该约束以注释的形式出现在JavaBeans组件&#xff08;例如托管Bean&#xff09;的字段&#xff0c;方法或类上。 javax.…

如何让浮动的元素换行??css

当你想要做成这种布局效果的时候 紫色框里面的内容那样 它是一个列表 li元素是块级元素 默认大小是父元素ul的宽 并且换行 如果li没有背景的话那就不用管了 可是问题来了它不但有背景 而且是根据文字自适应的宽高 这就是inline-block类型的功能了 那么想让li是inline-bl…

Python学习之类和实例

面向对象最重要的概念就是类&#xff08;Class&#xff09;和实例&#xff08;Instance&#xff09;&#xff0c;必须牢记类是抽象的模板&#xff0c;比如Student类&#xff0c;而实例是根据类创建出来的一个个具体的“对象”&#xff0c;每个对象都拥有相同的方法&#xff0c;…