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设…

关于图片预加载的思考

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

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;而我没有打开…

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

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

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

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

设置博客园标题样式

1.向博客园申请js权限 我们需要进入博客园自定义博客模板的页面&#xff0c;向博客园管理团队申请页面运行js的权限。【博客园】->【设置】->【博客设置】&#xff0c;点击页面上的js权限申请&#xff0c;然后填写申请的理由&#xff0c;耐心等几分钟&#xff0c;再刷新一…

关联查询mysql_《MySQL数据库》关联查询

原标题&#xff1a;《MySQL数据库》关联查询一、关联查询1、概念在查询数据时&#xff0c;所需要的数据不只在一张表中&#xff0c;可能在两张或多张表中。这个时候&#xff0c;需要同时操作这些表来查询数据&#xff0c;即关联查询。关联查询所涉及到的表与表之间都会存在有关…

NOIP2017年11月9日赛前模拟

最后一次NOIP模拟了 题目1&#xff1a;回文数字 Tom 最近在研究回文数字。  假设 s[i] 是长度为 i 的回文数个数&#xff08;不含前导0&#xff09;&#xff0c;则对于给定的正整数 n 有&#xff1a; 以上等式中最后面的括号是布尔表达式&#xff0c;Tom 想知道S[n] mod 2333…

mysql视图表怎么设置约束_MySQL一一sql的视图、索引、约束

一、视图本质上相当于一张**“虚拟表”**&#xff0c;可当作独立的一张表进行操作(增、删、改、查)** 作用&#xff1a;**** a)**可通过权限控制&#xff0c;只将“表中的少数列”暴露给数据库用户&#xff0c;而不让该用户直接操纵数据库中“实际表”** b)**…

Software Development Life Cycle

转载于:https://www.cnblogs.com/genezhao/p/6879848.html

ArrayAndString(数组和字符串)

1.实现一个算法&#xff0c;确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构&#xff0c;又该怎么处理&#xff1f; public class UniqueChars {public static void main(String[] args) {// TODO Auto-generated method stubString string "abcdef…

position 的属性值

理论上来说&#xff0c;全部 position 的取值有8个 包括&#xff1a;position&#xff1a;static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed 和 sticky initial、inherit、unset 是css的关键…

mysql数据库应用的权限层级_MySQL数据库的用户权限管理

嗨&#xff01;各位小伙伴今天翻了一下历史记录MySQL 数据库还有点内容今天开始我们就来补上吧~用户权限管理伙伴们要知道&#xff0c;在数据库方面有两个方向。一个是数据库管理员(Database Administrator)简称DBA&#xff0c;一个是数据库开发工程师(Database Developer)&…

linux i2c adapter 增加设备_Linux驱动之I2C驱动架构

一、Linux的I2C体系结构主要由三部分组成&#xff1a;(1) I2C核心提供I2C控制器和设备驱动的注册和注销方法&#xff0c;I2C通信方法&#xff0c;与适配器无关的代码以及探测设备等。(2) I2C控制器驱动(适配器)(3) I2C设备驱动二、重要的结构体i2c_adapter//i2c控制器(适配器)i…

Alpha-end

前言 失心疯病源10团队代码管理github个人感悟 肝不动了&#xff0c;肝不动了。明天如果见不到我&#xff0c;不要太想我。站立会议 队名&#xff1a;PMS530雨勤&#xff08;组长&#xff09; 今天完成了那些任务 熬夜肝代码代码签入github明天的计划 肝到凌晨还剩下哪些任务 团…

避免写慢SQL

最近在整理数据库中的慢SQL&#xff0c;同时也查询了相关资料。记录一下&#xff0c;要学会使用执行计划来分析SQL。 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一&#xff0c;而且这是被MySQL的数据库引擎处理的。当有很多相同…

为什么子孙后代会讨厌使用java.util.Stack

在我用无意义的重言式杀死你之前&#xff0c;这是要点 如果您的应用程序接近实时&#xff0c;或者将代码发送到Mars&#xff0c;则需要保留Java中默认的Stack实现。 根据LinkedList编写您自己的版本。 同样&#xff0c;如果您的应用程序是关键任务&#xff0c;并且希望堆栈由…